#Author:yaoxin
#time:2020-05-20,14:36
import random
def init(): #初始化就绪进程队列
start_id=1000
for i in range(10):
pcd_id=start_id+i #进程ID
priority=random.randint(1,10) #随机产生优先级数
arrive_time=0 #进程输入时间
all_time=random.randint(1,10) #随机产生进程需要运行时间
cpu_time=0 #占用cpu的时间
state='Ready' #进程状态
pcb.append([pcd_id,priority,arrive_time,all_time,cpu_time,state])
print("初始化就绪队列")
print("---------------------------------------------------")
display(0)
def display(sum): #打印就绪队列
print("进程ID 优先级数 输入时间 还需运行时间 占用cpu时间 进程状态 :总时间:"+str(sum))
x=0
for i in pcb:
print("{0:>6}\t{1:>6}\t{2:>6}\t{3:>6}\t{4:>8}\t{5:>6}".format(i[0],i[1],i[2],i[3],i[4],i[5]))
x+=i[3]
print("---------------------------------------------------"+str(x))
def sort(): #排序就绪队列
pcb.sort(key=lambda x:x[1],reverse=True)
def DHPF(): #进程调度函数
sort()
sum=0 #计算总时间
flag=10 #标记进程是否全部完成
while True:
if(flag==0):
return 0
pcb[0][5]="Run" #就绪队列队头进程获得CPU,进程状态改变为RUN
display(sum)
sum+=1
for i in pcb:
if(i[5]=="Run"):
i[1]-=3 #优先级数-3
i[4]+=1 #占用CPU时间+1
i[3]-=1 #进程还需运行时间-1
if(i[3]==0): #进程运行结束
i[5]="Finish"
x=i[0]
flag-=1
finish.append([pcb.pop(0)[0],sum])
else:
i[5]="Ready"
else:
i[1]+=1
#add(sum)
sort()
return 0
def display_finish():
print("进程ID 进入时间 完成时间")
for i in finish:
print("{0:>6}\t{1:>6}\t{2:>6}".format(i[0],0,i[1]))
print("---------------------------------------------------")
'''
def add(time):
pcb_id=1000+time #进程ID
priority=random.randint(1,20) #随机产生优先级数
arrive_time=time #进程输入时间
all_time=random.randint(1,20) #随机产生进程需要运行时间
cpu_time=0 #占用cpu的时间
state='Ready' #进程状态
pcb.append([pcd_id,priority,arrive_time,all_time,cpu_time,state])
'''
if __name__=='__main__':
pcb=[]
finish=[]
init()
DHPF()
display_finish()