【问题标题】:Why does linux kernel need idle thread?为什么linux内核需要空闲线程?
【发布时间】:2012-12-28 06:20:15
【问题描述】:

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

【问题讨论】:

  • 空闲时间在哪里计费?

标签: linux-kernel smp


【解决方案1】:

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

与此同时,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)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      • 2015-02-13
      • 2011-02-11
      相关资源
      最近更新 更多