欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOCX文档下载  

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

    • 资源ID:1952834       资源大小:73.41KB        全文页数:10页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    实验报告同学姓名:学号:指导老师:一、试验室名称:二、试验项目名称:进程调度算法的设计三、试验原理:短作业(进程)优先调度算法:短作业调度算法是从后备队列中选择一个或者若干个估量运行时间最短的作业,将他们调入内存运行。而短进程优先调度算法则是从就绪队列中选出一个估量运行时间最短的进程,将处理机安排给它,使它马上执行并始终执行到完成,或者发生某大事而被堵塞放弃处理机时再重新调度。时间片轮转法:系统将全部的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU安排给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断恳求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的队尾;然后,再把处理机安排给就绪队列中的新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的全部进程在一个给定的时间内均能获得一时间片的处理机执行时间。四、试验目的:通过对进程调度算法的设计,深化理解进程调度的原理五、试验内容:1 .编写程序实现SJ(P)F算法2 .编写程序实现RR算法六、试验器材(设施、元器件):装有VC+6.0的PC机一台七、试验步骤:1 .打开VC设计编写程序的源代码2 .编译运行程序的源代码3 .分析检验程序的结果是否正确4 .总结试验结果及结论短进程优先调度源代码:#include',stdio.h"structsjfcharname10J;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%dthprocess'sinformation:n",i+1);scanf(H%s%f%f&pi.name,&pi.arrivetime,&pi.servicetime);)voidPrint(sjf*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatdqzztime,intN)(intk;printf("runorder:");printf("%s",pO.name);for(k=l;k<N;k+)printf("->%s",pk.name);)printf("ntheprocess'sinfbrmationn");printf(',nnametarrivetservicetstarttfinishtzztdqzzn,');for(k=0;k<=N-l;k+)printf(,%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<pj.aivetime)(sjftemp;temp=pi;pl>=pU;jj=temp;)运行阶段voiddeal(sjf*p,floatarrivetime,floatservicetime,floatStarttime,floatfinishtime,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.zztimepk.servicetime;voidsjff(sjf*p,intN)floatarrivetime=O,Servicetime=O,Starttime=O,finishtime=O,zztime=0,dqzztime=OX结构进行初始化sort(p,N);for(intm=0;m<N-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.arrivetime<=pm.finishtime)推断内存中每次完成之后有多少到达的进程i+;)floatmin=pm+1.servicetime;intnext=m÷1;/m+1=nfor(intk=m+l;k<m+i;k+)找出到达后的进程中最小的进程(if(pk+1.servicetime<min)(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,arrivetime,servicetime,Starttime,finishtime,zztime,dqzztime,N);)voidmain()intN;Prirnf("一短作业优先调度算法-一一n,);printf("inputtheprocess'snumben");scanf("%d"N);input(a,N);sjf*b=a;syf*c=a;SjfT(b,N);)时间片轮转法源代码:#include<stdio.h>#defineM5物理页数#defineMyprintfprintf(,-n,')typedefstructPCB(intID;intReachTime;intTotalTime;PCB;进程号,到达时间和服务时间typedefstructNOTE备份intID;intTotalTime;N0TE;PCBAM;5个进程PCBaM;NOTEtemp;intqueue50;纪录调度的进程intK=O;调度进程数组的标识voidINlT()初始化(inti;for(i=0;i<M;i+)(Ai.ID=-l;)intGetNUm()计算进程数(intiJ=O;fbr(i=O;i<M;i+)(if(Ai.lD!=-l)(j+;1)returnj;)intGetReach(inttime)找出到达进程号(inti;for(i=0;i<M;i+)(if(ai.ReachTime<=time)(aij.ReachTime=100;returni;1Ireturn-1;intGetlnSert()找出插入位置inti;for(i=O;i<M;i+)(if(Ai.lD=-l)returni;1return-1;)voidForward(intnum)前移(inti;fdr(i=O;i<num-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()(inti;inttime;intt=0;intreach;intinsert;intnum;printf("RR算法nn");INIT();fdr(i=O;i<M;i+)(Printf("请输入进程ID:");scanf(',%d"ai.lD);Printf(”请输入到达时间:");scanf(',%d",<feai.ReachTime);Printf("请输入服务时间:");scanf(,r%d",ai.TotalTime);for(i=0;i<M;i+)运行时间t=t+ai.TotalTime;for(i=0;i<50;i+)初始化queuei=-l;for(time=O;time<=t;time+)reach=GetReach(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;i<50;i+)(if(queuei!=-l)printf("%2d',queuei);)printf(,'n");Myprintf;printf(,n");)八、试验数据及结果分析:短作业优先调度算法的试验结果:时间片轮转调度算法结果:国"E:MYPROGos_labDebugosJab.exe'0413243244-B-B-B-B-OfltDy一日、B1、l-Snmm>nDD>D>DjpDfpIBBIBBIBBIBDuIBB程达露达籥达3达簧达务入入入入入入入入入入入入入入入-WR.邳.H.W.3,中调度顺序为:IPi*essHnykeytoCOntinue九、试验结论:本次试验胜利的完成了短作业优先调度算法和轮转时间片调度算法的模拟,通过本次试验我们了解到短作业优先调度算法不利于长作业的处理,由于长作业将长期得不处处理,而轮转时间片调度算法则解决了这一问题。短长作业均能在每一个周期内分得一个时间片处理自己的任务。十、总结及心得体会:通过本次试验对短作业优先调度算法和时间片轮转调度算法有了更深化的理解,同时,对程序算法力量有了进一步的提高,同时对模块化编程有了更深化得理解,代码的模块化会使程序的代码复用率提高,提高编程的效率。十一、对本试验过程及方法、手段的改进建议:本次试验的时间片轮转调度算法由于教材版本不一样有两种结果,本次试验本人实行的新教材的版本,新版本的难度较老教材要大许多,试验时候可以依据详细状况选择一个适合自己的来做。报告评分:指导老师签字:

    注意事项

    本文(短作业优先调度和时间片轮转调度算法.docx)为本站会员(李司机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开