什么是 CPU 利用率以及如何计算,OS 调度如何工作?

什么是 CPU 利用率以及如何计算,OS 调度如何工作?

我学过 x86_64 汇编语言,在学习过程中我了解到 CPU 不能停止工作。它必须不断地运行/执行某些操作。

问题 1) 那么我想知道,“任务管理器”中为什么会有一个图表显示当前 CPU 的使用率?它不是一直在做某事吗?它不是一直在执行一些二进制(低级汇编)指令吗?

问题 2) 我在 Wikipedia 上看到,CPU 执行“空闲”系统进程。为什么?它不能直接将调度队列循环回去吗?

让我解释一下。假设我们的 CPU 每秒有 100 个周期:

PROCESS1 is run for 10 cycles, PROCESS1 is preempted
PROCESS2 is run for 20 cycles, PROCESS2 is preempted
SYSTEM_IDLE is run for 70 cycles, SYSTEM_IDLE is preempted
loop

CPU 不能被 PROCESS1 和 PROCESS2 独占吗?

喜欢:

PROCESS1 is run for 40 cycles, PROCESS1 is preempted
PROCESS2 is run for 60 cycles, PROCESS2 is preempted
loop

最后,我用的是比较旧的电脑,内存不缺(也就是有足够的可用内存),CPU利用率最多是40%,一般是10%。

但问题是:

当我单独运行 Web 浏览器时,只有 1 个选项卡,一切运行顺畅,CPU 占用 7%,内存占用 50%

当我运行 Web 浏览器和音乐播放器(20 个标签)时,一切都很滞后,甚至无法滚动(向上或向下)网页。我每秒能得到 3 帧。奇怪的是,CPU 利用率只有 30%,很少达到 35%,内存占用率约为 70%。

最后一个问题:为什么 Web 浏览器不能使用更多 CPU?如果它能像我仅使用 1 个选项卡运行浏览器时一样流畅,我不会介意。

我运行的是 Windows 10 x64。浏览器是:Firefox(最新版本),可用内存 = 500MB,Firefox 使用大约 270MB。CPU 速度 2.77Ghz 2 个逻辑核心,ATI Radeon X1000 256MB 专用。电脑刚刚格式化,我在本文发布前大约 10 天从头开始安装了操作系统。

答案1

大多数进程都在等待(等待网络数据包、等待用户、等待其他进程/线程等)。操作系统根本没有必要调度该进程 - 它会立即返回并继续等待。无用的循环会消耗电量。

相反,如果所有进程都在等待(更准确地说:如果它们受阻),操作系统将关闭 CPU,使其进入睡眠状态。执行此操作的“线程”称为空闲任务。然后 CPU 将停止处理指令,直到触发中断(告诉操作系统某物發生)。

当 CPU 不运行时,时钟会继续运行。因此,如果您每 100 毫秒关闭一次 CPU,并且 CPU 在您将其置于睡眠状态后 50 毫秒被唤醒,则您的 CPU 负载为 50%。同样的道理也适用于多核 CPU。

相关内容