Skip to content

SJF 短作业优先调度

考情分析

SJF 及其抢占式变体 SRTF 是调度算法中的核心考点,计算题高频出现。属于 🔥🔥🔥 高频核心。

FCFS 的问题是短作业被长作业卡住。反过来想:如果总是让最短的任务先做完,整体等待时间就能降到最低。这就是 SJF 的出发点。

算法规则

短作业优先(Shortest Job First):从就绪队列中选择服务时间最短的进程分配 CPU。

变体名称抢占性
SJF短作业优先非抢占式
SRTF最短剩余时间优先(Shortest Remaining Time First)抢占式

非抢占式 SJF 示例

进程到达时间服务时间
P107
P224
P341
P454
时间: 0           7  8    12     16
      ├───────────┤──┤────────┤────────┤
           P1      P3    P2       P4

P1 到达时没有其他进程,先执行。P1 完成后,P2/P3/P4 都已到达,P3 最短(1),先执行 P3。

进程完成时间周转时间带权周转时间
P1771.00
P3844.00
P212102.50
P416112.75
平均8.002.56

对比 FCFS 的平均周转时间 8.75,SJF 降低到了 8.00。

抢占式 SRTF 示例

同样的数据,使用 SRTF:

时间: 0   2   4 5   7   11  16
      ├───┤───┤─┤───┤───────┤───────┤
       P1  P2 P3 P2   P1      P4
  • t=0:只有 P1,执行 P1(剩余7)
  • t=2:P2 到达(服务4),P1 剩余5。4<5,抢占,执行 P2
  • t=4:P3 到达(服务1),P2 剩余2。1<2,抢占,执行 P3
  • t=5:P3 完成,P4 到达(服务4),P2 剩余2。2<4<5,执行 P2
  • t=7:P2 完成,P1 剩余5,P4 服务4。4<5,执行 P4
  • t=11:P4 完成,执行 P1
  • t=16:P1 完成
进程完成时间周转时间带权周转时间
P116162.29
P2751.25
P3511.00
P41161.50
平均7.001.51

SRTF 的平均周转时间进一步降低到 7.00

交互可视化

加载可视化中...

SJF 的最优性

所有进程同时到达的前提下,SJF(非抢占)可以证明平均等待时间最小。其抢占版本 SRTF 则在所有调度算法中平均等待时间最小(不要求同时到达)。

直觉理解:让短作业先执行,减少了后面作业的等待时间,总的等待时间之和最小。

缺点

缺点说明
饥饿长作业可能永远得不到执行(不断有短作业到达)
无法预知服务时间实际中很难提前知道进程需要多长时间
对长作业不公平短作业优先意味着长作业被歧视

考研高频考点

  • 🔥🔥🔥 SJF 和 SRTF 的调度过程和指标计算
  • 🔥🔥🔥 SJF 平均等待时间最优(非抢占式调度中)
  • 🔥🔥 SJF 可能导致饥饿
  • 🔥🔥 抢占式(SRTF)vs 非抢占式(SJF)的区别
  • 🔥 实际中无法预知服务时间的问题

SJF 追求最短平均等待时间,但在交互式系统中,用户更在乎响应速度。下一篇看时间片轮转如何兼顾每个进程的响应。

真题练习

相关真题(1题)

2017Q23选择题2分

FCFS vs SJF:FCFS选最先到达的J1,SJF选运行时间最短的J3