操作系统实验报告-作业调度

更新时间:2024-03-16 23:13:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

作业调度

120511504

一、实验目的

1、对作业调度的相关内容作进一步的理解。 2、明白作业调度的主要任务。 3、通过编程掌握作业调度的主要算法。 二、实验内容及要求

1、对于给定的一组作业, 给出其到达时间和运行时间,例如下表所示:

作业名 到达时间 服务时间 A 0 6 B 2 50 C 5 20 D 5 10 E 12 40 F 15 8 2、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。

3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。

三、程序中使用的数据结构及符号说明

进程结构体

{'作业名':'A','到达时间':0,'服务时间':6,'结束时间':0,'周转时间':0,'带权周转时间':0}

四、主要算法流程图 开始退出系统N响应比高者优先短作业优先先来先服务算法Y生成调度顺序队列计算平均周转时间及平均带权周转时间结束

五、测试数据及运行结果

测试数据

workA={'作业名':'A','到达时间':0,'服务时间':6} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8}

运行结果

先来先服务算法

调度顺序:['A', 'B', 'C', 'D', 'E', 'F'] 周转时间:74.1666666667 带权周转时间:4.83333333333

短作业优先算法

调度顺序:['A', 'D', 'F', 'C', 'E', 'B'] 周转时间:44.8333333333 带权周转时间:1.16666666667

响应比高者优先算法

调度顺序:['A', 'D', 'F', 'E', 'C', 'B'] 周转时间:48.1666666667 带权周转时间:1.5

六、实验体会或对改进实验的建议

七、源代码

#encoding=gbk

workA={'作业名':'A','到达时间':0,'服务时间':6,'结束时间':0,'周转时间':0,'带权周转时间':0}

workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} list1=[workB,workA,workC,workD,workE,workF] list2=[workB,workA,workC,workD,workE,workF] list3=[workB,workA,workC,workD,workE,workF] #先来先服务算法 def fcfs(list): resultlist = sorted(list, key=lambda s: s['到达时间']) return resultlist #短作业优先算法 def sjf(list): time=0 resultlist=[] for work1 in list:

time+=work1['服务时间'] listdd=[] ctime=0

for i in range(time): for work2 in list:

if work2['到达时间']<=ctime: listdd.append(work2) if len(listdd)!=0:

li = sorted(listdd, key=lambda s: s['服务时间']) resultlist.append(li[0]) list.remove(li[0]) ctime+=li[0]['服务时间'] listdd=[] return resultlist #响应比高者优先算法 def hrrn(list): time=0 resultlist=[] for work1 in list:

time+=work1['服务时间'] listdd=[] ctime=0

for i in range(time): for work2 in list:

if work2['到达时间']<=ctime:

work2['等待时间']=ctime-work2['到达时间'] listdd.append(work2) if len(listdd)!=0:

li = sorted(listdd, key=lambda s: (s['等待时间']+s['服务时间'])/s['服务时间'])

resultlist.append(li[-1]) list.remove(li[-1]) ctime+=li[-1]['服务时间'] listdd=[] return resultlist #调度顺序

def shunxu(resultlist,miaoshu): print(miaoshu) ddsx=[]

for work in resultlist: for d,x in work.items():

if d.decode('gb2312')==u'作业名': ddsx.append(x)

#print d.decode('gb2312')+\ print(u'调度顺序:'+str(ddsx)) turnaroundTime(resultlist) #平均周转时间及平均带权周转时间 def turnaroundTime(resultlist): time=0

for work in resultlist:

work['结束时间']=work['服务时间']+time time=work['结束时间']

work['周转时间']=work['结束时间']-work['到达时间'] work['带权周转时间']=work['周转时间'] / work['服务时间'] zzsj=0 dqzzsj=0

for work in resultlist: zzsj+=work['周转时间'] dqzzsj+=work['带权周转时间']

print('周转时间:'+str(zzsj*1.0/len(resultlist))) print('带权周转时间:'+str(dqzzsj*1.0/len(resultlist))) print('')

shunxu(fcfs(list1),'先来先服务算法') shunxu(sjf(list2),'短作业优先算法') shunxu(hrrn(list3),'响应比高者优先算法')

本文来源:https://www.bwwdw.com/article/sri8.html

Top