进程调度算法有哪些?(先来先服务、短作业优先、时间片轮转、多级反馈队列)
这是一个非常经典且重要的操作系统面试/考试话题。进程调度算法决定了CPU如何决定将资源分配给哪个进程,直接影响系统的性能(吞吐量、响应时间、周转时间等)。
你列出的四个是最核心的算法,我将逐一详细解释,并补充一个常考的“优先级调度”作为补充,最后做一个对比总结。
1. 先来先服务 (FCFS - First-Come, First-Served)
这是最简单的调度算法,类似于我们在超市排队结账。
- 机制:按照进程到达就绪队列的先后顺序进行调度。谁先来,谁先用 CPU。
- 方式:非抢占式(一旦获得 CPU,直到执行完或阻塞才释放)。
- 优点:
- 算法简单,易于理解和实现。
- 公平(在“先到先得”的意义上)。
- 缺点:
- 护航效应 (Convoy Effect):如果一个长作业先到达,后面的短作业必须等待很长时间,导致平均等待时间非常长。
- 对I/O密集型进程不友好(CPU利用率低)。
- 适用场景:结合其他算法使用,或用于后台批处理系统。
2. 短作业优先 (SJF - Shortest Job First)
为了解决 FCFS 中短作业等待时间过长的问题而设计。
- 机制:从就绪队列中选择估计运行时间最短的进程优先执行。
- 方式:
- 非抢占式 SJF:进程一旦运行,直到完成。
- 抢占式 SJF (也称 SRTF - 最短剩余时间优先):如果有新进程到达,且新进程的预计时间比当前正在运行进程的剩余时间还短,则抢占 CPU。
- 优点:
- 平均等待时间最短(这是该算法最大的卖点,数学上证明了其平均周转时间最优)。
- 缺点:
- 饥饿现象 (Starvation):如果系统中源源不断地有短作业到来,长作业可能永远得不到执行。
- 难以实现:操作系统很难准确预知一个进程究竟要运行多久(通常只能根据历史数据估算)。
- 适用场景:理论研究或作业时间可预知的批处理系统。
3. 时间片轮转 (RR - Round Robin)
这是现代分时系统(如 Windows, Linux, macOS 的桌面环境)调度的基础思想。
- 机制:系统规定一个时间片 (Time Quantum)(例如 20ms)。就绪队列中的进程轮流使用 CPU,每个进程只能运行一个时间片。如果时间到了还没做完,就被剥夺 CPU 并排到队列末尾。
- 方式:抢占式(通过时钟中断控制)。
- 优点:
- 响应快:非常适合交互式系统,用户感觉所有程序都在同时运行。
- 公平:没有进程能长时间独占 CPU。
- 缺点:
- 上下文切换开销:如果时间片太短,CPU 会频繁在进程间切换,浪费大量资源。
- 如果时间片太长,算法就会退化为 FCFS。
- 适用场景:分时系统(交互式环境)。
4. 优先级调度 (Priority Scheduling)
- 机制:给每个进程赋予一个优先级(数字),CPU 分配给优先级最高的进程。
- 方式:可以是抢占式,也可以是非抢占式。
- 问题:
- 饥饿:低优先级的进程可能永远无法运行。
- 解决方案:
- 老化 (Aging):随着等待时间的增加,逐渐提高进程的优先级。
5. 多级反馈队列 (MLFQ - Multi-Level Feedback Queue)
这是目前公认较好、现代操作系统普遍采用的调度算法思路。它集成了上述算法的优点,解决了它们的缺点。
- 核心思想:
- 设置多个就绪队列,每个队列优先级不同。
- 第 1 级队列优先级最高,第 2 级次之,以此类推。
- 优先级越高的队列,时间片越短;优先级越低的队列,时间片越长。
- 调度规则:
- 新进程进入系统,先放入第 1 级队列(高优、短时间片)。
- 如果它在时间片内做完了,很好,离开系统。
- 如果它在时间片内没做完,说明它可能是个长作业,降级到第 2 级队列末尾。
- 只有当第 1 级队列为空时,调度器才会去第 2 级队列找任务(以此类推)。
- 优点:
- 兼顾了短作业和长作业:短作业在最高级队列迅速完成(像 SJF),响应极快。
- 无需预知运行时间:通过进程的表现自动调整其优先级。
- 防止饥饿:长作业虽然优先级低,但时间片长;且通常配合“老化”机制,防止一直在底层队列出不来。
- 适用场景:现代通用操作系统。
总结对比表
| 算法 | 中文名 | 抢占方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|---|
| FCFS | 先来先服务 | 非抢占 | 简单、公平 | 护航效应,短作业等待久 | 批处理 |
| SJF | 短作业优先 | 非/抢占 | 平均等待时间最短 | 长作业饥饿,需预知时间 | 理论/特定批处理 |
| RR | 时间片轮转 | 抢占 | 响应快,适合交互 | 上下文切换开销 | 分时系统 (交互) |
| MLFQ | 多级反馈队列 | 抢占 | 集大成者,动态调节 | 算法复杂,参数难调优 | 现代操作系统 |
一句话总结:
FCFS 是排队买票;SJF 是让买东西少的人先结账;RR 是每个人只能聊 1 分钟;MLFQ 是 VIP 制度结合优胜劣汰,既照顾了急性子(短作业),也安抚了慢性子(长作业)。