Python实战——实现进程调度算法:FCFS、SJF和HRRN
实验要求
进程调度算法:采用先来先服务、短作业、动态最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。
每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:
进程名—进程标示数 ID
优先数 PRIORITY 优先数越大优先权越高(仅HRRN)
到达时间—进程的到达时间为进程输入的时间。、
进程还需要运行时间ALLTIME,进程运行完毕ALLTIME=0,
已用CPU时间----CPUTIME、
进程开始阻塞时间STARTBLOCK-表示当进程在运行STARTBLOCK个时间片后,进程将进入阻塞状态
进程的阻塞时间BLOCKTIME–表示当进程阻塞BLOCKTIME个时间片后,进程将进入就绪状态
进程状态—STATE
因为FCFS和SJF比较简单,所以写这两个算法时比较粗糙,没有设置阻塞时间,执行时也只是打印执行进程的信息(这俩是白给的)~~
HRRN算法每次都计算作业的优先级,随着作业等待时间的变长,优先级不断的提高,所以能够得到更快的执行。一般优先级的计算方法是:优先级 = (作业已等待时间 + 作业的服务时间) / 作业的服务时间,而这里我只是简单地令进程在等待或阻塞时优先数+1,效果都差不多~~
代码如下
运行环境为python 3.7
import random
class PCB:
def __init__(self,pid,priority,arr_time,all_time,cpu_time,start_block,block_time,state): ##初始化进程
self.pid=pid
self.priority=priority
self.arr_time=arr_time
self.all_time=all_time
self.cpu_time=cpu_time
self.start_block=start_block
self.block_time=block_time
self.state=state
def output(self): ##hrrn输出
print("进程"+str(self.pid),"优先级:"+str(self.priority),"到达时间:"+str(self.arr_time),
"还需运行时间:"+str(self.all_time),"已运行时间:"+str(self.cpu_time),
"开始阻塞时间:"+str(self.start_block),"阻塞时间:"+str(self.block_time),"状态:"+self.state)
def Output(self): ##sjf fcfs输出
print("进程"+str(self.p