即使没有用户进程正在运行,内核进程也不会保持足够的活动状态,以防止进入更深的C状态,如C1或C2。
CPU(或单个内核)可以通过OS内核进入“深”C状态。
您认为处理器在“检测到”不活动时会“自己睡觉”。 这不是如何工作的。 OS调度程序根据在系统空闲循环中花费的时间来确定系统闲置百分比,以检测系统不活动。 CPU本身(至less在x86领域)不知道它正在执行什么,也没有上下文来自行检测空闲周期。
系统固件包含定义硬件电源pipe理function的ACPI表。 这些表在启动时由操作系统读取。 操作系统内核处理器驱动程序(或任何类似于给定操作系统的驱动程序)负责监视CPU工作负载,并指示硬件将CPU置于从固件ACPI表中select的电源pipe理状态。
微软有一篇文章描述Windows 7和Server 2008 R2中的电源pipe理 。 IBM有一篇关于Linux中的CPUfreq系统的文章(可能会过时)。
编辑:
值得指出的是,许多服务器计算机都有一个基于硬件的机制来监视和pipe理CPU状态。 这也不是“在CPU中”完成的,而是取代了OS的电源和性能pipe理function。 这是我的经验,这往往会节省电力,但是以牺牲系统性能为代价。