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

时间:2013-01-14 09:34:00

标签: linux-kernel smp

如果没有任何事情要做(包括SMP),为什么linux内核会运行空闲线程,而不是“什么都不做”?

2 个答案:

答案 0 :(得分:5)

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

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

/*
 * 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)

答案 1 :(得分:3)

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

当CPU通电时,会发生相当长的事情列表。一旦通电,CPU就无法“无所事事”。由于存在电压和周期性时钟信号,因此必须执行某些操作。您可以再次关闭它并且绝对不做任何事情,但是当您再次需要它时,您必须通过一长串的事情来获得稳定的时钟信号。

所以空闲线程是一个最低限度的线程。即,如果乘以两个浮点数需要最少的周期数和最少数量的电子电路;然后空闲线程将一直乘以两个浮点数。此外,Wang表示Linux内核(在某些配置中)监视核心何时开始执行空闲线程并将其切换到较低频率,从而禁用任何类型的定期OS保持。当需要核心时,这会导致一些延迟,但之后使用的功率会少得多。