操作系统作业调度实验文档格式.docx
- 文档编号:13919983
- 上传时间:2022-10-15
- 格式:DOCX
- 页数:10
- 大小:48.04KB
操作系统作业调度实验文档格式.docx
《操作系统作业调度实验文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统作业调度实验文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
(3)主要的作业调度算法包括:
先来先服务(FCFS)、短作业优先和最高
响应比
4)调度策略的指标:
最常用的调度性能指标有,周转时间(带权)、吞吐
率、响应时间以及设备利用率。
五、数据结构设计
(1)作业控制块,包括作业的基本信息描述structtime//时间的数据结构
{
六、流程图
图1作业调度算法流程图
七、源代码
#include<
iostream>
string>
usingnamespacestd;
structtime//时间的数据结构{
inthour;
intminute;
};
structJob//作业
stringjobname;
timeintime;
intruntime;
timestarttime;
timeendtime;
//作业名
//进入时间//作业估计运行时间//作业开始时间
//作业结束时间
intcycletime;
//作业周转时间
floatcltime;
//作业带权周转时间
boolhaverun;
//是否已运行
floatT=0;
//作业平均周转时间
floatW=0;
//作业带权平均周转时间
voidshowInput(Jobjob[],int&
n)//输入提示
cout<
<
"
**********请按作业进入时间先后顺序输入*********"
endl;
for(inti=0;
i<
n;
i++)
作业"
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)//初始化
for(inti=0;
job[i].starttime.hour=0;
job[i].starttime.minute=0;
job[i].endtime.hour=0;
job[i].endtime.minute=0;
job[i].cycletime=0;
//标记为未运行}
T=0;
W=0;
voidshowTime(timetime)//显示时间
{cout<
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);
cout<
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].runtimecomtime(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;
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)//先来先服务作业调度
job[0].starttime.minute=job[0].intime.minute;
job[0].endtime=timeAdd(job[0].starttime,job[0].runtime);
T+=job[0].cycletime;
while(Firstintime(job,n)!
inti=Firstintime(job,n);
if(comtime(job[i].intime,t))
job[i].starttime=job[i].intime;
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 作业 调度 实验