实验二作业调度模拟程序Word文档下载推荐.docx

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

实验二作业调度模拟程序Word文档下载推荐.docx

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

实验二作业调度模拟程序Word文档下载推荐.docx

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语言知识,可以说是第一次用很多零碎的知识拼凑成一个程序,一个月的时间让我懂得如何去编程,事先有正确的逻辑,流程图和伪代码成为必须的工具,之前那种想到什么编什么的方式已经不适用。

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

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

当前位置:首页 > 经管营销 > 人力资源管理

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

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