1. 引言

进程调度是操作系统核心功能之一,负责在多个就绪进程中决定下一个获得 CPU 的进程。调度策略直接影响系统的吞吐量、响应时间、资源利用率和公平性。本文详细介绍常见的进程调度方法,包括先来先服务、短作业优先、时间片轮转、优先级调度和多级反馈队列等。

2. 进程调度的基本概念

进程调度器根据一定的算法从就绪队列中选择一个进程,将 CPU 分配给它。调度发生时机通常包括:进程从运行态转为等待态、进程被中断、进程主动让出 CPU 或时间片耗尽。

评价调度算法常用的指标包括:

  • CPU 利用率:CPU 处于忙状态的时间占比。
  • 吞吐量:单位时间内完成的进程数量。
  • 周转时间:从进程提交到完成的总时间,包含等待时间和执行时间。
  • 等待时间:进程在就绪队列中等待的总时间。
  • 响应时间:从提交请求到产生首次响应的时间,对交互式系统尤为重要。

3. 先来先服务调度

先来先服务(First Come First Served,FCFS)是最简单的调度算法。进程按照到达就绪队列的顺序依次获得 CPU,直到运行完毕或阻塞才释放 CPU。

该算法实现简单、公平性较好,但存在明显的缺点:当一个长进程先到达时,后续的短进程需要长时间等待,导致平均等待时间和平均周转时间较长,可能产生护航效应。

4. 短作业优先调度

短作业优先(Shortest Job First,SJF)算法选择预计执行时间最短的进程优先运行。该算法能显著降低平均等待时间和平均周转时间,理论上在非抢占式场景下可达到最优平均周转时间。

其主要问题在于需要预知进程的执行时间,实际系统中难以准确估计。此外,若短进程持续到达,长进程可能长期得不到 CPU,产生饥饿现象。

5. 时间片轮转调度

时间片轮转(Round Robin,RR)算法将 CPU 时间划分为固定长度的时间片,就绪队列中的进程按顺序轮流获得一个时间片的 CPU。时间片用完后,进程被剥夺 CPU 并排到队尾,调度器选择下一个进程运行。

时间片大小的选择对系统性能影响很大:时间片过小会导致频繁的上下文切换,增加系统开销;时间片过大则退化为先来先服务,交互响应变差。该算法适合分时系统和交互式应用。

6. 优先级调度

优先级调度算法为每个进程分配一个优先级,调度器始终选择优先级最高的就绪进程运行。优先级可以静态设定,也可以根据进程行为动态调整。

优先级调度分为抢占式和非抢占式两种。抢占式优先级调度中,当更高优先级进程到达时,当前进程会被立即剥夺 CPU。该算法能较好满足实时任务和重要任务的响应需求,但低优先级进程可能长期得不到运行,需要配合老化技术解决饥饿问题。

7. 多级反馈队列调度

多级反馈队列(Multilevel Feedback Queue,MLFQ)是综合多种策略的调度算法。系统设置多个优先级不同的就绪队列,高优先级队列时间片较短,低优先级队列时间片较长。新进程先进入最高优先级队列,若时间片用完仍未完成,则降入下一级队列。

该算法兼顾了短作业的快速响应和长作业的持续推进,同时通过动态调整避免饥饿,是许多现代操作系统采用的调度基础。其核心思想是:根据进程的历史行为动态调整其优先级,让 I/O 密集型和交互型进程获得更高优先级,让 CPU 密集型进程逐步降级。

8. 其他调度方法

除上述经典算法外,还有多种调度方法用于特定场景:

  • 最高响应比优先:综合等待时间和执行时间,响应比 =(等待时间 + 执行时间)/ 执行时间,兼顾短作业优先和避免饥饿。
  • 多级队列调度:将就绪进程按类型划分到不同队列,各队列使用独立算法,队列之间按优先级调度。
  • 公平共享调度:按用户或进程组分配 CPU 份额,保证资源分配的公平性。
  • 实时调度:包括速率单调调度和最早截止时间优先等,用于满足硬实时和软实时任务的时间约束。

9. 调度方法对比

调度算法抢占性优点缺点适用场景
先来先服务非抢占实现简单、公平平均等待时间长、护航效应批处理系统
短作业优先可抢占或非抢占平均周转时间短需预知执行时间、可能饥饿批处理系统
时间片轮转抢占响应快、公平上下文切换开销大分时系统
优先级调度可抢占或非抢占支持实时任务低优先级可能饥饿实时系统
多级反馈队列抢占兼顾响应与吞吐参数调优复杂通用操作系统

10. 总结

进程调度方法各有优劣,没有一种算法适用于所有场景。实际操作系统通常组合多种策略,例如 Linux 的完全公平调度器(CFS)基于虚拟运行时间实现公平调度,Windows 则采用基于优先级的抢占式多级反馈队列。理解各类调度方法的特点,有助于针对具体业务场景选择合适的策略,从而在响应时间、吞吐量和公平性之间取得平衡。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐