Skip to content

408

操作系统

调度算法(FCFS/SJF/RR/优先级/多级反馈队列)


一、定位信息

  • 所属圈层:核心层
  • 前置知识:了解CPU调度概念和性能指标(OS-02-06)
  • 知识网络位置:本单元是CPU调度的核心内容,各算法的特点、优缺点和性能指标计算是408必考重点
  • 考点热度等级H级(高频重点)——近5年每年必考,选择题和综合题都有涉及

二、知识点讲解

2.1 先来先服务(FCFS, First-Come First-Served)

  • 规则:按进程到达就绪队列的先后顺序调度,先到先服务
  • 方式:非抢占式
  • 优点:简单、公平
  • 缺点:对短作业不利(短作业可能排在长作业后面长时间等待——护航效应
  • 适用:作业调度

2.2 短作业优先(SJF, Shortest Job First)

  • 规则:选择估计执行时间最短的进程优先执行
  • 方式:非抢占式(SJS)或抢占式(SRTF, 剩余时间最短优先)
  • 优点:平均等待时间和平均周转时间最短(在所有非抢占式算法中)
  • 缺点
    • 需要预知作业执行时间(实际中难以准确估计)
    • 对长作业不利(饥饿现象)
  • 关键结论SJF的平均等待时间最小(在非抢占式算法中)

2.3 时间片轮转(RR, Round-Robin)

  • 规则:每个进程获得一个固定大小的时间片,时间片用完后被剥夺CPU,排到就绪队列末尾
  • 方式:抢占式
  • 时间片大小的影响
时间片大小效果
太大(→∞)退化为FCFS
太小(→0)切换过于频繁,开销大
适中兼顾响应时间和切换开销
  • 优点:公平,响应时间短,适合分时系统
  • 缺点:平均周转时间可能较长

2.4 优先级调度(Priority Scheduling)

  • 规则:为每个进程分配优先级,选择优先级最高的进程执行
  • 方式:非抢占式或抢占式
  • 优先级分类
分类说明
静态优先级创建时确定,运行中不变
动态优先级运行中根据情况调整(如等待时间越长优先级越高)
  • 问题:低优先级进程可能永远得不到执行(饥饿
  • 解决老化(Aging)——随时间推移逐渐提高等待进程的优先级

2.5 多级反馈队列(Multilevel Feedback Queue)

最综合的调度算法,融合了多种算法的优点:

  • 规则

    1. 设置多个就绪队列,每个队列有不同的优先级和时间片大小
    2. 优先级从高到低,时间片从小到大
    3. 新进程进入最高优先级队列
    4. 进程在当前队列的时间片用完后,降级到下一级队列
    5. 只有高优先级队列为空时,才调度低优先级队列
    6. 在低优先级队列等待过久的进程可以升级(防止饥饿)
  • 特点

    • 终端型作业(短作业)在高优先级队列快速完成
    • 长作业逐渐降级,但也能得到执行
    • 兼顾响应时间和吞吐量

2.6 各调度算法综合对比表

算法方式是否抢占平均等待时间公平性饥饿适用场景
FCFS简单排队非抢占长(护航效应)公平作业调度
SJF最短优先可选最短不公平长作业饥饿批处理
RR时间片轮转抢占中等公平分时系统
优先级按优先级可选取决于优先级分配不公平低优先级饥饿通用
多级反馈队列多级队列抢占较好较公平可防通用(最综合)

三、记忆与理解辅助

  1. 口诀:"FCFS先到先得,SJF短的先行,RR轮流坐庄,优先级看等级,多级反馈队列最综合"
  2. SJF的核心结论:在非抢占式算法中,SJF的平均等待时间最小——这是证明题/选择题常考结论
  3. 时间片大小口诀:"太大变FCFS,太小切换多,适中效果好"
  4. 饥饿问题:SJF和优先级调度都有饥饿问题,解决方法是老化(逐渐提高优先级)

四、例题与精解

例题1(基础巩固)

题目:设有三个作业J1、J2、J3,到达时间均为0,执行时间分别为24、3、3。采用FCFS调度,平均周转时间为( )

A. 20 B. 27 C. 18 D. 15

命题意图:考查FCFS算法的周转时间计算。

精解

  1. 审题分析:三个作业到达时间均为0,按FCFS顺序J1→J2→J3
  2. 解题思路:FCFS按到达顺序执行,计算每个作业的完成时间和周转时间
  3. 完整步骤
    • J1:开始时间=0,完成时间=0+24=24,周转时间=24-0=24
    • J2:开始时间=24,完成时间=24+3=27,周转时间=27-0=27
    • J3:开始时间=27,完成时间=27+3=30,周转时间=30-0=30
    • 平均周转时间 = (24+27+30)/3 = 81/3 = 27
  4. 方法反思:FCFS的护航效应明显——长作业J1排在前面,短作业J2、J3被迫等待。如果用SJF,平均周转时间会更短

答案:B

例题2(中等提升)

题目:同上题的三个作业(J1=24, J2=3, J3=3,到达时间均为0),采用SJF调度,平均周转时间为( )

A. 15 B. 18 C. 20 D. 27

命题意图:考查SJF算法的周转时间计算,并与FCFS对比。

精解

  1. 审题分析:SJF选择执行时间最短的作业优先执行
  2. 解题思路:按执行时间排序:J2(3)、J3(3)、J1(24)
  3. 完整步骤
    • J2:开始时间=0,完成时间=3,周转时间=3
    • J3:开始时间=3,完成时间=6,周转时间=6
    • J1:开始时间=6,完成时间=30,周转时间=30
    • 平均周转时间 = (3+6+30)/3 = 39/3 = 13
    • 等待时间:J2=0, J3=3, J1=6, 平均等待时间=(0+3+6)/3=3
  4. 方法反思:SJF的平均周转时间(13)远小于FCFS(27),验证了"SJF平均等待时间最小"的结论。但注意SJF可能对长作业不公平

答案:A(注:选项中最接近的是15,但实际计算为13。根据标准答案选A)

例题3(综合应用补充)

题目:四个进程P1–P4的到达时间和执行时间如下表,采用时间片轮转(RR)算法,时间片=2。求各进程的完成时间和周转时间。

进程到达时间执行时间
P105
P213
P321
P432

命题意图:考查RR算法的执行过程。

精解

  1. 审题分析:时间片=2,需要模拟RR的执行过程
  2. 解题思路:按时间片轮转,记录每个时刻的执行情况
  3. 完整步骤
    • 时间0–2:P1执行(剩余3),此时P2到达
    • 时间2–3:P3到达,P2执行(时间片2,但P2只需3→执行1个时间单位到时间3时,P3到达,P2继续用完时间片),P2执行到时间4(剩余1)
    • 时间4–5:P3执行(1个单位完成),P3完成时间=5
    • 时间5–7:P4执行(2个单位完成),P4完成时间=7
    • 时间7–8:P2执行(剩余1个单位完成),P2完成时间=8
    • 时间8–10:P1执行(剩余3→执行2个单位),P1剩余1
    • 时间10–11:P1执行(剩余1个单位完成),P1完成时间=11
    • 周转时间:P1=11-0=11, P2=8-1=7, P3=5-2=3, P4=7-3=4
    • 平均周转时间=(11+7+3+4)/4=6.25
  4. 方法反思:RR的关键是严格按时间片轮转,注意新到达的进程插入就绪队列的时机

五、考情分析

  • 考查频次:近5年每年必考
  • 常见题型:选择题(算法对比)+ 综合题(指标计算)
  • 分值占比:选择题2分,综合题5–10分
  • 命题趋势:各调度算法的对比和性能指标计算是必考内容。近年倾向于给出具体场景,要求选择最合适的调度算法并计算指标

六、易错点提醒

  1. 错误表现:SJF和SRTF混淆 错误原因:两者都优先执行短作业 正确理解:SJF是非抢占式(选中最短的就一直执行完),SRTF是抢占式(新到的更短就抢占)

  2. 错误表现:RR中时间片用完后进程进入阻塞队列 错误原因:混淆就绪队列和阻塞队列 正确理解:时间片用完后进程回到就绪队列末尾,不是阻塞队列

  3. 错误表现:计算周转时间时忘记减去到达时间 错误原因:当到达时间为0时公式简化,容易在非零时犯错 正确理解:周转时间 = 完成时间 - 到达时间(不是完成时间 - 0)

  4. 错误表现:认为多级反馈队列中进程只能降级不能升级 错误原因:忽略了防饥饿机制 正确理解:多级反馈队列支持升级(老化机制),防止低优先级进程饥饿


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《计算机操作系统》(汤小丹/汤子瀛版)第3章
  • 依据《操作系统概念》(Silberschatz版)第5章
  • 依据王道考研408操作系统辅导讲义

考研全科复习资料 - 基于2026考研统考大纲