查看源代码,strace
我发现使用了克隆标志CLONE_IDLETASK
,该标志被描述为:
#define CLONE_IDLETASK 0x00001000 /* kernel-only flag */
在更深入地研究它之后,我发现,尽管该标志未涉及该标志,但man clone
内核实际上在引导过程中使用了该标志来为机器上的每个CPU创建空闲进程(所有进程都应具有PID 0)。即,具有8个CPU的计算机将至少有7个(请参见下面的问题)这样的进程“正在运行”(注释引号)。
现在,这使我对“闲置”过程的实际作用提出了两个问题。我的假设是,它将连续执行NOP操作,直到其时间范围结束为止,并且内核分配了一个实际的进程来运行或再次分配了空闲进程(如果未使用CPU)。但是,这是一个完整的猜测。所以:
例如,在具有8个CPU的计算机上,将创建7个这样的空闲进程吗?(而一个CPU将由内核本身持有,而没有执行任何用户空间工作?)
空闲过程真的只是无限的NOP操作流吗?(或执行相同操作的循环)。
CPU使用率(例如
uptime
)是否仅通过空闲时间在CPU上存在了多长时间,在一段时间内不存在多少时间来简单地计算出来?
PS:这个问题很可能是由于我不完全了解CPU的工作原理。即我了解程序集,时间范围和中断,但是我不知道例如CPU如何根据执行的内容使用更多或更少的能量。如果有人也能启发我,我将不胜感激。