内核在多核系统上的哪个位置

Var*_*rni 10 cpu kernel call cpu-architecture

假设我有一个多核系统,比如说 4 个核,在这个系统中我将 3 个用户进程固定到 3 个 CPU。

在这种情况下,内核将驻留在何处?

假设其中一个用户进程对内核进行系统调用,或者说是 IOCT1。该 IOCTL 会在内核所在的第 4 个 CPU 上执行吗?

Mik*_*hik 7

内核驻留在内存中,并在所有 CPU 和内核上同时执行。

ioctl(2) 或 read(2) 要么立即返回(就像您自己程序中的函数调用),要么阻塞线程。“阻塞线程”意味着内核调度程序将挂起您的线程并在该 CPU/内核上运行另一个线程。您的线程将保持阻塞状态,直到中断处理程序解除它的阻塞(标记为可运行)。中断处理程序在内核模式下运行,通常在第一个物理 CPU 上,在 I/O 完成后由硬件调用。被标记为可运行后,您的线程将有机会在内核调度程序下次运行时继续执行,可能在另一个 CPU/内核上运行。


Pat*_*ter 2

内核本身不存在于任何地方,或者更好地说存在于任何地方。进行系统调用的进程将在进行调用的 CPU 上继续,并将代码从内核映像复制到其缓存中。由于代码是只读的,每个 CPU 的缓存中都会有一份它的副本。缓存行将以与系统中任何其他代码相同的方式被逐出。这意味着经常被调用的部分通常会在缓存中,那些不被调用的部分则不会,将从更高的缓存行、内存、磁盘等引入。