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

本文详细介绍了三种进程调度算法:时间片轮转调度(RR)、优先级调度(HPF)和多级反馈队列调度(MFQ)。通过实例分析了每种算法的工作原理、时间片大小的影响以及优缺点。RR算法公平但进程切换开销大,HPF能区分任务优先级但可能导致低优先级进程饥饿,MFQ结合了RR和HPF,适应不同类型的作业需求,但同样存在饥饿问题。
摘要由CSDN通过智能技术生成

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

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

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

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

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

在这里插入图片描述

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

进程到达时间运行时间
P 1 P_{1} P105
P 2 P_{2} P224
P 3 P_{3} P341
P 4 P_{4} P456

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

  • 在0时刻, P 1 ( 5 ) P_{1}(5) P1(5) P 1 P_{1} P1到达, P 1 P_{1} P1上处理机运行一个时间片
    在这里插入图片描述

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

  • 此时 P 2 P_{2} P2处于就绪队列队头,因此它上处理机
    在这里插入图片描述

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

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

  • 在6时刻, P 3 ( 1 ) P_{3}(1) P3(1) P 2 ( 2 ) P_{2}(2) P2(2) P 4 ( 6 ) P_{4}(6) P4(6) P 1 ( 1 ) P_{1}(1) P1(1) P 1 P_{1} P1的时间片用完,下处理机,重新放回队尾,然后 P 3 P_{3} P3开始运行
    在这里插入图片描述

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

  • 在9时刻, P 4 ( 6 ) P_{4}(6) P4(6) P 1 ( 1 ) P_{1}(1) P1(1) P 2 P_{2} P2时间片用完,而恰好 P 2 P_{2} P2也已经结束,此时 P 4 P_{4} P4上处理机
    在这里插入图片描述

  • 在11时刻, P 1 ( 1 ) P_{1}(1) P1(1) P 4 ( 4 ) P_{4}(4) P4(4) P 1 P_{1} P1时间片用完,放回队尾,P1上处理机
    在这里插入图片描述

  • 在12时刻, P 4 ( 4 ) P_{4}(4) P4(4) P 1 P_{1} P1运行完毕主动放弃处理机, P 4 P_{4} P4上处理机
    在这里插入图片描述

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

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

在这里插入图片描述

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

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

在这里插入图片描述

时间片大小的影响

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

优缺点

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

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

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

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

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

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

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

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

  • 一般来说,优先数越大,优先级越高
进程到达时间运行时间优先数
P 1 P_{1} P1071
P 2 P_{2} P2242
P 3 P_{3} P3413
P 4 P_{4} P4542

采用非抢占式优先级调度算法,意味着只有进程主动放弃处理机时才发生调度,因此其过程也显而易见
在这里插入图片描述
采用抢占式优先级调度算法,除了进程主动放弃处理机时会发生调度之外,当新进程到达时(就绪队列改变)也要考虑是否会发生调度,其变化过程如下

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

在这里插入图片描述

进程优先级的设置原则

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

优缺点

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

是否会导致饥饿:会

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

多级反馈队列调度算法(MFQ):MFQ算法其实是RR算法和HPF算法的综合和发展

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

算法具体规则

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

在这里插入图片描述

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

进程到达时间运行时间
P 1 P_{1} P108
P 2 P_{2} P214
P 3 P_{3} P351

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

整个变化过程如下

  • P 1 P_{1} P1到达,进入第1级队列,按FCFS算法分配时间片
    在这里插入图片描述

  • 第1级队列其时间片只有1,因此1个时刻后, P 1 P_{1} P1时间片用完。但是其剩余时间还有7,还未运行完毕,所以会进入第2级队列
    在这里插入图片描述

  • 同时在1时刻, P 2 P_{2} P2到达并进入第1级队列,对于 P 1 P_{1} P1来说,它处在第2级队列,由于此时第1级队列不为空,所以它不会被调度,此时先调度第1级队列中的 P 2 P_{2} P2
    在这里插入图片描述

  • P 2 P_{2} P2的一个时间片用完之后继续放到第2级队列
    在这里插入图片描述

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

  • P 1 P_{1} P1时间片到后还没有完成运行,因此会被放入第3级队列
    在这里插入图片描述

  • 接着 P 2 P_{2} P2被调度
    在这里插入图片描述

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

  • P 3 P_{3} P3运行1个时间片后结束运行
    在这里插入图片描述

  • 然后 P 2 P_{2} P2继续被调度,其剩余时间为2,所以正好运行2个时间片后结束运行
    在这里插入图片描述

  • 此时第1级、第2级队列为空,因此处在第3级队列 P 1 P_{1} P1此时可以被调度,因此分配4个时间片
    在这里插入图片描述

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

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

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

多级反馈队列的优点

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

是否会导致饥饿:会


总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐江湖

创作不易,感谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值