OS中常用的调度算法总结 (转)
http://blog.chinaunix.net/uid-25132162-id-361291.html
一、常见的批处理作业调度算法
1.先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。
2.短作业优先调度算法(SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。
3.最高响应比优先算法(HRN):FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。
4. 基于优先数调度算法(HPF):每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。
5.均衡调度算法,即多级队列调度算法
基本概念:
作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi)
作业平均周转时间(T)=周转时间/作业个数
作业带权周转时间(Wi)=周转时间/运行时间
响应比=(等待时间+运行时间)/运行时间
二、进程调度算法
1.先进先出算法(FIFO):按照进程进入就绪队列的先后次序来选择。即每当进入进程调度,总是把就绪队列的队首进程投入运行。
2. 时间片轮转算法(RR):分时系统的一种调度算法。轮转的基本思想是,将CPU的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。当时间片结束时,就强迫进程让出CPU,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。
3. 最高优先级算法(HPF):进程调度每次将处理机分配给具有最高优先级的就绪进程。最高优先级算法可与不同的CPU方式结合形成可抢占式最高优先级算法和不可抢占式最高优先级算法。
4. 多级队列反馈法:几种调度算法的结合形式多级队列方式。
三、空闲分区分配算法
1. 首先适应算法:当接到内存申请时,查找分区说明表,找到第一个满足申请长度的空闲区,将其分割并分配。此算法简单,可以快速做出分配决定。
2. 最佳适应算法:当接到内存申请时,查找分区说明表,找到第一个能满足申请长度的最小空闲区,将其进行分割并分配。此算法最节约空间,因为它尽量不分割到大的空闲区,其缺点是可能会形成很多很小的空闲分区,称为“碎片”。
3. 最坏适应算法:当接到内存申请时,查找分区说明表,找到能满足申请要求的最大的空闲区。该算法的优点是避免形成碎片,而缺点是分割了大的空闲区后,在遇到较大的程序申请内存时,无法满足的可能性较大。
四、虚拟页式存储管理中的页面置换算法
1.理想页面置换算法(OPT):这是一种理想的算法,在实际中不可能实现。该算法的思想是:发生缺页时,选择以后永不使用或在最长时间内不再被访问的内存页面予以淘汰。
2.先进先出页面置换算法(FIFO):选择最先进入内存的页面予以淘汰。
3. 最近最久未使用算法(LRU):选择在最近一段时间内最久没有使用过的页,把它淘汰。
4.最少使用算法(LFU):选择到当前时间为止被访问次数最少的页转换。
五、磁盘调度
1.先来先服务(FCFS):是按请求访问者的先后次序启动磁盘驱动器,而不考虑它们要访问的物理位置
2.最短寻道时间优先(SSTF):让离当前磁道最近的请求访问者启动磁盘驱动器,即是让查找时间最短的那个作业先执行,而不考虑请求访问者到来的先后次序,这样就克服了先来先服务调度算法中磁臂移动过大的问题
3.扫描算法(SCAN)或电梯调度算法:总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。如果沿磁臂的方向无请求访问时,就改变磁臂的移动方向。在这种调度方法下磁臂的移动类似于电梯的调度,所以它也称为电梯调度算法。
4.循环扫描算法(CSCAN):循环扫描调度算法是在扫描算法的基础上改进的。磁臂改为单项移动,由外向里。当前位置开始沿磁臂的移动方向去选择离当前磁臂最近的哪个柱面的访问者。如果沿磁臂的方向无请求访问时,再回到最外,访问柱面号最小的作业请求。
例题1:
计算
1.有三个作业:
作 业 |
到达时间 |
所需CPU时间 |
1 |
0.0 |
8 |
2 |
0.4 |
4 |
3 |
1.0 |
1 |
分别采用先来先服务和短作业优先作业调度算法。试问它们的平均周转时间各是什么?你是否还可以给出一种更好的调度算法,使其平均周转时间优于这两种调度算法?
解:(1)采用先来先服务作业调度算法时的实施过程如下。
作 业 |
到达时间 |
所需CPU时间 |
开始时间 |
完成时间 |
周转时间 |
1 |
0.0 |
8 |
0.0 |
8.0 |
8.0 |
2 |
0.4 |
4 |
8.0 |
12.0 |
11.6 |
3 |
1.0 |
1 |
12.0 |
13.0 |
12.0 |
这时,作业的调度顺序是1→2→3。其平均周转时间为:
(8 + 11.6 + 12)/ 3 = 10.53
(2)采用短作业优先作业调度算法时的实施过程如下。
作 业 |
到达时间 |
所需CPU时间 |
开始时间 |
完成时间 |
周转时间 |
1 |
0.0 |
8 |
0.0 |
8.0 |
8.0 |
3 |
1.0 |
1 |
8.0 |
9.0 |
8.0 |
2 |
0.4 |
4 |
9.0 |
13.0 |
12.6 |
这里要注意,在作业1运行完毕进行作业调度时,作业2和3都已经到达。由于是实行短作业优先作业调度算法,因此先调度作业3运行,最后调度作业2运行。所以,这时的作业调度顺序是1→3→2。其平均周转时间为:
(8 + 8 + 12.6)/ 3 = 9.53
(3)还可以有更好的作业调度算法,使其平均周转时间优于这两种调度算法。例如,如果知道在作业1后面会来两个短作业,那么作业1到达后,先不投入运行。而是等所有作业到齐后,再按照短作业优先作业调度算法进行调度,具体实施过程如下。
作 业 |
到达时间 |
所需CPU时间 |
开始时间 |
完成时间 |
周转时间 |
3 |
1.0 |
1 |
1.0 |
2.0 |
1.0 |
2 |
0.4 |
4 |
2.0 |
6.0 |
5.6 |
1 |
0.0 |
8 |
6.0 |
14.0 |
14.0 |
这时的作业调度顺序是3→2→1。其平均周转时间为:
(1 + 5.6 + 14)/ 3 = 6.87
例题2、
(1)最佳置换算法(OPT) :选择以后永不使用或在最长时间内不再被访问的内存页面予以淘汰。(2)先进先出置换算法(FIFO):选择最先进入内存的页面予以淘汰。 (3)最近最久未使用算法(LRU):选择在最近一段时间内最久没有使用过的页,把它淘汰。 (4)最少使用算法(LFU):选择到当前时间为止被访问次数最少的页转换。
【例4-8】在一个请求分页存储管理的系统中,一个程序的页面走向为6,0,1,2,0,3,0,4,2,3,分别采用最佳置换算法、先进先出置换算法、最近最久未使用算法,完成下列要求。设分配给该程序的存储块数M=3,每调进一个新页就发生一次缺页中断。
时刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
访问顺序 |
6 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
M=3 |
||||||||||
f |
OPT
时刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
访问顺序 |
6 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
M=3 |
6 |
6 |
6 |
2 |
2 |
2 |
2 |
2 |
2 |
2 |
0 |
0 |
0 |
0 |
0 |
0 |
4 |
4 |
4 |
||
1 |
1 |
1 |
3 |
3 |
3 |
3 |
3 |
|||
f |
1 |
2 |
3 |
4 |
5 |
6 |
FIFO
时刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
访问顺序 |
6 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
M=3 |
6 |
6 |
6 |
2 |
2 |
2 |
2 |
4 |
4 |
4 |
0 |
0 |
0 |
0 |
3 |
3 |
3 |
2 |
2 |
||
1 |
1 |
1 |
1 |
0 |
0 |
0 |
3 |
|||
f |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
LRU
时刻 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
访问顺序 |
6 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
M=3 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
3 |
||
0 |
0 |
1 |
2 |
0 |
3 |
0 |
4 |
2 |
||
6 |
6 |
6 |
0 |
1 |
2 |
2 |
3 |
0 |
4 |
|
f |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
OS中常用的调度算法总结 (转)的更多相关文章
- OS中处理机调度模型和调度算法
OS中处理机调度模型和调度算法 调度层次 1.1. 高级调度(长程调度,作业调度) 功能:依据某种算法.把在外存队列上处于后备队列的那些作业调入内存.以作业为操做对象. 作业:比程序更为广泛的概念,不 ...
- java中常用的工具类(三)
继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类 ...
- iOS - Mac OS X 常用快捷键
Mac OS X 常用快捷键 1)快捷键图标: Escape 为 esc 键 无 Eject 键时用电源键代替 Space Bar 为空格键 2)基本快捷键: command + x 剪切文字 com ...
- 【转载】Python编程中常用的12种基础知识总结
Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时间对象操作,命令行参数解析(getopt),print 格式化输出,进 ...
- Python编程中常用的12种基础知识总结
原地址:http://blog.jobbole.com/48541/ Python编程中常用的12种基础知识总结:正则表达式替换,遍历目录方法,列表按列排序.去重,字典排序,字典.列表.字符串互转,时 ...
- 工作中常用Linux命令--服务器运维
工作中常用Linux命令--服务器运维 lsof查看端口使用情况 lsof -i:8080更多lsof命令使用说明:http://www.cnblogs.com/peida/archive/2013/ ...
- Django - 日志工作中常用配置
工作中常用配置 # 日志配置 BASE_LOG_DIR = os.path.join(BASE_DIR, "log") LOGGING = { 'version': 1, # 保留 ...
- Android开发中常用Dialog(普通弹窗&时间选择器&日历选择器)
引言 开发中,我们会有很多地方使用 Dialog 来展示一些提示信息或设置信息.如:用户提示.进度展示.时间设置.日期设置等. 下面我和大家一些学习下Android中常用的几种Dialog吧~ * 首 ...
- 简单了解Spring中常用工具类_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 文件资源操作 Spring 定义了一个 org.springframework.core.io.Resource 接口, ...
随机推荐
- 数据结构之hash表
哈希表是种数据结构,它可以提供快速的插入操作和查找操作.hash定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值的方法,称为散列法,也叫哈希法.由于通过更短的哈希值比用原始值 ...
- WPF仿360卫士9.0界面设计
Chrome插件——一键保存网页为PDF1.0 http://blog.csdn.net/bdstjk/article/details/9208313 仿照网上的一个代码写的,地址找不到了. 将窗体, ...
- HDU 4287 Intelligent IME hash
Intelligent IME Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- 如何用C#语言构造蜘蛛程序
"蜘蛛"(Spider)是Internet上一种很有用的程序,搜索引擎利用蜘蛛程序将Web页面收集到数据库,企业利用蜘蛛程序监视竞争对手的网站并跟踪变动,个人用户用蜘蛛程序下载We ...
- 关于android 图像格式问题
这算是篇总结吧.6月份开始做的一个android上的ar项目结束了.我做的部分是二维码识别和图像识别的预处理.这个项目虽然很累,但是让我学到了很多东西,特别是严格的编码规则,和java代码的效率优化, ...
- 深入理解JavaScript 模块模式
http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html 模块模式是JavaScript一种常用的编码模式.这是一般的 ...
- Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)
这节我们来学习Cocos2d-x的最后一节.怎样处理重力感应事件.移植到Android后加入再按一次返回键退出游戏等.我这里用的Android.IOS不会也没设备呃 效果图不好弄,由于是要移植到真机上 ...
- UIButton设置了UIControlStateSelected和UIControlStateHighlighted状态的图片点击会闪烁的解决方案
[btn setBackgroundImage:img1 forState:UIControlStateSelected|UIControlStateHighlighted]; [btn setIma ...
- [原创]SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT 'OpenRowset/OpenDatasource' 的访问
TSQL查询Excel数据使用openrowset通常会报如下错误: 消息 ,级别 ,状态 ,第 行 SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 ...
- qobject_cast用法
函数原型: T qobject_cast ( QObject * object ) 本方法返回object向下的转型T,如果转型不成功则返回0,如果传入的object本身就是0则返回0. 在使用时有两 ...