操作系统实验报告批处理系统的作业调度.doc

上传人:b****1 文档编号:238378 上传时间:2022-10-07 格式:DOC 页数:6 大小:42.50KB
下载 相关 举报
操作系统实验报告批处理系统的作业调度.doc_第1页
第1页 / 共6页
操作系统实验报告批处理系统的作业调度.doc_第2页
第2页 / 共6页
操作系统实验报告批处理系统的作业调度.doc_第3页
第3页 / 共6页
操作系统实验报告批处理系统的作业调度.doc_第4页
第4页 / 共6页
操作系统实验报告批处理系统的作业调度.doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

操作系统实验报告批处理系统的作业调度.doc

《操作系统实验报告批处理系统的作业调度.doc》由会员分享,可在线阅读,更多相关《操作系统实验报告批处理系统的作业调度.doc(6页珍藏版)》请在冰豆网上搜索。

操作系统实验报告批处理系统的作业调度.doc

实验一批处理系统的作业调度

一.实验目的

(1)加深对作业概念的理解。

(2)深入了解批处理系统如何组织作业、管理作业和调度作业。

二.实验内容

编写程序完成批处理系统的作业调度,要求采用响应比优先调度算法。

三.实验原理

最高响应比优先法(HRRN)是对FCFS方式和SJF方式的一种综合平衡。

HRRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。

响应比R定义如下:

R=(W+T)/T=1+W/T

其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。

每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。

这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。

这种算法是介于FCFS和SJF之间的一种折中算法。

由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRRN方式时其吞吐量将小于采用SJF法时的吞吐量。

另外,由于每次调度前要计算响应比,系统开销也要相应增加。

四.实验部分源程序

实验中,作业控制块及队列的数据结构定义如下:

structtask{

stringname;/*作业号*/

intarrTime;/*作业到达时间*/

intserTime;/*作业要求服务时间*/

intwaiTime;/*等待时间*/

intbegTime;/*开始运行时间*/

intfinTime;/*结束运行时间*/

intturTime;/*周转时间*/

intwTuTime;/*带权周转时间*/

intpriority;/*优先权*/

intfinish;/*是否已经完成*/

}JCB[10];

存放作业控制块的区域:

#definen10

JCBjobtable[10];

intjobcount;

将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作业队列头指针定义为:

int*head;

主程序为:

#include

#include

#include

#include

#include

#include

typedefcharstring[10];/*//定义string为含有10个字符元素的字符数组类型*/

structtask{

stringname;/*作业号*/

intarrTime;/*作业到达时间*/

intserTime;/*作业要求服务时间*/

intwaiTime;/*等待时间*/

intbegTime;/*开始运行时间*/

intfinTime;/*结束运行时间*/

intturTime;/*周转时间*/

intwTuTime;/*带权周转时间*/

intpriority;/*优先权*/

intfinish;/*是否已经完成*/

}JCB[10];

intnum;

voidinput()

{

inti;

system("cls");

printf("\n请输入作业数量:

");

scanf("%d",&num);

for(i=0;i

{

printf("\n请输入作业NO.%d:

\n",i);

printf("作业名称:

");

scanf("%s",JCB[i].name);

printf("到达时间:

");

scanf("%d",&JCB[i].arrTime);

printf("服务时间:

");

scanf("%d",&JCB[i].serTime);

JCB[i].priority=0;

JCB[i].finish=0;

}

}

intHRN(intpre)

{

intcurrent=1,i,j;/*优先权=(等待时间+服务时间)/服务时间*/

for(i=0;i

{

JCB[i].waiTime=JCB[pre].finTime-JCB[i].arrTime;/*等待时间=上一个作业的完成时间-到达时间*/

JCB[i].priority=(JCB[i].waiTime+JCB[i].serTime)/JCB[i].serTime;

}

for(i=0;i

{

if(!

JCB[i].finish)

{

current=i;/*找到第一个还没完成的作业*/

break;

}

}

for(j=i;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/*如果作业是在上一个作业完成之后到达*/

{

if(JCB[j].arrTime

current=j;/*找出比较早到达的一个*/

if(JCB[j].arrTime==JCB[current].arrTime)/*如果同时到达*/

if(JCB[j].priority>JCB[current].priority)

current=j;/*找出服务时间比较短的一个*/

}

}

}

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[i].arrTime;

else

JCB[i].begTime=JCB[pre].finTime;

JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;

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)

{

if(times==0)

{

printf("名称到达时间服务时间开始时间完成时间周转时间带权周转时间\n");

}

printf("%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()

{

inti;

intstaTime,endTime,sumTurTime=0.0,sumWTuTime=0.0,aveTurTime,aveWTuTime;

intcurrent=0,times=0,pre=0;

JCB[pre].finTime=0;

for(i=0;i

{

JCB[i].finish=0;

}

staTime,endTime,sumTurTime=0.0,sumWTuTime=0.0,aveTurTime,aveWTuTime;

current=0;times=0;pre=0;

JCB[pre].finTime=0;

printf("-------------------------------------------------------------------------\n");

for(i=0;i

{

JCB[i].finish=0;

}

staTime,endTime,sumTurTime=0.0,sumWTuTime=0.0,aveTurTime,aveWTuTime;

current=0;times=0;pre=0;

JCB[pre].finTime=0;

printf("\n--HRRN-----------------------------------------------------------------\n");

for(times=0;times

{

current=HRN(pre);

runing(current,times,pre,staTime,endTime);

print(current,times);

pre=current;

}

for(i=0;i

{

sumTurTime+=JCB[i].turTime;

sumWTuTime+=JCB[i].wTuTime;

}

aveTurTime=sumTurTime/num;

aveWTuTime=sumWTuTime/num;

printf("(计与平均值)%9d%9d%9d%9d\n",NULL,sumTurTime,aveTurTime,aveWTuTime);

printf("-------------------------------------------------------------------------\n");

}

voidmain()

{

charagain;

do{

system("cls");/*清屏*/

printf("pleaseinput4groupsofdatas:

\n");

input();

check();

printf("Continue...(Y/N):

");

do{

aga

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1