当前位置:首页 > 小型仿真操作系统实验报告
实验二:批处理系统中作业调度
1.实验目的
加深对作业调度算法的理解。 2.实验内容
此实验模拟批处理系统中的作业调度,并采用响应比高者优先算法作为作业调度算法。 3.实验原理
实验采用最高响应比算法实现对作业的调度,响应比为作业的等待时间和作业估计执行时间之比。在不断调用进程的过程中,作业的响应比动态变化。
输入作业数量,输入作业信息,用数组储存,当达到设置的作业数量时,输入结束,依次判断每个作业是否满足条件,满足的话在进行下面的运算,在第一次作业调度时,找到到达时间最早的那个作业,输出,若不止一个最早,就调度第一个最早到达的。然后修改系统运行时间和每个作业的相关信息,用flag进行标记,当flag为0时表示作业仍未到达,当为1时,表示作业等待,flag=2时,作业调度完。执行多次操作,知道作业全部调度完为止。 4.实验源程序
#include
string name; /*作业名*/
int length; /*作业长度,所需主存大小*/ int printer; /*作业执行所需打印机的数量*/ int tape; /*作业执行所需磁带机的数量*/ int runtime; /*作业估计的执行时间*/ int waittime; /*作业在输入井中的等待时间*/ int reachtime; int flag;
}JCB[max]; /*作业控制块类型定义*/ int tape,printer; int memory; int n,w;
static systemruntime=0;
8
void input( )//创建进程,等待时间/执行时间响应比高 { int c; n=0;
cout<<\输入作业个数:\ cin>>c; while(c!=0) { cout<<\作业名: \
cin>>JCB[n].name;
cout<<\作业长度(MB): \ cin>>JCB[n].length; cout<<\需打印机: \ cin>>JCB[n].printer; cout<<\需磁带机: \ cin>>JCB[n].tape;
cout<<\到达时间: \
cin>>JCB[n].reachtime; cout<<\运行时间: \ cin>>JCB[n].runtime; JCB[n].flag =0; JCB[n].waittime =0; n++; c--;
}
}
void judge() { w=0;
for(int j=0;j JCB[w].name=JCB[j].name; 9 } } n=w; } JCB[w].length=JCB[j].length; JCB[w].printer=JCB[j].printer; JCB[w].tape=JCB[j].tape; JCB[w].reachtime=JCB[j].reachtime; JCB[w].runtime=JCB[j].runtime; JCB[w].flag=JCB[j].flag; JCB[w].waittime=JCB[j].waittime; w=w+1; void output() { cout<<\作业相关信息\ cout<<\作业名\作业长度\打印机\磁带机\到达时间\运行时间\ for(int i=0;i cout< <<\} void hrrn() { int waittime; int mintime;/*最早到达时间*/ int q=0; int k,i,j; int runtime; double hrrf; mintime=JCB[0].reachtime ; for(i=1;i if(JCB[i].reachtime for(i=0;i 10 if(JCB[i].reachtime ==mintime) { cout< if(j==i)continue; if(JCB[j].reachtime<=JCB[i].reachtime +JCB[i].runtime )//作业正在执行时,有作业到达 { JCB[j].waittime=JCB[i].reachtime+JCB[i].runtime-JCB[j].reachtime ;//等待时间 } runtime=JCB[i].reachtime +JCB[i].runtime;//系统的执行时间 break; } JCB[j].flag =1; } k=1; while(k for(i=0;i if(JCB[i].flag ==1)//等待状态中的作业 { hrrf=(JCB[i].waittime+JCB[i].runtime) /JCB[i].runtime ;//i的响应比计算,i是第一个状态值为1的 } break; for(j=i+1;j if((JCB[j].flag==1)&&(((JCB[j].waittime+JCB[j].runtime) /JCB[j].runtime) >hrrf)) { hrrf=(JCB[j].waittime+JCB[j].runtime) /JCB[j].runtime; q=j; 11
共分享92篇相关文档