操作系统实验报告批处理系统的作业调度_第1页
操作系统实验报告批处理系统的作业调度_第2页
操作系统实验报告批处理系统的作业调度_第3页
操作系统实验报告批处理系统的作业调度_第4页
操作系统实验报告批处理系统的作业调度_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、word实验一 批处理系统的作业调度一实验目的1加深对作业概念的理解。2深入了解批处理系统如何组织作业、管理作业和调度作业。二实验内容编写程序完成批处理系统的作业调度,要求采用响应比优先调度算法。三实验原理最高响应比优先法HRRN是对FCFS方式和SJF 方式的一种综合平衡。HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下: R=(W+T)/T=1+W/T 其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,

2、随着它等待时间的增加,W/T也就随着增加,也就有时机获得调度执行。这种算法是介于FCFS和SJF 之间的一种折中算法。由于长作业也有时机投入运行,在同一时间内处理的作业数显然要少于SJF 法,从而采用HRRN 方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。四实验局部源程序实验中,作业控制块及队列的数据结构定义如下:struct task string name; /*作业号*/int arrTime; /* 作业到达时间*/int serTime; /*作业要求效劳时间*/int waiTime; /*等待时间*/int begTime;

3、 /*开始运行时间*/int finTime; /*结束运行时间*/int turTime; /*周转时间*/int wTuTime; /*带权周转时间*/int priority;/*优先权*/int finish;/*是否已经完成*/JCB10;存放作业控制块的区域:#define n 10JCB jobtable10;int jobcount; 将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作业队列头指针定义为:int *head;主程序为:#include<dos.h>#include<time.h>#include<stdlib

4、.h>#include<stdio.h>#include<conio.h>#include<string.h>typedef char string10; /* /定义string为含有10个字符元素的字符数组类型*/struct task string name; /*作业号*/int arrTime; /* 作业到达时间*/int serTime; /*作业要求效劳时间*/int waiTime; /*等待时间*/int begTime; /*开始运行时间*/int finTime; /*结束运行时间*/int turTime; /*周转时间*/i

5、nt wTuTime; /*带权周转时间*/int priority;/*优先权*/int finish;/*是否已经完成*/JCB10;int num; void input()int i; system("cls");printf("n请输入作业数量: ");scanf("%d", &num);for(i=0;i<num;i+)printf("n请输入作业 NO.%d:n",i);printf(" 作业名称: ");scanf("%s",JCB)

6、;printf(" 到达时间: ");scanf("%d",&JCBi.arrTime);printf(" 效劳时间: ");scanf("%d",&JCBi.serTime);JCBi.priority = 0;JCBi.finish =0;int HRN(int pre)int current=1,i,j;/* 优先权 =(等待时间+效劳时间)/效劳时间*/for(i=0; i<num; i+)JCBi.waiTime=JCBpre.finTime-JCBi.arrTime; /*等待时间

7、 =上一个作业的完成时间-到达时间*/JCBi.priority=(JCBi.waiTime+JCBi.serTime)/JCBi.serTime;for(i=0; i<num; i+)if(!JCBi.finish)current=i; /*找到第一个还没完成的作业*/break;for( j=i; j<num; j+) /*和后面的作业比拟*/if( !JCBj.finish) /* 还没完成(运行)*/if(JCBcurrent.arrTime<=JCBpre.finTime) /*如果作业在上一个作业完成之前到达*/if(JCBj.arrTime<=JCBpre

8、.finTime&&JCBj.priority>JCBcurrent.priority )current=j;/* 找出到达时间在上一个作业完成之前,优先权高的作业*/else /* 如果作业是在上一个作业完成之后到达*/if(JCBj.arrTime<JCBcurrent.arrTime)current=j; /* 找出比拟早到达的一个*/if(JCBj.arrTime=JCBcurrent.arrTime) /* 如果同时到达*/if(JCBj.priority>JCBcurrent.priority)current=j; /*找出效劳时间比拟短的一个*/

9、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.begTime;elseif(JCBi.arrTime>JCBpre.finTime) JCBi.begTime=JCBi.arrTime; else

10、JCBi.begTime=JCBpre.finTime; JCBi.finTime=JCBi.begTime+JCBi.serTime;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)if(times=0)printf(" 名称 到达时间 效劳时间 开始时间 完成时间 周转时间 带权周转时间n");printf(&

11、quot;%9s%9d%9d%9d%9d%9d%9dn",JCB,JCBi.arrTime,JCBi.serTime,JCBi.begTime,JCBi.finTime,JCBi.turTime,JCBi.wTuTime);void check( )int i;int staTime, endTime, sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime;int current=0, times=0, pre=0; JCBpre.finTime=0; for(i=0; i<num; i+)JCBi.finis

12、h=0;staTime, endTime,sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime;current=0; times=0; pre=0;JCBpre.finTime=0; printf("-n");for(i=0; i<num; i+)JCBi.finish=0; staTime, endTime,sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime;current=0; times=0; pre=0;JCBpre.finTime=0; prin

13、tf("n- HRRN -n");for(times=0; times<num; times+)current=HRN(pre);runing(current, times, pre, staTime, endTime);print(current, times);pre=current;for(i=0; i<num; i+) sumTurTime+=JCBi.turTime;sumWTuTime+=JCBi.wTuTime;aveTurTime=sumTurTime/num;aveWTuTime=sumWTuTime/num;printf("(计与平

14、均值) %9d%9d%9d%9dn",NULL,sumTurTime,aveTurTime,aveWTuTime);printf("-n");void main()char again;do system("cls"); /*清屏*/ printf("please input 4 groups of datas:n");input();check();printf("Continue.(Y/N): ");doagain = getch();while(again!='Y' && again!='y' && again!=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论