多级反馈队列算法补充
http://pages.cs.wisc.edu/~remzi/OSTEP/cpu-sched-mlfq.pdf
本文是多级反馈队列(multi-level feedback queue,MLFQ)算法的一些小补充(两个缺陷与修改方法),参考了上面链接。因为自己用中文没有搜到想要的内容所以写一下博客。
这里的原始的MLFQ的规则如下:
- 如果两个任务AB,优先级(A)>优先级(B),则运行A
- 如果两个任务AB,优先级(A)=优先级(B),则使用时间片轮转算法运行A、B
- 新任务获得最高的优先级
- 如果某任务在某一优先级运行一个时间片后仍未结束,则下调一个优先级;如果某任务在一个时间片未完成前挂起,则优先级不变
问题有二:
- 如果系统中以一个较高频率产生短时的任务,依据规则,一个需要较长时间运行的任务会被调到低优先级队列并在之后得不到cpu资源。
- 如果一个程序被巧妙地编程,使得它可以在一个时间片完成前把自己挂起一下并很快唤醒,则可以一直呆在高优先级队列,占有过多资源。