短作业优先调度和时间片轮转调度算法.docx

上传人:王** 文档编号:107211 上传时间:2022-12-28 格式:DOCX 页数:10 大小:73.41KB
下载 相关 举报
短作业优先调度和时间片轮转调度算法.docx_第1页
第1页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第2页
第2页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第3页
第3页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第4页
第4页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第5页
第5页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第6页
第6页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第7页
第7页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第8页
第8页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第9页
第9页 / 共10页
短作业优先调度和时间片轮转调度算法.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
资源描述

《短作业优先调度和时间片轮转调度算法.docx》由会员分享,可在线阅读,更多相关《短作业优先调度和时间片轮转调度算法.docx(10页珍藏版)》请在优知文库上搜索。

1、实验报告同学姓名:学号:指导老师:一、试验室名称:二、试验项目名称:进程调度算法的设计三、试验原理:短作业(进程)优先调度算法:短作业调度算法是从后备队列中选择一个或者若干个估量运行时间最短的作业,将他们调入内存运行。而短进程优先调度算法则是从就绪队列中选出一个估量运行时间最短的进程,将处理机安排给它,使它马上执行并始终执行到完成,或者发生某大事而被堵塞放弃处理机时再重新调度。时间片轮转法:系统将全部的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU安排给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断恳求,调度程序便据此信号来停止该进程的执行,并将它

2、送往就绪队列的队尾;然后,再把处理机安排给就绪队列中的新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的全部进程在一个给定的时间内均能获得一时间片的处理机执行时间。四、试验目的:通过对进程调度算法的设计,深化理解进程调度的原理五、试验内容:1 .编写程序实现SJ(P)F算法2 .编写程序实现RR算法六、试验器材(设施、元器件):装有VC+6.0的PC机一台七、试验步骤:1 .打开VC设计编写程序的源代码2 .编译运行程序的源代码3 .分析检验程序的结果是否正确4 .总结试验结果及结论短进程优先调度源代码:#include,stdio.hstructsjfcharname10J;

3、floatarrivetime;floatservicetime;floatstarttime;floatfinishtime;floatzztime;floatdqzztime;);sjfa100;voidinput(sjf*p,intN)inti;printf(,intputtheprocess,sname&arrivetime&servicetime:nforexmple:a0100n,);for(i=O;i=N-l;i+)(printf(,inputthe%dthprocesssinformation:n,i+1);scanf(H%s%f%f&pi.name,&pi.arrivetim

4、e,&pi.servicetime);)voidPrint(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intN)(intk;printf(runorder:);printf(%s,pO.name);for(k=l;k%s,pk.name);)printf(ntheprocesssinfbrmationn);printf(,nnametarrivetservicetstarttfinishtzztdqzzn,);for(k=0;k=N-l;k+)p

5、rintf(,%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftn,pk.name,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,pk.zztime,pk.dqzztime);)/排序voidsort(sjf*p,intN)for(inti=0;i=N-l;i+)for(intj=O;j=i;j+)if(pi.arrivetime=pU;jj=temp;)运行阶段voiddeal(sjf*p,floatarrivetime,floatservicetime,floatStarttime,floatfi

6、nishtime,float&zztime,float&dqzztime,intN)intk;for(k=O;k=N-l;k+)(if(k=0)(pkj.starttime=pk.arrivetime;pk.finishtime=pkj.arrivetime+pk.servicetime;)else(pkj.starttime=pk-lJ.finishtime;pk.finishtime=pk-1.finishtime+pk.servicetime;)for(k=0;k=N-l;k+)(pk.zztime=pk.finishtime-pk.arrivetime;pk.dqzztime=pk.z

7、ztimepk.servicetime;voidsjff(sjf*p,intN)floatarrivetime=O,Servicetime=O,Starttime=O,finishtime=O,zztime=0,dqzztime=OX结构进行初始化sort(p,N);for(intm=0;mN-1;m+)if(m=0)plm.finishtime=plm.arrivetime+pmj.servicetiine;elsepm.finishtime=plm-l.finishtime+pm.servicetime;inti=0;fbr(intn=m+l;n=N-l;n+)if(pn.arriveti

8、me=pm.finishtime)推断内存中每次完成之后有多少到达的进程i+;)floatmin=pm+1.servicetime;intnext=m1;/m+1=nfor(intk=m+l;km+i;k+)找出到达后的进程中最小的进程(if(pk+1.servicetimemin)(min=pk+1.servicetime;next=k+l;)syftemp;temp=pm+l;pm+l=pnextj;pnext=temp;)deal(p,arrivetime,servicetime,starttime,Hnishtime,zztime,dqzztime,N);Print(p,arrivet

9、ime,servicetime,Starttime,finishtime,zztime,dqzztime,N);)voidmain()intN;Prirnf(一短作业优先调度算法-一一n,);printf(inputtheprocesssnumben);scanf(%dN);input(a,N);sjf*b=a;syf*c=a;SjfT(b,N);)时间片轮转法源代码:#include#defineM5物理页数#defineMyprintfprintf(,-n,)typedefstructPCB(intID;intReachTime;intTotalTime;PCB;进程号,到达时间和服务时间

10、typedefstructNOTE备份intID;intTotalTime;N0TE;PCBAM;5个进程PCBaM;NOTEtemp;intqueue50;纪录调度的进程intK=O;调度进程数组的标识voidINlT()初始化(inti;for(i=0;iM;i+)(Ai.ID=-l;)intGetNUm()计算进程数(intiJ=O;fbr(i=O;iM;i+)(if(Ai.lD!=-l)(j+;1)returnj;)intGetReach(inttime)找出到达进程号(inti;for(i=0;iM;i+)(if(ai.ReachTime=time)(aij.ReachTime=10

11、0;returni;1Ireturn-1;intGetlnSert()找出插入位置inti;for(i=O;iM;i+)(if(Ai.lD=-l)returni;1return-1;)voidForward(intnum)前移(inti;fdr(i=O;inum-1;i+)(Ai.ID=Ai+l.lD;Ai.TotalTime=Ai+1.TotalTime;)Anum-1.ID=-I;)voidProCeSS()执行进程(queueK=AO.ID;K+;A0.TotalTime-;temp.ID=AO.ID;temp.TotalTime=A0.TotalTime;)voidmain()(int

12、i;inttime;intt=0;intreach;intinsert;intnum;printf(RR算法nn);INIT();fdr(i=O;iM;i+)(Printf(请输入进程ID:);scanf(,%dai.lD);Printf(”请输入到达时间:);scanf(,%d,feai.ReachTime);Printf(请输入服务时间:);scanf(,r%d,ai.TotalTime);for(i=0;iM;i+)运行时间t=t+ai.TotalTime;for(i=0;i50;i+)初始化queuei=-l;for(time=O;time=t;time+)reach=GetReach

13、(time);if(reach!=-l)进程到达insert=GetInsert();Ainsert.ID=areachJ.ID;AinsertJ.TotalTime=areach.TotalTime;num=GetNum();if(nutn=l)COntinue;进程数为1else进程数不为1Process();Forward(num);if(temp.TotalTime!=0)(Anum-l.ID=temp.lD;Anum-1J.lbtalTime=temp.TotalTime;else/没有进程到达num=GetNum();if(num=l)进程数为IProcessO;if(temp.TotalTime=0)AO.ID=-1;elseif(num=O)Continue;进程数为0else(Process();Forward(nun);if(temp.TotalTime!=0)(Anum-1.ID=temp.ID;Anum-l.TotalTime=temp.TotalTime;printf(,n);Printf(调度挨次为:n);Myprintf;fbr(i=0;i50;i+)(if(queuei!=-l)printf(%2d

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

当前位置:首页 > IT计算机 > Web服务

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!