操作系统--作业调度算法:FCFS,SJF,HRN(python实现)

博客涉及Python和C++两种编程语言中的算法相关内容,虽未给出具体内容,但可知聚焦于这两门语言在算法领域的应用,属于信息技术范畴。
部署运行你感兴趣的模型镜像
class Homework(object):

    def __init__(self, input_time, run_time):
        self.input_time = input_time
        self.run_time = run_time
        self.start_time = 0
        self.end_time = 0
        self.turn_around = 0
        self.dai_time = 0
        self.state = 0  # 等待状态,未进入,已做完

    def zhouzhuan(self):
        self.turn_around = self.end_time - self.input_time
        return self.turn_around

    def daiquan(self):
        self.dai_time = (self.end_time - self.input_time) / self.run_time
        return self.dai_time

    def output(self):
        print("%d\t\t\t%d\t\t\t%d\t\t\t%d\t\t\t%d\t\t\t    %f" % (self.input_time, self.run_time, self.start_time, self.end_time, self.turn_around, self.dai_time))


def sort(Homework):
    for i in range(len(Homework) - 1):
        for j in (i + 1, len(Homework) - 1):
            if Homework[i].input_time > Homework[j].input_time:
                t = Homework[j]
                Homework[j] = Homework[i]
                Homework[i] = t


def FCFS(Homework):
    print("FCFS:")
    print("input_time\trun_time\tstart_time\tend_time\tturnover_time\tweighted_turnover_time\t")
    count = 0
    sort(Homework)
    num = 0
    weight_num = 0
    for i in Homework:
        if count >= i.input_time:
            i.start_time = count
        else:
            count = i.input_time
            i.start_time = count
        count += i.run_time
        i.end_time = count
        i.zhouzhuan()
        i.daiquan()
        i.output()
        num += i.turn_around
        weight_num += i.dai_time
    average = num/len(Homework)
    weight_average = weight_num/len(Homework)
    print("T = %f" % average)
    print("F = %f" % weight_average)
def find_small(Homework):
    index = 65535
    rem = -1  # Homework 中的位置
    for i in range(len(Homework)):
        if Homework[i].state == 1 and Homework[i].run_time <= index:
            index = Homework[i].run_time
            rem = i
    return rem


def SJF(Homework):
    print("SJF:")
    print("input_time\trun_time\tstart_time\tend_time\tturnover_time\tweighted_turnover_time\t")
    count = 0  # 时间线
    sort(Homework)
    num = 0
    weight_num = 0
    length = len(Homework)
    while len(Homework):
        for j in Homework:
            if j.input_time > count:
                j.state = 0
            else:
                j.state = 1
        if find_small(Homework) == -1:
            Homework[0].state = 1
            count = Homework[0].input_time
        small = find_small(Homework)
        Homework[small].start_time = count
        count += Homework[small].run_time
        Homework[small].end_time = count
        Homework[small].turn_around = Homework[small].zhouzhuan()
        Homework[small].dai_time = Homework[small].daiquan()
        Homework[small].output()
        num += Homework[small].turn_around
        weight_num += Homework[small].dai_time

        del Homework[small]
    average = num / length
    weight_average = weight_num / length
    print("T = %f" % average)
    print("F = %f" % weight_average)

def find_big(Homework, count):
    big_rate = -1  # 最大响应比
    index = -1
    for i in range(len(Homework)):
        rate = 1 + (count - Homework[i].input_time) / Homework[i].run_time
        if Homework[i].state == 1 and rate > big_rate:
            big_rate = rate
            index = i
    return index


def HRN(Homework):
    print("HRN:")
    print("input_time\trun_time\tstart_time\tend_time\tturnover_time\tweighted_turnover_time\t")
    count = 0
    length = len(Homework)

    sort(Homework)
    num = 0
    weight_num = 0
    while len(Homework):
        for j in Homework:
            if j.input_time > count:
                j.state = 0
            else:
                j.state = 1
        if find_big(Homework, count) == -1:
            Homework[0].state = 1
            count = Homework.input_time_time
        big = find_big(Homework, count)
        Homework[big].start_time = count
        count += Homework[big].run_time
        Homework[big].end_time = count
        Homework[big].turn_around = Homework[big].zhouzhuan()
        Homework[big].dai_time = Homework[big].daiquan()
        Homework[big].output()
        num += Homework[big].turn_around
        weight_num += Homework[big].dai_time
        del Homework[big]
    average = num / length
    weight_average = weight_num / length
    print("T = %f" % average)
    print("F = %f" % weight_average)


if __name__ == "__main__":
    h1 = Homework(0, 20)
    h2 = Homework(4, 90)
    h3 = Homework(50, 10)
    h4 = Homework(8, 80)
    h5 = Homework(7, 70)
    h6 = Homework(20, 100)
    homework1 = [h1, h2, h3, h4]
    homework2 = [h1, h3, h5, h6]
    homework3 = [h1, h2, h3, h4]
    homework4 = [h1, h3, h5, h6]
    homework5 = [h1, h2, h3, h4]
    homework6 = [h1, h3, h5, h6]
    FCFS(homework1)
    FCFS(homework2)
    SJF(homework3)
    SJF(homework4)
    HRN(homework5)
    HRN(homework6)

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值