多级反馈队列调度算法既能使高
优先级的作业得到响应又能使短作业(进程)迅速完成。(对比一下
FCFS与
高响应比优先调度算法的缺陷)。
1、设有N个队列(Q1,Q2....QN),其中各个队列对于
处理机的
优先级是不一样的,也就是说位于各个队列中的作业(进程)的优先级也是不一样的。一般来说,优先级Priority(Q1)> Priority(Q2)> ... >Priority(QN)。怎么讲,位于Q1中的任何一个作业(进程)都要比Q2中的任何一个作业(进程)相对于CPU的优先级要高(也就是说,Q1中的作业一定要比Q2中的作业先被
处理机调度),依次类推其它的队列。
2、对于优先级最低的队列来说,里面是遵循
时间片轮转法。也就是说,位于队列QN中有M个作业,它们的
运行时间是通过QN这个队列所设定的
时间片来确定的;对于其他队列,遵循的是先来先服务算法,每一进程分配一定的时间片,若时间片运行完时进程未结束,则进入下一优先级队列的末尾。
3、各个队列的时间片是一样的吗?不一样,这就是该算法设计的精妙之处。各个队列的时间片是随着优先级的增加而减少的,也就是说,优先级越高的队列中它的时间片就越短。同时,为了便于那些超大作业的完成,最后一个队列QN(优先级最低的队列)的时间片一般很大(不需要考虑这个问题)。
2、首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次
优先级队列中的进程。例如:Q1,Q2,Q3三个队列,
当且仅当在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为
空时才会去调度Q3。
3、对于同一个队列中的各个进程,按照FCFS分配时间片调度。比如Q1队列的
时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列末尾,直至完成。
5、在低
优先级的队列中的进程在
运行时,又有新到达的作业,此时须立即把正在运行的进程放回当前队列的
队尾,然后把
处理机分给高优先级进程。换而言之,任何时刻,只有当第1~i-1队列全部为空时,才会去执行第i队列的进程(抢占式)。特别说明,当再度运行到当前队列的该进程时,仅分配上次还未完成的时间片,不再分配该队列对应的完整时间片。
设有3个作业
J1,J2,J3分别在时间 0 ,1,3时刻到达。而它们所需要的
CPU时间分别是3,2,1个时间片。
2、时刻1 J2到达。 由于同一队列采用
先来先服务,于是J2等待。 J1在运行了1个时间片后,已经完成了在Q1中的2个时间片的限制,于是J1置于Q2等待被调度。当前
处理机分配给J2。
7、时刻6 由于Q1已经空闲,于是开始调度Q2中的作业,则J1得到处理器开始运行。 J1再经过一个时间片,完成了任务。于是整个
调度过程结束。