【操作系统】进程调度(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(最短完成时间优先) 算法 原理与实践
【操作系统】进程调度(2a):SJF(短任务优先) 算法 原理与实践相关推荐
- 【JAVA操作系统——进程调度】非抢占式短作业优先算法
测试要求 进程信息如下: 进程 到达时间 服务时间 A 0 3 B 1 6 C 2 4 D 3 9 E 4 1 请输出进程的调度过程,以及系统平均带权周转时间. 代码实现 package com.zj ...
- 操作系统进程调度算法(先来先服务,短作业优先算法(SJF))linux下(附源码)
先来先服务算法(FCFS) FCFS是最简单的调度算法,既可以用作作业调度,也可以用作进程调度 这种算法优先考虑系统中等待时间最长的作业(进程),而不管作业所需执行时间长短, 做法是从后备队列中选择几 ...
- 【操作系统】进程调度(1):FIFO(先进先出)算法 原理与实践
0 前言 本文基于书籍<Operating System:Three Easy Pieces>. 中译本:<操作系统导论>,中译本质量还可以,但是英文版后来的更新,中文版目前没 ...
- 【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践
0 前言 接上一篇文章:进程调度(2a):SJF(短任务优先) 算法 原理与实践 1 前提铺垫 与上一篇同. 2 STCF 原理 STCF(Shortest Time-to-Completion Fi ...
- 短作业优先算法c语言实现,OS短作业优先调度算法C语言
OS短作业优先调度算法C语言 采用短作业优先调度算法调度程序 学 号: 姓 名: 专 业: 指导老师: 日 期: 目录 一.实验题目3 二.课程设计的目的3 三.设计内容3 四.设计要求3 五.主要数 ...
- 【操作系统】进程调度(3):RR(轮转) 算法 原理与实践
0 前言 接上一篇文章:进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践 1 前提铺垫 除了与上一篇相同的,这里介绍新的基础知识. 1.1 三种类型的程序 计算密集型(CPU导向) 输 ...
- 非抢占式优先算法例题_非抢占短作业优先算法源代码(C语言)
#include #include #define MAX 5 //进程数 /*短作业优先算法*/ struct pro { int num; //进程名 int arriveTime; //到达时间 ...
- 短进程算法c语言,短进程优先算法C语言实现
短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...
- 短进程优先算法(C,Java实现)
复制代码的时候:最好点下图 [cpp] 旁边的那个标签进行复制,不然可能代码编译不了. 在短进程优先算法中需要注意:下一个进程是已经到达且运行时间最短的进程. 输入如下: 4 A 8.00 2 ...
最新文章
- 2020十大新兴技术揭晓!每一项都可能颠覆我们的生活
- Eclipse error: “The import XXX cannot be resolved”
- KillTimer析构函数
- linux删除某个path_linux 从path中去掉某个
- MySQL(九)插入、更新和删除
- git 删除本地和远程分支_如何在本地和远程删除Git分支
- 面试官:来,说说图片防盗链实现?
- ViewPage实现一屏多页面显示(进阶版)
- [笔记] 数据结构二刷【第一篇:线性表·栈·队列·递归】
- idea自定义banner
- Python iter()函数
- 第19课:生活中的访问模式——一千个读者一千个哈姆雷特
- 比较强大的破解软件网站
- 物联网 DFrobot 掌控版 人工智能测温实验
- Linux终端连接遇到的两个问题
- adob animate_Chrome报告“ Adob​​e Flash Player已被阻止,因为它已过期。”
- C++ Primer Plus(嵌入式公开课)---第5,6章 循环和关系表达式 分支语句和逻辑运算符
- debian安装 Debian的一些常用命令
- [渝粤教育] 盐城工学院 土力学与基础工程 参考 资料
- 景山中学 计算机教师 创客,创客背景下中学信息技术教学的创新研究
热门文章
- Delta DVP 系列 PLC 各装置 Modbus 地址
- 原生js使用forEach()与jquery使用each遍历数组,return false 的区别
- Android programming on Mac 之安装Eclipse
- dnse 2.0音效厉害还是full sound厉害点呢?谢谢!!
- cordova监听事件中调用其他方法_Laravel模型事件的实现原理详解
- java string对象创建对象_Java String 创建了几个对象
- linux处理机调度实验报告,模拟Linux操作系统下处理机调度实验报告
- MongoDB查询性能分析—— explain 操作返回结果详解
- mysql generaton_Mysql 集成随机唯一id mysql unique number generation
- 为什么使用1 * 1 的卷积核