首页/操作系统/02-process/SJF调度算法 🔗 在 Obsidian 中打开
操作系统 · 02-process

SJF调度算法

重要度 ★★★★ SJF短作业优先SRTF平均等待最优
速查
SJF 选择执行时间最短的就绪进程优先执行:非抢占版运行到完成,抢占版(SRTF)新进程到达时比较剩余时间。SJF 在所有非抢占算法中平均等待时间最小

速查

项目
全称Shortest Job First(短作业优先)
非抢占版本SJF:选择执行时间最短的就绪进程
抢占版本SRTF(最短剩余时间优先):新进程到达时比较剩余时间
最优性在所有非抢占算法中,SJF 的平均等待时间最小

核心概念

SJF(短作业优先)选择执行时间(服务时间)最短的就绪进程优先执行。

两种版本

  1. 非抢占式 SJF:当前进程完成后,从就绪队列中选择执行时间最短的进程
  2. 抢占式 SJF(SRTF):每当新进程到达就绪队列时,比较当前进程剩余时间和新进程的执行时间,选择更短的运行

核心性质

  • SJF 在所有非抢占式算法中,平均等待时间最小(已证明为最优)
  • SRTF 在所有算法中,平均等待时间最小
  • SJF 可能导致长作业饥饿:不断有短作业到来,长作业可能一直得不到执行

问题

  • 需要预知执行时间——实际系统中很难准确预估
  • 通常用指数移动平均估算:$τ(n+1) = α\cdot t(n) + (1-α)\cdotτ(n)$

关键性质

对比项非抢占式SJF抢占式SRTF
选择标准就绪队列中最短执行时间最短剩余时间
抢占时机无(运行到完成)新进程到达时
平均等待时间非抢占中最优所有算法中最优
饥饿问题有(长作业饥饿)有(更严重)
实现难度需预知执行时间需预知+动态比较

常见考法

考法解题套路
计算 SJF列出就绪队列,每次选执行时间最短的
计算 SRTF新进程到达时比较剩余时间,可能抢占当前进程
SJF vs FCFSSJF 平均等待时间更短,但可能饥饿
饥饿问题SJF/SRTF 可能导致长作业永远得不到执行
估算执行时间指数移动平均:$τ(n+1) = α\cdot t(n) + (1-α)\cdotτ(n)$

易错点

注意
  • SJF 的"最短"指的是执行时间(服务时间),不是到达时间
  • SRTF(抢占式SJF)比非抢占式SJF 的平均等待时间更短
  • SJF 在所有非抢占式算法中最优,SRTF 在所有算法中最优——注意限定条件
  • SJF 的缺点是长作业饥饿,不是短作业饥饿
  • SJF 需要预知执行时间,这是它在实际系统中的主要困难

核心结论

必背
  1. SJF 在非抢占式算法中平均等待时间最小(最优性已证明)
  2. SRTF 在所有算法中平均等待时间最小
  3. SJF 的主要问题:需要预知执行时间 + 长作业可能饥饿
  4. 实际系统常用指数移动平均来估算下一次的执行时间
  5. SJF 对短作业有利,对长作业不利(公平性差)

记忆卡片

SJF 选择哪个进程执行?
执行时间(服务时间)最短的就绪进程。
SJF 和 SRTF 的区别?
SJF 非抢占(运行到完成),SRTF 抢占(新进程到达时比较剩余时间)。
SJF 的最优性限定条件?
在所有非抢占式算法中,SJF 平均等待时间最小。
SJF 可能导致什么问题?
长作业饥饿——若不断有短作业到来,长作业永远得不到执行。
如何估算执行时间?
指数移动平均 $τ(n+1) = α\cdot t(n) + (1-α)\cdotτ(n)$。

交互动画 · FCFS vs SJF 排队

作业:P1(24) P2(3) P3(3) |到达时间 0,0,0
点击「FCFS 顺序」或「SJF 顺序」,观察排队次序与平均等待时间
柱高 = 执行时间;SJF 让短作业先跑,长作业等待更短
本例 P1长、P2/P3短:FCFS 平均等待 17,SJF 平均等待仅 3(非抢占,到达均为0)。

相关知识点

fcfs-scheduling scheduling-algorithm-comparison

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。