一、实验内容
(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 =