操作系统学习(二):浅析多级反馈队列MLFQ

article/2025/8/15 13:57:56

目录

0、引言

1、多级反馈队列(MLFQ)的基本规则

2、MLFQ的规则具体说明

3、MLFQ调优及其他问题

4、总结


0、引言

        在上篇文章操作系统学习(一):浅析操作系统进程调度算法中讲到,在一个通用的操作系统中,操作系统通常对每个作业的长度知之甚少。因此,我们如何建立一个没有这种先验知识的 SJF/STCF?更进一步,我们如何能够将已经看到的一些想法与 RR 调度程序结合起来,以便响应时间也变得很好?没有工作长度的先验(priori)知识,如何设计一个能同时减少响应时间和周转时间的调度程序?

        多级反馈队列是用历史经验预测未来的一个典型的例子,操作系统中有很多地方采用了这种技术。

1、多级反馈队列(MLFQ)的基本规则

  1. 如果A的优先级 > B的优先级,运行A(不运行B)
  2. 如果A的优先级 = B的优先级,轮转运行A和B
  3. 工作进入系统时,放在最高优先级(最上层队列)
  4. 一旦工作用完了其在某一层中的时间配额(无论中间主动放弃了多少次CPU),就降低其优先级(移入低一级队列)
  5. 经过一段时间S,就将系统中所有工作重新加入最高优先级队列

        你可能还不明白这些规则是什么意思,不要紧,我们一步一步来看。

2、MLFQ的规则具体说明

        MLFQ 中有许多独立的队列(queue),每个队列有不同的优先级(priority level)。任何时刻,一个工作只能存在于一个队列中。MLFQ 总是优先执行较高优先级的工作(即在较高级队列中的工作)。

        当然,每个队列中可能会有多个工作,因此具有同样的优先级。在这种情况下,我们就对这些工作采用轮转调度。

        因此,MLFQ 调度策略的关键在于如何设置优先级。MLFQ 没有为每个工作指定不变的优先顺序,而是根据观察到的行为调整它的优先级。例如,如果一个工作不断放弃CPU 去等待键盘输入,这是交互型进程的可能行为,MLFQ 因此会让它保持高优先级。相反,如果一个工作长时间地占用 CPU,MLFQ 会降低其优先级。通过这种方式,MLFQ 在进程运行过程中学习其行为,从而利用工作的历史来预测它未来的行为。

        由此我们得到了 MLFQ 的两条基本规则:

                规则 1:如果 A 的优先级 > B 的优先级,运行 A(不运行 B)

                规则 2:如果 A 的优先级 = B 的优先级,轮转运行A 和 B

        而当工作刚刚来到时,我们并不能判断它是计算密集型工作还是交互型工作,因此,我们得到一个规则:

                规则 3:将刚进入系统时的工作放入最上层

        当工作用完一个时间片后,降低其优先级,移入下一个队列(说明计算比较密集);而当工作主动放弃CPU时,优先级不变(可能是交互型工作)。其实可以总结一下:当来一个工作时,我们默认他是短工作,并赋予最高优先级。如果确实是短工作,则很快会执行完毕;如果不是短工作,就会被慢慢移入低优先级队列。其实在这里MLFQ近似于SJF。

        在这里会有两个问题:一是如果交互操作太频繁了,会使长工作永远无法获得CPU(饿死),并且一个工作可能不是一直是计算密集型,它也可能需要交互;二是黑客可以通过一些手段进行攻击:比如在时间片即将用完的时候,调用一个I/O操作,比如访问一个无关的文件,从而主动放弃CPU,这样就可以保持在高优先级,操作得当的话,几乎可以独占CPU。

        解决问题一的方式可以提炼出一个规则:

                规则 5:经过一段时间S后,将所有工作都加入到最高优先级

        这样的话,计算型的工作也可以以轮转的方式和其他工作共享CPU(因为他们在同一优先级)。同时,如果一个工作从计算密集型变成了交互型,当所有工作都加入到最高优先级时,这样的工作也可以获得CPU。

        咱们再来解决问题二,这里的痛点是工作在时间片以内释放 CPU时,就保留它的优先级。那么解决办法就是让CPU为每个工作分配的时间比例尽量“公平”,也就是说,调度程序应该记录一个进程在某一层中消耗的总时间,而不是在调度时重新计时。只要进程用完了自己的配额,就将它降到低一优先级的队列中去。不论它是一次用完的,还是拆成很多次用完。那么我们可以总结一下这个规则:

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

        这样,不论进程的 I/O 行为如何,都会慢慢地降低优先级,因而无法获得超过公平的 CPU 时间比例。

3、MLFQ调优及其他问题

        关于 MLFQ 调度算法还有一些问题。其中一个大问题是如何配置一个调度程序,例如,配置多少队列?每一层队列的时间片配置多大?为了避免饥饿问题以及进程行为改变,应该多久提升一次进程的优先级?这些问题都没有显而易见的答案,因此只有利用对工作负载的经验,以及后续对调度程序的调优,才会导致令人满意的平衡。

        例如,大多数的 MLFQ 变体都支持不同队列可变的时间片长度。高优先级队列通常只有较短的时间片(比如 10ms 或者更少),因而这一层的交互工作可以更快地切换。

4、总结

        MLFQ 有趣的原因是:它不需要对工作的运行方式有先验知识,而是通过观察工作的运行来给出对应的优先级。通过这种方式,MLFQ 可以同时满足各种工作的需求:对于短时间运行的交互型工作,获得类似于 SJF/STCF 的很好的全局性能,同时对长时间运行的CPU 密集型负载也可以公平地、不断地稳步向前。


http://chatgpt.dhexx.cn/article/8Uyv1lQK.shtml

相关文章

多级反馈队列调度算法(附Python3实现代码)

一、多级反馈队列调度算法 多级反馈队列调度算法是进程调度的一种算法,该调度算法可以不用事先知道各种进程所需的执行时间,还可以较好的满足各种类型进程的需要,是目前共认的一种较好的进程调度算法。 那你可能马上就要问了,多…

调度:多级反馈队列

多级反馈队列(Multi-level Feedback Queue, MLFQ)是有Corbato在1962年提出的,用于兼容时分共享系统。现在其经过多年的优化,已经被应用于很多现代操作系统中。多级反馈队列是为了解决两方面问题。一:优化周转时间。在之…

多级队列调度和多级反馈队列调度算法的实现

多级队列调度算法 操作系统实验导航 实验一:银行家算法 https://blog.csdn.net/weixin_46291251/article/details/115384510 实验二:多级队列调度和多级反馈队列调度算法 https://blog.csdn.net/weixin_46291251/article/details/115530582 实验三&…

多级反馈队列调度算法模拟实现

实验一 多级反馈队列调度算法 一. 主要实现方法和代码介绍 ​ 1.编写进程类,其只包含所需的运行时间和进程编号两个属性,还有一个运行方法,此方法就是将所需的运行时间属性减去.传入的运行时间. ​ 2.创建进程函数:创建maxp个进程,(应该不超过10,在此创建九个,即暂时不进行进…

计操实验 多级反馈队列C语言

计操实验 多级反馈队列C语言 需求: 1.队列4级,每一级的队列长度均为10;第一级的时间片为T,第二级的时间片为2T,第三级的时间片为4T,第四级的时间片为8T;(T的大小自己定) …

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

随着计算机的技术逐渐步入家用后,新的调度指标接踵而来,周转时间已经不能满足人们日常工作的需求,更多时候人们更希望计算机能有更好的交互性,使其能更快地去响应任务,由此针对优化响应时间的调度策略也遍地开花&#…

多级反馈队列调度算法(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。本篇是对逻辑回归的学习总结,以及…