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

上传人:pu****.1 文档编号:431749754 上传时间:2022-10-29 格式:DOCX 页数:10 大小:73.41KB
返回 下载 相关 举报
短作业优先调度和时间片轮转调度算法_第1页
第1页 / 共10页
短作业优先调度和时间片轮转调度算法_第2页
第2页 / 共10页
短作业优先调度和时间片轮转调度算法_第3页
第3页 / 共10页
短作业优先调度和时间片轮转调度算法_第4页
第4页 / 共10页
短作业优先调度和时间片轮转调度算法_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《短作业优先调度和时间片轮转调度算法》由会员分享,可在线阅读,更多相关《短作业优先调度和时间片轮转调度算法(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

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号