时限调度算法(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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值