CPU 是最重要的计算机资源之一,CPU 调度指的是操作系统将 CPU 资源分配给不同进程的过程。CPU 调度的整个过程,由操作系统中的短期调度程序(一种进程调度程序)负责完成。每当 CPU 处于空闲状态时,短期调度程序就会从位于内存的就绪队列中挑选一个进程,交给 CPU 执行。

CPU调度方式

CPU 调度的方式有 2 种,分别称为非抢占式调度和抢占式调度。

1) 非抢占式调度

为了充分利用 CPU 资源,当进程正常执行结束或者由运行状态切换至等待状态(例如执行 I/O 操作、等待子进程执行完毕)时,调度程序会从就绪队列中挑选出一个进程并交给 CPU 执行,这样的 CPU 调度称为非抢占式调度。

也就是说,在非抢占式调度的模式中,执行的进程可以一直占用 CPU 资源,直至其执行完毕或者切换到等待状态。

2) 抢占式调度

所谓抢占式调度,是指进程在执行过程中被强制中止执行,同时调度程序将 CPU 资源分配给另一个进程的过程。

支持抢占式调度的操作系统,通常会为各个进程设置不同的优先级,优先级低的进程必须等待优先级高的进行执行完毕后才能继续执行。因此,如果有优先级更高的进程从等待状态切换到就绪状态,则当前执行的进程就会被强行中断,同时 CPU 资源会分配给优先级高的进程。

以我们最熟悉的 Windows 操作系统为例,最初的 Windows 系统(例如 Windows 3.x)采用非抢占式调度的方法,自 Windows 95 开始引入抢占式调度方法,并且之后所有的 Windows 系统都采用的是抢占式调度方法。

CPU调度算法

基于不同的设计初衷,先后诞生了很多 CPU 调度算法。

评价一个 CPU 调度算法的“好坏”,可以从多个方面进行考量,如表 1 所示。

表 1 CPU调度算法“好坏”的衡量标准
衡量标准 描 述
CPU 利用率 能够充分利用 CPU 资源,使 CPU 大部分时间都处于工作状态。
吞吐量 单位时间内执行完成的进程数量。
周转时间 完成同一个任务所要花费的总时间,即该任务从进入系统到执行完毕的时间。
等待时间 一个进程从就绪状态切换到运行状态所花费的时间。
平均负载 驻留在就绪队列中的进程的平均数量。
响应时间 从提交请求到系统生成第一个响应所花费的时间。

根据表 1 中的衡量标准,CPU 利用率和吞吐量越大,其它衡量标准值越小,则 CPU 调度算法越好。

CPU 调度算法有很多,例如先来先服务调度算法、最短作业优先调度算法、优先级调度算法等,我们会在《进程调度算法》一节做详细讲解。

CPU调度和进程调度

不同的操作系统中,可能同时包含 3 种进程调度程序,分别是长期调度程序、短期调度程序和中期调度程序,它们相互配合进而形成一个完整的进程调度机制。

与进程调度不同,CPU 调度强调的是将 CPU 资源分配给不同进程的过程,整个调度过程由操作系统中的短期调度程序负责完成。

因此,进程调度描述的是操作系统中整个进程调度机制的工作过程,而 CPU 调度更侧重于描述短期调度程序的实现机制和运行过程。通常情况下,进程调度代指的仅是短期调度程序,因此它常常和 CPU 调度混用,这也是某些教程将它们合并在一起讲解的原因。

发表回复