进程调度算法实验报告.docx

上传人:b****2 文档编号:17561188 上传时间:2023-07-26 格式:DOCX 页数:19 大小:87.21KB
下载 相关 举报
进程调度算法实验报告.docx_第1页
第1页 / 共19页
进程调度算法实验报告.docx_第2页
第2页 / 共19页
进程调度算法实验报告.docx_第3页
第3页 / 共19页
进程调度算法实验报告.docx_第4页
第4页 / 共19页
进程调度算法实验报告.docx_第5页
第5页 / 共19页
进程调度算法实验报告.docx_第6页
第6页 / 共19页
进程调度算法实验报告.docx_第7页
第7页 / 共19页
进程调度算法实验报告.docx_第8页
第8页 / 共19页
进程调度算法实验报告.docx_第9页
第9页 / 共19页
进程调度算法实验报告.docx_第10页
第10页 / 共19页
进程调度算法实验报告.docx_第11页
第11页 / 共19页
进程调度算法实验报告.docx_第12页
第12页 / 共19页
进程调度算法实验报告.docx_第13页
第13页 / 共19页
进程调度算法实验报告.docx_第14页
第14页 / 共19页
进程调度算法实验报告.docx_第15页
第15页 / 共19页
进程调度算法实验报告.docx_第16页
第16页 / 共19页
进程调度算法实验报告.docx_第17页
第17页 / 共19页
进程调度算法实验报告.docx_第18页
第18页 / 共19页
进程调度算法实验报告.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

进程调度算法实验报告.docx

《进程调度算法实验报告.docx》由会员分享,可在线阅读,更多相关《进程调度算法实验报告.docx(19页珍藏版)》请在冰点文库上搜索。

进程调度算法实验报告.docx

进程调度算法实验报告

进程调度算法实验报告

作业调度

一、实验名称

作业调度算法

二、实验目标

在单道环境下编写作业调度的模拟程序,以加深对作业调度的理解。

单道环境的特点使被调度的作业占有所有的资源。

实现的算法有先来先服务,最短作业优先,最高响应比三种作业调度算法。

三、实验环境要求:

1.PC机。

2.Windows;

3.CodeBlocks

四、实验基本原理

1.本实验设计一个可指定作业个数的作业调度系统。

可以输出先来先服务,最短作业优先,最高响应比三种作业调度算法的结果。

2.先来先服务就是按照各个作业进入系统的自然次序进行调度。

最短作业优先就是优先调度并且处理短作业。

最高响应比优先就是根据在程序运行过程中的最高响应比对应的作业先进行调度处理。

3.在设计程序过程中,将time相关的内容封装到类中,重载了加减乘除和输入输出以及比较运算符,方便12:

00这种形式的数据的加减乘除运算和比较

运算,

五、数据结构设计

1.时间类

classtime{

public:

time(intx=0,inty=0){

time:

:

hour=x;

time:

:

minute=y;

}

time&operator=(consttime&t1)

{

this->hour=t1.hour;

this->minute=t1.minute;

return*this;

}

timeoperator+(timet2)

{

intminutes,hours;

minutes=(minute+t2.minute)%60;hours=hour+t2.hour+(minute+t2.minute)/60;returntime(hours,minutes);

}

timeoperator-(timet2)

{

intminutes,hours;

minutes=minute-t2.minute;if(minute<0){

minutes+=60;

hour--;

}

hours=hour-t2.hour;

returntime(hours,minutes);

}

friendbooloperator<(timet1,timet2)

{

if(t1.hour

returntrue;

}

elseif(t1.hour==t2.hour){

if(t1.minute<=t2.minute){

returntrue;

}

}

returnfalse;

}

friendostream&operator<<(ostream&out,consttime&t1){returnout<

"<

}

friendistream&operator>>(istream&in,time&t1){

inth,m;

scanf("%d:

%d",&h,&m);

t1.hour=h;

t1.minute=m;

returnin;

}

public:

inthour;

intminute;

};

2•作业内容

typedefstructJOB{

charname[20];//Jobname

timein_time;

intrun_time;

timest_time;

timeend_time;

intround_time;〃周转时间

intwait_time;

doublerounds_time;//带权周转

doublereson_radio;〃响应比

}job;

六、流程图

七、源代码

#include

#include

#include

#includeusingnamespacestd;classtime{public:

time(intx=0,inty=0){time:

:

hour=x;

time:

:

minute=y;

}

time&operator=(consttime&t1)

{

this->hour=t1.hour;

this->minute=t1.minute;

return*this;

}

timeoperator+(timet2)

{

intminutes,hours;

minutes=(minute+t2.minute)%60;

hours=hour+t2.hour+(minute+t2.minute)/60;

returntime(hours,minutes);

}

timeoperator-(timet2)

{

intminutes,hours;

minutes=minute-t2.minute;

if(minute<0){

minutes+=60;

hour--;

}

hours=hour-t2.hour;

returntime(hours,minutes);

}

friendbooloperator<(timet1,timet2)

{

if(t1.hour

}

elseif(t1.hour==t2.hour){

if(t1.minute<=t2.minute){returntrue;

}

}

returnfalse;

}

out,

<<

friendostream&operator<<(ostream&consttime&t1){

returnout<

"tl.minute*1.00;

}

friendistream&operator>>(istream&n,time&t1){

inth,m;

scanf("%d:

%d",&h,&m);

tl.hour=h;

tl.minute=m;

returnin;

}

public:

inthour;

intminute;

};

typedefstructJOB{

charname[20];//Jobname

timein_time;

intrun_time;

timest_time;

timeend_time;

intround_time;〃周转时间

intwait_time;

doublerounds_time;〃带权周转

doublereson_radio;〃响应比

}job;

doublesum_time;〃全部作业周转时间和

doublesums_time;〃全部作业带权周转时间和intn;//jobcounts

〃重载max

timemaxn(timet1,timet2){

if(t1.hour>t2.hour){

returnt1;

}

elseif(t1.hour==t2.hour){

if(t1.minute>t2.hour){

returnt1;

}

returnt2;

//eg:

120转化成2:

0

timem_exchange_h(intrun_time){

timerun;

run.hour=run_time/60;

run.minute=run_time%60;

returnrun;

}

//eg:

2:

0转化成120

inth_exchange_m(timet1){

returntl.hour*60+tl.minute;

}

〃先来先服务;

voidjob_input(job*x){

cout<<"作业\t进入时间\t估计运行时间份钟)\t开始时间\t结束时间\t周转时间(分钟)\t带权周转时间"<

for(inti=0;i

cout<

"\t\t"«x[i].end_timevv"\t\t"v

<<

}

<<

cout<<"作业平均周转时间T="sum_time/n<

cout<<"作业平均带权周转时间T="

sums_time/n<

}

voidFCFS(job*x){

sum_time=0;

sums_time=0;

timerun=m_exchange_h(x[0].run_time);x[0].st_time=x[0].in_time;

x[0].end_time=x[0].st_time+run;

x[0].round_time

h_exchange_m(x[0].end_time-x[0].in_time);sum_time+=x[0].round_time;

x[0].rounds_time=x[0].round_time*1.0

x[0].run_time;

sums_time+=x[0].rounds_time;

for(inti=1;i

x[i].st_time=maxn(x[i].in_time,x[i

1].end_time);

x[i].end_time=x[i].st_time

m_exchange_h(x[i].run_time);

x[i].round_time

h_exchange_m(x[i].end_time-x[i].in_time);

x[i].rounds_time=x[i].round_time*1.0

x[i].run_time;

sum_time+=x[i].round_time;

sums_time+=x[i].rounds_time;

}

cout<<"\n【先来先服务作业调度算法计算结果】\n"<

job_input(x);

}

〃短作业优先;

voidSJF(job*x){

intflag[100000];

memset(flag,0,sizeof(flag));

sum_time=0;

sums_time=0;

timerun=m_exchange_h(x[0].run_time);

x[0].st_time=x[0].in_time;

x[O].end_time=x[O].st_time+run;

x[0].round_time=

h_exchange_m(x[O].end_time-x[O].in_time);

sum_time+=x[0].round_time;

x[0].rounds_time=x[0].round_time*1.0/

x[0].run_time;

sums_time+=x[0].rounds_time;

inti=1;//已经运行的程序

inte=0;//上一个运行的程序

flag[0]=1;

while(i

inttemp=-1;

inttime_min=99999999;

for(intj=1;j

if

(x[j].in_time

=1&&x[j]

.run_time

〃cout<<"小于:

"<

time_min=x[j].run_time;

temp=j;

}

if(temp!

=-1){

x[temp].st_time=x[e].end_time;

e=temp;

}

else{

e++;

x[e].st_time=x[e].in_time;

}

x[e].end_time=x[e].st_time+

m_exchange_h(x[e].run_time);

x[e].round_time=

h_exchange_m(x[e].end_time-x[e].in_time);

x[e].rounds_time=x[e].round_time*1.0/x[e].run_time;

sum_time+=x[e].round_time;

sums_time+=x[e].rounds_time;

flag[e]=1;

i++;

}

cout<<"\n【短作业优先调度算法计算结果】

\n"<

job_input(x);

}

〃最高响应比优先;

voidHRN(job*x){

intflag[1OOOOO];

memset(flag,0,sizeof(flag));

sum_time=0;

sums_time=0;

timerun=m_exchange_h(x[0].run_time);

x[0].st_time=x[0].in_time;

x[0].end_time=x[0].st_time+run;

x[0].round_time=

h_exchange_m(x[0].end_time-x[0].in_time);

sum_time+=x[0].round_time;

x[0].rounds_time=x[0].round_time*1.0/

x[0].run_time;

sums_time+=x[0].rounds_time;

inti=1;//已经运行的程序

inte=0;//上一个运行的程序

flag[0]=1;

while(i

inttemp=-1;

doubleradio_max=0;

for(intj=1;j

if

(x[j].in_time

=1){

x[j].reson_radio=h_exchange_m(x[e].end_time-x[j].in_time)*1.0/x[j].run_time;

if(x[j].reson_radio>radio_max){temp=j;

radio_max=x[j].reson_radio;

}

}

}

if(temp!

=-1){

x[temp].st_time=x[e].end_time;

e=temp;

}

else{

e++;

x[e].st_time=x[e].in_time;

}

m_exchange_h(x[e].run_time);

x[e].round_time=

h_exchange_m(x[e].end_time-x[e].in_time);

x[e].rounds_time=x[e].round_time*1.0/x[e].run_time;

sum_time+=x[e].round_time;

sums_time+=x[e].rounds_time;

flag[e]=1;

i++;

}

cout<<"\n【最高响应比调度算法计算结果】

\n"<

job_input(x);

}

intmain()

{

cout<<"作业总数:

";

cin>>n;

cout<

job*jobs=newjob[n];

cout<<"作业信息输入(请按照进入时间先后

顺序输入):

"<

for(inti=0;i

cout<<"正在读入第"<

"<

cout«endl;

cout<<"作业名称:

";

cin>>jobs[i].name;

cout<<"作业进入时间:

";cin>>jobs[i].in_time;

cout<<"作业估计运行时间(分钟):

";

cin>>jobs[i].run_time;

}

//先来先服务;

FCFS(jobs);

//短作业优先;

SJF(jobs);

//最高响应比优先;

HRN(jobs);

return0;

八、运行结果

1]

CftLteefMlamcTjDesktcipi抵花■业遇1悄手沪」三[丄审荃栏廿汪谒&已归

L'l

|乍!

h;

W

-J-U

.忏壬小审『诽二:

H雅计运行时同旳呻):

(aHKjSAir->■•'•'-1:

TO••-:

IIE^

5:

4

.卜].

□Sfd:

J<'B

S:

W

叩才沖);

i1014

BJ1:

勺:

池花丽

纠LAsefMlengjDeskfiapy條惟业曲傾*』三[M肓室理,汪谒度心旧

址人时间估计运讦时间吩钟)

S:

CJ20

8:

TOTO

9;010

勺・5020

亚賈油矚卫T-112-5'才丰"視朗瓦T”.叶

a=i.i12翊

「24

:

!

'

J0:

Oin:

-'11:

0

10!

&10加

11:

D

1:

:

20

学严间【井神:

宇权周停工间

1202.4

12013

知4.5

■:

E4

sft?

roFsb^-"fcT■8,?

■.“¥.营

SH-NrFE.uchFTT^I.

估计-STO司吩钟)

120

5-J

PJ

20

T/5

时阎1^3.25

幵1rbm

B:

0luuO10;J1J;1U

塔朿时同

10;0

11;2j

!

;:

1j;3■

同诘时司•井沖J•菸札剧町司12D

15>>

40

【昱土lh「:

丄诣卡且--去-半】

-.IF-.Bl囘

均MHI■LX

Up行盯间唏沖)

12U

50

in

2C

1*102.5

S'T=177^

幵纭时司

3£0

10:

10

10:

0

li:

耒uH-I2结芒11:

=

rai^rB|〔歼钟:

當和郦轲同

1201

1392.6

TQT

304-S

 

 

 

九、结果分析

三种算法根据输入得出的输出和书上的结果相符,证明算法实现正确。

但是略有不足的是没有实现多道程序下的作业调度,可以进一步补充。

十、本次实验体会

通过实验编写作业调度算法,对作业调度的三种算法有了更加深刻的了解。

在实现单道环境之余,复习了两道环境下的作业调度。

对作业调度有了更加全面的理解。

在实现代码的时候用到了类的重载,复习了C++面向对象知识。

同时实现算法的时候也发生了很多因为粗心导致的bug,在修改代码的过程

中,提高了自己编写代码的能力。

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

当前位置:首页 > IT计算机

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2