最短作业优先(SJF)调度算法将每个进程与其下次 CPU 执行的长度关联起来。当 CPU 变为空闲时,它会被赋给具有最短 CPU 执行的进程。如果两个进程具有同样长度的 CPU 执行,那么可以由 FCFS 来处理。

一个更为恰当的表示是最短下次CPU执行算法,这是因为调度取决于进程的下次 CPU 执行的长度,而不是其总的长度。我们使用 SJF 一词,主要由于大多数教科书和有关人员都这么称呼这种类型的调度策略。

举一个 SJF 调度的例子,假设有如下一组进程,CPU 执行长度以 ms 计:

进程 执行时间
P1 6
P2 8
P3 7
P4 3

采用 SJF 调度,就会根据如下 Gantt 图来调度这些进程:

进程 P1 的等待时间是 3ms,进程 P2 的等待时间为 16ms,进程 P3 的等待时间为 9ms,进程 P4 的等待时间为 0ms。因此,平均等待时间为(3 + 16 + 9 + 0)/4 = 7ms。相比之下,如果使用 FCFS 调度方案,那么平均等待时间为 10.25ms。

可以证明 SJF 调度算法是最优的。这是因为对于给定的一组进程,SJF 算法的平均等待时间最小。通过将短进程移到长进程之前,短进程的等待时间减少大于长进程的等待时间增加。因而,平均等待时间减少。

SJF 算法的真正困难是如何知道下次 CPU 执行的长度。对于批处理系统的长期(或作业)调度,可以将用户提交作业时指定的进程时限作为长度。在这种情况下,用户有意精确估计进程时间,因为低值可能意味着更快的响应(过小的值会引起时限超出错误,进而需要重新提交)。SJF 调度经常用于长期调度。

虽然 SJF 算法是最优的,但是它不能在短期CPU 调度级别上加以实现,因为没有办法知道下次 CPU 执行的长度。一种方法是试图近似 SJF 调度。虽然不知道下一个 CPU 执行的长度,但是可以预测它。可以认为下一个 CPU 执行的长度与以前的相似。因此,通过计算下一个 CPU 执行长度的近似值,可以选择具有预测最短 CPU 执行的进程来运行。

下次 CPU 执行通常预测为以前 CPU 执行的测量长度的指数平均。我们可以按下面的公式来计算指数平均。设 tn 为第 n 个 CPU 执行长度,设 τn+1 为下次 CPU 执行预测值。因此,对于 α, 0≤α≤1,定义:

τn+1 = ατn + (1-α)τn

值 tn 包括最近信息,而 τn 存储了过去历史。参数 α 控制最近和过去历史在预测中的权重:

  • 如果 α = 0,那么 τn+1 = τn,最近历史没有影响(当前情形为瞬态);
  • 如果 α = 1,那么 τn+1 = tn,只有最近 CPU 执行才重要(过去历史被认为是陈旧的、无关的)。
  • 更为常见的是 α = 1/2,这样最近历史和过去历史同样重要。初始值可作为常量或系统的总体平均值。

图 1 为一个指数平均的例子,其中 α=1/2,τ0=10。


图 1 下一个 CPU 执行长度的预测

为了理解指数平均行为,通过替换 τn,可以展开 τn+1,从而得到:

τn+1 = αtn + (1-α)αtn-1 + …+ (l-α)jαtn-j + …+ (1-α)n+1τ0

通常,由于 α 和(1-α)小于 1,所以后面项的权重比前面项的权重要小。

SJF 算法可以是抢占的或非抢占的。当一个新进程到达就绪队列而以前进程正在执行时,就需要选择了。新进程的下次 CPU 执行,与当前运行进程的尚未完成的 CPU 执行相比,可能还要小。抢占 SJF 算法会抢占当前运行进程,而非抢占 SJF 算法会允许当前运行进程以先完成 CPU 执行。抢占 SJF 调度有时称为最短剩余时间优先调度。

举个例子,假设有以下 4 个进程,其 CPU 执行时间以 ms 计:

进程 到达时间 执行时间
P1 0 8
P2 1 4
P3 2 9
P4 3 5

如果进程按给定时间到达就绪队列,而且需要给定执行时间,那么产生的抢占 SJF 调度如以下 Gantt 图所示:

进程 P1 在时间 0 开始,因为这时只有进程 P1。进程 P2 在时间 1 到达。进程 P1 剩余时间(7ms)大于进程 P2 需要的时间(4ms),因此进程 P1 被抢占,而进程 P2 被调度。

对于这个例子,平均等待时间为 [(10-1) + (1-1) + (17-2) + (5-3)]/4 = 26/4 = 6.5ms。如果使用非抢占 SJF 调度,那么平均等待时间为 7.75ms。

最短作业优先(SJF)调度算法相关推荐

  1. 操作系统之进程管理:6、调度算法(先来先服务FCFS、最短作业优先SJF、最高响应比优先HRRN、时间片轮转法、优先级调度、多级反馈队列)

    6.调度算法 适用于早期批处理机系统的调度算法 思维导图 1.先来先服务FCFS 2.最短作业优先SJF 非抢占式最短作业优先 抢占式最短作业优先(最短剩余时间优先算法) 注 3.最高响应比优先HRR ...

  2. 进程调度之最短作业优先

    进程调度之最短作业优先 最短作业优先 SJF(Shortest-Job-First): 分为抢占式和非抢占式: 非抢占式的SJF 更确切的叫 最短下次CPU执行算法(shortest-next-CPU ...

  3. 一、操作系统——处理机(作业)调度算法:先来先服务算法FCFS、最短作业优先算法SJF(非抢占式)、 最短剩余时间优先算法SRTN(抢占式)、最高响应比优先算法HRRN

    各种调度算法的学习思路: 调度算法的评价指标: 一.先来先服务算法(FCFS):First Come First Serve 二.最短作业优先算法(SJF非抢占式):Shortest Job Firs ...

  4. 【操作系统 - 1】先来先服务FCFS和短作业优先SJF进程调度算法

    操作系统系列 学习至此,发现很多学了但很久没用的知识,久而久之,慢慢遗忘.等哪天还需要的话,却发现已经忘得差不多了,即使整理了文档(word等),还是得从头再学一遍.读研第一学期,发现很多东西都可以从 ...

  5. 最短作业优先(SJF)

    最短作业优先(SJF)是一种调度任务请求的调度策略.每个任务请求包含有请求时间(即向系统提交的请求的时间)和持续时间(即完成任务所需时间).当前任务完成后,SJF策略会选择最短持续时间执行任务,若最短 ...

  6. 《操作系统》实验一:先来先服务FCFS和短作业优先SJF进程调度算法

    [实验题目]:先来先服务FCFS和短作业优先SJF进程调度算法 [实验学时]:4学时 [实验目的] 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变.进程调度的策略及对系统性能的评价方法. ...

  7. 2.2.4 调度算法: 先来先服务 最短作业优先 最高相应比优先

    目录 思维导图 先来先服务(FCFS) 短作业优先(SJF) 高响应比优先(HRRN) 思维导图 先来先服务(FCFS) 短作业优先(SJF) 高响应比优先(HRRN) 巧妙记忆: 先来先服务(FCF ...

  8. 调度算法先来先服务(FCFS)、最短作业优先(SJF)和最高响应比优先(HRRN)算法

    一.调度算法 (一)先来先服务(FCFS,First Come First Serve) 例题:各进程到达就绪队列的时间.需要的运行时间如下表所示.使用先来先服务调度算法,计算各进程的等待时间.平均等 ...

  9. 作业调度算法【平均周转时间、平均带权周转时间、先来先服务FCFS、短作业优先SJF、高优先权(级)算法FPF、高响应比优先算法HRRN】

    文章目录 先来先服务算法(FCFS) 短作业优先算法(SJF).短进程优先算法(SPF) 周转时间和带权周转时间 高优先权(级)调度算法FPF 高响应比优先调度算法HRRN 先来先服务算法(FCFS) ...

最新文章

  1. linux查看上下文切换命令,Linux性能优化,Linux查看CPU上下文切换
  2. c语言 get post请求,URL GET/POST请求目标-c
  3. 吴恩达 coursera AI 第四课总结+作业答案
  4. OpenCv2 学习笔记(1) Mat创建、复制、释放
  5. 借助钉钉宜搭,奶茶店开始用黑科技管理门店了
  6. (寻找第K小的数amp;amp;寻找第K小的数的和)
  7. OO2019第一次作业总结
  8. PropertyGrid—添加属性Tab
  9. golang解决数据库中null值的问题
  10. Sofa memcached client
  11. 万能弹窗代码,能突破大部分弹窗拦截插件
  12. matlab获取地图边界,科学网—提取百度地图县域的矢量边界 - 张乐乐的博文
  13. Jupyter notebook用谷歌浏览器打开
  14. 使用python程序判断某天是不是每个月的第三周的周六问题
  15. 谈谈以前端的角度出发做好seo需要做什么?
  16. SQL Server Always On部署
  17. 数据可视化工具之--百度图说
  18. php仿糗事百科,基于thinkphp框架开发仿糗事百科笑话系统
  19. Depth-wise separable convolution 深度可分卷积
  20. 标准C语言day02

热门文章

  1. 20+个很棒的 Python 脚本的集合(迷你项目)
  2. 如何防止SQLserver服务器被黑?
  3. 数据结构---判断链表是否有环
  4. 携程风险防御体系的变革之路
  5. 8086如何计算物理地址
  6. 微软计算机电源怎么接,电脑电源线接法,详细教您电脑电源线怎么接
  7. dataTable修改后数据刷新(数据重载)
  8. lotus notes 闪退_【处理流程】win7系统Lotus Notes邮箱闪退的处理教程
  9. 【日语】标准日本语动词大全
  10. Springboot综合案例锦集