先来先服务调度和最短作业优先调度算法实验报告.docx

上传人:b****2 文档编号:16920782 上传时间:2023-04-24 格式:DOCX 页数:22 大小:650.33KB
下载 相关 举报
先来先服务调度和最短作业优先调度算法实验报告.docx_第1页
第1页 / 共22页
先来先服务调度和最短作业优先调度算法实验报告.docx_第2页
第2页 / 共22页
先来先服务调度和最短作业优先调度算法实验报告.docx_第3页
第3页 / 共22页
先来先服务调度和最短作业优先调度算法实验报告.docx_第4页
第4页 / 共22页
先来先服务调度和最短作业优先调度算法实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

先来先服务调度和最短作业优先调度算法实验报告.docx

《先来先服务调度和最短作业优先调度算法实验报告.docx》由会员分享,可在线阅读,更多相关《先来先服务调度和最短作业优先调度算法实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

先来先服务调度和最短作业优先调度算法实验报告.docx

先来先服务调度和最短作业优先调度算法实验报告

 

实验概述:

【实验目的及要求】

理解并掌握处理机调度算法

【实验原理】

基于先来先服务调度和最短作业优先调度算法思想用C语言编程实现

【实验环境】(使用的软件)

VisualC++6.0

实验内容:

本实验模拟在单处理机情况下处理机调度,用C语言编程实现先来先服务和最短作业优先调度算法。

【实验方案设计】

FCFS流程图:

SJF流程图:

 

试验总设计流程图:

进程等待时间=进程开始运行时间-进程提交时间(即进程处于就绪态时间)

进程周转时间=进程结束时间-进程提交时间

 

【实验过程】(实验步骤、记录、数据、分析)

测试用例1:

屏幕显示:

Pleaseinputthetotalnumberofjobs

输入:

4<回车>

屏幕显示:

Pleaseinputjobnumber,submittimeandruntime

输入:

19.00.2<回车>

28.50.5<回车>

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

Whatkindofalgorithmdoyouwant?

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:

submitrunstartingfinalwaitturnaround

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:

submitrunstartingfinalwaitturnaround

24.20.34.24.500.3

150.255.200.2

45.20.15.25.300.1

35.10.35.35.60.20.5

Theaverageturnaroundtimeis0.275

源程序:

#include"stdio.h"

#include"stdlib.h"

#include"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

{

scanf("%d%f%f",&p[i].jobnumber,&p[i].submittime,&p[i].runtime);

}

}

voidprint(structsjf*p,intN)

{

intk;

floath,g;

printf("runorder:

");

printf("%d",p[0].jobnumber);

for(k=1;k

printf("-->%d",p[k].jobnumber);

printf("\nTheprocess'sinformation:

\n");

printf("\njobnum\tsubmit\trun\tstart\tfinal\twait\tturnaround\n");

for(k=0;k

{

h+=p[k].turnaroundtime;

printf("%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;

printf("\nTheaverageturnaroundtimeis%-.2f\n",g);

}

/*按提交时间从小到大排序*/

voidsort1(structsjf*p,intN)

{

inti,j;

for(i=0;i

for(j=0;j<=i;j++)

if(p[i].submittime

{

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

/*运行*/

voiddeal(structsjf*p,intN)

{

intk;

for(k=0;k

{

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)

{

p[k].starttime=p[k].submittime;

p[k].finishtime=p[k].submittime+p[k].runtime;

}

else

{

p[k].starttime=p[k-1].finishtime;

p[k].finishtime=p[k-1].finishtime+p[k].runtime;

}

}

}

for(k=0;k

{

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

{

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;

}

else

p[m].finishtime=p[m-1].finishtime+p[m].runtime;

}

for(n=m+1;n

{

if(p[n].submittime<=p[m].finishtime)/*判断内存中每次完成之后又多少到达的进程*/

i++;

}

min=p[m+1].runtime;

next=m+1;

for(k=m+1;k

{

if(p[k+1].runtime

{

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;

printf("Pleaseinputthetotalnumberofjobs:

");

scanf("%d",&N);

input(st,N);

loop2:

printf("Whatkindofalgorithmdoyouwant?

Pleaseinput1toselectFCFS,or2toselectSJFor0toexit:

");

loop:

scanf("%d",&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;

}

else

{

printf("Youhaveinputawrongnumber,pleaseinputagain:

");

gotoloop;

}

}

【结论】(结果)

测试1:

测试二:

测试三:

【小结】

实验中产生的错误及原因分析:

测试用例1的结果:

错误1:

错误解决方式:

主要是子函数sort2()中出的错:

i的作用域,程序修改:

将原来:

intnext,m,n,k,i=0;

floatmin;

sort1(p,N);

for(m=0;m

{

改为:

intnext,m,n,k,i;

floatmin;

sort1(p,N);

for(m=0;m

{

i=0;

测试用例2的结果:

错误1:

错误原因:

未考虑到“提交时间(submittime)大于上个进程的结束时间”的情况:

解决方法:

将原来的:

else

{

p[m].finishtime=p[m-1].finishtime+p[m].runtime;

}

修改为:

else

{

if(p[m].submittime>p[m-1].finishtime)

{

p[m].finishtime=p[m].submittime+p[m].runtime;

}

else

p[m].finishtime=p[m-1].finishtime+p[m].runtime;

}

测试用例3的结果:

错误1:

错误分析:

同2一样,未在子函数sort()中未考虑到“提交时间(submittime)大于上个进程的结束时间”的情况:

解决方法:

将原来的:

else

p[m].finishtime=p[m-1].finishtime+p[m].runtime;

修改为:

else

{

if(p[m].submittime>p[m-1].finishtime)

{

p[m].finishtime=p[m].submittime+p[m].runtime;

}

else

p[m].finishtime=p[m-1].finishtime+p[m].runtime;

}

实验的体会及收获:

通过这次试验,我对处理机的调度算法特别是FCFS和SJF有了更深的理解,而且锻炼了我的思维能力,

使我能更全面地思考问题,以后还需要多做些这方面的练习。

试验不足之处:

试验未考虑同一时间提交多个进程的情况,如:

测试数据:

submitrun

170.2

27.20.5

370.1

结果应该是:

FCFS:

submitrunstartfinalwaitturnaround

170.27.07.50.00.5

370.17.57.60.50.6

27.20.57.67.80.40.6

Theaverageturnaroundtimeis0.57.

SJF:

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.指导教师评语及成绩:

指导教师依据学生的实际报告内容,用简练语言给出本次实验报告的评价和价值。

注意:

∙实验报告将记入实验成绩;

∙每次实验开始时,交上一次的实验报告,否则将扣除此次实验成绩。

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

当前位置:首页 > 工作范文 > 其它

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

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