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

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(最短完成时间优先) 算法 原理与实践

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

0 前言 接上一篇文章:进程调度(2a):SJF(短任务优先) 算法 原理与实践 1 前提铺垫 与上一篇同。 2 STCF 原理 STCF(Shortest Time-to-Completion First)最短完成时间优先。 2.1…

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

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

【操作系统】进程调度(4):I/O、不可预测的运行时间

0 前言 上一篇文章:进程调度(3):RR(轮转) 算法 原理与实践 1 前提铺垫 与上一篇同。 2 引入I/O操作 之前我们一直提及的是计算密集型程序,现在我们的程序可以进行I/O交互了,它会…

坚定不移地加速,并且不断解决新问题

想要更快更高效地做事,一定会带来问题,我们要做的是 保证事情一定要做对坚定不移地解决问题,寻找方法,而不是回归慢速 这里有几个典型的例子 从单周期CPU,到多周期CPU,是为了提速,我们不必再…

运行bat批处理文件不出现黑框

if "%1""hide" goto CmdBegin start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit :CmdBegin echo off java -jar logisim118.exe exit 只需要添加上述代…

【操作系统】使用循环创建线程,一个手残导致的bug

让我们先看看这个手残的程序…… 这是一个简单的生产者消费者问题。 #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <unistd.h> #include <pthread.h> #include <sys/types.h> #incl…

【计算机系统设计】重点 · 学习笔记(0)

HDL等硬件描述语言&#xff0c;例如Verilog&#xff0c;是并行的&#xff0c;而不像软件一样的顺序执行的&#xff0c;例如很多的always块&#xff0c;initial块&#xff0c;都是并行的&#xff0c;他们会转换为硬件电路&#xff0c;而在仿真的时候&#xff0c;他们也是并发执行…

【计算机系统设计】学习笔记(1)03,04

疑问&#xff1a;sw和lw指令&#xff0c;获取的地址不是4的整倍数&#xff08;字节不对齐&#xff09;的时候&#xff0c;应该如何处理&#xff1f; 东南大学MOCC 计算机系统综合设计 03 03-1 寄存器 介绍了MIPS寄存器&#xff0c;32个寄存器的基本功能和使用&#xff0c;注…

【期末考试】计算机网络、网络及其计算 考试重点

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 计算机网络及其计算 期末考点 &#x1f680;数…

【计算机系统设计】学习笔记(2)

5.1 对于CPU与外界的读写&#xff0c;只有load和store指令能够做&#xff0c;所以很多情况下&#xff0c;直接通过bypass跳过去了&#xff0c;或者闲置&#xff0c;尤其对于流水线&#xff0c;更应该直接跳过而不是闲置&#xff08;如何设计?&#xff09;。 另一方面&#xf…

【计算机系统设计】重点 · 学习笔记(1)(资源消耗)

这一点先浅显理解&#xff0c;就好比我要造一个楼 我是用现成的材料造节省?还是需要用XX材料&#xff0c;但是XX材料还需要现成材料造呢&#xff1f; 这也不一定&#xff0c;但是基本来说&#xff0c;如果使用现有资源&#xff0c;能够直接用&#xff0c;那其实是最好不过的…

【计算机系统设计】重点 · 学习笔记(0)(数据通路设计思想)

重点1&#xff1a;05.1 设计思想 设计思想至关重要&#xff0c;这决定了你能不能自己根据ISA设计出来CPU架构&#xff0c;而不是只是抄别人的&#xff0c;也决定你能不能完成自己的设计更优化的架构。 描述方式约定 6 数据通路 ≠ Verilog代码 我们构建的数据通路&#…

【计算机系统设计】实践笔记(1)数据通路构建:取指部件分析

0 核心思想 根据指令功能&#xff0c;分析出需求&#xff0c;从而得出需要的部件、控制信号以及其他设计。 1. 针对的指令 取指阶段&#xff0c;针对所有指令&#xff0c;任何指令都需要进行取指。 2 功能&#xff08;需求&#xff09;分析 CPU的内部采用的是字节编址&…

【计算机系统设计】实践笔记(2)数据通路构建:第一类R型指令分析(1)

0 回顾 上一次实践笔记&#xff08;0&#xff09;我们实现了一个最简单的&#xff0c;能够每个上升沿4的PC。 我们最需要关注的就是器件功能的独立性&#xff0c;避免内外功能混杂&#xff0c;同时一定要注意脑中有电路&#xff08;RTL级描述的抽象电路而不是实际的门级电路&…

接口的抽象与实现(概述)

概述 我们先建立一个整体的接口格局观&#xff0c;建立知识地图&#xff0c;了解接口的大概面貌。 整体来说&#xff0c;就这点事儿&#xff0c;4个箭头代表了所有&#xff01; 三个器件4个箭头 把这几个都想明白&#xff0c;就完事儿了。 第一层&#xff08;顶层&#xf…

从功能层次,阐述CPU、接口和外设之间的交互

我们从功能抽象层次&#xff0c;阐述一下CPU、接口芯片和外设之间的交互情况&#xff1a; 三个器件4个箭头 我们依次将其描述清楚。 数据 箭头①和③ CPU给接口可以发送数据&#xff0c;然后接口暂存数据&#xff0c;之后再发给外设&#xff0c;这就是数据缓冲。 发送的数…

【接口技术】8086的IN和OUT指令

x86采用独立编址的方式&#xff0c;IO端口地址和存储器地址是分开的。 对于IO存储器访问&#xff0c;需要使用独立的IO指令&#xff0c;也就是IN和OUT 两类地址 地址空间大小在8位以下地址空间大小在16位以下 两种格式 对于两类不同的地址&#xff0c;IO指令的格式不一样。…

Vivado工程文件分类

只需要在创建的时候&#xff0c;选择自定义路径即可&#xff0c;最好在原有的new文件夹下新建文件夹。 至于路径的匹配&#xff0c;可以自己试试&#xff0c;在原有默认new下创建文件夹&#xff0c;选中新的文件夹后&#xff0c;内部的Verilog文件可以访问外部new文件夹的文件&…

【微机原理与接口技术】具体芯片(1)并行接口8255A(1):全局观

并行接口8255A 首先&#xff0c;它是传输并行数据的&#xff0c;与CPU一样&#xff0c;然后&#xff0c;它是可编程的&#xff0c;也是多功能的&#xff0c;CPU可以对其进行一些控制。 管脚 先从最宏观层面分类 一部分引脚与外设相连一部分引脚与CPU相连GND和Vcc 注意&…