操作系统实验报告-作业调度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业调度
一、实验目的
1、对作业调度的相关内容作进一步的理解。
2、明白作业调度的主要任务。
3、通过编程掌握作业调度的主要算法。
二、实验内容及要求
1、对于给定的一组作业, 给出其到达时间和运行时间,例如下表所示:
2、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。
3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。
测试数据
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.166********
响应比高者优先算法
调度顺序:['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')+":"+str(x) 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)))