进程调度算法的实现实验报告.docx

上传人:b****7 文档编号:16277481 上传时间:2023-07-12 格式:DOCX 页数:9 大小:62.30KB
下载 相关 举报
进程调度算法的实现实验报告.docx_第1页
第1页 / 共9页
进程调度算法的实现实验报告.docx_第2页
第2页 / 共9页
进程调度算法的实现实验报告.docx_第3页
第3页 / 共9页
进程调度算法的实现实验报告.docx_第4页
第4页 / 共9页
进程调度算法的实现实验报告.docx_第5页
第5页 / 共9页
进程调度算法的实现实验报告.docx_第6页
第6页 / 共9页
进程调度算法的实现实验报告.docx_第7页
第7页 / 共9页
进程调度算法的实现实验报告.docx_第8页
第8页 / 共9页
进程调度算法的实现实验报告.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

进程调度算法的实现实验报告.docx

《进程调度算法的实现实验报告.docx》由会员分享,可在线阅读,更多相关《进程调度算法的实现实验报告.docx(9页珍藏版)》请在冰点文库上搜索。

进程调度算法的实现实验报告.docx

进程调度算法的实现实验报告

进程调度算法的实现实验报告

南昌大学实验报告

---(4)进程调度算法的实现

学生姓名:

学号:

专业班级:

实验类型:

□验证□综合■设计□创新实验日期:

实验成绩:

一、实验目的

通过实验加强对进程调度算法的理解和掌握。

二、实验内容

编写程序实现进程调度算法,具体可以编写程序实现先来先服务算法或优先度高者调度算法。

三、实验要求

1、需写出设计说明;

2、设计实现代码及说明;

3、运行结果;

四、主要实验步骤

1、分析实验内容,画出算法流程图;

2、根据流程图写出实验代码;

3、编译代码,验证结果正确与否;

4、对程序进行修改,得到最后结果。

流程图如下:

五、实验数据及处理结果

六、实验体会或对改进实验的建议

在做这个实验的时候,一开始以为很简单,只要做简单的加减乘除就行了,但是仔细做过以后发现需要考虑很多情况。

比如说输入进程到达时间的时候,要是乱序的该怎么办?

还有到达时间和服务时间等等定义的都是整型变量,但是带权周转时间确会得到小数,此时就需要用到强制转换。

在做系统产生随机数的时候也要考虑随机数的范围,如到达时间可以为0,但是服务时间却不能为0,否则带权周转时间的计算会出错。

七、参考资料

《计算机操作系统》

《计算机操作系统实验指导书》

《C程序设计》

《C语言程序设计_现代方法》

八、实验代码

#include

#include

#include

#defineN5//进程个数,可改变

intrt[N];//到达时间

intst[N];//服务时间

intct[N];//完成时间

intcyt[N];//周转时间

floatrct[N];//带权周转时间

floatav[2];

intn,m,c=1,which;

voidline()//美化程序,使程序运行时更加明朗美观

{

printf("------------------------------------------------------------------\n");

}

voidstart()//表示FCFS算法开始

{

line();

printf("FCFS算法开始\n");

printf("——DesignedbyZhangHong\n");

line();

}

voidend()//表示FCFS算法结束

{

line();

printf("FCFS算法结束,谢谢使用\n");

line();

}

voidinput()

{

printf("请输入%d个进程的到达时间:

",N);

for(n=0;n

scanf("%d",&rt[n]);

printf("请输入%d个进程对应的服务时间:

",N);

for(n=0;n

scanf("%d",&st[n]);

}

voidrandom()

{

srand((unsigned)time(NULL));

for(n=0;n

{

rt[n]=rand()%100;

for(m=0;m

if(n!

=0&&rt[n]==rt[m])

{

rt[n]=rand()%100;

m=0;

}

st[n]=rand()%98+1;

for(m=0;m

if(n!

=0&&st[n]==st[m])

{

st[n]=rand()%98+1;

m=0;

}

}

}

voidordination()//重新排序,应对出现输入的到达时间为乱序的情况

{

inttemp;

for(n=0;n

for(m=0;m

if(rt[m+1]

{

temp=rt[m+1];

rt[m+1]=rt[m];

rt[m]=temp;

temp=st[m+1];

st[m+1]=st[m];

st[m]=temp;

}

}

voidfcfs()//执行fcfs算法

{

av[0]=0;

av[1]=0;

ct[0]=rt[0]+st[0];

for(n=1;n

{

if(ct[n-1]>=rt[n])//考虑当前一个进程完成而后一个进程还没有到达的情况

ct[n]=ct[n-1]+st[n];

else

ct[n]=rt[n]+st[n];

}

for(n=0;n

cyt[n]=ct[n]-rt[n];

for(n=0;n

rct[n]=(float)cyt[n]/(float)st[n];

for(n=0;n

{

av[0]+=(float)cyt[n]/N;

av[1]+=rct[n]/N;

}

}

voidoutput()//输出结果

{

line();

printf("进程名\t");

for(n=0;n

printf("\t%c",65+n);

printf("\t平均\n到达时间");

for(n=0;n

printf("\t%d",rt[n]);

printf("\n服务时间");

for(n=0;n

printf("\t%d",st[n]);

printf("\n完成时间");

for(n=0;n

printf("\t%d",ct[n]);

printf("\n周转时间");

for(n=0;n

printf("\t%d",cyt[n]);

printf("\t%0.1f",av[0]);

printf("\n带权周转时间");

for(n=0;n

printf("\t%0.1f",rct[n]);

printf("\t%0.1f",av[1]);

printf("\n");

line();

}

voidmain()

{

start();

for(;c==1;)

{

for(;;)

{

printf("输入数据还是由系统随机产生数据?

\n1、输入数据\t2、系统随机产生数据\n请输入:

");

scanf("%d",&which);

if(which==1)

{

input();

break;

}

else

if(which==2)

{

random();

break;

}

printf("输入错误,请重新输入!

");

}

ordination();//进程按照到达时间进行排序

fcfs();

output();

printf("继续输入,退出输入。

请输入:

");

scanf("%d",&c);

}

end();

}

 

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

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2