ImageVerifierCode 换一换
格式:DOCX , 页数:34 ,大小:153.19KB ,
资源ID:20052304      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20052304.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进程调度算法的模拟实现Word下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

进程调度算法的模拟实现Word下载.docx

1、显示每种进程调度算法情况.(6) 平均周转时间与平均带权周转时间的计算结果.(7) 退出系统模块。3。2 系统流程图3 系统详细设计(1) 系统主界面设计(包含登陆模块设计)首先将各种进程调度算法放入不同的头文件,在主函数引用,是系统结构更加清晰。设置一个mean()方法,让用户选择不同的进程调度算法,mean()方法返回一个char类型字符,以便在主函数的switch语句中选择调用不同的进程调度方法.(2) 系统模块1.先来先服务算法 对于先到达的进程优先分配CPU,按照先来先服务的原则依次执行各进程。算法:void FCFS(fcfs *p,int N) float sumzztime=0

2、, sumdqzztime=0,avzztime,avdqzztime; float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; sort(p,N); deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N); for(int k=0;k=N1;k+) sumzztime

3、=sumzztime+pk.zztime; sumdqzztime=sumdqzztime+ pk。dqzztime; avzztime=sumzztime/N; printf(n该算法的平均周转时间为:%-。2ft”,avzztime); avdqzztime= sumdqzztime/N; printf(”该算法的平均带权周转时间为:%.2ftnn,avdqzztime); 短进程优先算法先找到运行时间最短的程序,然后执行,再从剩余的程序中找到运行时间最短的在执行,依次每次都执行运行时间最短的,直到程序执行完毕。 void sjff(sjf p,int N1) float sumzztim

4、e=0, sumdqzztime=0,avzztime,avdqzztime; float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0; deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N1); Print(p,arrivetime,servicetime,starttime,finishtime,N1); for(int k=0;k=N11; sumzztime=sumzztime+pk。zztime; su

5、mdqzztime=sumdqzztime+ pk。 avzztime=sumzztime/N1; printf(”n该算法的平均周转时间为:%.2ft,avzztime); avdqzztime= sumdqzztime/N1;该算法的平均带权周转时间为:,avdqzztime);3.时间片轮转算法按照轮转的次序分配给每个程序一定的时间执行,执行完成后执行后面的进程 ,依次循环执行直到所有进程执行完成。算法: void tt(rr *p,int N2) float sumzztime=0, sumdqzztime=0,avzztime=0,avdqzztime=0;int timeprice

6、=0; float arrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0,lefttime=0; ptt(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,avzztime,avdqzztime,lefttime,timeprice,N2); printf(”n 综合信息为:n”); Print(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime,N2);=N2

7、-1;zztime; sumdqzztime=sumdqzztime+ pk.dqzztime; avzztime=sumzztime/N2;n该算法的平均周转时间为:。2ft,avzztime); avdqzztime= sumdqzztime/N2; printf(”该算法的平均带权周转时间为:-.2ftn,avdqzztime); getchar();4。最高响应比优先算法按照优先级从高到低依次执行程序.int HRN(int pre) int current=1,i,j;/ 优先权 =(等待时间+服务时间)/服务时间/ for(i=0; iN4; i+) JCBi。waiTime=JC

8、Bpre。finTimeJCBi。arrTime; /等待时间 =上一个作业的完成时间到达时间/ JCBi。priority=(JCBi。waiTime+JCBi.serTime)/JCBi。serTime; iN4; if(!JCBi。finish) current=i; /*找到第一个还没完成的作业*/ break; for( j=i; jJCBcurrent。priority) current=j; /找出服务时间比较短的一个/ return current;/返回当前作业/4 结果与分析4.1 测试方案(1) 测试方案(一) 在主界面输入1,选择先来先服务调度算法,然后输入进程数目5,

9、然后输入各个进程信息,观察测试结果。(2) 测试方案(二)在主界面输入2,选择最短进程优先调度算法,然后输入进程数目5,然后输入各个进程信息,进程信息与测试方案(一)保持一致,观察测试结果,对比方案一. (3) 测试方案(三) 在主界面输入3,选择时间片轮转调度算法,然后输入进程数目5,然后输入各个进程信息,进程信息与测试方案(一)保持一致,观察测试结果,对比方案一和二。(4) 测试方案(四)在主界面输入4,选择时间片轮转调度算法,然后输入进程数目5,然后输入各个进程信息,进程信息与测试方案(一)保持一致,观察测试结果,对比方案一和二和三.2 测试结果 (1) 测试方案(一)结果。输入测试进程

10、数5,测试用例分别为(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),测试结果见图(图41 先来先服务调度算法)图41 先来先服务调度算法由运行结果可以看出,短作业D的服务时间最短,但带权周转时间高达5。5,而长作业C的服务时间为5,带权周转时间仅为2,因此先来先服务算法比较有利于长作业,而不利于短作业(2) 测试方案(2)结果。输入测试进程数5,测试用例分别为(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),测试结果见图(图42 短作业优先调度算法) 图42 短作业优先调度算法由运行结果可以看出,短作业优先算法每次都从未完成的队列中

11、选取服务时间最短的作业进行调度。通过比较,短作业优先算法的平均带权周转时间小于先来先服务算法,提高了系统的吞吐量.因此,相对于短作业较多或者较为重要的系统中,可选这短作业优先调度算法。(3) 测试方案(三)结果.输入测试进程数5,测试用例分别为(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),测试结果见图(图4-3。1,43.2,4-3。3时间片轮转调度算法)图4-3.1 时间片轮转调度算法图43。2 时间片轮转调度算法图43.3 时间片轮转调度算法从多次运行结果来看,时间片轮转调度算法不同的时间片对结果有很大的影响.(4) 测试方案(四)结果.输入测试进程数5,

12、测试用例分别为(A 0 4),(B 1 3),(C 2 5),(D 3 2),(E 4 4),测试结果见图(图4-4 最高响应比优先调度算法)图4-4 最高响应比优先调度算法由运行结果可以看出,该算法既照顾了短作业,有考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法是一个很好的折衷4.3 测试结果分析四种调度算法各有优劣.先来先服务算法比较有利于长进程,而不利于短进程,有利于CPU 繁忙的进程,而不利于I/O 繁忙的进程。短作业优先调度算法相比FCFS 算法,该算法可改善平均周转时间和平均带权周转时间,缩短进程的等待时间,提高系统的吞吐量。缺点是对长进程非常不利,可能长时间得

13、不到执行,且未能依据进程的紧迫程度来划分执行的优先级,以及难以准确估计进程的执行时间,从而影响调度性能.时间片轮转调度算法的特点是简单易行、平均响应时间短,但不利于处理紧急作业。在时间片轮转算法中,时间片的大小对系统性能的影响很大,因此时间片的大小应选择恰当.高响应比优先调度策略是对FCFS方式和SJF方式的一种综合平衡,同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。5 设计小结经过一周的努力,课程设计基本完成了,这次课程设计培养了我们耐心、慎密、全面地考虑问题的能力,从而加快了问题解决的速度、提高了个人的工作效率,以及锻炼围绕问题在短时间内得以解决

14、的顽强意志。课程设计是我们专业课程知识综合应用的实践训练,也是为我们以后的工作夯实基础。通过改程序对操作系统的基础知识了解得更透彻了,同时对磁盘调度的四种算法先来先服务算法,短进程优先调度算法,时间片轮转调度算法,动态优先级调度有了更深刻的理解和掌握,使我能够为进程调度选择适当的算法,提高CPU工作效率.进行进程调度程序设计的过程中,得到老师的大力指导和同学的支持,在此向他们表示感谢。经过自己的动手操作和同学老师的指导我成功的做出了课程设计自己感到很高兴。在编写程序的过程中,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯。为此要感谢信息学院开设了这门操作系统课程设计,为我们提供了进一步

15、学习算法、操作系统和巩固C语言程序计设的平台.6 参考文献1 严蔚敏,吴伟民。 数据结构M。清华大学出版社,1997.2 张尧学,史美林. 计算机操作系统教程M。清华大学出版社,2000.3 孙静宇。 计算机操作系统课程设计指导书M。太原理工出版社,2006.4 汤小丹,梁红兵,哲凤屏,汤子赢。计算机操作系统(第五版)M.西安:西安电子科技大学出版社,2007。5 何钦铭,颜晖.C语言程序设计M。北京:高等教育出版社,2008.6 胡学刚,数据结构(C语言版)M。高等教育出版社,2008。7 张小进,Linux系统应用基础教程M.北京:机械工业出版社,2008.8 孟庆昌,C语言程序设计M.北

16、京:人民邮电出版社,2006.7 附录 程序代码Main.cppinclude cstdlibinclude #include iomanip #include fcfs。h” /先来先服务include ”sjf。h” /短作业优先rr.h” /时间片轮转hrrn.h” /高响应比优先using namespace std;char menu()/用来输出相关信息的函数 char cse1; while(1) system(”cls”); fflush(stdin); coutendl; coutendl; cout”t” ”t 进程调度算法模拟 tt” endl; coutt” endl;

17、t tt 1.先来先服务调度算法 ”tt” ”tt 2。短作业优先调度算法 tt” ”t” tt 3。时间片轮转调度算法ttt”endl;”t” ”endl;”t” ”tt 4.最高响应比优先调度算法 ”tt” ”t”t” ”tt 0.退出系统 ”tt” coutendl;tt 请输入您的选择(0/1/2/3/4):”; cse1=getchar(); if(cse14) cout,pk。name); n 具体进程调度信息:n”);t进程名 到达时间 服务时间 开始时间 结束时间 周转时间 带权周转时间n for(k=0;k=N1; printf(”t%st.2ft -。2ft %-.2ft

18、.2ft .2ft %.2fn,pk.name,pk。arrivetime, pk.servicetime,pk.starttime,pk。finishtime,pk。zztime,pk.dqzztime); getchar(); /此处必须要有这个函数,否则就看不到显示器上面的输出,可以看到的结果只是一闪而过的一个框剪 void sort(fcfs p,int N) /按进程的到达时间进行排序 for(int i=0;i=N1; for(int j=0;j=i;j+) if(pi.arrivetimepj。arrivetime) fcfs temp; temp=pi; pi=pj; pj=temp; void deal(fcfs p, float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) /运行阶段,根据先来先服务的原则进行处理 int k;k=N-1; if(k=0) pk。starttime=pk。arrivetime;finishtime=pk。arrivetime+pk.servicetime; else

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1