【操作系统】轮转和多级反馈队列

article/2025/8/15 14:42:36

        随着计算机的技术逐渐步入家用后,新的调度指标接踵而来,周转时间已经不能满足人们日常工作的需求,更多时候人们更希望计算机能有更好的交互性,使其能更快地去响应任务,由此针对优化响应时间的调度策略也遍地开花,但俗话说鱼和熊掌不可兼得,我们并不能要求周转时间好的同时也要求响应时间好,只能择环境而行。

        如果仅仅是想要优化响应时间,轮转算法(Round-Robin,俗称RR)是个不错的选择。

一.轮转算法

        轮转算法的思想很简单,就是在一段时间内,轮流将运行队列中的任务走一遍,运行一个任务,然后切换到下一个任务,直至所有任务完成。“一段时间”也称之为“时间片(time slice)”,轮转算法也可称之为“时间切片(time-slicing)算法”,这个时间长度必须要是时钟中断周期的倍数,所以不能随意地去定时间片。

         我们可以举个例子,假设A、B、C三个任务同时到达,并且都需要运行5秒钟,那么根据轮转算法,将是以下情景:

         可以计算出轮转算法的平均响应时间为:(0+1+2)/3=1,类似地,如果使用最短任务优先算法(如果不知道是什么,可以参考我之前写过的一篇文章:【操作系统】调度策略的基本思想),那么响应时间则是:

    (0+5+10)/3=5,需要5秒钟的响应时间,远远高于轮转算法,当然,这是以优化响应时间为前提的,在周转时间面前,还得是SJF略胜一筹。像轮转这样的算法虽然降低了响应时间,但是周转时间很差,有没有一种算法可以优化周转时间的同时又降低响应时间呢?多级反馈队列(Multi-level Feedback Queue,俗称MLFQ)应该是个不错的选择。

二.多级反馈队列

(1)定义

      多级反馈队列(Multi-level Feedback Queue,俗称MLFQ有很多独立的队列,每个队列有不同的优先级。一个任务只能在一个队列中,而MLFQ总是优先执行优先级较高的工作,如果多个队列具有相同的优先级,则会采取轮转调度算法。这里就可以得到MLFQ的两个规则:

  • 规则一:如果任务A的优先级>任务B的优先级,则优先运行任务A。
  • 规则二:如果任务A的优先级=任务B的优先级,则轮转运行A和B。

(2)调整优先级

        那么不同任务之间的优先级是如何确定的呢?一个任务的优先级是否可以保持不变直到任务完成呢?多级反馈队列是通过观察任务的行为来及时调整它们的优先级的当一个任务进入系统时,将其放在最高优先级,随后进行观察,如一个任务频繁放弃CPU进行I/O交互,那么系统会认为这是交互性进程而让它保持高优先级,而当一个任务长期占用CPU时,则会降低其优先级。通过这种方式,MLFQ在任务运行中学习其行为,从而预测它未来的行为。

  • 规则三:任务进入系统时,放在最高优先级。
  • 规则四:任务用完整个时间片后,降低其优先级。
  • 规则五:如果工作在其时间片内主动释放CPU,则优先级不变。

    举个例子:假如当前只有一个任务在系统中,使用多级反馈队列调度程序,则会出现以下情况:

       任务首先进入最高优先级队列Q2,执行10ms(用完时间片)后降级到Q1队列,而后再次降级到最低优先级队列Q0。再复杂一点,当前又来了一个新任务,则会出现以下情况:

         旧任务(黑色)在最低优先级队列中运行(可能被调度程序识别为CPU密集型任务了),当T=100时一个新的任务过来了,先被加入到最高优先级队列中,当运行几个时间片后,降低优先级,新任务执行完毕后,继续完成旧任务(黑色)。难度升级,如有I/O交互的任务存在,则会出现以下情况:

       因为新任务每1ms便需要进行I/O,根据规则五(如果工作在其时间片内主动释放CPU,则优先级不变),它将长期保持高优先级,在新任务请求I/O时,CPU被空出,旧任务(黑色)将占用CPU,如此循环。

(3)饥俄问题

        至此,多级反馈队列的雏形基本完成,但是这个雏形还存在一个致命的问题:饥俄问题

  1. 当交互性任务过多,将导致CPU不断被占用,长任务将永远无法得到CPU,或者称那些优先级低的任务被饿死了。
  2. 如果一个任务每运行99%的时间片后就主动放弃一次CPU,那么根据规则五,将永远保持高优先级,几乎独占了CPU。

        为优化避免上面的问题,可以用一个新的思路去解决它:

  • 规则六:经过一段时间S,就将系统中所有工作重新加入最高优先级队列。

        以上规则一下子解决了两个问题,它优先保证了各个进程都不会被饿死,以下展示了长时间运行的任务和两个交互性短任务竞争CPU时的行为,分别用不采取优先级提升(左)和采取优先级提升(右)的方式对比:

       从图片中可以看出,左边没有提升优先级,长时间运行任务在两个短任务到达后被饿死。而右边则每50ms就主动提升一次优先级,因此保证了贝格任务都能有一些进展。

(4)重写规则

        即使拥有规则六的加持,只要规则四和规则五的保留优先级条件不变(只要任务在时间片期间主动释放CPU,则优先级不变),那么调度程序还是很容易被攻克。为了避免这种情况,我们需要重写规则四和规则五,并将它们合并成一条

  • 规则四:一旦工作用完了其在一层中的时间配额(无论中间主动放弃多少次CPU),就降低其优先级。

以下给出没有新规则四和有新规则四下的策略对比:

        由图可知,没有新规则四的加持下,进程可以在每个时间片结束前发起一次I/O操作,从而垄断了CPU时间,有了新规则四的加持后,不论进程的I/O行为如何,都会慢慢地降低优先级,从而无法获得超过公平地CPU时间比例。

(5)总结

        至此,我们总结得出了多级反馈队列的一个初版调度策略规则:

  • 规则一:如果任务A的优先级>任务B的优先级,则优先运行任务A。
  • 规则二:如果任务A的优先级=任务B的优先级,则轮转运行A和B。
  • 规则三:任务进入系统时,放在最高优先级。
  • 规则四:一旦工作用完了其在一层中的时间配额(无论中间主动放弃多少次CPU),就降低其优先级。
  • 规则五:经过一段时间S,就将系统中所有工作重新加入最高优先级队列。

        多级反馈队列有多级队列,并利用反馈信息决定某个任务的优先级,对于短时间运行的交互性任务,获得类似于SJF/STCF的很好的全局性能(如果不知道是什么,可以参考我之前写过的一篇文章:【操作系统】调度策略的基本思想),同时对长时间运行的CPU密集型任务也可以公平地、不断地稳步向前。


http://chatgpt.dhexx.cn/article/eeMtKriL.shtml

相关文章

多级反馈队列调度算法(c++)

如果对你有帮助,可以给卑微的博主留个赞、关注、收藏 (不是) (骗一下数据,说不定以后面试就过了,拜谢) 操作系统基本调度算法,多级反馈队列调度算法。在划分时间片的调度算法中,多级反馈队列算法兼顾提高系统吞吐…

多级反馈队列调度算法

实验目的: 在Linux下编程实现多级反馈队列调度算法,采用三级调度策略,所有进程先按到达顺序进入一级队列,按照时间片为2轮转一次,一个时间片内未完成的进程被依次移入二队列尾部。当一级队列中没有进程时,开…

多级反馈队列调度

多级反馈队列 ​ 多级反馈队列(Multi-level Feedback Queue, MLFQ),与上个世纪70年代提出,主要应用于时分共享系统。主要解决两方面问题:一个是优化周转时间,一个是要给用户很好的交互体验。ML…

多级反馈队列算法

步骤: 0时刻,P1到达就绪队列(时间片为4的)P1先执行2ms,P2到达还未到时间片,P1继续执行2ms后,时间片到达了,P1滑到下一个就绪队列(时间片为6的)此时&#xff…

linux多级反馈队列的实现,多级反馈队列调度算法详解

通常在使用多级队列调度算法时,进程进入系统时被永久地分配到某个队列。例如,如果前台和后台进程分别具有单独队列,那么进程并不从一个队列移到另一个队列,这是因为进程不会改变前台或后台的性质。这种设置的优点是调度开销低&…

对数线性模型

http://blog.csdn.net/pipisorry/article/details/52788947 特征和指示特征 对数线性模型log linear model 对数线性模型有:最大熵模型和逻辑斯谛回归。 [概率图模型原理与技术] [PGM:无向图模型:马尔可夫网 ] 皮皮blog 最大熵模型的一般形式…

广义线性模型(Generalized Linear Model)之三:Poisson回归

广义线性模型(Generalized Linear Model)之三:Poisson回归 一、泊松回归(Poisson regression)简介(一)泊松回归(二)计数数据(三)泊松分布1&#x…

MIT自然语言处理第五讲:最大熵和对数线性模型

MIT自然语言处理第五讲:最大熵和对数线性模型(第一部分) 自然语言处理:最大熵和对数线性模型 Natural Language Processing: Maximum Entropy and Log-linear Models 作者:Regina Barzilay(MIT,EECS Depar…

机器学习教程 之 线性模型:线性回归、对数几率回归、线性判别分析

常用的三个线性模型的原理及python实现——线性回归(Linear Regression)、对数几率回归(Logostic Regression)、线性判别分析(Linear Discriminant)。 这可能会是对线性模型介绍最全面的博客 文章目录 一、…

机器学习(二)线性模型——线性回归、对数几率回归、线性判别分析

一、线性回归 线性回归(linear regression:试图学得一个线性模型以尽可能准确地预测实值输出标记。 1.最简单的形式:输入属性的数且只有一个, 最小二乘法:基于均方差误差最小化来进行模型的求解,在线性回…

对数线性模型:逻辑斯谛回归和最大熵模型

http://blog.csdn.net/pipisorry/article/details/52788947 对数线性模型log linear model 对数线性模型有:最大熵模型和逻辑斯谛回归。 特征和指示特征 对数线性模型的一般形式 [概率图模型原理与技术] 某小皮 对数线性模型的不同形式 因子图 将因子转换到对…

从线性到非线性模型-对数线性模型

从线性到非线性模型 1、线性回归,岭回归,Lasso回归,局部加权线性回归 2、logistic回归,softmax回归,最大熵模型 3、广义线性模型 4、Fisher线性判别和线性感知机 5、三层神经网络 6、支持向量机 code: https://…

论文总结3 对数线性模型 罗盛

研究变量之间的相互关系、列联表、对应分析 目录 一、模型介绍 二、比较-对数线性模型&对应分析 1.相同&不同 2.相互关系 三、应用实例 1.模型确立 2.列因素&因子负荷 四、总结经验 一、模型介绍 列联表分析无法系统地评价变量间的联系,无法…

对数线性模型之一(逻辑回归), 广义线性模型学习总结

经典线性模型自变量的线性预测就是因变量的估计值。 广义线性模型:自变量的线性预测的函数是因变量的估计值。常见的广义线性模型有:probit模型、poisson模型、对数线性模型等等。对数线性模型里有:logistic regression、Maxinum entropy。本篇是对逻辑回归的学习总结,以及…

机器学习篇——对数线性模型

建议首先看cs229讲的广义线性模型、exponential family(指数分布族) 对数线性模型包括逻辑回归、最大熵模型和条件随机场等 1、模型 条件概率分布(对数线性模型、概率模型)、判别模型 逻辑回归: 概率分布可由广…

对数线性模型(Logistic回归算法)

1.Logistic分布: logistic分布定义:设X是连续随机变量,X服从logistic分布,即为X具有下列分布函数和密度函数: 其中,mu为位置参数,r>0为形状参数; logistic分布的分布函数F(x)的…

Log-Linear Models

一,简介 引入 对数线性模型被广泛应用于NLP中,对数线性模型的一个关键优点在于它的灵活性:它允许非常丰富的特征集合被用于模型中。常见的对数线性模型有Logistic回归、最大熵模型、MEMMs和CRFs等。 目的 1,Trigram LM Trigr…

Android getText(int resId)和getString(int resId)

Android提供多种获取资源文件方法&#xff0c;但是需要注意以下方法&#xff1a; CharSequence getText(int resId)&#xff1a;返回本地、样式化的字符。 String getString(int resId) &#xff1a;返回字符串 比如&#xff1a; String.xml文件中定义资源文件&#xff1a; <…

Resid

关于Resid服务器闪退问题&#xff0c;导致客户端&#xff1a;Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝无法连接解决方案。 前言&#xff1a;最近在整理计算机文档时发现过去学习过程中自己出现bug和解决办法&#xff0c;就整理一下发到个人博客…

redis05-Resid数据类型综合实践案例

Resid数据类型综合实践案例 业务场景 1.计数器 解决方案 设计计数器&#xff0c;记录调用次数&#xff0c;用于控制业务执行次数。以用户id作为key,使用此时作为value在调用前获取次数&#xff0c;判断是否超过限定次数&#xff0c;不超过次数的情况下&#xff0c;每次调用计…