文章目录

  • 一:时间片轮转调度算法(RR)
  • 二:优先级调度算法(HPF)
  • 三:多级反馈队列调度算法(MFQ)
  • 总结

进程调度算法也称为CPU调度算法,操作系统内存在着多种调度算法,有的调度算法适用于作业调度,有的调度算法适用于进程调度,有的两者都适用。常见的调度算法有(本节介绍适合于分时系统、交互式系统的调度算法):

  • 时间片轮转调度算法
  • 最高优先级调度算法
  • 多级反馈队列调度算法

一:时间片轮转调度算法(RR)

算法思想:公平地、轮流地为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。按照各进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(Quantum),若进程未在一个时间片内执行完毕,则剥夺处理机,然后将其放入就绪队列重新排队

  • 用于进程调度(因为只有作业放入内存建立了相应进程后,才能被分配处理机时间片)
  • 若进程未能在时间片内运行完毕,则会被强行剥夺,属于抢占式算法,由时钟装置发出时钟中断通知CPU时间片已到

比如,下面有4个进程P1P_{1}P1​、P2P_{2}P2​、P3P_{3}P3​和P4P_{4}P4​,他们到达就绪队列的到达时间和运行时间如下表所示,使用Pn(m)P_{n}(m)Pn​(m)表示当前进程的剩余运行时间为mmm,

进程 到达时间 运行时间
P1P_{1}P1​ 0 5
P2P_{2}P2​ 2 4
P3P_{3}P3​ 4 1
P4P_{4}P4​ 5 6

假设时间片大小为2,其变化过程如下

  • 在0时刻,P1(5)P_{1}(5)P1​(5)。P1P_{1}P1​到达,让P1P_{1}P1​上处理机运行一个时间片

  • 在2时刻,有P2(4)P_{2}(4)P2​(4),P1(3)P_{1}(3)P1​(3)。P2P_{2}P2​到达就绪队列,同时此时 P1P_{1}P1​的时间片用完,被剥夺处理机,重新放回就绪队列队尾 (需要注意这种情况中默认新到达的进程先进入就绪队列

  • 此时P2P_{2}P2​处于就绪队列队头,因此它上处理机

  • 在4时刻,P1(3)P_{1}(3)P1​(3),P3(1)P_{3}(1)P3​(1),P2(2)P_{2}(2)P2​(2)。P3P_{3}P3​到达就绪队列,P3P_{3}P3​插入到就绪队列队尾,而此时P2P_{2}P2​时间片也已经到了,因此P2P_{2}P2​下处理机插入到队尾。此时P1P_{1}P1​处于队头,因此P1P_{1}P1​处理机

  • 在5时刻,P3(1)P_{3}(1)P3​(1),P2(2)P_{2}(2)P2​(2),P4(6)P_{4}(6)P4​(6)。P4P_{4}P4​到达就绪队列,P4P_{4}P4​插入到就绪队列队尾。此时不进行调度,因为P1P_{1}P1​还处于运行态,它的时间片还没有用完

  • 在6时刻,P3(1)P_{3}(1)P3​(1),P2(2)P_{2}(2)P2​(2),P4(6)P_{4}(6)P4​(6),P1(1)P_{1}(1)P1​(1)。P1P_{1}P1​的时间片用完,下处理机,重新放回队尾,然后P3P_{3}P3​开始运行

  • 在7时刻,P2(2)P_{2}(2)P2​(2),P4(6)P_{4}(6)P4​(6),P1(1)P_{1}(1)P1​(1)。虽然P3P_{3}P3​的时间片还没用完,但是它已经结束了,所以P3P_{3}P3​主动放弃处理机,P2P_{2}P2​上处理机

  • 在9时刻,P4(6)P_{4}(6)P4​(6),P1(1)P_{1}(1)P1​(1)。P2P_{2}P2​时间片用完,而恰好P2P_{2}P2​也已经结束,此时P4P_{4}P4​上处理机

  • 在11时刻,P1(1)P_{1}(1)P1​(1),P4(4)P_{4}(4)P4​(4)。P1P_{1}P1​时间片用完,放回队尾,P1上处理机

  • 在12时刻,P4(4)P_{4}(4)P4​(4)。P1P_{1}P1​运行完毕主动放弃处理机,P4P_{4}P4​上处理机

  • 在14时刻,就绪队列为空,P4P_{4}P4​会继续再运行1个时间片

  • 在16时刻,所有进程运行完毕

假设时间片大小为5,其变化过程如下

  • 在0时刻,P1(5)P_{1}(5)P1​(5)。P1P_{1}P1​到达,让P1P_{1}P1​上处理机运行一个时间片
  • 在2时刻,P2(4)P_{2}(4)P2​(4)。P2P_{2}P2​到达,但是P1P_{1}P1​的时间片还未结束,暂不调度
  • 在4时刻,P2(4)P_{2}(4)P2​(4),P3(1)P_{3}(1)P3​(1)。P3P_{3}P3​到达,但是P1P_{1}P1​的时间片还未结束,暂不调度
  • 在5时刻,P2(4)P_{2}(4)P2​(4),P3(1)P_{3}(1)P3​(1),P4(6)P_{4}(6)P4​(6)。P4P_{4}P4​到达,同时P1P_{1}P1​运行结束,接着让P2P_{2}P2​上处理机
  • 在9时刻,P3(1)P_{3}(1)P3​(1),P4(6)P_{4}(6)P4​(6)。P4P_{4}P4​运行结束,主动放弃处理机发生调度。让P3P_{3}P3​上处理机
  • 在10时刻,P4(6)P_{4}(6)P4​(6)。P3P_{3}P3​运行结束,主动放弃处理机,发生调度。让P4P_{4}P4​上处理机
  • 在15时刻。P4P_{4}P4​时间片用光,且就绪队队列为空,故让P4P_{4}P4​继续下一个时间片
  • 在16时刻。所有进程运行结束

时间片大小的影响

  • 时间片太大:使得每个进程都可以在一个时间片内完成,此时RR算法就退化为了FCFS算法,并且会增大进程响应时间
  • 时间片太小:由于进程调度、切换是有时间代价的,因此如果时间片太小,会导致进程切换过于频繁,系统会花大量时间来处理进程切换

优缺点

  • 优点: 公平、响应快
  • 缺点: 由于高频率的进程切换,因此会有一定开销,且不能区分任务的紧急程度

是否会导致饥饿现象:不会

二:优先级调度算法(HPF)

随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度(优先级) 来决定处理顺序。进程的优先级可以被划分为

  • 静态优先级:创建进程的时候,就已经确定好了优先级,整个运行过程优先级都不会发生变化
  • 动态优先级:根据进程的动态变化调整优先级(比如当进程的运行时间增加则降低其优先级、进程等待时间增加则提高其优先级等等)

算法思想 :每个作业/进程都有各自的优先级,调度时选择优先级最高的作业/进程

  • 可用于作业调度、进程调度,甚至I/O调度
  • 抢占式(当就绪队列中出现优先级高的进程,当前进程被挂起,调度优先级高的进程)和非抢占(当就绪队列中出现优先级高的进程,运行完当前进程,再选择优先级高的进程)两种

比如,下面有4个进程P1P_{1}P1​、P2P_{2}P2​、P3P_{3}P3​和P4P_{4}P4​,他们到达就绪队列的到达时间、运行时间及进程优先数 ,如下表所示

  • 一般来说,优先数越大,优先级越高
进程 到达时间 运行时间 优先数
P1P_{1}P1​ 0 7 1
P2P_{2}P2​ 2 4 2
P3P_{3}P3​ 4 1 3
P4P_{4}P4​ 5 4 2

采用非抢占式优先级调度算法,意味着只有进程主动放弃处理机时才发生调度,因此其过程也显而易见

采用抢占式优先级调度算法,除了进程主动放弃处理机时会发生调度之外,当新进程到达时(就绪队列改变)也要考虑是否会发生调度,其变化过程如下

  • 在0时刻,P1P_{1}P1​到达,P1P_{1}P1​上处理机
  • 在2时刻,P2P_{2}P2​到达,使就绪队列发生改变,同时由于P2P_{2}P2​的优先级要高于P1P_{1}P1​,因此P1P_{1}P1​被剥夺回到就绪队列,P2P_{2}P2​上处理机
  • 在4时刻,P3P_{3}P3​到达,其优先级高于P2P_{2}P2​,因此P2P_{2}P2​回到就绪队列,P3P_{3}P3​上处理机
  • 在5时刻,P3P_{3}P3​结束运行,主动放弃处理机,同时恰好P4P_{4}P4​到达,这里P2P_{2}P2​和P4P_{4}P4​优先级是一样的,但是P2P_{2}P2​要比P4P_{4}P4​更早进入就绪队列,所以P2P_{2}P2​上处理机
  • 在7时刻,P2P_{2}P2​完成,P4P_{4}P4​上处理机
  • 在11时刻,P4P_{4}P4​完成,P1P_{1}P1​上处理机
  • 在16时刻,所有进程结束运行

进程优先级的设置原则

  • 系统进程大于用户进程:系统进程作为系统的管理者,理应拥有更高的优先级
  • 交互型进程大于非交互型进程(前台进程大于后台进程):类比使用手机时的前台应用程序和后台应用程序
  • I/O密集型进程大于计算密集型进程:I/O密集型进程是指那些会频繁使用I/O设备的进程;计算密集型进程是指那些频繁使用CPU的进程。如果将I/O密集型进程设置得更高,就更有可能让I/O设备尽早开始投入工作,进而提升系统的整体效率

优缺点

  • 优点: 使用优先级区分紧急程度、重要程度、适用于实时操作系统,可以灵活调整对各种作业/进程的偏好程度
  • 缺点: 有可能导致低优先级进程得不到运行

是否会导致饥饿:会

三:多级反馈队列调度算法(MFQ)

算法思想:MFQ算法其实是RR算法和HPF算法的综合和发展

  • 多级表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短
  • 反馈表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列

算法具体规则

  • 设置了多个队列,赋予每个队列不同的优先级,每个队列优先级从高到低,同时优先级越高时间片越短
  • 新的进程会被放入到第一级队列的末尾,按FCFS算法的原则排队等待被调度,如果在第一级队列规定的时间片内没有运行完毕,则将其转入第二级队列的末尾,依次类推,直至完成
  • 当较高优先级的队列为空时,才调度较低优先级队列中的进程。如果进程运行时,有新的进程进入较高优先级队列时,则停止当前运行的进程并将其移入原队列的末尾,接着让较高优先级的进程运行

比如,下面有3个进程P1P_{1}P1​、P2P_{2}P2​和P3P_{3}P3​,他们到达就绪队列的到达时间和运行时间如下表所示

进程 到达时间 运行时间
P1P_{1}P1​ 0 8
P2P_{2}P2​ 1 4
P3P_{3}P3​ 5 1

根据“算法规则”中的叙述,建立优先级队列,其优先级和时间片分配如下

整个变化过程如下

  • P1P_{1}P1​到达,进入第1级队列,按FCFS算法分配时间片

  • 第1级队列其时间片只有1,因此1个时刻后,P1P_{1}P1​时间片用完。但是其剩余时间还有7,还未运行完毕,所以会进入第2级队列

  • 同时在1时刻,P2P_{2}P2​到达并进入第1级队列,对于P1P_{1}P1​来说,它处在第2级队列,由于此时第1级队列不为空,所以它不会被调度,此时先调度第1级队列中的P2P_{2}P2​

  • P2P_{2}P2​的一个时间片用完之后继续放到第2级队列

  • 在2时刻没有新的进程到来,同时对于 P1P_{1}P1​和 P2P_{2}P2​来说相对于它们所在的更高一级的优先级队列,也就是第1级队列是空的,因此为它们分配时间片,按照FCFS原则, P1P_{1}P1​被调度,时间片为2

  • P1P_{1}P1​时间片到后还没有完成运行,因此会被放入第3级队列

  • 接着 P2P_{2}P2​被调度

  • 在 P2P_{2}P2​运行1个时间片后,也即在5时刻 P3P_{3}P3​到达并进入第1级队列,此时更高优先级队列中有进程存在,所以处在处理机上的 P2P_{2}P2​会被剥夺下来,仍然回到其所在的队列队尾,接着让 P3P_{3}P3​上处理机

  • P3P_{3}P3​运行1个时间片后结束运行

  • 然后P2P_{2}P2​继续被调度,其剩余时间为2,所以正好运行2个时间片后结束运行

  • 此时第1级、第2级队列为空,因此处在第3级队列P1P_{1}P1​此时可以被调度,因此分配4个时间片

  • 4个时间片结束之后,P1P_{1}P1​剩余时间还有1,而此时它已经处在了最下级的队列了,因此重新放回最下级队列队尾即可,然后结束运行

从以上的叙述中大家可以感受到:

  • 短作业可能可以在第一级队列很快地被处理完
  • 长作业如果第一级处理不完,可以移入下一级等待。等待时间虽然变长了,但是运行时间也会变长

多级反馈队列的优点

  • 终端型作业用户:短作业优先(例如命令行输入命令)
  • 短批处理作业用户:周转时间较短
  • 长批处理作业用户:经过前面几个队列得到部分执行,不会长期得不到处理

是否会导致饥饿:会


总结

(王道408考研操作系统)第二章进程管理-第二节4:调度算法详解2(RR、HPF和MFQ)相关推荐

  1. (王道408考研操作系统)第一章计算机系统概述-第一节4:中断和异常

    注意!!! 本节内容和<计算机组成原理>中的中断有重合,如果需要详细了解的话可以点击链接跳转:(计算机组成原理)第七章输入和输出系统-第四节2:I/O方式之程序中断方式 为了内容完整,部分 ...

  2. (王道408考研操作系统)第一章计算机系统概述-第一节5:系统调用

    文章目录 一:什么是系统调用 二:系统调用分类 三:系统调用和核心态用户态的关系 四:系统调用与库函数的关系 五:操作系统的运行环境 前面说过,操作系统接口分为命令接口和程序接口,其中命令接口允许用户 ...

  3. (王道408考研操作系统)第一章计算机系统概述-第一节3:操作系统的运行机制与体系结构

    文章目录 一:两种指令.两种处理器状态.两种程序 二:操作系统的内核 (1)内核 A:时钟管理 B:中断机制 C:原语 D:系统控制的数据结构及处理 (2)大内核和微内核 一:两种指令.两种处理器状态 ...

  4. (王道408考研操作系统)第一章计算机系统概述-第一节2:操作系统的发展史

    文章目录 一:手工操作阶段(此阶段无操作系统) 二:批处理阶段(操作系统开始出现) (1)单道批处理系统 (2)多道批处理系统 三:分时系统 四:实时系统 五:网络操作系统和分布式计算机系统(了解) ...

  5. (王道408考研操作系统)第一章计算机系统概述-第一节1:操作系统基本概念以及目标和功能

    文章目录 一:操作系统的概念 二:操作系统的目标和功能 (1)作为计算机系统资源的管理者 (2)作为用户和计算机硬件系统的接口 A:命令接口 B:程序接口 (3)需要实现对硬件机器的扩展 三:操作系统 ...

  6. (王道408考研操作系统)第二章进程管理-第一节4:进程通信(配合Linux)

    文章目录 一:什么是进程通信 二:如何实现进程间通信及其分类 三:通信方式1-共享存储(共享内存) (1)课本基础内容 (2)补充-Linux中的进程通信 四:通信方式2-管道 (1)管道是什么 (2 ...

  7. (王道408考研操作系统)第二章进程管理-第一节3:进程控制(配合Linux讲解)

    文章目录 一:如何实现进程控制 二:进程控制原语 (1)进程创建 A:概述 B:补充-Linux中的创建进程操作 ①:fork() ②:fork()相关问题 (2)进程终止 A:概述 B:补充-僵尸进 ...

  8. (王道408考研操作系统)第二章进程管理-第二节6、7:调度算法详解2(RR、HPF和MFQ)

    文章目录 一:时间片轮转调度算法(RR) 二:优先级调度算法(HPF) 三:多级反馈队列调度算法(MFQ) 总结 进程调度算法也称为CPU调度算法,操作系统内存在着多种调度算法,有的调度算法适用于作业 ...

  9. (王道408考研操作系统)第二章进程管理-第一节1:进程、PCB及其特征

    注意: 本章内容涉及进程,测试环境选在Linux下,因为我们可以阅读其源代码,有助于理解 Linux中的命令不会涉及太专业,需要说明的地方都会说明,读者只需关注其功能,无需过于操心原理 有兴趣的读者可 ...

最新文章

  1. Activiti——管理流程定义(四)
  2. HighNewTech:70后、80后、90后、95后职场人大数据调查(有趣的五个结论)——源于猎聘网
  3. linux的memmap函数_linux /proc下的statm、maps、memmap 内存信息文件分析
  4. 牛客 - 红蓝图(克鲁斯卡尔重构树的dfs序上建主席树)
  5. 微信小程序实战–集阅读与电影于一体的小程序项目(八)
  6. org.apache.ibatis.binding.BindingException: Type interface com.kuang.dao.UserDao is not known to the
  7. 巴菲特投资50年的5个心得
  8. Delphi 之 定时器 (TTimer组件)
  9. delphi 2010 mysql_DELPHI 10.2 TOKYO搭建LINUX MYSQL开发环境
  10. 数学与计算机科学奖王小云,2019 数学与计算机科学奖 获奖人 —— 王小云 - 未来科学大奖...
  11. IntelliJ IDEA+jetty部署Eova
  12. 浅谈各种常见的芯片封装技术DIP/SOP/QFP/PGA/BGA
  13. 关于使用tess4j-OCR识别图片中文教程,亲测可用,不报错
  14. 5月6号基金分析的那篇文章,时隔两个月收益如何?
  15. 开调查公司创业,他的公司营业额达80万
  16. 添加蒙版及原页面不滚动
  17. 计算机高考计划,职中高三计算机高考复习计划
  18. TortoiseGit 如何使用 cherry-pick
  19. android应用统计获取api,APICloud
  20. sizeof(long)

热门文章

  1. html 从左往右消失,从左到右语言写成从右到左html
  2. 无监督学习 | PCA 主成分分析之客户分类
  3. Screenium 3 for Mac - 强大的屏幕录制编辑器
  4. Mac如何快速导出保存Pages文档里的图片
  5. HTML中用弹性布局设置位置,HTML的flex弹性布局
  6. 洛谷 深基 第1部分 语言入门 第7章 函数与结构体
  7. 优酷 米兔机器人_小米(MI)米兔故事机智能故事机机器人智能机器人儿童早教机...
  8. RTX5 | 互斥量01 - 互斥量的使用
  9. {dede:global.cfg_templets_skin/}路径出错
  10. 简述arm linux内核启动流程,Linux内核启动过程和Bootloader(总述)