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