以下内容算对书内容的总结,有任何问题和见解,欢迎交流啊。
这一章对新的调度策略MLFQ进行讲解。
1.MLFQ的的规则
我们会有一些队列,不同的队列对应不同的优先级.对于队列中的进程,调度的规则如下:
(1)如果Priority(A) > Priority(B),那么A运行。
(2)如果Priority(A) = Priority(B),那么A,B按照Round-Robin方式运行。
(3)当一个任务创立的是时候,它在最高的优先级中
(4a)如果一个任务执行的时候消耗了整个时间片,那么降低优先级
(4b)如果一个任务主动放弃cpu的执行时间,那么保持优先级不变
上面的规则所构成的调度规则,会有如下的问题:
(1)如果有很多的job是交互性的,那么会导致那些需要大量cpu时间的job无法运行
(2)不公平性。如果有些job写的时候故意在时间片的最后一点时间放弃cpu,那么他就可以一直保持一个高优先级的状态。
(3)上面的规则只规定了job的优先级下降,但是如果一个job 从耗费cpu变为了交互性,它的优先级也是没办法提高的。
所以对上面的规则又新增了一些规则:
(5)经过一个时间S后,将所有的任务都调整到权限最高的队列。
(6)对规则4a和4b进行修改,一个job使用完该等级上的时间后,就会降低它的优先级。
上面的这些规则中包含了很多的设置内容,比如队列的个数,时间片的时间,调整所有低优先级job的时间,每个队列对应的时间为多少等等,这些都是具体在实现MLFQ的时候需要考虑的,一个好的建议是这些数值能够可配置化,避免写死。