操作系统——进程调度算法 python实现

一、实验内容

(1)优先权法、轮转法

简化假设
1) 进程为计算型的(无I/O)
2) 进程状态:ready、running、finish
3) 进程需要的CPU时间以时间片为单位确定

(2) 算法描述

1) 优先权法——动态优先权
当前运行进程用完时间片后,其优先权减去一个常数。
2) 轮转法

参考书本:计算机操作系统第四版 汤小丹 梁红兵等编

二、流程图

动态优先级(左)——轮转法(右)

在这里插入图片描述在这里插入图片描述

三、实现思路

(1)如何表示进程,一个进程应该包含哪些必要信息
在操作系统中,每个进程都有一个专用数据结构PCB——进程控制块来记录os所需的,用于描述进程的当前情况以及管理进程运行的全部信息。一般包含进程标识符、处理机状态、进程调度信息,进程控制信息四个部分。

本实验只是模拟处理机调度,所以我选择创建一个pcb类来表示进程,该PCB类的属性包括进程序号id(表示到达的先后顺序)、状态state、开始执行时间starttime、执行结束时间endtime、所需执行时间cputime,剩余执行时间restoftime,已运行时间runtime。还包括显示pcb的方法。

我将所有的进程保存在一个列表中,表示他们都是0时刻进入内存,id表示到达顺序。

具体代码如下

class PCB :
    def __init__(self, id, prior, cputime) :
        # id:序号 prior优先级 cputime:进程所需时间
        self.id = id
        self.prior = prior      #这是初始值的优先级,不会再变了,可以看做静态优先级
        self.dy_prior = prior   #动态优先级,每执行一次要减一
        self.cputime = cputime
        self.runtime = 0  # 进程已运行的时间,就是流程图中已占用CPU时间片数,每执行一次-1
        self.restoftime = cputime   # 还需要的运行的时间,
        self.state = 0  # 0表示ready 1表示running 2表示finish
        self.starttime = 0    #进程开始运行的时间
        self.endtime = 0     #进程结束运行时间

    def outSituation_dy(self) :  #输出动态优先级法进程运行情况
        state_temp = ''
        if self.state == 0:
            state_temp = 'ready'
        elif self.state == 1:
            state_temp = 'running'
        elif self.state == 2 :
            state_temp = 'finish'
        print(("进程:" + str(self.id) + '\t' +"动态优先级:%-3d" + " 当前状态:%-7s" + "  进程所需CPU时间:%-2d" +
               "  还需时间:" + str(self.restoftime))%(self.dy_prior,state_temp,self.cputime))

    def outSituation_rr(self) :  #输出rr法进程运行情况
        state_temp = ''
        if self.state == 0:
            state_temp = 'ready'
        elif self.state == 1:
            state_temp = 'running'
        elif self.state == 2 :
            state_temp = 'finish'
        print(("进程:" + str(self.id) + " 当前状态:%-7s" + "  进程所需CPU时间:%-2d" +
               "  还需时间:" + str(self.restoftime))%(state_temp,self.cputime))

    def outall_dy(self) :  #输出动态优先级法进程运行总体情况
        state_temp = ''
        if self.state == 0:
            state_temp = 'ready'
        elif self.state == 1:
            state_temp = 'running'
        elif self.state == 2 :
            state_temp = 'finish'
        print(("进程:" + str(self.id) + '\t' +"静态优先级:%-3d" + " 当前状态:%-7s" + "进程所需CPU时间:%-2d" + " 开始运行时间:%-2d" +
               " 结束运行时间:%-3d"+" 还需时间:" + str(self.restoftime))%(self.prior,state_temp,self.cputime,self.starttime,self.endtime,))

    def outall_rr(self) :  #输出rr法进程运行总体情况
        state_temp = ''
        if self.state == 0:
            state_temp = 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值