实验二作业调度模拟程序.docx

上传人:b****3 文档编号:2978219 上传时间:2022-11-16 格式:DOCX 页数:12 大小:382.46KB
下载 相关 举报
实验二作业调度模拟程序.docx_第1页
第1页 / 共12页
实验二作业调度模拟程序.docx_第2页
第2页 / 共12页
实验二作业调度模拟程序.docx_第3页
第3页 / 共12页
实验二作业调度模拟程序.docx_第4页
第4页 / 共12页
实验二作业调度模拟程序.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

实验二作业调度模拟程序.docx

《实验二作业调度模拟程序.docx》由会员分享,可在线阅读,更多相关《实验二作业调度模拟程序.docx(12页珍藏版)》请在冰豆网上搜索。

实验二作业调度模拟程序.docx

实验二作业调度模拟程序

1、

2、

实验二作业调度模拟程序

专业:

08信息管理与信息系统

姓名:

黄赞润

学号:

200806054113

实验目的

(1)加深对作业调度算法的理解;

(2)进行程序设计的训练。

实验内容和要求

用高级语言编写一个或多个作业调度的模拟程序。

单道批处理系统的作业调度程序。

作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。

作业调度算法:

采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度。

总是首先调度在系统中等待时间最长的作业。

每个作业由一个作业控制块JCB表示,JCB可以包含以下信息:

作业名、提交(到达)时间、所需的运行时间、所需的资源、作业状态、链指针等等。

作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三

种之一。

每个作业的最初状态都是等待W。

一、模拟数据的生成

1.

2.

允许用户指定作业的个数(2-24),默认值为5。

允许用户选择输入每个作业的到达时间和所需运行时间。

3.(**)从文件中读入以上数据。

4.(**)也允许用户选择通过伪随机数指定每个作业的到达时间(0-30)和所需运行时间(1-8)。

二、

模拟程序的功能

1.

按照模拟数据的到达时间和所需运行时间,执行FCFS,SJF和HRRN调度算法,程序计算各作业的开始执行时间,各作业的完成时间,周转时间和带权周转时间。

2.

动态演示每调度一次,更新现在系统时刻,处于运行状态和等待各作业的相应信息(作业名、到达时间、所需的运行时间等)对于HRRN算法,能在每次调度时显示各作业的响应比R情况。

3.(**)允许用户在模拟过程中提交新作业。

4.(**)编写并调度一个多道程序系统的作业调度模拟程序。

只要求作业调度算法:

采用基于先来先服务的调度算法。

对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。

三、

模拟数据结果分析

1.

对同一个模拟数据各算法的平均周转时间,平均带权周转时间比较。

2.(**)用曲线图或柱形图表示出以上数据,分析算法的优点和缺点。

四、

其他要求

1.

完成报告书,内容完整,规格规范。

三、

实验方法、步骤及结果测试

1.源程序名:

压缩包文件(zip)中源程序名run.c可执行程序名:

run.exe

2.原理分析及流程图

程序主要为带指针的结构体存储

structjcb

{

charname[10];

intartime;/*到达shijian*/

intrqtime;/*服务*/

intsttime;/*调度*/

intfntime;/*完成*/

floattat;/*周转*/

floattaw;/*带权*/

floatr;/*优先权*/

charstatut;/*状态*/

structjcb*link;/*结构体指针*/,调用相关功能的子函数,实现程序!

流程图:

作业数不

为0

未到达状态且已到达?

方式

状态

到达

状态

到达

 

voidstart()//输入作业数和选择作业方式,调用input和run子函数

voidinput()//子程序--输入作业数据

voidrun(intm)//开始运算,通过for(i=0;i

业数。

判断到达且状态为未到达的作业。

并把状态转为到达,然后通过switch对M进行判断选择,m=1调用fcfs,m=2为sjf,m=3调用hrn。

WN*fcfs(intm)//对作业进行排序。

返回指针*t

WN*sjf(intm)//对作业要求时间进行由小到大排序,返回

*min

WN*hrn(intm)//调用jisuanr,计算权值,然后对作业优先

权值进行由小到大排序,返回*minvoidjisuanr()//计算作业优先权值。

running(WN*p,intm)//将FCFS的*p或者SJF和HRN的

*min传递到running,然后进行A状态转换到R状态,计算调用时间等。

voidprint(intm)//输出各状态作业。

voidprint2(WN*pr,intm)//输出最后结果

voidlast()//计算平均TAT平均TAW

main()//主函数

{

start();

last();

printf("\n结束\n");

getchar();

getchar();

}

算法实现:

存储结构为带指针的结构体,

关键函数:

包括三种作业调度方式。

与关于作业数的总循环。

主要算法实现:

通过do{}while();函数做关于指针的遍历循环,通过子函数调用,实现程序逻辑。

3.主要程序段及其解释:

首先通过structjcb{};定义带指针结构体,主函数只有main()

{

start();

last();

printf("结束");

}

其他由子函数相互调用实现。

通过for(i=0;i

通过

do{

if(p->statut=='u'&&p->artime<=time)

{

p->statut='a';

p=p->link;

iden=0;

}

else

p=p->link;

}while(p!

=NULL);

对已经到达的作业进行从’U’(未到达)到’A’(到达)状态转化,其中iden为标记是否有作业到达,为1的话则表示无作业到达,执行

if(iden)

{

i--;

time++;

}

直到有作业到达,iden变为0

通过switch(m)

{

case1:

p=fcfs(m);/*running*/

running(p,m);

break;

case2:

min=sjf(m);/*running*/

running(min,m);

break;

case3:

min=hrn(m);/*running*/

running(min,m);

break;

}

实现选择调度方式,并通过running子函数运行作业,其中min皆为由子函数调回的最短作业指针和最小权值指针。

通过voidjisuanr()/*计算优先权值*/

{

WN*s;

s=head;

do{

if(s->statut=='a')

s->r=(float)(time-s->artime+s-

>rqtime)/s->rqtime;

s=s->link;

}while(s!

=NULL);

}

通过running(WN*p,intm){

运行作业并计算

p->sttime=time;

p->statut='r';/*a->r*/

p->fntime=p->sttime+p->rqtime;

p->tat=(float)p->fntime-p->artime;

p->taw=(float)p->tat/p->rqtime;

atat=atat+p->tat;

ataw=ataw+p->taw;

print(p,m);

p->statut='f';/*r->f*/

time=p->rqtime+time;

printf("按回车继续");

getch();

}

其中有A到R(运行中)和R到F(完成)的状态转化。

通过voidprint2(WN*pr,intm)

{

p=head;/*完成*/

printf("\n\n系统时间为=%d",time);

printf("\n全部作业已经完成:

\n");

do{

if(p->statut=='f')

{

if(m==3){

printf("%s\t%d\t%d\t%d\t%d\t%4.2f\t%4.2f\t%f\n",

p->name,p->artime,p->rqtime,p-

>sttime,p->fntime,p->tat,p->taw,p->r);

}

else{

printf("%s\t%d\t%d\t%d\t%d\t%4.2f\t%4.2f\t%f\n",

p->name,p->artime,p->rqtime,p-

>sttime,p->fntime,p->tat,p->taw);

}

}

p=p->link;

}while(p!

=NULL);

}

输出全部作业!

4.运行结果及分析测试1:

调度方式的选择!

FCFS的结果(与SJF一样)测试2

方式为FCFS

结果为

方式为SJF

结果为

方式为HRN

结果为

自测:

数据如上,方式为FCFS结果为

数据如上,方式为SJF结果为

数据如上,方式为HRN结果为

结果与预想符合,结论:

程序能正常运行,且结果正确!

四、

实验总结

这次实验让我从所未有的累,这是一个几乎结合了之前关于C语言知识,可以说是第一次用很多零碎的知识拼凑成一个程序,一个月的时间让我懂得如何去编程,事先有正确的逻辑,流程图和伪代码成为必须的工具,之前那种想到什么编什么的方式已经不适用。

虽然这次实验有参照有关程序,但还是靠自己一步一步探索做出来了,也克服了对指针和子函数迷漫,也克服了长程序无从下手的恐惧感,实验最后顺利完成!

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

当前位置:首页 > 法律文书 > 调解书

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

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