多级反馈队列算法补充

http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched-mlfq.pdf

本文是多级反馈队列(multi-level feedback queue,MLFQ)算法的一些小补充(两个缺陷与修改方法),参考了上面链接。因为自己用中文没有搜到想要的内容所以写一下博客。

这里的原始的MLFQ的规则如下:

  1. 如果两个任务AB,优先级(A)>优先级(B),则运行A
  2. 如果两个任务AB,优先级(A)=优先级(B),则使用时间片轮转算法运行A、B
  3. 新任务获得最高的优先级
  4. 如果某任务在某一优先级运行一个时间片后仍未结束,则下调一个优先级;如果某任务在一个时间片未完成前挂起,则优先级不变

问题有二:

  1. 如果系统中以一个较高频率产生短时的任务,依据规则,一个需要较长时间运行的任务会被调到低优先级队列并在之后得不到cpu资源。
  2. 如果一个程序被巧妙地编程,使得它可以在一个时间片完成前把自己挂起一下并很快唤醒,则可以一直呆在高优先级队列,占有过多资源。

图全部来自文章顶链接(不知道这样算不算侵权了...)分别对应一种问题和一种解决方案

针对问题一,解决方案为 Priority Boost 优先度提升,具体思想是每隔一段时间,将所有任务都放到优先度最高的队列中去,具体效果可以见上图。

针对问题二,解决方案为 Gaming Tolerance  对策容忍,具体思想是记忆某一个任务的历史记录,也就是说,记录一个任务在一段时间内总的运行时间,达到一个时间片便下调优先级,而不需要它连续运行一个时间片再下调优先级。

————

算原创呢还是翻译呢?

猜你喜欢

转载自blog.csdn.net/csdn_yi_e/article/details/82190818
今日推荐