Python 实现单道处理系统的作业调度模拟程序 - 操作系统

本文介绍了如何使用Python实现单道处理系统的作业调度模拟,包括FCFS、SJF和HRRN三种算法。详细讲解了算法原理和Python代码实现,通过比较函数对不同算法进行调度,并提供了完整代码链接。
摘要由CSDN通过智能技术生成

本文发布且更新于个人博客 https://www.xerrors.fun/JobSchedulingProgram/

我相信一个好的算法应该是优美的,不需要过多的解释,代码前后自成一体;这也是我向往的目标,不过从目前的情况来看,我还是需要努力的。

这次的作业是「单道处理系统的作业调度模拟程序」要求实现 3 种作业调度算法:

  • 先来先服务(FCFS)
  • 最短作业优先(SJF)
  • 响应比高者优先(HRRN)

对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。

三种调度算法的原理

假设咱们学生就是一个「单道处理系统」(谦虚),当面对很多科作业到来的时候,有以下几种应对办法

FCFS 先来先服务:先布置的作业优先做,所有作业排好队,后来的作业放在最后面;

最短作业优先:哪个省事先做哪个,所有作业按照要花费的时间排成一个序列;

响应比高者优先:如果哪个先来先做哪个,可能导致比较紧急且简单的工作没法完成,比如老师让当堂交 3 道选择题,这推到后面是不合适的;如果使用最短作业优先呢?可能刚一开始留下的一个比较繁琐的任务一直没法做;比如说暑假开始了,你要准备学车,但是又想出去玩,又想打游戏,等到暑假结束,还是没去学车(亲身经历);所以要综合考虑等待时间以及处理的时间开销。

优 先 级 = 等 待 的 时 间 + 需 要 花 费 的 时 间 需 要 花 费 的 时 间 优先级 = \frac{等待的时间 + 需要花费的时间} {需要花费的时间} =+

Python 实现

JCB 的数据结构

每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等;所以最终的 JCB 类就直接创建出来了,千言万语不如直接看代码

class JCB:
    # 表示系统中的资源数量,其中 1 表示独占资源
    srcs = [3, 2, 4, 1, 1, 1]
    clock = 0 # 类的时钟
    def __init__(self, name, time, srcs=None):
        self.name = name     # 名称
        self.time = time     # 所需时间
        self.status = 'Wait' # 作业的状态
        self.commit_time = JCB.clock # 作业到达时间

        # 所需的资源,单道程序调度用不到的
        self.srcs = srcs if srcs else [0] * len(JCB.srcs)
        self.pointer = None  # 链指针,不知道要用来干嘛
        self.start_time = -1 # 作业开始执行的时间,未执行为 -1 

        self.rp = 0 # 优先级

        JCB.clock += 1 # 类的时钟 +1

    # 计算优先级,越大优先级越高,越靠前
    def calcRp(self, clock):
        if self.start_time =
  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值