基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

进程调度算法有哪些?(先来先服务、短作业优先、时间片轮转、多级反馈队列)

知识点图片

这是一个非常经典且重要的操作系统面试/考试话题。进程调度算法决定了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 级次之,以此类推。
    3. 优先级越高的队列,时间片越短;优先级越低的队列,时间片越长。
  • 调度规则
    • 新进程进入系统,先放入第 1 级队列(高优、短时间片)。
    • 如果它在时间片内做完了,很好,离开系统。
    • 如果它在时间片内没做完,说明它可能是个长作业,降级到第 2 级队列末尾。
    • 只有当第 1 级队列为空时,调度器才会去第 2 级队列找任务(以此类推)。
  • 优点
    • 兼顾了短作业和长作业:短作业在最高级队列迅速完成(像 SJF),响应极快。
    • 无需预知运行时间:通过进程的表现自动调整其优先级。
    • 防止饥饿:长作业虽然优先级低,但时间片长;且通常配合“老化”机制,防止一直在底层队列出不来。
  • 适用场景:现代通用操作系统。

总结对比表

算法 中文名 抢占方式 优点 缺点 适用场景
FCFS 先来先服务 非抢占 简单、公平 护航效应,短作业等待久 批处理
SJF 短作业优先 非/抢占 平均等待时间最短 长作业饥饿,需预知时间 理论/特定批处理
RR 时间片轮转 抢占 响应快,适合交互 上下文切换开销 分时系统 (交互)
MLFQ 多级反馈队列 抢占 集大成者,动态调节 算法复杂,参数难调优 现代操作系统

一句话总结:
FCFS 是排队买票;SJF 是让买东西少的人先结账;RR 是每个人只能聊 1 分钟;MLFQ 是 VIP 制度结合优胜劣汰,既照顾了急性子(短作业),也安抚了慢性子(长作业)。

00:00
00:00