0 前言

接上一篇文章:进程调度(1):FIFO(先进先出)算法 原理与实践

1 前提铺垫

请参考上一篇文章的前提铺垫部分,本文与之完全一致。

2 SJF 原理

SJF(Shortest Job First)短任务优先,也就说,对于Ready的多个进程,先执行最短的内一个。

2.1 算法

这种算法在我们的《算法与数据结构》中也是常见的,对于多个即将执行的任务,每一次都选择最短的先执行,执行完之后再执行次短的,以此类推,这样一来,每个任务的周转时间都是最小的,平均周转时间也就是最小的。

单纯从平均周转时间这个性能指标来说,这个算法还是不错的!

2.1.1 实例1

我们先来看一个实例,例如有4个任务(放宽每个任务时间都一样的假设)

  • A:10
  • B:1
  • C:4
  • D:100

假定4个任务同时到达,根据SJF的原则,我们的执行顺序应该是

B
C
A
D

对应的Average Turnaround Time = (1 + 5 + 15 + 115) / 4 = 34 (平均周转时间是34s)

2.1.2 实例1的模拟

我们直接将后面部分要将的实践搬到这里一部分,让你有一个直观的感受:

ARG policy SJF
ARG jlist 10,1,4,100Here is the job list, with the run time of each job: Job 0 ( length = 10.0 )Job 1 ( length = 1.0 )Job 2 ( length = 4.0 )Job 3 ( length = 100.0 )** Solutions **Execution trace:[ time   0 ] Run job 1 for 1.00 secs ( DONE at 1.00 )[ time   1 ] Run job 2 for 4.00 secs ( DONE at 5.00 )[ time   5 ] Run job 0 for 10.00 secs ( DONE at 15.00 )[ time  15 ] Run job 3 for 100.00 secs ( DONE at 115.00 )Final statistics:Job   1 -- Response: 0.00  Turnaround 1.00  Wait 0.00Job   2 -- Response: 1.00  Turnaround 5.00  Wait 1.00Job   0 -- Response: 5.00  Turnaround 15.00  Wait 5.00Job   3 -- Response: 15.00  Turnaround 115.00  Wait 15.00Average -- Response: 5.25  Turnaround 34.00  Wait 5.25

具体含义在上一篇文章已经解释过了,不再细说。

这样来看,SJF在这种情况下,的确是最优的,从数学角度来说也是最优的!

但是,如果我们放宽任务同时到达的条件,事情可能又比较糟糕了……

2.2 缺点:非抢占式调度

什么是非抢占式调度呢?我们先来看一个假设:

假设任务A在CPU执行,任务B到达了,并且B的运行时间比A小,但是A在B到达之前已经在执行了,B就只能等着A执行完再执行,尽管B比A的运行时间少。

这就是非抢占式调度,后来者即便比正在运行的进程时间短,也不能抢占它的位置来运行自己

这样的话,会造成什么问题呢?我们来看一个实例

  • A:100
  • B:10
  • C:20

三个进程,A先到达(0时刻到达),随后B、C到达(B、C同时在时刻10到达)。

程序的执行情况

A
B
C

对于后来的B和C,虽然远比A运行时间小,但是由于SJF的非抢占,它们只能等着A执行完,然后再执行B,再执行C(因为B比C时间少)。

这显然是糟糕的,此时,Average Turnaround Time = (100 + 110 + 120) / 3 = 110。看起来,又退化到了FIFO算法……

显然,非抢占式调度也不是很好。所以人们又提出了新的算法……是的,当旧算法出现问题,自然会催生新算法诞生,人类的科技就是这样一步步变得越来越强大和复杂。

3 SJF 实践

你可以充分阅读README.md文档,然后自己尝试一些数字并计算,之后再参考答案。

值得说明的是,模拟程序并不是很完美,默认是多任务同时到达,并且没有提供修改选项。

4 重要思想

对于同时到达的任务,采取花费时间少的优先执行,这能够让我们的Average Turnaround Time这一性能指标达到最优。但是不同时到达的任务,可能不太好用,因为它“不会抢地盘”,只会“傻等着”,后续我们也会介绍解决方案。

后续我们会介绍更多的性能指标,你就会发现,仅仅只有平均周转时间最优,是远远不够的。

5 预告:进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践

基于SJF的非抢占式调度的缺点,STCF做了改进,实现了抢占式调度

下一篇链接:进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践

【操作系统】进程调度(2a):SJF(短任务优先) 算法 原理与实践相关推荐

  1. 【JAVA操作系统——进程调度】非抢占式短作业优先算法

    测试要求 进程信息如下: 进程 到达时间 服务时间 A 0 3 B 1 6 C 2 4 D 3 9 E 4 1 请输出进程的调度过程,以及系统平均带权周转时间. 代码实现 package com.zj ...

  2. 操作系统进程调度算法(先来先服务,短作业优先算法(SJF))linux下(附源码)

    先来先服务算法(FCFS) FCFS是最简单的调度算法,既可以用作作业调度,也可以用作进程调度 这种算法优先考虑系统中等待时间最长的作业(进程),而不管作业所需执行时间长短, 做法是从后备队列中选择几 ...

  3. 【操作系统】进程调度(1):FIFO(先进先出)算法 原理与实践

    0 前言 本文基于书籍<Operating System:Three Easy Pieces>. 中译本:<操作系统导论>,中译本质量还可以,但是英文版后来的更新,中文版目前没 ...

  4. 【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(2a):SJF(短任务优先) 算法 原理与实践 1 前提铺垫 与上一篇同. 2 STCF 原理 STCF(Shortest Time-to-Completion Fi ...

  5. 短作业优先算法c语言实现,OS短作业优先调度算法C语言

    OS短作业优先调度算法C语言 采用短作业优先调度算法调度程序 学 号: 姓 名: 专 业: 指导老师: 日 期: 目录 一.实验题目3 二.课程设计的目的3 三.设计内容3 四.设计要求3 五.主要数 ...

  6. 【操作系统】进程调度(3):RR(轮转) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践 1 前提铺垫 除了与上一篇相同的,这里介绍新的基础知识. 1.1 三种类型的程序 计算密集型(CPU导向) 输 ...

  7. 非抢占式优先算法例题_非抢占短作业优先算法源代码(C语言)

    #include #include #define MAX 5 //进程数 /*短作业优先算法*/ struct pro { int num; //进程名 int arriveTime; //到达时间 ...

  8. 短进程算法c语言,短进程优先算法C语言实现

    短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...

  9. 短进程优先算法(C,Java实现)

    复制代码的时候:最好点下图 [cpp] 旁边的那个标签进行复制,不然可能代码编译不了. 在短进程优先算法中需要注意:下一个进程是已经到达且运行时间最短的进程. 输入如下: 4 A   8.00   2 ...

最新文章

  1. 2020十大新兴技术揭晓!每一项都可能颠覆我们的生活
  2. Eclipse error: “The import XXX cannot be resolved”
  3. KillTimer析构函数
  4. linux删除某个path_linux 从path中去掉某个
  5. MySQL(九)插入、更新和删除
  6. git 删除本地和远程分支_如何在本地和远程删除Git分支
  7. 面试官:来,说说图片防盗链实现?
  8. ViewPage实现一屏多页面显示(进阶版)
  9. [笔记] 数据结构二刷【第一篇:线性表·栈·队列·递归】
  10. idea自定义banner
  11. Python iter()函数
  12. 第19课:生活中的访问模式——一千个读者一千个哈姆雷特
  13. 比较强大的破解软件网站
  14. 物联网 DFrobot 掌控版 人工智能测温实验
  15. Linux终端连接遇到的两个问题
  16. adob animate_Chrome报告“ Adob​​e Flash Player已被阻止,因为它已过期。”
  17. C++ Primer Plus(嵌入式公开课)---第5,6章 循环和关系表达式 分支语句和逻辑运算符
  18. debian安装 Debian的一些常用命令
  19. [渝粤教育] 盐城工学院 土力学与基础工程 参考 资料
  20. 景山中学 计算机教师 创客,创客背景下中学信息技术教学的创新研究

热门文章

  1. Delta DVP 系列 PLC 各装置 Modbus 地址
  2. 原生js使用forEach()与jquery使用each遍历数组,return false 的区别
  3. Android programming on Mac 之安装Eclipse
  4. dnse 2.0音效厉害还是full sound厉害点呢?谢谢!!
  5. cordova监听事件中调用其他方法_Laravel模型事件的实现原理详解
  6. java string对象创建对象_Java String 创建了几个对象
  7. linux处理机调度实验报告,模拟Linux操作系统下处理机调度实验报告
  8. MongoDB查询性能分析—— explain 操作返回结果详解
  9. mysql generaton_Mysql 集成随机唯一id mysql unique number generation
  10. 为什么使用1 * 1 的卷积核