实验二作业调度模拟程序Word文档下载推荐.docx
- 文档编号:20091536
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:14
- 大小:166.71KB
实验二作业调度模拟程序Word文档下载推荐.docx
《实验二作业调度模拟程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《实验二作业调度模拟程序Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
1.允许用户指定作业的个数(2-24),默认值为5。
2.允许用户选择输入每个作业的到达时间和所需运行时间。
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;
/*结构体指针*/,调用相关功能的子函数,实现程序!
流程图:
voidstart()//输入作业数和选择作业方式,调用input和run子函数
voidinput()//子程序--输入作业数据
voidrun(intm)//开始运算,通过for(i=0;
i<
n;
i++)循环,其中n为作业数。
判断到达且状态为未到达的作业。
并把状态转为到达,然后通过switch对M进行判断选择,m=1调用fcfs,m=2为sjf,m=3调用hrn。
WN*fcfs(intm)//对作业进行排序。
返回指针*t
WN*sjf(intm)//对作业要求时间进行由小到大排序,返回*min
WN*hrn(intm)//调用jisuanr,计算权值,然后对作业优先权值进行由小到大排序,返回*min
voidjisuanr()//计算作业优先权值。
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();
}
算法实现:
存储结构为带指针的结构体,
关键函数:
包括三种作业调度方式。
与关于作业数的总循环。
主要算法实现:
通过do{}while();
函数做关于指针的遍历循环,通过子函数调用,实现程序逻辑。
3.主要程序段及其解释:
首先通过structjcb{};
定义带指针结构体,主函数只有main()
结束"
其他由子函数相互调用实现。
通过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(min,m);
case3:
min=hrn(m);
实现选择调度方式,并通过running子函数运行作业,其中min皆为由子函数调回的最短作业指针和最小权值指针。
通过voidjisuanr()/*计算优先权值*/
WN*s;
s=head;
do{
if(s->
)
s->
r=(float)(time-s->
artime+s->
rqtime)/s->
rqtime;
s=s->
}while(s!
通过running(WN*p,intm)运行作业并计算
p->
sttime=time;
r'
/*a->
r*/
fntime=p->
sttime+p->
rqtime;
tat=(float)p->
fntime-p->
artime;
taw=(float)p->
tat/p->
atat=atat+p->
tat;
ataw=ataw+p->
taw;
print(p,m);
f'
/*r->
f*/
time=p->
rqtime+time;
按回车继续"
getch();
其中有A到R(运行中)和R到F(完成)的状态转化。
通过voidprint2(WN*pr,intm)
p=head;
printf("
\n\n系统时间为=%d"
time);
\n全部作业已经完成:
\n"
if(p->
statut=='
if(m==3){
%s\t%d\t%d\t%d\t%d\t%4.2f\t%4.2f\t%f\n"
name,p->
artime,p->
rqtime,p->
sttime,p->
fntime,p->
tat,p->
taw,p->
r);
}
else{
taw);
p=p->
}while(p!
=NULL);
输出全部作业!
4.运行结果及分析
测试1:
调度方式的选择!
FCFS的结果(与SJF一样)
测试2
方式为FCFS
结果为
方式为SJF
方式为HRN
自测:
数据如上,方式为FCFS
数据如上,方式为SJF
数据如上,方式为HRN
结果与预想符合,结论:
程序能正常运行,且结果正确!
四、实验总结
这次实验让我从所未有的累,这是一个几乎结合了之前关于C语言知识,可以说是第一次用很多零碎的知识拼凑成一个程序,一个月的时间让我懂得如何去编程,事先有正确的逻辑,流程图和伪代码成为必须的工具,之前那种想到什么编什么的方式已经不适用。
虽然这次实验有参照有关程序,但还是靠自己一步一步探索做出来了,也克服了对指针和子函数迷漫,也克服了长程序无从下手的恐惧感,实验最后顺利完成!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 作业 调度 模拟 程序