操作系统作业调度实验Word格式.docx

上传人:b****6 文档编号:20280611 上传时间:2023-01-21 格式:DOCX 页数:12 大小:58.99KB
下载 相关 举报
操作系统作业调度实验Word格式.docx_第1页
第1页 / 共12页
操作系统作业调度实验Word格式.docx_第2页
第2页 / 共12页
操作系统作业调度实验Word格式.docx_第3页
第3页 / 共12页
操作系统作业调度实验Word格式.docx_第4页
第4页 / 共12页
操作系统作业调度实验Word格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统作业调度实验Word格式.docx

《操作系统作业调度实验Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统作业调度实验Word格式.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统作业调度实验Word格式.docx

intminute;

};

structJob//作业

stringjobname;

//作业名

timeintime;

//进入时间

intruntime;

//作业估计运行时间

timestarttime;

//作业开始时间

timeendtime;

//作业结束时间

intcycletime;

//作业周转时间

floatcltime;

//作业带权周转时间

boolhaverun;

//是否已运行

六、流程图

图1作业调度算法流程图

七、源代码

#include<

iostream>

string>

usingnamespacestd;

floatT=0;

//作业平均周转时间

floatW=0;

//作业带权平均周转时间

voidshowInput(Jobjob[],int&

n)//输入提示

cout<

<

"

**********请按作业进入时间先后顺序输入*********"

endl;

for(inti=0;

i<

n;

i++)

{

cout<

作业"

i+1<

:

作业名:

;

cin>

>

job[i].jobname;

作业进入时间:

scanf("

%d:

%d"

&

job[i].intime.hour,&

job[i].intime.minute);

作业估计运行时间:

job[i].runtime;

job[i].starttime.hour=0;

job[i].starttime.minute=0;

job[i].endtime.hour=0;

job[i].endtime.minute=0;

job[i].cycletime=0;

job[i].cltime=0;

job[i].haverun=false;

//标记为未运行

*********************"

}

}

voidInit(Jobjob[],int&

n)//初始化

T=0;

W=0;

voidshowTime(timetime)//显示时间

time.hour<

time.minute;

inttimeDiff(timet1,timet2)//计算时间差,时间t1比t2大

returnt1.hour*60+t1.minute-(t2.hour*60+t2.minute);

timetimeAdd(timetime,intaddtime)//时间相加

time.hour+=addtime/60;

time.minute+=addtime%60;

if(time.minute>

=60)

time.hour++;

time.minute-=60;

returntime;

boolcomtime(timet1,timet2)//比较两个时间的大小,第一个大就返回TRUE

if(t1.hour>

t2.hour)

returntrue;

elseif(t1.hour==t2.hour&

&

t1.minute>

=t2.minute)

else

returnfalse;

voidshowResult(Jobjob[],int&

n)//显示结果

jobname\tintime\truntime\tsttime\tendtime\t周转时间(分钟)\t带权周转时间"

*******************************************************************"

job[i].jobname<

\t"

showTime(job[i].intime);

job[i].runtime<

showTime(job[i].starttime);

showTime(job[i].endtime);

\t"

job[i].cycletime<

\t\t"

job[i].cltime<

作业平均周转时间:

T="

T/(n*1.0)<

作业带权平均周转时间:

W="

W/(n*1.0)<

intminRuntime(Jobjob[],int&

n,time&

t)//找出作业中最短作业下标

intmin=-1;

if(job[i].haverun==false&

comtime(t,job[i].intime)==true)

{

min=i;

break;

}

for(intj=min+1;

j<

j++)

if(job[j].haverun==false&

job[j].runtime<

job[min].runtime&

comtime(t,job[j].intime)==true)

min=j;

returnmin;

voidSJF(Jobjob[],int&

n)//短作业优先作业调度

structtimet;

job[0].starttime.hour=job[0].intime.hour;

job[0].starttime.minute=job[0].intime.minute;

job[0].endtime=timeAdd(job[0].starttime,job[0].runtime);

job[0].haverun=true;

job[0].cycletime=timeDiff(job[0].endtime,job[0].intime);

job[0].cltime=job[0].cycletime*1.0/job[0].runtime;

T+=job[0].cycletime;

W+=job[0].cltime;

t=job[0].endtime;

while(minRuntime(job,n,t)!

=-1)

inti=minRuntime(job,n,t);

if(comtime(job[i].intime,t))

job[i].starttime=job[i].intime;

else

job[i].starttime=t;

job[i].endtime=timeAdd(job[i].starttime,job[i].runtime);

job[i].haverun=true;

job[i].cycletime=timeDiff(job[i].endtime,job[i].intime);

job[i].cltime=job[i].cycletime*1.0/job[i].runtime;

T+=job[i].cycletime;

W+=job[i].cltime;

t=job[i].endtime;

intFirstintime(Jobjob[],int&

n)//找出作业中最先到的

if(job[i].haverun==false)

}

comtime(job[min].intime,job[j].intime))

voidFCFS(Jobjob[],int&

n)//先来先服务作业调度

while(Firstintime(job,n)!

inti=Firstintime(job,n);

voidmain()

请输入作业数:

intn;

//作业数

cin>

Job*job=newJob[n];

if(n<

=0)

输入不合法!

exit(-1);

showInput(job,n);

FCFS(job,n);

先来先服务:

showResult(job,n);

Init(job,n);

SJF(job,n);

//短作业优先

短作业优先:

system("

pause"

);

八、运行结果

用户输入作业的相关信息,程序输出相应的各种算法运行结果。

以下为程序运行后的输出数据:

输入信息:

运行结果:

九、结果分析

(1)先来先服务输出数据分析:

作业1至作业4的提交时间分别为 8:

00、8:

50、9:

00、9:

50。

所以作业的执行序列为作业1、作业2、作业3和作业4。

前一个作业的完成时间即为后一个作业的开始时间。

(2)短作业优先输出数据分析:

系统时间  

时间8:

00 :

作业1提交,马上被调度运行,开始时间为8:

00,运行时间为2:

00。

50 :

作业2提交,因作业1在运行,故作业2暂时等待。

时间9:

作业3提交,因作业1在运行,故作业3暂时等待。

作业4提交,因作业1在运行,故作业4暂时等待。

时间10:

作业1完成,进入完成队列。

目前提交的作业有:

作业2、作业3、作业4;

按短作业优先原则,作业3运行时间为0:

10最短,故作业3被调度运行。

作业2和作业4继续等待。

10 :

作业3完成,进入完成队列。

作业2和作业4。

按短作业优先原则,作业4的运行时间为0:

20最短,故作业4被调度运行,作业2继续等待。

30 :

作业4完成,进入完成队列。

目前提交的作业仅有作业2,故作业2被调度运行,运行时间为0:

5。

时间11:

20 :

作业2完成,进入完成队列。

程序执行完毕。

十、本次实验体会

加深了对作业的理解,掌握了基本的作业调度算法。

通过对各种作业调度算法的综合比较,理解各种算法的优劣。

十一、参考资料

(1)陈向群杨芙清著《操作系统教程》北京大学出版社

(2)AndrewS.Tanenbaum著陈向群马洪兵等译《现代操作系统》机械工业出版社

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

当前位置:首页 > 小学教育 > 其它课程

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

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