计算机操作系统实验报告学院:信息科学与工程学院专业班级:信息安全1302班指导老师:郁博文学号:0906130205《计算机操作系统》实验1578507554512_郁博文第2页共16页计算机操作系统1.设计目的1、增强学生对计算机操作系统基本原理、基本理论、基本算法的理解;2、提高和培养学生的动手能力。2.设计要求1、每人至少选作1题,多做不限;2、每人单独完成,可以讨论,但每人的设计内容不得完全相同,抄袭或有2人/多人设计完全一样者,不能通过;3、设计完成后,应上交课程设计文档,文档格式应是学校课程设计的标准格式,所有学生的封面大小、格式也必须一样;4、同时上交设计的软盘(或以班刻录光盘)。3.设计题目调度算法的模拟:模拟各种调度算法,并进行调度性能分析。4.设计过程4.1设计思路模拟了一个作业调度算法,其中用到了先来先服务算法(FCFS)、短作业优先算法(SJF)、最高响应比优先算法(HRN)三种算法。如下,分别为三种算法的程序流程图。《计算机操作系统》实验1578507554512_郁博文第3页共16页《计算机操作系统》实验1578507554512_郁博文第4页共16页4.2实验过程图1-开始界面图2–输入作业的信息(名字、提交时间、运行时间)图3–选择算法(FCFS、SJF、HRN)《计算机操作系统》实验1578507554512_郁博文第5页共16页图4、5–选择FCFS算法后输出结果《计算机操作系统》实验1578507554512_郁博文第6页共16页图6、7–选择SJF算法后输出结果《计算机操作系统》实验1578507554512_郁博文第7页共16页图8、9–选择HRN算法后输出结果《计算机操作系统》实验1578507554512_郁博文第8页共16页4.3调度性能分析1.先来先服务算法(FCFS)优点:能体现公平性;缺点:一旦一个较长的作业进入系统后就会长时间的占用系统的资源,这样如果有优先级较高的短作业需要执行的话需要等待很长时间。2.短作业优先算法(SJF)优点:比前者改善了平均周转时间和平均带权周转时间,缩短作业的等待时间,提高系统的吞吐量;缺点:对长作业非常不利,可能长时间得不到执行,未能一句作业的紧迫程度来划分执行的优先级,难以准确估计作业的执行时间,从而影响调度性能。3.最高响应比优先算法(HRN)优点:这种算法是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。缺点:由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRN方式时其吞吐量将小于采用SJF法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。《计算机操作系统》实验1578507554512_郁博文第9页共16页5.总结在实验中,由于对算法细节不够熟悉,以及对c语言的遗忘,我遇到了不少困难。因而,在克服这些困难的过程中,我对FCFS算法有了更加深刻而透彻的理解,c语言的一些基本操作也得到了巩固。今后我亦将多多练习,毕竟理论与实践结合才是最好的学习方法。6.代码附录#includestdio.h#includestdlib.h#definegetpch(type)(type*)malloc(sizeof(type))structworktime{floatTb;//作业运行时刻floatTc;//作业完成时刻floatTi;//周转时间floatWi;//带权周转时间};structjcb{/*定义作业控制块JCB*/charname[10];//作业名floatsubtime;//作业提交时间floatruntime;//作业所需的运行时间charresource;//所需资源floatRp;//后备作业响应比charstate;//作业状态structworktimewt;structjcb*link;//链指针}*jcb_ready=NULL,*j;《计算机操作系统》实验1578507554512_郁博文第10页共16页typedefstructjcbJCB;floatT=0;voidsort()/*建立对作业进行提交时间排列函数*/{JCB*first,*second;intinsert=0;if((jcb_ready==NULL)||((j-subtime)(jcb_ready-subtime)))/*作业提交时间最短的,插入队首*/{j-link=jcb_ready;jcb_ready=j;T=j-subtime;j-Rp=1;}else/*作业比较提交时间,插入适当的位置中*/{first=jcb_ready;second=first-link;while(second!=NULL){if((j-subtime)(second-subtime))/*若插入作业比当前作业提交时间短,*/{/*插入到当前作业前面*/j-link=second;first-link=j;second=NULL;insert=1;}else/*插入作业优先数最低,则插入到队尾*/{first=first-link;second=second-link;}}《计算机操作系统》实验1578507554512_郁博文第11页共16页if(insert==0)first-link=j;}}voidSJFget()/*获取队列中的最短作业*/{JCB*front,*mintime,*rear;intipmove=0;mintime=jcb_ready;rear=mintime-link;while(rear!=NULL)if((rear!=NULL)&&(T=rear-subtime)&&(mintime-runtime)(rear-runtime)){front=mintime;mintime=rear;rear=rear-link;ipmove=1;}elserear=rear-link;if(ipmove==1){front-link=mintime-link;mintime-link=jcb_ready;}jcb_ready=mintime;}voidHRNget()/*获取队列中的最高响应作业*/{JCB*front,*mintime,*rear;intipmove=0;《计算机操作系统》实验1578507554512_郁博文第12页共16页mintime=jcb_ready;rear=mintime-link;while(rear!=NULL)if((rear!=NULL)&&(T=rear-subtime)&&(mintime-Rp)(rear-Rp)){front=mintime;mintime=rear;rear=rear-link;ipmove=1;}elserear=rear-link;if(ipmove==1){front-link=mintime-link;mintime-link=jcb_ready;}jcb_ready=mintime;}voidinput()/*建立作业控制块函数*/{inti,num;printf(\npleseinputthenumberofthejob:);scanf(%d,&num,2);for(i=0;inum;i++){printf(\ntheordernumberofthejobNo.%d:\n,i);j=getpch(JCB);printf(\npleaseinputthenameofthejob:);scanf(%s,j-name);printf(\npleaseinputthetimewhenthejobwassubmitted:);scanf(%f,&j-subtime);printf(\npleaseinputtheruntimeofthejob:);《计算机操作系统》实验1578507554512_郁博文第13页共16页scanf(%f,&j-runtime);printf(\n);j-state='w';j-link=NULL;sort();/*调用sort函数*/}}intspace(){intl=0;JCB*jr=jcb_ready;while(jr!=NULL){l++;jr=jr-link;}return(l);}voiddisp(JCB*jr,intselect)/*建立作业显示函数,用于显示当前作业*/{if(select==3)printf(\nworkservicetimeresponseratioruntimecompletetimeturnovertimeweightedturnovertime\n);elseprintf(\nworkservicetimeruntimecompletetimeturnovertimeweightedturnovertime\n);printf(|%s\t,jr-name);printf(|%.2f\t,jr-runtime);if(select==3)printf(|%.2f,jr-Rp);if(j==jr)《计算机操作系统》实验1578507554512_郁博文第14页共16页{printf(|%.2f\t,jr-wt.Tb);printf(|%.2f,jr-wt.Tc);printf(|%.2f\t,jr-wt.Ti);printf(|%.2f,jr-wt.Wi);}printf(\n);}voidcheck(intselect)/*建立作业查看函数*/{JCB*jr;printf(\n****therunningjobis:%s,j-name);/*显示当前运行作业*/disp(j,select);jr=jcb_ready;printf(\n****thecurrentreadyqueueis:\n);/*显示就绪队列状态*/while(jr!=NULL){jr-Rp=(T-jr-subtime)/jr-runtime;disp(jr,select);jr=jr-link;}destroy();}intdestroy()/*建立作业撤消函数(作业运行结束,撤消作业)*/{printf(\njob[%s]iscompleted.\n,j-name);free(j);}voidrunning(JCB*jr)/*建立作业就绪函数(作业运行时间到,置就绪状态*/{if(T=jr-subtime)jr-wt.Tb=T;《计算机操作系统》实验1578507554512_郁博文第15页共16页elsejr-wt.Tb=jr-subtime;jr-wt.Tc=jr-wt.Tb+jr-runtime;jr-wt.Ti=jr-wt.Tc-jr-subtime;jr-wt.Wi=jr-wt.Ti/jr-runtime;T=jr-wt.Tc;}intmain()/*主函数*/{intselect=0,len,h=0;floatsumTi=0,sumWi=0;input();len=space();printf(\n\t1.FCFS2.SJF3.HRN\n\npleasechooseaAlgorithm:);scanf(%d,&select);while((len!=0)&&(jcb_ready!=NULL)){h++;printf(\nexcute%djob\n,h);j=jcb_ready;jcb_ready=j-link;j-link=NULL;j-state='R';running(j);sumTi+=j-wt.Ti;sumWi+=j-wt.Wi;check(