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

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

南昌大学实验报告---(4)进程调度算法的实现学生姓名:学号:专业班级:实验类型:□验证□综合■设计□创新实验日期:实验成绩:一、实验目的通过实验加强对进程调度算法的理解和掌握。二、实验内容编写程序实现进程调度算法,具体可以编写程序实现先来先服务算法或优先度高者调度算法。三、实验要求1、需写出设计说明;2、设计实现代码及说明;3、运行结果;四、主要实验步骤1、分析实验内容,画出算法流程图;2、根据流程图写出实验代码;3、编译代码,验证结果正确与否;4、对程序进行修改,得到最后结果。流程图如下:开始系统随机产生数据将数据按照到达时间从小到大排序用户输入数据进程到达时前一个进程是否已经完成完成时间=服务时间+前一个进程完成时间完成时间=服务时间+到达时间周转时间=完成时间-到达时间带权周转时间=完成时间/服务时间是否所有进程已完成计算输出结果结束YNYNYN五、实验数据及处理结果六、实验体会或对改进实验的建议在做这个实验的时候,一开始以为很简单,只要做简单的加减乘除就行了,但是仔细做过以后发现需要考虑很多情况。比如说输入进程到达时间的时候,要是乱序的该怎么办?还有到达时间和服务时间等等定义的都是整型变量,但是带权周转时间确会得到小数,此时就需要用到强制转换。在做系统产生随机数的时候也要考虑随机数的范围,如到达时间可以为0,但是服务时间却不能为0,否则带权周转时间的计算会出错。七、参考资料《计算机操作系统》《计算机操作系统实验指导书》《C程序设计》《C语言程序设计_现代方法》八、实验代码#includestdio.h#includestdlib.h#includetime.h#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;nN;n++)scanf(%d,&rt[n]);printf(请输入%d个进程对应的服务时间:,N);for(n=0;nN;n++)scanf(%d,&st[n]);}voidrandom(){srand((unsigned)time(NULL));for(n=0;nN;n++){rt[n]=rand()%100;for(m=0;mn;m++)if(n!=0&&rt[n]==rt[m]){rt[n]=rand()%100;m=0;}st[n]=rand()%98+1;for(m=0;mn;m++)if(n!=0&&st[n]==st[m]){st[n]=rand()%98+1;m=0;}}}voidordination()//重新排序,应对出现输入的到达时间为乱序的情况{inttemp;for(n=0;nN;n++)for(m=0;mN-n-1;m++)if(rt[m+1]rt[m]){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;nN;n++){if(ct[n-1]=rt[n])//考虑当前一个进程完成而后一个进程还没有到达的情况ct[n]=ct[n-1]+st[n];elsect[n]=rt[n]+st[n];}for(n=0;nN;n++)cyt[n]=ct[n]-rt[n];for(n=0;nN;n++)rct[n]=(float)cyt[n]/(float)st[n];for(n=0;nN;n++){av[0]+=(float)cyt[n]/N;av[1]+=rct[n]/N;}}voidoutput()//输出结果{line();printf(进程名\t);for(n=0;nN;n++)printf(\t%c,65+n);printf(\t平均\n到达时间);for(n=0;nN;n++)printf(\t%d,rt[n]);printf(\n服务时间);for(n=0;nN;n++)printf(\t%d,st[n]);printf(\n完成时间);for(n=0;nN;n++)printf(\t%d,ct[n]);printf(\n周转时间);for(n=0;nN;n++)printf(\t%d,cyt[n]);printf(\t%0.1f,av[0]);printf(\n带权周转时间);for(n=0;nN;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;}elseif(which==2){random();break;}printf(输入错误,请重新输入!);}ordination();//进程按照到达时间进行排序fcfs();output();printf(继续输入,退出输入。请输入:);scanf(%d,&c);}end();}

1 / 7
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功