先来先服务调度和最短作业优先调度算法实验报告Word格式文档下载.docx
- 文档编号:1095634
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:22
- 大小:650.33KB
先来先服务调度和最短作业优先调度算法实验报告Word格式文档下载.docx
《先来先服务调度和最短作业优先调度算法实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《先来先服务调度和最短作业优先调度算法实验报告Word格式文档下载.docx(22页珍藏版)》请在冰点文库上搜索。
38.01.0<
49.10.1<
Whatkindofalgorithmdoyouwant?
Pleaseinput1toselectFCFS,or2toselectSJF.
3<
Youhaveinputawrongnumber,pleaseinputagain.
1<
屏幕输出结果:
submitrunstartingfinalwaitturnaround
38.01.08.09.00.01.0
28.50.59.09.50.51.0
19.00.29.59.70.50.7
49.10.19.79.80.60.7
Theaverageturnaroundtimeis0.85
Pleaseinput1toselectFCFS,or2toselectSJF,or0toexit.
测试数据二:
submitrun
160.5
250.9
36.30.1
FCFS和SJF算法结果一样:
submitrunstartingfinalwaitturnaround
250.955.900.9
160.566.500.5
36.30.16.56.60.20.3
Theaverageturnaroundtimeis0.567
测试数据三:
submitrun
150.2
24.20.3
35.10.3
45.20.1
FCFS:
24.20.34.24.500.3
150.255.200.2
35.10.35.25.50.10.4
45.20.15.55.60.30.4
Theaverageturnaroundtimeis0.325
SJF:
45.20.15.25.300.1
35.10.35.35.60.20.5
Theaverageturnaroundtimeis0.275
源程序:
#include"
stdio.h"
#include"
stdlib.h"
string.h"
#defineM50
structsjf{
intjobnumber;
floatsubmittime;
floatruntime;
floatstarttime;
floatfinishtime;
floatwaittime;
floatturnaroundtime;
}temp;
staticstructsjfst[M];
voidinput(structsjf*p,intN)
{
inti;
printf("
Pleaseinputthejobnumber,submittimeandruntime:
\nForexmple:
18.52.0\n"
);
for(i=0;
i<
N;
i++)
{
scanf("
%d%f%f"
&
p[i].jobnumber,&
p[i].submittime,&
p[i].runtime);
}
}
voidprint(structsjf*p,intN)
intk;
floath,g;
runorder:
"
%d"
p[0].jobnumber);
for(k=1;
k<
k++)
-->
p[k].jobnumber);
\nTheprocess'
sinformation:
\n"
\njobnum\tsubmit\trun\tstart\tfinal\twait\tturnaround\n"
for(k=0;
h+=p[k].turnaroundtime;
%d\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t%-.1f\t\n"
p[k].jobnumber,p[k].submittime,p[k].runtime,p[k].starttime,p[k].finishtime,p[k].waittime,p[k].turnaroundtime);
g=h/N;
\nTheaverageturnaroundtimeis%-.2f\n"
g);
/*按提交时间从小到大排序*/
voidsort1(structsjf*p,intN)
inti,j;
for(j=0;
j<
=i;
j++)
if(p[i].submittime<
p[j].submittime)
temp=p[i];
p[i]=p[j];
p[j]=temp;
/*运行*/
voiddeal(structsjf*p,intN)
if(k==0)
{
p[k].starttime=p[k].submittime;
p[k].finishtime=p[k].submittime+p[k].runtime;
}
else
if(p[k].submittime>
p[k-1].finishtime)
{
}
else
p[k].starttime=p[k-1].finishtime;
p[k].finishtime=p[k-1].finishtime+p[k].runtime;
p[k].turnaroundtime=p[k].finishtime-p[k].submittime;
p[k].waittime=p[k].starttime-p[k].submittime;
voidsort2(structsjf*p,intN)
intnext,m,n,k,i;
floatmin;
sort1(p,N);
for(m=0;
m<
m++)
i=0;
if(m==0)
p[m].finishtime=p[m].submittime+p[m].runtime;
else
if(p[m].submittime>
p[m-1].finishtime)
{
p[m].finishtime=p[m].submittime+p[m].runtime;
p[m].finishtime=p[m-1].finishtime+p[m].runtime;
for(n=m+1;
n<
n++)
if(p[n].submittime<
=p[m].finishtime)/*判断内存中每次完成之后又多少到达的进程*/
i++;
min=p[m+1].runtime;
next=m+1;
for(k=m+1;
m+i;
k++)/*找出到达后的进程中运行时间最小的进程*/
if(p[k+1].runtime<
min)
min=p[k+1].runtime;
next=k+1;
temp=p[m+1];
p[m+1]=p[next];
p[next]=temp;
deal(p,N);
print(p,N);
voidmain()
intN,i;
Pleaseinputthetotalnumberofjobs:
N);
input(st,N);
loop2:
Pleaseinput1toselectFCFS,or2toselectSJFor0toexit:
loop:
i);
if(i==0)
exit
(1);
elseif(i==1)
sort1(st,N);
deal(st,N);
print(st,N);
gotoloop2;
elseif(i==2)
sort2(st,N);
gotoloop2;
printf("
Youhaveinputawrongnumber,pleaseinputagain:
gotoloop;
【结论】
(结果)
测试1:
测试二:
测试三:
【小结】
实验中产生的错误及原因分析:
测试用例1的结果:
错误1:
错误解决方式:
主要是子函数sort2()中出的错:
i的作用域,程序修改:
将原来:
intnext,m,n,k,i=0;
改为:
intnext,m,n,k,i;
测试用例2的结果:
错误原因:
未考虑到“提交时间(submittime)大于上个进程的结束时间”的情况:
解决方法:
将原来的:
else
修改为:
测试用例3的结果:
错误分析:
同2一样,未在子函数sort()中未考虑到“提交时间(submittime)大于上个进程的结束时间”的情况:
实验的体会及收获:
通过这次试验,我对处理机的调度算法特别是FCFS和SJF有了更深的理解,而且锻炼了我的思维能力,
使我能更全面地思考问题,以后还需要多做些这方面的练习。
试验不足之处:
试验未考虑同一时间提交多个进程的情况,如:
测试数据:
170.2
27.20.5
370.1
结果应该是:
submitrunstartfinalwaitturnaround
170.27.07.50.00.5
370.17.57.60.50.6
27.20.57.67.80.40.6
Theaverageturnaroundtimeis0.57.
Jobnumsubmitrunstartingfinalwaitturnaround
370.17.07.10.00.1
170.57.17.60.10.6
27.20.27.67.80.60.6
Theaverageturnaroundtimeis0.43.
而程序运行结果是:
程序结果表明该程序还是存在不足之处的。
这是需要继续改进的地方。
指导教师评语及成绩:
评语:
成绩:
指导教师签名:
批阅日期:
实验报告说明
1.实验项目名称:
要用最简练的语言反映实验的内容。
要求与实验指导书中相一致。
2.实验类型:
一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。
3.实验目的与要求:
目的要明确,要抓住重点,符合实验指导书中的要求。
4.实验原理:
简要说明本实验项目所涉及的理论知识。
5.实验环境:
实验用的软硬件环境(配置)。
6.实验方案设计(思路、步骤和方法等):
这是实验报告极其重要的内容。
概括整个实验过程。
对于操作型实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。
对于设计型和综合型实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。
对于创新型实验,还应注明其创新点、特色。
7.实验过程(实验中涉及的记录、数据、分析):
写明具体上述实验方案的具体实施,包括实验过程中的记录、数据和相应的分析。
8.结论(结果):
即根据实验过程中所见到的现象和测得的数据,做出结论。
9.小结:
对本次实验的心得体会、思考和建议。
10.指导教师评语及成绩:
指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价和价值。
注意:
∙实验报告将记入实验成绩;
∙每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 先来先 服务 调度 作业 优先 算法 实验 报告