为什么linux内核需要空闲线程?

jae*_*ong 4 smp linux-kernel

如果没有什么可做的(包括SMP),为什么linux内核运行空闲线程而不是"什么也不做"?

Con*_*ang 6

当调度程序决定切换到空闲任务时,此时动态节拍开始工作,通过禁用周期性节拍直到下一个计时器到期.在此时间跨度之后或在某个时间发生中断时,将重新启用滴答.

与此同时,CPU将以特定于架构的方式进入当之无愧的睡眠状态,从而节省您的能力.看看cpu_idle()arch/x86/kernel/process.c 中的定义.

/*
 * The idle thread. There's no useful work to be
 * done, so just try to conserve power and have a
 * low exit latency (ie sit in a loop waiting for
 * somebody to say that they'd like to reschedule)
 */
void cpu_idle(void)
Run Code Online (Sandbox Code Playgroud)


小智 5

“什么都不做”是什么意思??

当 CPU 通电时,会发生一长串事情。一旦通电,CPU 就不能“什么都不做”。它必须做一些事情,因为有一个电压和一个周期性的时钟信号。您可以再次关闭它并且完全不做任何事情,但是当您再次需要它时,您必须通过一长串的事情来获得稳定的时钟信号。

所以空闲线程是一个执行最低限度的线程。即如果两个浮点数相乘需要最少的周期数和最少的电子电路;那么空闲线程将一直乘以两个浮点数。此外,正如 Wang 所说,Linux 内核(在某些配置中)会监视内核何时开始执行空闲线程并将它们切换到较低的频率,从而禁用任何类型的定期操作系统内务管理。当需要内核时,这会导致一些延迟,但使用的功率要少得多。