操作系统综合实验报告作业调度算法模拟Word下载.docx
《操作系统综合实验报告作业调度算法模拟Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统综合实验报告作业调度算法模拟Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
3.完成实验报告,并于17周周三之前由学习委员按学号整理好提交给任课
教师。
4.实验报告要求:
①实验目的;
②源程序并附注释;
③对测试结果进行截图;
三.软硬件环境:
电脑,配置Vc++6.0等软件环境
四.实验内容:
为单道批处理系统设计一个作业调度程序,由于单道批处理系统中,
作业一投入运行,它就占有计算机的一切资源知道作业完成为止,因此调
度作业时不必考虑它所有的资源是否得到满足,它所占用的CPU时限等因
素。
作业调度算法:
①先来先服务调度算法(FCFS);
②短作业优先算法;
③最高响应比调度算法;
④最高优先级调度算法;
输入:
每个作业包括数据项,作业调度所需要的数据项:
作业名、提
交时间、运行时间等。
输出:
要求打印每个作业完成后该作业的开始运行时间、完成时间、
周转时间和平均周转时间。
【源程序】
#include<
iostream>
usingnamespacestd;
structjob
{
charname[20];
//作业名
intsubtime;
//提交时间
intruntime;
//运行时间
intstime;
//开始时间
intftime;
//完成时间
intztime;
//周转时间
intwtime;
//等待时间
doubledtime;
//带权周转时间
doublerratio;
//响应比
};
intflag=0;
doublesumztime,sumdtime;
doubleavgztime,avgdtime;
voidinput(job*p,intn);
//输入
voidoutput(job*p,intn);
//输出
voiddatahandle(job*p,intn);
//数据处理
voidsort(job*p,intn);
//按提交时间排序
voidfcfs(job*p,intn);
//先来先服务
voidsjf(job*p,intn);
//短作业优先
voidhrf(job*p,intn);
//最高响应比
intmain()
intn;
cout<
<
endl;
"
/********计算机操作系统综合实验********/"
/***********作业调度算法模拟***********/"
/****************张越男****************/"
/************2012年12月18日**********/"
输入作业数目:
;
cin>
>
n;
job*a=newjob[n];
input(a,n);
fcfs(a,n);
\n"
sjf(a,n);
hrf(a,n);
deletea;
return0;
}
voidinput(job*p,intn)
请输入作业信息:
endl<
for(inti=0;
i<
i++)
{
cout<
作业名:
cin>
p[i].name;
提交时间:
p[i].subtime;
p[i].subtime=(p[i].subtime)/100*60+p[i].subtime%100;
运行时间:
p[i].runtime;
p[i].runtime=(p[i].runtime)/100*60+p[i].runtime%100;
}
voidoutput(job*p,intn)
作业调度顺序:
for(intk=0;
k<
k++)
p[k].name<
"
cout<
name\t"
subtime\t"
runtime\t"
stime\t"
ftime\t"
ztime\t"
dtime\t"
for(inti=0;
p[i].name<
\t"
p[i].subtime/60*100+p[i].subtime-p[i].subtime/60*60<
p[i].runtime/60*100+p[i].runtime-p[i].runtime/60*60<
p[i].stime/60*100+p[i].stime-p[i].stime/60*60<
p[i].ftime/60*100+p[i].ftime-p[i].ftime/60*60<
p[i].ztime/60*100+p[i].ztime-p[i].ztime/60*60<
(int)p[i].dtime/60*100+p[i].dtime-((int)p[i].dtime)/60*60<
平均周转时间="
avgztime<
平均带权周转时间="
avgdtime<
voidsort(job*p,intn)
for(inti=n-1;
i>
=1;
i--)
for(intj=0;
j<
i;
j++)
if(p[i].subtime>
p[j+1].subtime)
{
jobtemp;
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
voiddatahandle(job*p,intn)
sumztime=sumdtime=0;
p[0].stime=p[0].subtime;
p[0].ftime=p[0].subtime+p[0].runtime;
for(inti=1;
if(p[i-1].ftime>
p[i].subtime)
{
p[i].stime=p[i-1].ftime;
p[i].ftime=p[i-1].ftime+p[i].runtime;
/*这里要特别小心,刚开始没考虑到下一个的开始时间可能大于上一个
的结束时间*/
}
else
p[i].stime=p[i].subtime;
p[i].ftime=p[i].subtime+p[i].runtime;
for(intj=0;
p[j].ztime=p[j].ftime-p[j].subtime;
p[j].dtime=p[j].ztime*1.0/p[j].runtime*1.0;
sumztime+=p[j].ztime;
sumdtime+=p[j].dtime;
avgztime=sumztime/n;
avgdtime=sumdtime/n;
voidfcfs(job*p,intn)
sort(p,n);
datahandle(p,n);
先来先服务调度算法:
output(p,n);
voidsjf(job*p,intn)
n-1;
intk=0;
if(i==0)
p[i].ftime=p[i].runtime+p[i-1].ftime;
for(intj=i+1;
if(p[j].subtime<
=p[i].ftime)
k++;
doubleminstime=p[i+1].runtime;
intps=i+1;
for(intm=i+1;
m<
i+k;
m++)
if(p[m+1].runtime<
minstime)
minstime=p[m+1].runtime;
ps=m+1;
jobtemp;
temp=p[i+1];
p[i+1]=p[ps];
p[ps]=temp;
datahandle(p,n);
短作业优先算法:
output(p,n);
voidhrf(job*p,intn)
sort(p,n);
for(inti=0;
intk=0;
if(i==0)
p[i].ftime=p[i].subtime+p[i].runtime;
else
p[i].ftime=(p[i].runtime+p[i-1].ftime);
for(intj=i+1;
if(p[j].subtime<
k++;
doublemaxrratio=(p[i].ftime-p[i+1].subtime)/(1.0*p[i+1].runtime);
intps=i+1;
for(intm=i+1;
{
if((p[i].ftime-p[m+1].subtime)/p[m+1].runtime>
=maxrratio)
maxrratio=(p[i].ftime-p[m+1].subtime)/(1.0*p[m+1].runtime);
ps=m+1;
}
jobtemp;
temp=p[i+1];
p[i+1]=p[ps];
p[ps]=temp;
最高响应比调度算法:
五.实验结果
1输入作业数目:
4
输入作业信息:
作业名:
job1作业名:
job2
提交时间:
800提交时间:
850
运行时间:
200运行时间:
50
job3作业名:
job4
900提交时间:
950
10运行时间:
20
2如果自己输入的顺序不是按时间顺序输入的或者第一个作业结束的时候
第二个作业还没开始:
六.实验总结:
首先写代码的时候没考虑到一个问题,也就是下一个作业的开始时间可
能大于上一个作业的结束时间,直接算出:
p[i].ftime=p[i-1].ftime+p[i].runtime;
但这是错误的,因为可能第一个作业结束的时候,第二个作业还没开始。
所以经过调试,把它修改为:
if(p[i-1].ftime>
p[i].stime=p[i-1].ftime;
p[i].ftime=p[i-1].ftime+p[i].runtime;
else
p[i].stime=p[i].subtime;
p[i].ftime=p[i].subtime+p[i].runtime;
所以在写代码之前一定要考虑好各种可能出现的情况。
之后,是浮点数和整型数之间的问题。
比如,计算带权周转时间的时候
必须要(p[j].dtime=p[j].ztime*1.0/p[j].runtime*1.0)乘以1.0!
因为
runtime,ztime都是整型数。
最后,虽然本次实验占用了我很多时间和精力,但完完整整的做出整个
实验后还是很替自己高兴。
总的来说,收获很多。
七.指导老师评语及得分:
签名:
年月日