内核在多核系统上驻留在何处

内核在多核系统上驻留在何处

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

那么,内核应该驻留在哪里呢?

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

答案1

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

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

答案2

内核位于系统主内存中。系统启动时,内核会加载到内存中 (RAM)。内核的某些部分将由 CPU 在不同时间执行。执行时,代码 (CPU 指令) 将位于特定 CPU 或核心的内部内存中。

如果不了解内核设计和操作系统用于与一个或多个 CPU 通信的抽象概念,就不可能回答多核 CPU 中到底是哪个核心,或者多 CPU 系统中是哪个核心。

我所知道的是,内核将遵循一组规则来访问一个或多个 CPU。在更有经验的人给出更好的解释之前,你可以深入研究SMP 设计

第 5 章和第 6 章结构化计算机组织了解一下命令 CPU 执行某些操作的技术方面以及这些操作是如何管理的。也许这会是一篇有趣的文章?

答案3

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

相关内容