2022年2022年经典调度算法的实现 .pdf

上传人:Che****ry 文档编号:34873411 上传时间:2022-08-19 格式:PDF 页数:24 大小:446.98KB
返回 下载 相关 举报
2022年2022年经典调度算法的实现 .pdf_第1页
第1页 / 共24页
2022年2022年经典调度算法的实现 .pdf_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《2022年2022年经典调度算法的实现 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年经典调度算法的实现 .pdf(24页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、经典调度算法的实现学号:姓名:专业:指导教师:日期:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 24 页 - - - - - - - - - 目录一、 课设简介 . . 3 1、 课程设计题目. 3 2、 课程设计目的. 3 3、 课程设计内容. 3 4、 时间安排 . 3 二、 实验原理分析 . 4 1、问题描述 . 4 2、问题分析 . 5 3、解决方法 . 6 三、 主要的功能模块. 7 1、数据结构 . 7 2、主要的函数. 13 3、 测试用例及运行结果.

2、14 四、 源代码 . . 错误!未定义书签。五、 总结及参考文献. 24 1、总结 . 24 2、参考文献 . 24 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 24 页 - - - - - - - - - 一、 课设简介1、 课程设计题目经典调度算法的实现2、 课程设计目的操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。 1 )进一步巩固和复习操作系统的基础知识。 2

3、 )培养学生结构化程序、模块化程序设计的方法和能力。 3 )提高学生调试程序的技巧和软件设计的能力。 4 )提高学生分析问题、 解决问题以及综合利用C语言进行程序设计的能力。3、 课程设计内容实现以下几种调度算法1 FCFS 2 SJF 3 高响应比优先调度算法。4、 时间安排名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 24 页 - - - - - - - - - 1)分析设计贮备阶段(1 天) 2)编程调试阶段(7 天) 3)写课程设计报告、考核(2 天)二、 实验

4、原理分析1、设计要求 :1不同的功能使用不同的函数实现(模块化),对每个函数的功能和调用接口要注释清楚。对程序其它部分也进行必要的注释。2对系统进行功能模块分析、画出总流程图和各模块流程图。3用户界面要求使用方便、简洁明了、美观大方、格式统一。所有功能可以反复使用,最好使用菜单。4通过命令行相应选项能直接进入某个相应菜单选项的功能模块。5. 所有程序需调试通名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 24 页 - - - - - - - - - 2、进程调度模拟程序流

5、程图图 1、主函数流程图图 2、先来先服务算法调度名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 24 页 - - - - - - - - - 图 3、短作业优先调度图 4、高相应比算法调度名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 24 页 - - - - - - - - - 三、 主要的功能模块1、数据结构先来先服务算法调度#include

6、struct fcfs char name10; float arrivetime; float servicetime; float starttime; float finishtime; float zztime; float dqzztime; ; fcfs a100; void input(fcfs *p,int N) int i; printf(intput the processs name & arrivetime & servicetime:nfor exmple: a 0 100n); for(i=0;i=N-1;i+) printf(input the %dth proc

7、esss information:n,i+1); scanf(%s%f%f,&pi.name,&pi.arrivetime,&pi.servicetime); void Print(fcfs *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) int k; printf(run order:); printf(%s,p0.name); for(k=1;k%s,pk.name); printf(nthe processs informat

8、ion:n); printf(nnametarrivetservicetstarttfinishtzztdqzzn); for(k=0;k=N-1;k+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 24 页 - - - - - - - - - printf(%st%-.2ft%-.2ft%-.2ft%-.2ft%-.2ft%-.2ftn,pk.name,pk.arrivetime,pk.servicetime,pk.starttime,pk.finishtime,p

9、k.zztime,pk.dqzztime); pai xu void sort(fcfs *p,int N) for(int i=0;i=N-1;i+) for(int j=0;j=i;j+) if(pi.arrivetimepj.arrivetime) fcfs temp; temp=pi; pi=pj; pj=temp; /yun xing jieduan void deal(fcfs *p, float arrivetime,float servicetime,float starttime,float finishtime,float &zztime,float &dqzztime,i

10、nt N) int k; for(k=0;k=N-1;k+) if(k=0) pk.starttime=pk.arrivetime; pk.finishtime=pk.arrivetime+pk.servicetime; else pk.starttime=pk-1.finishtime; pk.finishtime=pk-1.finishtime+pk.servicetime; for(k=0;k=N-1;k+) pk.zztime=pk.finishtime-pk.arrivetime; pk.dqzztime=pk.zztime/pk.servicetime; 名师资料总结 - - -精

11、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 24 页 - - - - - - - - - void FCFS(fcfs *p,int N) 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

12、,servicetime,starttime,finishtime,zztime,dqzztime,N); void main() int N; printf(-先来先服务调度算法-n); printf(input the processs number:n); scanf(%d,&N); input(a,N); FCFS(a,N); 短作业优先调度算法int sjf() turn(); float temp_time=0; int i=0,j; int temp_counter; float servicetime; servicetime=tasksi.servicetime; j=1;

13、while (jcounter)&(tasksi.arrivetime=tasksj.arrivetime)/*/ if (tasksj.servicetimetasksi.servicetime) servicetime=tasksj.servicetime; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 24 页 - - - - - - - - - i=j; j+; /* 查找第一个被调度的进程*/ /* 对第一个被调度的进程求相应的参数*/ /number_sch

14、edul=i; tasksi.begintime=tasksi.arrivetime; tasksi.finishtime=tasksi.begintime+tasksi.servicetime; tasksi.run_flag=1; temp_time=tasksi.finishtime; tasksi.order=1; temp_counter=1; while (temp_countercounter) for(j=0;jcounter;j+) if(tasksj.arrivetime=temp_time)&(!tasksj.run_flag) servicetime=tasksj.se

15、rvicetime;i=j;break; for(j=0;jcounter;j+) if(tasksj.arrivetime=temp_time)&(!tasksj.run_flag)/ 两个条件必须同时成立if(tasksj.servicetimeservicetime) servicetime=tasksj.servicetime; i=j; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 24 页 - - - - - - - - - /* 查找下一个被调度的进程

16、*/ /* 对找到的下一个被调度的进程求相应的参数*/ tasksi.begintime=temp_time; tasksi.finishtime=tasksi.begintime+tasksi.servicetime; tasksi.run_flag=1; temp_time=tasksi.finishtime; temp_counter+; tasksi.order=temp_counter; return 0; 高响应比优先算法调度int hrrn() turn(); int j,i,temp_counter; float temp_time,respond_rate,max_respo

17、nd_rate; /* 第一个进程被调度 */ tasks0.begintime=tasks0.arrivetime; tasks0.finishtime=tasks0.begintime+tasks0.servicetime; temp_time=tasks0.finishtime; tasks0.run_flag=1; tasks0.order=1; temp_counter=1; /* 调度其他进程 */ while(temp_countercounter) max_respond_rate=0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -

18、- - - - - - 名师精心整理 - - - - - - - 第 11 页,共 24 页 - - - - - - - - - for(j=1;jcounter;j+) if(tasksj.arrivetimemax_respond_rate) max_respond_rate=respond_rate; i=j; /* 找响应比高的进程 */ tasksi.begintime=temp_time;/ 把第一个进程的结束时间赋值于下一个进程的开始时间 ,前提是必须满足上面条件tasksi.finishtime=tasksi.begintime+tasksi.servicetime; temp

19、_time=tasksi.finishtime;/ 改换到进程的结束时间, 比较下一轮的 (等待时间/运行时间 ) tasksi.run_flag=1; temp_counter+=1; tasksi.order=temp_counter; return 0; int pinput() /* 进程参数输入 */ int i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 24 页 - - - - - - - - - printf( 请输入实际进程的个数:n); sca

20、nf(%d,&counter); for(i=0;icounter;i+) printf(*n); printf( 请输入第%d个进程 :n,i+1); printf( 请输入该进程名字 :n); scanf(%s,tasksi.name); printf( 请输入该进程到达时间arrivetime:n); scanf(%f,&tasksi.arrivetime); printf( 请输入该进程运行时间servicetime:n); scanf(%f,&tasksi.servicetime); tasksi.begintime=0; tasksi.finishtime=0; tasksi.or

21、der=0; tasksi.run_flag=0; for(i=0;icounter;i+) strcpy(ai.name,tasksi.name); ai.arrivetime=tasksi.arrivetime; ai.servicetime =tasksi.servicetime ; ai.begintime=0; ai.finishtime=0; ai.order=0; ai.run_flag=0; return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页

22、,共 24 页 - - - - - - - - - 3、 测试用例及运行结果(先来先服务测试)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 24 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 24 页 - - - - - - - - - 四、 代码#include #include using name

23、space std; #define MAX 8 struct task_struct char name10; /* 进程名称 */ float arrivetime; /* 到达时间 */ float begintime; /* 开始运行时间 */ float servicetime; /* 运行时间 */ float finishtime; /* 运行结束时间 */ int order; /* 运行次序 */ int run_flag; /* 调度标志 */ tasksMAX,aMAX; int counter; /* 实际进程个数 */ int fcfs(); /* 先来先服务 */

24、int sjf(); /* 短作业优先 */ int hrrn(); /* 高响应比优先 */ int pinput(); /* 进程参数输入 */ int poutput(); void main() /system(color aa); int option; pinput(); while(1) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 24 页 - - - - - - - - - printf( 请选择调度算法( 13):n); printf(1. 先来先

25、服务 n); printf(2. 短作业优先 n); printf(3. 响应比高优先 n); printf(0. 退出n); scanf(%d,&option); switch (option) case 0: /save(); printf( 运行结束。 n); exit(0); break; case 1: printf( 对进程按先来先服务调度。nn); fcfs(); poutput(); break; case 2: printf( 对进程按短作业优先调度。nn); sjf(); poutput(); break; case 3: printf( 对进程按高响应比优先调度。nn);

26、 hrrn(); poutput(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 24 页 - - - - - - - - - break; void turn() for(int i=0;icounter;i+) strcpy(tasksi.name,ai.name); tasksi.arrivetime=ai.arrivetime; tasksi.servicetime =ai.servicetime ; tasksi.begintime=0; tasksi.

27、finishtime=0; tasksi.order=0; tasksi.run_flag=0; / int fcfs() /* 先来先服务 */ turn(); float time_temp=0; int i; time_temp=tasks0.arrivetime; for(i=0;icounter;i+) tasksi.begintime=time_temp; tasksi.finishtime=tasksi.begintime+tasksi.servicetime; tasksi.run_flag=1; time_temp=tasksi.finishtime; tasksi.orde

28、r=i+1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 24 页 - - - - - - - - - return 0; int sjf() /* 短作业优先 */ turn(); float temp_time=0; int i=0,j; int temp_counter; float servicetime; servicetime=tasksi.servicetime; j=1; while (jcounter)&(tasksi.arrivetime=tas

29、ksj.arrivetime)/*/ if (tasksj.servicetimetasksi.servicetime) servicetime=tasksj.servicetime; i=j; j+; /* 查找第一个被调度的进程*/ /* 对第一个被调度的进程求相应的参数*/ /number_schedul=i; tasksi.begintime=tasksi.arrivetime; tasksi.finishtime=tasksi.begintime+tasksi.servicetime; tasksi.run_flag=1; temp_time=tasksi.finishtime; t

30、asksi.order=1; temp_counter=1; while (temp_countercounter) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 24 页 - - - - - - - - - for(j=0;jcounter;j+) if(tasksj.arrivetime=temp_time)&(!tasksj.run_flag) servicetime=tasksj.servicetime;i=j;break; for(j=0;jcounter;

31、j+) if(tasksj.arrivetime=temp_time)&(!tasksj.run_flag)/ 两个条件必须同时成立if(tasksj.servicetimeservicetime) servicetime=tasksj.servicetime; i=j; /* 查找下一个被调度的进程 */ /* 对找到的下一个被调度的进程求相应的参数*/ tasksi.begintime=temp_time; tasksi.finishtime=tasksi.begintime+tasksi.servicetime; tasksi.run_flag=1; temp_time=tasksi.f

32、inishtime; temp_counter+; tasksi.order=temp_counter; return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 24 页 - - - - - - - - - int hrrn() /* 高响应比优先 */ turn(); int j,i,temp_counter; float temp_time,respond_rate,max_respond_rate; /* 第一个进程被调度 */ tasks0.begi

33、ntime=tasks0.arrivetime; tasks0.finishtime=tasks0.begintime+tasks0.servicetime; temp_time=tasks0.finishtime; tasks0.run_flag=1; tasks0.order=1; temp_counter=1; /* 调度其他进程 */ while(temp_countercounter) max_respond_rate=0; for(j=1;jcounter;j+) if(tasksj.arrivetimemax_respond_rate) max_respond_rate=resp

34、ond_rate; i=j; tasksi.begintime=temp_time;/ 把第一个进程的结束时间赋值于下一个进程的开始时间 ,前提是必须满足上面条件tasksi.finishtime=tasksi.begintime+tasksi.servicetime; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 24 页 - - - - - - - - - temp_time=tasksi.finishtime;/ 改换到进程的结束时间, 比较下一轮的 (等待时间

35、/运行时间 ) tasksi.run_flag=1; temp_counter+=1; tasksi.order=temp_counter; return 0; int pinput() /* 进程参数输入 */ int i; printf( 请输入实际进程的个数:n); scanf(%d,&counter); for(i=0;icounter;i+) printf(*n); printf( 请输入第%d个进程 :n,i+1); printf( 请输入该进程名字 :n); scanf(%s,tasksi.name); printf( 请输入该进程到达时间arrivetime:n); scanf

36、(%f,&tasksi.arrivetime); printf( 请输入该进程运行时间servicetime:n); scanf(%f,&tasksi.servicetime); tasksi.begintime=0; tasksi.finishtime=0; tasksi.order=0; tasksi.run_flag=0; for(i=0;icounter;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 24 页 - - - - - - - - - str

37、cpy(ai.name,tasksi.name); ai.arrivetime=tasksi.arrivetime; ai.servicetime =tasksi.servicetime ; ai.begintime=0; ai.finishtime=0; ai.order=0; ai.run_flag=0; return 0; int poutput() /* 调度结果输出 */ int i; float turn_round_time=0,f1,w=0; printf( 进程名到达时间服务时间开始时间完成时间运行次序周转时间 n); for(i=0;icounter;i+) f1=task

38、si.finishtime-tasksi.arrivetime; turn_round_time+=f1; w+=(f1/tasksi.servicetime); printf( %st %5.3ft %5.3ft %5.3ft %5.3f t %dt %5.3ftn,tasksi.name,tasksi.arrivetime,tasksi.servicetime,tasksi.begintime,tasksi.finishtime,tasksi.order,f1); printf( 平均周转时间 =%5.2fn,turn_round_time/counter); printf( 带权周转时间

39、 =%5.2fn,w/counter); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 24 页 - - - - - - - - - 第 5 部分 总结及参考文献1、 总结通过此次课程设计, 更深入的理解了先来先服务调度算法、短作业优先调度算法、 高响应比优先调度算法, 及实现过程。在此过程中,遇到了困难,能及时请教同学,查询相关资料,及时解决了问题,但仍有不足之处,将会在今后学习中更加努力。2、 参考文献 1)宗大华,宗涛,陈吉人著操作系统北京:人民邮电出版社,2009 2)李爱华,程磊著面相对象程序设计( C+ 语言) 北京: 清华大学出版社, 2010 3)宋晓宇 , windows 操作系统核心编程实验教程中国铁道出版社 4) 张丽芬 刘利雄王金玉编著操作系统实验教程清华大学出版社名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 24 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com