时限调度算法(python实现)(最早截止时间优先)2021-10-15

效果如图:
时限调度算法(最早截止时间优先)
可以自己更改参数玩玩,看看对多个进程每个进程是否公平,理论上多少个进程都无所谓,不过具体参数的自己调,基本都封装好了

#ps_scheduling
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.axisartist as axisartist

class PS(object):
    def __init__(self,Fin,Exe,Height,Havedone=0):
        self.constant_Fin=Fin
        self.Fin=Fin
        self.Exe=Exe
        self.Havedone=Havedone
        self.Height=Height

s=['A','B','C','D','E','F','G','H']
def line(x_left,x_right,h):
    dec=0.1
    x=np.arange(x_left,x_right,dec)
    n=len(x)
    y=h*np.ones(n,dtype=int)
    plt.plot(x_right,h,"g*")
    plt.text(x_right,h+0.005,s[h-1]+":"+str(x_right),ha="center",va="bottom",fontsize=10)
    plt.plot(x,y,c='b')

if __name__ == "__main__":

    total_T=180 #########横坐标总时间在这调
    #画图初始化
    fig=plt.figure(figsize=(8,8))
    ax=axisartist.Subplot(fig,111)
    fig.add_axes(ax)
    ax.axis[:].set_visible(False)
    ax.axis["x"]=ax.new_floating_axis(0,0)
    ax.axis["x"].set_axisline_style("->",size=5.0)
    ax.axis["x"].set_axis_direction("top")
    plt.plot(0,0)
    plt.xlim(0,total_T)
    
    Fin_pri_q=[] 
    Fin=[30,75] ###########在这里设置结束时间列表
    plt.yticks(np.arange(1,len(Fin)+1.5,1))
    Execute_T=[15,38] ##############在这里设置执行时间列表
    for i in range(len(Execute_T)):
        tmp_ps=PS(Fin[i],Execute_T[i],i+1,0)
        Fin_pri_q.append(tmp_ps)
    cur_T=0 ####### 在这里设置起始时间
    cor_ps=min(Fin_pri_q,key=lambda x:x.Fin)
    Min_Fin_T=cor_ps.Fin
    
    while cur_T<=total_T:
        tmp_ps = min(Fin_pri_q,key=lambda x:x.Fin)
        Remain = tmp_ps.Exe-tmp_ps.Havedone
        if cur_T+Remain<Min_Fin_T:
            line(cur_T,cur_T+Remain,tmp_ps.Height)
            cur_T+=Remain
            tmp_ps.Havedone=0
            Fin_pri_q.remove(tmp_ps)
        else:
            line(cur_T,Min_Fin_T,tmp_ps.Height)
            tmp_ps.Havedone+=Min_Fin_T-cur_T
            if tmp_ps.Havedone==tmp_ps.Exe:
                tmp_ps.Havedone=0
                Fin_pri_q.remove(tmp_ps)
            cur_T=Min_Fin_T
            cor_ps.Fin+=cor_ps.constant_Fin
            Fin_pri_q.append(cor_ps)
            cor_ps=min(Fin_pri_q,key=lambda x:x.Fin)
            Min_Fin_T=cor_ps.Fin

    plt.show()

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抢占式优先调度算法是一种多处理机调度算法,其基本原理是根据每个任务的优先级大小来决定任务的执行顺序,当有更高优先级的任务到来时,可以抢占正在执行的任务,并将执行资源分配给新到来的任务。 在多处理机调度中,根据任务的优先级可以确定该任务在处理机上所占用的资源和执行时间。抢占式优先调度算法中,首先会给每个任务一个初始的优先级,然后根据任务的优先级排定任务的执行顺序。当某个任务被抢占时,其优先级会降低,使得其他任务有机会执行。 具体实现抢占式优先调度算法的多处理机调度系统,可以通过以下步骤来进行: 1. 首先,需要确定每个任务的优先级,可以根据任务的重要性、紧急程度和执行时限来确定。优先级越高的任务,其执行权就越高。 2. 当一个任务到来时,比较其优先级与当前正在执行任务的优先级。若新任务的优先级更高,则将正在执行任务暂时挂起,把执行资源分配给新任务。 3. 被抢占的任务的优先级会降低,将其放入一个队列中等待下一次被调度。当新任务执行完毕或被抢占后,可以根据被抢占任务在队列中的优先级重新安排其执行顺序,高优先级的任务会先执行。 4. 在任务执行过程中,需要监控每个任务的状态和执行时间,及时更新任务的优先级。可以根据任务的执行情况和其他策略来进行动态调整,以实现更优的调度效果。 通过以上步骤,抢占式优先调度算法可以实现多处理机调度。它可以根据任务的优先级来动态调整任务的执行顺序,从而提高系统的响应速度和任务的执行效率。它可以适应不同任务的需求,并根据实际情况进行灵活调整,是一种较为高效的多处理机调度算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值