1、struct task string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/ int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/ int finTime; /*结束运行时间*/ int turTime; /*周转时间*/ int wTuTime; /*带权周转时间*/ int priority;/*优先权*/ int finish;/*是否已经完成*/ JCB10;存放作业控制块的区域:#define n 10 JCB jobtable10;int jobcount
2、;将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作业队列头指针定义为:int *head; 主程序为:#includetime.hstdlib.h #includeconio.hstring.h typedef char string10; /* /定义string为含有10个字符元素的字符数组类型*/ int num; void input() int i;system(cls);printf(n请输入作业数量: scanf(%d, &num);for(i=0;inum;i+) n请输入作业 NO.%d:n,i); 作业名称:%s,JCBi.name); 到达时间:
3、,&JCBi.arrTime); 服务时间:JCBi.serTime);JCBi.priority = 0;JCBi.finish =0; int HRN(int pre) int current=1,i,j;/* 优先权 =(等待时间+服务时间)/服务时间*/ i i+) JCBi.waiTime=JCBpre.finTime-JCBi.arrTime; /*等待时间 =上一个作业的完成时间-到达时间*/ JCBi.priority=(JCBi.waiTime+JCBi.serTime)/JCBi.serTime;if(!JCBi.finish) current=i; /*找到第一个还没完成
4、的作业*/ break;for( j=i; j j+) /*和后面的作业比较*/ if( !JCBj.finish) /* 还没完成(运行)*/ if(JCBcurrent.arrTime=JCBpre.finTime) /*如果作业在上一个作业完成之前到达*/ if(JCBj.arrTimeJCBcurrent.priority ) current=j;/* 找出到达时间在上一个作业完成之前,优先权高的作业*/ else /* 如果作业是在上一个作业完成之后到达*/ JCBcurrent.arrTime) /* 找出比较早到达的一个*/ if(JCBj.arrTime=JCBcurrent.
5、arrTime) /* 如果同时到达*/ if(JCBj.priorityJCBcurrent.priority) /*找出服务时间比较短的一个*/ return current;/*返回当前作业*/ void runing(int i, int times, int pre, int staTime, int endTime) if(times=0) JCBi.begTime=JCBi.arrTime;JCBi.finTime=JCBi.begTime+JCBi.serTime;JCBi.turTime=JCBi.serTime;JCBi.wTuTime=1.0;staTime=JCBi.b
6、egTime;else if(JCBi.arrTimeJCBpre.finTime) JCBi.begTime=JCBpre.finTime;JCBi.turTime=JCBi.finTime-JCBi.arrTime;JCBi.wTuTime=JCBi.turTime/JCBi.serTime;if(times=num-1) endTime=JCBi.finTime;JCBi.finish=1;void print(int i,int times) 名称 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间n%9s%9d%9d%9d%9d%9d%9dn, JCBi.name,JCB
7、i.arrTime,JCBi.serTime, JCBi.begTime,JCBi.finTime,JCBi.turTime,JCBi.wTuTime);void check( ) int staTime, endTime, sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime;int current=0, times=0, pre=0;JCBpre.finTime=0;JCBi.finish=0;staTime, endTime,sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime
8、;current=0; times=0; pre=0;-nn- HRRN -nfor(times=0; times times+) current=HRN(pre);runing(current, times, pre, staTime, endTime);print(current, times);pre=current;sumTurTime+=JCBi.turTime;sumWTuTime+=JCBi.wTuTime;aveTurTime=sumTurTime/num;aveWTuTime=sumWTuTime/num;(计与平均值) %9d%9d%9d%9dn,NULL,sumTurTi
9、me,aveTurTime,aveWTuTime);void main() char again;do /*清屏*/ please input 4 groups of datas:input();check();Continue.(Y/N):do again = getch();while(again!=Y & again!yNnwhile(again= | again= 五(实验结果与体会 从运行结果得到调度序列结果为:X1,X2,X3 1到达时间最早,服务时间也最短,其响应比最高; XX2到达时间为22,但X1早到达,所以开始时间为22,服务时间为12,所以响应比X1小;X3到达时间最迟,其响应比最小,所以在最后。我的体会:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1