我第一次了解了计算机如何在原始的单个存储程序机中工作。
现在我正在学习多任务操作系统、日程安排、上下文切换等。除了一件事,我认为我对这一切都掌握得很好。我一直认为CPU是一种不间断地向前充电的东西。它总是知道下一步该去哪里(程序计数器),并且它无限地去执行那个指令等。
显然,情况并非如此,因为我的台式机CPU并不总是100%运行。那么,CPU是如何关闭或节流的呢?操作系统在这方面扮演了什么角色?我猜CPU的某个地方有一个输入,可以让它断电。。。如果没有任何计划,操作系统可以设置它,但下一个逻辑问题是它如何重新启动?我猜有两件事:
- 它从未完全关闭,只是以非常低的频率运行,等待调度器再次忙碌
- 它完全关闭,但被中断唤醒
我到处寻找这方面的信息,结果一无所获。任何见解都将不胜感激。
答案取决于硬件、操作系统和操作系统的配置方式。
它可能涉及你提出的两种策略中的一种或两种。
基于x86体系结构的机器的另一种可能性是,x86有一条HLT
指令,该指令会导致内核停止,直到它接收到外部中断。因此,"空闲"任务可以简单地在一个紧密的循环中执行HLT。
只需转到任务管理器的性能选项卡,在计算机上什么都不做的情况下查看cpu使用情况。它从未停止波动。运行windows这样的操作系统,cpu将始终正常工作,永远不会完全关闭。
让你的显示器显示图像需要你的cpu处理一个允许它显示任何内容的函数。等
一切都通过中央处理器,就像你的大脑一样,它控制着一切。没有它什么都不会起作用。
有些CPU确实有"等待中断"指令,它允许CPU在无事可做时停止执行指令,并且在发生中断事件之前不会重新唤醒。这在微控制器中特别有用,因为它们可以长时间等待发生什么。
- Intel=HLT(暂停)
- ARM=WFI(等待中断)
有时也会使用"忙等待",即CPU处于一个小的"空闲"循环中,检查要做的事情。在这种情况下,CPU仍在运行指令,但操作系统处于空闲状态。它的效率不如使用HLT。
现代CPU还可以调整其功耗,并能够降低时钟频率,或关闭CPU中未使用的部分。通过这种方式,即使核心CPU仍在运行和执行指令,活动空闲状态期间的功耗也可以小于活动处理期间的功耗。
如果在操作系统无所事事的情况下谈论x86体系结构,则可以使用HLT指令。HLT指令停止CPU直到下一次中断。看见http://en.m.wikipedia.org/wiki/HLT详细信息。
其他体系结构也有类似的指令来让CPU休息。