如果没有任何事情要做(包括SMP),为什么linux内核会运行空闲线程,而不是“什么都不做”?
答案 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保持。当需要核心时,这会导致一些延迟,但之后使用的功率会少得多。