您好,欢迎访问三七文档
题目3作业调度一、实验目的1、对作业调度的相关内容作进一步的理解。2、明白作业调度的主要任务。3、通过编程掌握作业调度的主要算法。二、实验内容及要求1、对于给定的一组作业,给出其到达时间和运行时间,例如下表所示:,2、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。三、实验报告1、程序中使用的数据结构及符号说明。2、给出主要算法的流程图。3、给出程序清单并附上注释。4、给出测试数据和运行结果。作业名ABCDEF到达时间02551215服务时间6502010408实验代码#includeiostreamusingnamespacestd;structworks{charname;//作业名doublectime;//到达时间doublestime;//服务时间doubleftime;//完成时间doubleztime;//周转时间doubledtime;//带权周转时间doublewtime;//等待时间doublerratio;//响应比};doublesumztime,sumdtime;doubleavgztime,avgdtime;voidinput(works*p,intn);//输入voidoutput(works*p,intn);//输出voiddatap(works*p,intn);//数据处理voidsort(works*p,intn);//按到达时间排序voidfcfs(works*p,intn);//先来先服务voidsjf(works*p,intn);//短作业优先voidhrf(works*p,intn);//高响应比优先intmain(){intn;cout输入作业数目:;cinn;works*a=newworks[n];input(a,n);fcfs(a,n);cout\n;sjf(a,n);cout\n;hrf(a,n);deletea;return0;}voidinput(works*p,intn){cout请输入作业信息:endlendl;for(inti=0;in;i++){cout作业名:;cinp[i].name;cout到达时间:;cinp[i].ctime;cout服务时间:;cinp[i].stime;cout\n;}}voiddatap(works*p,intn){sumztime=sumdtime=0;p[0].ftime=p[0].ctime+p[0].stime;for(inti=1;in;i++){p[i].ftime=p[i-1].ftime+p[i].stime;}for(intj=0;jn;j++){p[j].ztime=p[j].ftime-p[j].ctime;p[j].dtime=p[j].ztime/p[j].stime;sumztime+=p[j].ztime;sumdtime+=p[j].dtime;}avgztime=sumztime/n;avgdtime=sumdtime/n;}voidoutput(works*p,intn){cout作业调度顺序:;for(intk=0;kn;k++){coutp[k].name;}cout\n;cout平均周转时间=avgztimeendl;cout平均带权周转时间=avgdtimeendl;}voidsort(works*p,intn){for(inti=n-1;i=1;i--)for(intj=0;ji;j++)if(p[j].ctimep[j+1].ctime){workstemp;temp=p[j];p[j]=p[j+1];p[j+1]=temp;}}voidfcfs(works*p,intn){sort(p,n);datap(p,n);cout先来先服务算法endl;output(p,n);}voidsjf(works*p,intn){sort(p,n);for(inti=0;in-1;i++){intk=0;if(i==0)p[i].ftime=p[i].ctime+p[i].stime;elsep[i].ftime=p[i].stime+p[i-1].ftime;for(intj=i+1;jn;j++){if(p[j].ctime=p[i].ftime)k++;}doubleminstime=p[i+1].stime;intps=i+1;for(intm=i+1;mi+k;m++){if(p[m+1].stimeminstime){minstime=p[m+1].stime;ps=m+1;}}workstemp;temp=p[i+1];p[i+1]=p[ps];p[ps]=temp;}datap(p,n);cout短作业优先算法:endl;output(p,n);}voidhrf(works*p,intn){sort(p,n);for(inti=0;in-1;i++){intk=0;if(i==0)p[i].ftime=p[i].ctime+p[i].stime;elsep[i].ftime=p[i].stime+p[i-1].ftime;for(intj=i+1;jn;j++){if(p[j].ctime=p[i].ftime)k++;}doublemaxrratio=(p[i].ftime-p[i+1].ctime)/p[i+1].stime;intps=i+1;for(intm=i+1;mi+k;m++){if((p[i].ftime-p[m+1].ctime)/p[m+1].stime=maxrratio){maxrratio=(p[i].ftime-p[m+1].ctime)/p[m+1].stime;ps=m+1;}}workstemp;temp=p[i+1];p[i+1]=p[ps];p[ps]=temp;}datap(p,n);cout高响应比优先算法:endl;output(p,n);}运行结果
本文标题:作业调度
链接地址:https://www.777doc.com/doc-4334902 .html