为简单起见,假设我有一个单核处理器。我有 2 个任务并行运行。我的理解是处理器将以循环方式运行任务,即每次运行一个任务。
现在,如果任何任务使用更多周期,利用率就会更高。对吗?如果是这样,当任何任务需要大量周期时,或者换句话说,周期在这里实际上意味着什么?
答案1
简短的回答,因为人们已经写了整个图书关于此主题:
周期通常用术语“CPU 时间”来表示。一个进程在 CPU 上被分配了一定数量的“量子”。请记住,在 CISC 架构(如 x86)中,单个“指令”可能占用多个周期。
在最简单的循环调度程序中,50% 的 CPU 时间将分配给每个进程(如果有 2 个),因此如果仅依赖于 CPU,每个任务将花费两倍的时间。
但是,所有现代操作系统都有更先进的调度算法,这些算法会考虑以下一个或多个参数:
- 优先事项
- 状态(I/O 阻塞、可运行、停止等)
- 该进程上次在 CPU 上运行的时间
根据调度算法,进程将被允许在 CPU 上运行,直到:
- 它请求 I/O 并将被阻止
- 优先级较高的进程需要 CPU 时间(先发制人)
- 触发硬件中断。
- 该过程的量子已耗尽。
最终队列的组织方式取决于调度程序。Linux 调度程序的描述如下这里。
在现实世界的计算机环境中,考虑周期其实没什么用。如上所述,在 CISC 架构上,一条指令可能需要多个周期。CPU 还会使用周期在进程之间切换(更改寄存器、更新 MMU 等)。因此,周期并不是描述 CPU 使用率的真正好指标。
CPU 的有用输出主要取决于它处理请求的速度。当进程准备好处理时,它们会排队进入运行队列,直到它们可以由 CPU 处理。只要进程不必等待超过一个时间段(~200ms)才能运行,系统基本上就可以达到它所能达到的最快速度。在操作系统中,这显示为数字(浮点数(Linux:top
/ uptime
)或百分比(Windows 任务管理器)。
简单回答一下标题中的问题:利用率变高是因为运行队列在增加。您在 Windows 或 Linux 中看到的“利用率”只是运行队列长度随时间变化的平均值。