实验二 作业调度实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

西北农林科技大学信息工程学院实习报告课程操作系统学院信息工程专业年级软件151学号2015012893姓名张鑫周次第八周交报告时间2017.5.5成绩实验二作业调度实验一.目的要求:用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。二、实验内容:1、编写并调试一个单道处理系统的作业等待模拟程序。作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。流程图如下:1、响应比高者优先算法流程图:开始初始化所有的JBC,使JBC按作业提交的时间的先后顺序排队时间量times=0先计算队列中所有的作业的响应比,总是西选择响应比最高的走也作为此刻要运行的作业,并修改相应的指针,更改时间量的值等待队列空?计算并打印这组作业的平均周转时间及带权平均周转时间结束不空空2、先来先服务调度算法流程图:3、短作业优先算法调度流程图:开始初始化所有的JBC,使JBC按作业提交的时间的先后顺序排队时间量times=0更改时间量的值等待队列空?计算并打印这组作业的平均周转时间及带权平均周转时间结束不空空调度队首的作业投入运行:更改队首指针,使作业的状态为R,记住作业运行的时间计算并打印运行作业i的完成时间,周转时间、带权周转时间、完成时间:=开始运行时间+服务时间周转时间:=完成时间-到达时间带权周转时间:=周转时间、服务时间实验代码如下:#includestdio.h#includestdlib.h#includestring.h开始初始化所有的JBC,使JBC按作业提交的时间的先后顺序排队时间量times=0更改时间量的值等待队列空?计算并打印这组作业的平均周转时间及带权平均周转时间结束不空空调度队首的作业投入运行:更改队首指针,使作业的状态为R,记住作业运行的时间计算并打印运行作业i的完成时间,周转时间、带权周转时间、完成时间:=开始运行时间+服务时间周转时间:=完成时间-到达时间带权周转时间:=周转时间、服务时间structjcb{charname[10];//作业名floatarrtime;//提交时间floatwaitTime;//等待时间floatstartTime;//开始时间floatrunTime;//运行时间floatfinishTime;//完成时间floatTAtime;//周转时间floatTAWtimei;//带权周转时间floatAvgTAtime,AvgTAWtimei;//平均周转时间;平均带权周转时间floatbi;//响应比};jcbJCB[100];intReadFile(){intm=0;inti=0;FILE*fp;//定义文件指针fp=fopen(3.txt,r);//打开文件if(fp==NULL){printf(Fileopenerror!\n);exit(0);}else{printf(作业名提交时间运行时间\n);while(!feof(fp)){fscanf(fp,%s%f%f,&JCB[i].name,&JCB[i].arrtime,&JCB[i].runTime);//fscanf()函数将数据读入printf(\n%s%15f%12f,JCB[i].name,JCB[i].arrtime,JCB[i].runTime);//输出到屏幕i++;}fclose(fp);//关闭文件}m=i-1;returnm;}//菜单voidmenu(){printf(\n\n|***************作业调度*************|\n);printf(|======================================|\n);printf(|0.退出|\n);printf(|1.先来先服务(FCFS)调度算法|\n);printf(|2.短作业优先(SJF)调度算法|\n);printf(|3.响应比高者优先(HRRN)调度算法|\n);printf(|======================================|\n);}voiddisplayone(floatp,char*h,inti,intj){strcpy(h,JCB[i].name);strcpy(JCB[i].name,JCB[j].name);strcpy(JCB[j].name,h);p=JCB[i].arrtime;JCB[i].arrtime=JCB[j].arrtime;JCB[j].arrtime=p;p=JCB[i].runTime;JCB[i].runTime=JCB[j].runTime;JCB[j].runTime=p;p=JCB[i].startTime;JCB[i].startTime=JCB[j].startTime;JCB[j].startTime=p;p=JCB[i].finishTime;JCB[i].finishTime=JCB[j].finishTime;JCB[j].finishTime=p;}voiddisplaytow(inti,inty){printf(\n);printf(作业%s先开始运行\n\n,JCB[0].name);floatAvgCycleTime,AvgValueCycleTime,k=0,m=0;//AvgCycleTime为平均周转时间,AvgValueCycleTime为平均带权周转时间for(i=0;iy;i++){JCB[0].startTime=JCB[0].arrtime;JCB[i].finishTime=JCB[i].startTime+JCB[i].runTime;//结束时间JCB[i+1].startTime=JCB[i].finishTime;JCB[i].waitTime=JCB[i].startTime-JCB[i].arrtime;//等待时间JCB[i].TAtime=JCB[i].finishTime-JCB[i].arrtime;//周转时间JCB[i].TAWtimei=JCB[i].TAtime/JCB[i].runTime;//带权周转时间k+=JCB[i].TAtime;m+=JCB[i].TAWtimei;}AvgCycleTime=k/y;//平均旋转时间AvgValueCycleTime=m/y;//平均带权旋转时间printf(作业名提交时间开始时间运行时间结束时间等待时间周转时间带权周转时间\n);for(i=0;iy;i++)printf(%s\t%.2f\t%.2f\t%4.2f\t%6.2f\t%7.2f\t%7.2f\t%8.2f\n\n,JCB[i].name,JCB[i].arrtime,JCB[i].startTime,JCB[i].runTime,JCB[i].finishTime,JCB[i].waitTime,JCB[i].TAtime,JCB[i].TAWtimei);printf(平均周转时间为:);printf(%.2f\n\n,AvgCycleTime);printf(平均带权周转时间为:);printf(%.2f\n\n,AvgValueCycleTime);}voidFCFS(inty)//先来先服务算法{floatp;inti,j;charh[100];for(i=0;iy;i++){for(j=i+1;jy;j++){if(JCB[i].arrtimeJCB[j].arrtime){displayone(p,h,i,j);}}}displaytow(i,y);}voidSJF(inty)//短作业优先算法{floatp;inti,j;charh[100];for(i=0;iy;i++)//先提交的作业先运行,后面来的作业再比较运行时间长短{for(j=i+1;jy;j++){if(JCB[i].arrtimeJCB[j].arrtime)//先把作业按提交时间来排序{displayone(p,h,i,j);}}}for(i=1;iy;i++){for(j=i+1;jy;j++){if(JCB[i].runTimeJCB[j].runTime)//比较后面来的作业的运行时间{displayone(p,h,i,j);}}}displaytow(i,y);}voidHRRN(inty)//响应比高者优先算法{inti,j;floatp;charh[100];for(i=0;iy;i++)//先提交的作业先运行,后面来的作业再比较响应比的大小{for(j=i+1;jy;j++){if(JCB[i].arrtimeJCB[j].arrtime)//先把作业按提交时间来排序{displayone(p,h,i,j);}}}for(i=0;iy;i++){JCB[0].startTime=JCB[0].arrtime;JCB[i].finishTime=JCB[i].startTime+JCB[i].runTime;//结束时间JCB[i+1].startTime=JCB[i].finishTime;JCB[i].waitTime=JCB[i].startTime-JCB[i].arrtime;//等待时间JCB[i].TAtime=JCB[i].finishTime-JCB[i].arrtime;//周转时间JCB[i].bi=JCB[i].TAtime/JCB[i].runTime;//响应比}for(i=1;iy;i++){for(j=i+1;jy;j++){if(JCB[i].biJCB[j].bi)//比较后面来的作业的响应比{displayone(p,h,i,j);p=JCB[i].bi;JCB[i].bi=JCB[j].bi;JCB[j].bi=p;}}}displaytow(i,y);for(i=1;iy;i++){printf(%s的响应比为:%.2f\n,JCB[i].name,JCB[i].bi);}}intmain(){while(1){inti,x,n;menu();loop1:printf(请选择模块(0~3):);scanf(%d,&i);if(i==0){exit(0);}elseif(i=0||i3){printf(输入有误,请重新输入\n);gotoloop1;//无条件转移语句}loop2:printf(原始数据是:\n);n=ReadFile();for(x=0;xn;x++){printf(\n%s%15f%12f,JCB[i].name,JCB[i].arrtime,JCB[i].runTime);}switch(i){case0:exit(0);break;case1:FCFS(n);break;case2:SJF(n);break;case3:HRRN(n);break;}}}实验截图说明如下:这是先来先服务算法调度这是最短优先作业调度算法结果这是响应比高者优先调度算法结果2、编写并调度一个多道程序系统的作业调度模拟程序。作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求实验代码如下:#include<stdio.h>#include<stdlib.h>#definegetjch(type)(type*)malloc(sizeof(type))#defineN10structjcb/*定义作业控制块PCB*/{charname[10];floatneedtime;/*运行时间*/floatarrivetime;/*提交时刻*/floatstorage[N];/*系统资源*/structjcb*link;}*ready=NULL,*pb=NULL,*p;typedefstructjcbJCB;floatTc,Ti,Wi,T=0;/*完成时刻,

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功