5

如果无事可做(包括SMP),而不是“什么都不做”,为什么linux内核运行空闲线程?

4

2 回答 2

7

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

与此同时,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)
于 2013-01-14T14:43:26.337 回答
5

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

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

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

于 2015-08-12T11:34:49.623 回答