王道操作系统考研笔记——2.1.9 调度算法
2.1.9 调度算法
知识总览
学习各种调度算法的思路
- 算法思想
- 算法规则
- 这种调度算法是用于作业调度还是进程调度?
- 抢占式或是非抢占式
- 优点和缺点
- 是否会导致
饥饿
(某进程/作业长期得不到服务)
2.1.9.1 先来先服务
知识点 | 说明 |
---|---|
英文名 | FCFS,即First Come First Serve |
算法思想 | 主要从公平的角度来考虑,类似于我们生活上排队买东西的例子 |
用于进程/作业调度 | 用于作业调度时,考虑的是哪个作业先到达后备队列;用于进程调度时,考虑的是哪个进程先到达就绪队列 |
是否可抢占? | 非抢占式算法 |
优缺点 | 优点:公平、算法实现简单;缺点:排在长作业后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。 |
是否会导致饥饿 | 否 |
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用先来先服务调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
周转时间 = 完成时间-到达时间
P1 = 7-0 = 7 ; P2 = 11- 2 = 9 ; P3 = 12-4 = 8 ; P4 = 16-5 =11
带权周转时间 = 周转时间/运行时间
P1 = 7/7 = 1;P2 = 9/4 = 2.25 ; P3 = 8/1 = 8 ; P4 = 11/4 = 2.75
等待时间 = 周转时间-运行时间
P1 = 7-7 = 0 ;P2 = 9-4 = 5 ; P3 = 8-1 = 7 ; P4 = 11-4 = 7
这里需要注意的是,本例中的进程都是纯计算型的过程,一个进程到达后要么在等待,要么在运行。如果是又有计算、又有I/O操作的过程,其等待时间就是周转时间-运行时间-I/O操作的时间。
平均周转时间 = (7+9+8+11)/4 = 8.75
平均带权周转时间 = (1+2.25+8+2.75)/4 = 3.5
平均等待时间 = (0+5+7+7)/4 = 4.75
2.1.9.2 短作业优先
知识点 | 说明 |
---|---|
英文名 | SJF,即Shortest Job First |
算法思想 | 追求最少的平均等待时间,最少的平均周转时间、最少的平均带权周转时间。 |
用于进程/作业调度 | 既可用于作业调度,也可用于进程调度。用于进程调度时被称为“短作业优先(SPF)算法” |
是否可抢占? | SJF和SPF是非抢占式的算法。但是也有抢占式的版本——最短剩余时间优先算法(SRTN,Shortest Remaining Time Next) |
优缺点 | 优点:“最短的”平均等待时间、平均周转时间。缺点:不公平。对短作业有利,对长作业不利。可能产生饥饿现象。另外,作业/进程的运行时间是由用户提供的,并不一定真实,不一定能做到真正的短作业优先 |
是否会导致饥饿 | 会。如果源源不断地有短作业/进程到来,可能使长作业/进程长时间得不到服务,产生“饿死”现象。 |
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用
非抢占式的短作业优先
调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。相比于FCFS算法,显然SPF算法的平均等待/周转/带权周转时间都要更低。
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用
抢占式的短作业优先
调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。注:抢占式的短作业优先算法又称为
最短剩余时间优先算法(SRTN)
。相比于前两个算法,这个算法的指标更低。
经过上面的学习,我们可以知道一些知识。但是由于教材的不一,我们还有几个小细节需要注意:
- 如果题目中没有特别说明,所提到的“短作业/进程优先算法”默认是非抢占式的。
- 很多书上都会说“SJF调度算法的平均等待时间、平均周转时间最少”。严格来说这个表述的错误的,不严谨的。经过上面的学习我们可以知道最短剩余时间优先算法所得到的指标是最少的。如果仍然要用这里的表述,那我们可以加上前提条件:在所有进程都几乎同时到达时,采用SJF调度算法的平均等待时间、平均周转时间最少。
- 虽然根据上面的例子,SJF指标比FCFS低,但是实际上并不是最少,因为SRTN更少嘛。但是这个如果在选择题中,没有错误的选项,可以选择“SJF算法的平均等待时间、平均周转时间最少”这个选项。
2.1.9.3 对上述两种算法的思考
FCFS算法是在每次调度的时候选择一个等待时间最长的作业(进程)为其服务。但是没有考虑到作业的运行时间,因此导致了对短作业不友好的问题。
SJF算法是选择一个执行时间最短的作业为其服务。但是又完全不考虑各个作业的等待时间,因此导致了对长作业不友好的问题,甚至会造成饥饿问题。
那么有没有一个算法,即考虑到各个作业的等待时间,又能兼顾运行时间呢?这就要引出来我们下面的算法了。
2.1.9.4 高响应比优先
知识点 | 说明 |
---|---|
英文名 | HRRN,Highest Response Ratio Next |
算法思想 | 在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务。其中响应比的计算公式为响应比=等待时间+要求服务时间要求服务时间响应比 = \frac{等待时间+要求服务时间}{要求服务时间}响应比=要求服务时间等待时间+要求服务时间 |
用于进程/作业调度 | 既可用于作业调度,也可用于进程调度 |
是否可抢占? | 非抢占式的算法。因此只有当前运行的作业/进程主动放弃处理机时,才需要调度,才需要计算响应比。 |
优缺点 | 综合考虑了等待时间和运行时间(要求服务时间) |
是否会导致饥饿 | 不会 |
例题:各进程到达就绪队列的时间、需要的运行时间如下表所示。使用
高响应比优先
调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间。
2.1.9.5 小结
这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但是不关心“响应时间”,也并不区分任务的紧急程度,因此对于用户来说,交互性很糟糕。因此这三种算法一般适合用于早期的批处理系统
,当然,FCFS算法也常结合其他的算法使用,在现在也扮演着很重要的角色。
在下一部分,我们会讲讲交互式系统
的调度算法。
王道操作系统考研笔记——2.1.9 调度算法相关推荐
- 王道操作系统考研笔记——2.1.8 调度算法的评价指标
文章目录 2.1.8 调度算法的评价指标 2.1.8.1 CPU利用率 2.1.8.2 系统吞吐量 2.1.8.3 周转时间 2.1.8.4 等待时间 2.1.8.5 响应时间 2.1.8.6 小结 ...
- 王道操作系统考研笔记——2.2.0 交互式系统调度算法
2.2.0 交互式系统调度算法 知识总览 2.2.0.1 时间片轮转 知识点 说明 英文名 RR,Round-Robin 算法思想 公平地.轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响 ...
- 王道操作系统考研笔记——2.1.6 处理机调度的概念和层次
文章目录 2.1.6 处理机调度的概念和层次 2.1.6.1 调度的基本概念 2.1.6.2 高级调度 2.1.6.3 中级调度 2.1.6.4 进程的挂起态和七状态模型 2.1.6.5 低级调度 2 ...
- 王道操作系统考研笔记——1.1.1 操作系统的概念、功能和目标
如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️ 文章目录 1.1.1 操作系统的概念.功能和目标 1.1.1.1 操作系统的概念 1.1.1.2 作为系统资源的管理者 1.1.1 ...
- 王道操作系统考研笔记——2.3.4 信号量机制
文章目录 2.3.4 信号量机制 2.3.4.1 引入 2.3.4.2 整型信号量 2.3.4.3 记录型信号量 2.3.4.4 小结 2.3.4 信号量机制 知识总览 在1965年,荷兰学着Dijk ...
- 王道操作系统考研笔记——2.3.3 进程互斥的硬件实现方法
文章目录 2.3.3 进程互斥的硬件实现方法 2.3.3.1 中断屏蔽方法 2.3.3.2 TestAndSet指令 2.3.3.3 Swap指令 2.3.3.4 小结 2.3.3 进程互斥的硬件实现 ...
- 王道操作系统考研笔记——2.1.7 进程调度的时机、切换与过程、方式
文章目录 2.1.7 进程调度的时机.切换与过程.方式 2.1.7.1 进程调度的时机 2.1.7.2 进程调度的方式 2.1.7.3 进程的切换和过程 2.1.7.4 小结 2.1.7 进程调度的时 ...
- 王道操作系统考研笔记——2.1.5 线程概念与多线程模型
文章目录 2.1.5 线程概念与多线程模型 2.1.5.1 线程的来源 2.1.5.2 线程机制带来的变化 2.1.5.3 线程的属性 2.1.5.4 线程的实现方式 2.1.5.5 多线程模型 2. ...
- 王道操作系统考研笔记——1.1.6 系统调用
如果这篇博客对您有用的话,可以给我点个赞吗,这对我很重要,谢谢!❤️ 文章目录 1.1.6 系统调用 1.1.6.1 系统调用和作用 1.1.6.2 系统调用和库函数 1.1.6.3 系统调用背后的过 ...
最新文章
- iptables防火墙设置实例
- PAT甲级1036 Boys vs Girls:[C++题解] 字符串处理
- Hyperledger Fabric Rest API服务开发教程【含源码】
- linux函数地址获取函数名,函数名/函数地址/函数指针
- clone是深拷贝还是浅拷贝_Python中的浅拷贝和深拷贝
- pymysql.err.InternalError: (1054, Unknown column '27D24A3B' in 'where clause')之错误解决
- python零基础8分钟基础入门
- Redis学习笔记01---配置文件
- mysql jdbc linux,linux mysql jdbc 权限问题_MySQL
- 基于C#的socket编程的TCP异步实现
- 使用升级版的 Bootstrap typeahead v1.2.2
- 网络创业者之家:互联网创业的优势与不足,你真到了解吗?
- 大数据和java就业前景_Java大数据应用领域及就业方向
- 《嵌入式 - 模块》RW007 WIFI模块联网与使用(一)
- php购物车页面如何做,HTML代码实现简易购物车
- Qt QWidget播放视频背景图片闪烁
- 超全,我梳理了最频繁使用的 70 个数据分析网址
- fatal: No url found for submodule path ‘xxx/xxx‘ in .gitmodules gitsubmodule子仓库无法拉取问题
- BZOJ 2303: [Apio2011]方格染色 题解
- Python编程从入门到实践最详细教程
热门文章
- spring mvc ajax 400解决
- SaltStack WEB UI Halite初体验
- 不被重视的基础,高效地使用ADO.net连接对象
- r语言处理数据集编码_在强调编码语言或工具之前,请学习这3个基本数据概念
- leetcode 451. 根据字符出现频率排序
- win10管理凌乱桌面_用于管理凌乱的开源存储库的命令行技巧
- github和pypi_如何将GitHub用作PyPi服务器
- 如何使用Webpack 4简化React.js开发过程
- spss23出现数据消失_改善23亿人口健康数据的可视化
- Django之静态文件配置