操作系统实验报告批处理系统的作业调度Word格式.docx
《操作系统实验报告批处理系统的作业调度Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告批处理系统的作业调度Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
structtask{
stringname;
/*作业号*/
intarrTime;
/*作业到达时间*/
intserTime;
/*作业要求服务时间*/
intwaiTime;
/*等待时间*/
intbegTime;
/*开始运行时间*/
intfinTime;
/*结束运行时间*/
intturTime;
/*周转时间*/
intwTuTime;
/*带权周转时间*/
intpriority;
/*优先权*/
intfinish;
/*是否已经完成*/
}JCB[10];
存放作业控制块的区域:
#definen10
JCBjobtable[10];
intjobcount;
将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作
业队列头指针定义为:
int*head;
主程序为:
#include<
dos.h>
time.h>
stdlib.h>
#include<
stdio.h>
conio.h>
string.h>
typedefcharstring[10];
/*//定义string为含有10个字符元素的字符数组类型*/
intnum;
voidinput()
{
inti;
system("
cls"
);
printf("
\n请输入作业数量:
"
scanf("
%d"
&
num);
for(i=0;
i<
num;
i++)
\n请输入作业NO.%d:
\n"
i);
作业名称:
%s"
JCB[i].name);
到达时间:
&
JCB[i].arrTime);
服务时间:
JCB[i].serTime);
JCB[i].priority=0;
JCB[i].finish=0;
}
intHRN(intpre)
intcurrent=1,i,j;
/*优先权=(等待时间+服务时间)/服务时间*/
i<
i++)
JCB[i].waiTime=JCB[pre].finTime-JCB[i].arrTime;
/*等待时间=上一个作业的完成时间-到达时间*/
JCB[i].priority=(JCB[i].waiTime+JCB[i].serTime)/JCB[i].serTime;
if(!
JCB[i].finish)
current=i;
/*找到第一个还没完成的作业*/
break;
for(j=i;
j<
j++)/*和后面的作业比较*/
if(!
JCB[j].finish)/*还没完成(运行)*/
if(JCB[current].arrTime<
=JCB[pre].finTime)/*如果作业在上一个作业完成之前到达*/
if(JCB[j].arrTime<
=JCB[pre].finTime&
&
JCB[j].priority>
JCB[current].priority)
current=j;
/*找出到达时间在上一个作业完成之前,优先权高的作业*/
else/*如果作业是在上一个作业完成之后到达*/
JCB[current].arrTime)
/*找出比较早到达的一个*/
if(JCB[j].arrTime==JCB[current].arrTime)/*如果同时到达*/
if(JCB[j].priority>
JCB[current].priority)
/*找出服务时间比较短的一个*/
returncurrent;
/*返回当前作业*/
voidruning(inti,inttimes,intpre,intstaTime,intendTime)
if(times==0)
JCB[i].begTime=JCB[i].arrTime;
JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;
JCB[i].turTime=JCB[i].serTime;
JCB[i].wTuTime=1.0;
staTime=JCB[i].begTime;
else
if(JCB[i].arrTime>
JCB[pre].finTime)
JCB[i].begTime=JCB[pre].finTime;
JCB[i].turTime=JCB[i].finTime-JCB[i].arrTime;
JCB[i].wTuTime=JCB[i].turTime/JCB[i].serTime;
if(times==num-1)
endTime=JCB[i].finTime;
JCB[i].finish=1;
voidprint(inti,inttimes)
名称到达时间服务时间开始时间完成时间周转时间带权周转时间\n"
%9s%9d%9d%9d%9d%9d%9d\n"
JCB[i].name,JCB[i].arrTime,JCB[i].serTime,
JCB[i].begTime,JCB[i].finTime,JCB[i].turTime,JCB[i].wTuTime);
voidcheck()
intstaTime,endTime,sumTurTime=0.0,sumWTuTime=0.0,aveTurTime,aveWTuTime;
intcurrent=0,times=0,pre=0;
JCB[pre].finTime=0;
JCB[i].finish=0;
staTime,endTime,sumTurTime=0.0,sumWTuTime=0.0,aveTurTime,aveWTuTime;
current=0;
times=0;
pre=0;
-------------------------------------------------------------------------\n"
\n--HRRN-----------------------------------------------------------------\n"
for(times=0;
times<
times++)
current=HRN(pre);
runing(current,times,pre,staTime,endTime);
print(current,times);
pre=current;
sumTurTime+=JCB[i].turTime;
sumWTuTime+=JCB[i].wTuTime;
aveTurTime=sumTurTime/num;
aveWTuTime=sumWTuTime/num;
(计与平均
值)%9d%9d%9d%9d\n"
NULL,sumTurTime,aveTurTime,aveWTuTime);
voidmain()
charagain;
do{
/*清屏*/
pleaseinput4groupsofdatas:
input();
check();
Continue...(Y/N):
do{
again=getch();
}while(again!
='
Y'
&
again!
y'
N'
n'
}while(again=='
||again=='
}
五(实验结果与体会
从运行结果得到调度序列结果为:
X1,X2,X3
1到达时间最早,服务时间也最短,其响应比最高;
X
X2到达时间为22,但X1早到达,所以开始时间为22,服务时间为12,所以响应比X1小;
X3到达时间最迟,其响应比最小,所以在最后。
我的体会: