多级反馈队列

多级反馈队列

多级反馈队列(Multi-level Feedback Queue, MLFQ),与上个世纪70年代提出,主要应用于时分共享系统。主要解决两方面问题:一个是优化周转时间,一个是要给用户很好的交互体验。MLFQ中有很多独立的队列,每个队列有不同的优先级,任何时刻,一个任务只能存在于一个队列中。先引出MLFQ的两个基本规则

  • 规则1:如果A优先级 > B优先级,则运行 A

  • 规则2:如果A优先级 = B优先级,则轮转执行A和B。

MLFQ

还是引出一个问题,就是如果优先级都是不变的,这样不就相当于在计算机中出现了贵族阶级吗。但是如何改变优先级呢,由此引入以下几个规则来尝试调整优先级。

  • 规则3:工作进入系统时,优先级最高

  • 规则4a:工作用完整个时间片之后,降低优先级,到下一个队列

  • 规则4b:如果工作在其时间片内主动释放CPU,优先级不变。

两个工作:A 是一个长时间运行的 CPU 密集型工作,B 是一个运行时间很短的交互型工作。A执行一段时间之后B到达,结果如左图所示。比如说系统既有CPU密集型任务,又有IO密集型任务。IO密集型会在时间片用完之后放弃CPU,维护优先级不变,如右图所示。

交互型任务

上面看似很优秀的调度任务,其实还有问题,就是如果有太多的交互性任务,不断占用CPU,对于长工作则无法得到满足。我们可以尝试对优先级做一些改变。

如何提升优先级?

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

在最高优先级队列中,它会以轮转的方式,与其他高优先级工作分享 CPU,从而最终获得执行。如果一个 CPU 密集 型工作变成了交互型,当它优先级提升时,调度程序会正确对待它。假设这样一个场景,一个长工作与两个交互式工作竞争CPU,每50ms进行一次优先级提升。可以看到能很好的避免调度过程中的饥饿问题。

优先级提升

如何设置优先级提升间隔?

假设这样一个问题场景,就是进程在每一个时间片结束的时候主动申请释放CPU,按照规则4,则会报纸CPU优先级,从而几乎垄断CPU时间。这个规则显然不对,因此修改为下面规则。可以发现对于两个任务来说都能比较公平的共享CPU资源。

  • 规则4:一旦工作用完再某一层中的时间配额,不管是不是主动释放CPU资源,都会降低优先级。
设置优先级提升间隔

这里也有一个问题,就是如何设置队列大小呢,如何设置每一级时间片大小呢。也就是说如何更好的进行MLFQ性能调优,这里提出一个解决方案是,对于越高优先级队列,它的时间片越小,对于优先级越小的队列,它的时间片越大。如下图所示。


性能调优
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇主要谈谈多久反馈队列,Multi-Level Feed-back Queue(MLFQ)。MLFQ试图解决的问...
    Teech阅读 1,411评论 0 0
  • 规则1:A优先级 > B优先级,运行A不运行B 规则2:A优先级 = B优先级,轮转运行A和B 规则3:所有作业刚...
    Junjiewawa阅读 963评论 0 0
  • 前言 上篇文章介绍了OS虚拟化CPU的低层实现方法,这篇文章来介绍虚拟化CPU中的调度策略,即进程切换时到底应该换...
    WinterPrince阅读 659评论 0 0
  • 15.1处理机调度概念 CPU资源的时分复用 ■进程切换:CPU资源的当前占用者切换 保存当前进程在PCB中的执行...
    龟龟51阅读 935评论 0 0
  • iOS多线程的处理方式主要有四种:pthread / NSThread / GCD / NSOperation,其...
    木小易Ying阅读 590评论 0 1