python-动态最高优先数优先算法

本文介绍了一种基于优先级的进程调度算法实现,通过Python代码详细展示了如何创建进程控制块,初始化就绪队列,进行优先级排序,并调度进程运行。文章深入探讨了进程状态的转变,包括从就绪到运行再到完成的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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()

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值