我对一些 linux 内核调度有一些疑问。
1) Does linux kernel(schedular to be specific) always runs on CPU-0?
2) One Scenario:
One kernel thread running on CPU - 0, goes into sleep with interrupts disabled.
In this case, will the schedular run on other CPU?
if Yes, how is the selection made out of the remaining core so as to which will run
the schedular, is this decision made while disabling interrupts on CPU - 0?
调度程序只是一段代码(特别是schedule()
函数)。像内核的大多数其他部分一样,它可以在它调用的任何 CPU 上运行。
当某个线程想要休眠或处理中断后,调度程序会被调用;这可能发生在所有 CPU 上。
1)Linux内核(具体来说就是调度)总是在CPU-0上运行吗? (不可以,调度程序可以在任何 CPU 内核上运行。
2) 一种情况:
在 CPU - 0 上运行的一个内核线程进入睡眠状态,禁用中断。
在这种情况下,调度会在其他 CPU 上运行吗? (在 CPU -0 上运行的线程进入睡眠状态。这意味着线程自愿退出 CPU。睡眠代码将调用 linux 调度程序,调度程序将选择另一个线程/进程运行。这是与中断有关的。禁用中断(例如定时器中断)可以阻止线程被中断并违背其意愿调度到 CPU。
如果是,如何从剩余的内核中进行选择,以便运行哪个
内核 调度,这个决定是在禁用 CPU - 0 上的中断时做出的吗?
(希望这有帮助!