我的 Intel CPU 会根据使用情况改变时钟速度,但它如何决定以什么时钟速度运行?时钟速度是由操作系统软件使用算法确定的,还是基于硬件的?它取决于中断的数量吗?缓存周转率?CPU本身是否设置了自己的时钟?还是单独的控制器设置它?还是软件?
CPU如何动态改变其时钟频率?
CPU的核心时钟不是直接从主板接收的。该时钟通常比 CPU 的内部频率慢得多(通常是 10 倍或更多)。相反,来自主板的时钟信号被用作 CPU 内更高频率的锁相环控制振荡器的参考频率。生成的时钟以参考时钟的某个倍数运行,并且可以通过设置 CPU 中的某些寄存器来更改该倍数。时钟的实际生成纯粹是在硬件中完成的。
为了进一步降低功耗,CPU 还向电压调节器发出信号,提供其核心电压以在较低的设定点运行。在较低的频率下,CPU 可以在较低的电压下运行而不会发生故障,并且由于功耗与电压的平方成正比,因此即使电压小幅降低也可以节省大量电能。
电压和频率缩放由硬件完成,但在低功耗模式下运行的决定由软件(操作系统)做出。操作系统如何确定运行的最佳模式是一个单独的、更混乱的问题,但它可能主要归结为系统最近空闲的时间。多为空闲,降低频率。多半忙,提高频率。一旦操作系统决定了运行频率,只需设置一个寄存器即可。
好吧,在现代操作系统上,有一种叫做“任务调度程序”的东西。它定期(非常快)运行并(从列表中)选择下一个要执行的任务。任务可以处于多种状态,例如选择、阻塞、睡眠等。
如果所有任务都处于选择模式(等待操作系统的某些内容)并且无法提供服务,或者有些任务正在休眠等,因此没有大量使用正在完成的处理器,任务调度程序将调用一个名为“空闲”的特殊任务”。
如果 CPU 驱动程序检查任务调度表并确认空闲任务在 CPU 时间的大部分时间都在运行,它会简单地向 CPU 的时钟生成 PLL 电路发送命令以减少其时钟。相反,如果空闲任务占用的 CPU 时间越来越少(意味着 CPU 被大量使用),CPU 驱动程序将提高 CPU 速度。
它不是很难,但是有一个下限,因为并非所有 CPU 都是完全静态的(因此它们需要刷新周期),所以 CPU 不能被限制得更低。完全静态的 CPU 可以低至 0(零)MHz,因为如果时钟停止,则不会丢失任何状态。