操作系统如何实际测量CPU功率



目前我认为处理器只有两种状态:运行和不运行。如果它正在运行,它将使用其全部功率来处理任务。如果有多个进程,进程将由CPU的一部分共享。

如何将计算能力划分为"部分"?那么,假设一个CPU有100万个晶体管,如果CPU只有50%,那么只有一半的晶体管被使用?

或者这与每个流程分配的处理时间有关?即,假设"100%"意味着一个进程占用CPU 200毫秒,如果一个进程的默认值(优先级值)为0,这意味着该进程将获得50%的计算能力,换句话说,100毫秒。正确的想法是什么?

让我以Intel x86 CPU和Windows NT(及其衍生产品)为例进行解释。这些操作系统上的内置系统进程之一是系统空闲进程。这个过程表示操作系统的"空闲循环"使用了多少CPU时间。该空闲循环除了执行CPU的HLT指令之外什么也不做。该指令反过来命令CPU在下一个中断到来之前什么都不做。

因此,如果调度器决定在给定时刻没有需要CPU时间的进程,则将其提供给系统空闲进程。例如,如果在最后n秒内99%的时间都用于"执行"该进程,则意味着在这n秒中,CPU实际使用率仅为1%。

我相信它与Linux完全相似,只是它没有一个单独的过程来模拟CPU的"空闲"。

顺便说一句:当然,有一个操作系统根本不执行HLT指令是可能的。Windows 98及更早版本(显然包括MS-DOS)就是这样,其空闲循环仅由jmp $组成。这导致CPU消耗更多的电力。