一、多级反馈队列调度算法
多级反馈队列调度算法是进程调度的一种算法,该调度算法可以不用事先知道各种进程所需的执行时间,还可以较好的满足各种类型进程的需要,是目前共认的一种较好的进程调度算法。
那你可能马上就要问了,多级反馈队列调度算法到底是怎么调度的呢?我认为很多算法都可以用一张图+一句话来表达,所以接下来我尽量用图像来使这个算法看起来非常清晰。
一句话:
多级反馈队列调度算法,“多级”在于有多个不同优先级的队列,“反馈”在于如果有进程加入优先级高的队列时立即停止当前任务,转去执行优先级高的队列中进程,上述过程循环调度就形成多级反馈队列调度算法。
一张图:
上图是一个调度的示例,进程有A(4),B(3),C(4),D(2),E(4),括号内是需要服务的时间。设第一队列时间片q=1,因为该算法中时间片的规则为:后一个时间片长度为前一个的2倍,所以第二队列时间片q=2,第三队列时间片q=4。
若不能执行完,则放到下一个队列尾部(橙色部分)
到最后一个队列的时候,则执行轮转调度(RR)算法,也就是每次执行一个时间片长度的服务,直到循环执行完所有的进程。
二、Python3实现代码
首先介绍一下程序中使用的结构体
1.“进程/任务”结构体
class Process:
def __init__(self,name,arrive_time,serve_time):
self.name=name #进程名
self.arrive_time=arrive_time #到达时间
self.serve_time=serve_time #需要服务的时间
self.left_serve_time=serve_time #剩余需要服务的时间
self.finish_time=0 #完成时间
self.cycling_time=0 #周转时间
self.w_cycling_time=0 #带权周转时间
进程的属性有进程名,到达时间,需要服务的时间,剩余需要服务的时间,完成时间,周转时间,带权周转时间。其中周转时间为提交时间与完成时间的间隔;带权周转时间为周转时间/实际运行时间。
2.队列
class Queue:
def __init__(self,level,process_list):
self.level=level
self.process_list=process_list
self.q=0
def size(self):
return len(self.process_list)
def get(self,index):
return