操作系统课程设计——进程调度模拟算法5种.doc

上传人:时光煮雨 文档编号:14872927 上传时间:2022-02-22 格式:DOC 页数:16 大小:279.50KB
返回 下载 相关 举报
操作系统课程设计——进程调度模拟算法5种.doc_第1页
第1页 / 共16页
操作系统课程设计——进程调度模拟算法5种.doc_第2页
第2页 / 共16页
操作系统课程设计——进程调度模拟算法5种.doc_第3页
第3页 / 共16页
操作系统课程设计——进程调度模拟算法5种.doc_第4页
第4页 / 共16页
操作系统课程设计——进程调度模拟算法5种.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《操作系统课程设计——进程调度模拟算法5种.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计——进程调度模拟算法5种.doc(16页珍藏版)》请在三一文库上搜索。

1、福建农林大学计算机与信息学院课程设计报告课程名称:操作系统实习题目:进程调度算法模拟姓 名:*系:计算机专 业:计算机科学与技术年 级:2011级学 号:*指导教师:*职 称:*2014年1月16日福建农林大学计算机与信息学院信息工程类课程设计报告结果评定评语:成绩:指导教师签字:评定日期:目 录1.进程调度算法模拟课程设计的目的12.进程调度算法模拟课程设计的要求13.进程调度算法模拟课程设计报告内容131前言 132进程调度算法模拟设计的环境 1 33系统流程图及各模块 24总结 18 参考文献19 参考网站19进程调度算法模拟1.进程调度算法模拟课程设计的目的和意义2013-2014学年

2、,在学习了操作系统这门课后,对当中的进程调度算法产生了浓厚的兴趣。各种调度算法,理论上比较好理解。为了加深印象,我决定把各种调度算法用C语言写出来。于是便产生这份从头到尾都让我绞尽脑汁的课程设计。做这份课程设计,对从事系统开发的人员来说,是必要的,可以在一定程度上为自己以后的发展铺路。虽然用处不是特别明显,但对加深系统调用算法的理解无疑用处是巨大的。2.进程调度算法模拟课程设计的要求1. 用C语言写出至少两种进程调度算法。2. 画出大概流程图。3. 对算法过程出现的bug进行调试。4. 展示最后的算法结果3.1前言:目前比较常见的几种进程调度算法有:1. 先到先服务(FCFS)2. 短进程优先

3、(非抢占和抢占)算法(SPF)3. 高响应比优先算法4. 时间片轮转算法我选出其中三种即先到先服务,短进程优先(2种)和时间片轮转算法进行C语言描述以加深对这三种算法的理解。3.2进程调度算法模拟设计的环境VC+6.0及CodeBlocks,32位计算机WIN7操作系统。3.3流程图定义进程结构体:struct Proint num;/进程号int time_in;/进程到达时间int work_time;/进程服务时间 int btime;/用于抢占式进程优先记录该进程开始时间 int l_w_time;/用于抢占式进程优先记录剩余服务时间 int end_time; /记录该进程结束时间,

4、(需要时时监测)int judge;/用于需要时的标记pro10;/进程结构体1先到先服务算法描述:把所有进程按到达先后排序,每次取最先到的进程执行后淘汰,再取下一个,直到所有进程调度完毕。主要代码:void FCFS() /先到先服务char s = 先到先服务;printmat(s); PT;int i, j;int min;int t = pro_num;int begin_time = 0x7fff;for(i = 1; i = pro_num; i+) if(proi.time_in begin_time) begin_time = proi.time_in;proi.judge =

5、 0;/所有进程号查找标志置0,表示还未查找 while(t-) for(i = 1; i = pro_num; i+) if(proi.judge=0) min = i;/设其为目前最早到达的时间 for(j = i+1; j = pro_num; j+) if(proj.judge = 0 & proj.time_in = promin.time_in)/该进程号若还未被查找且小于预设 min = j; promin.judge = 1;/该进程号被查找过 printf(Format2,promin.num,promin.time_in,promin.work_time, begin_ti

6、me,begin_time+promin.work_time,begin_time+promin.work_time-promin.time_in); begin_time += promin.work_time; puts(); printmat(s);puts();程序截图:2段进程优先非抢占算法描述:每次选出最短的进程进行调度,调度完毕则淘汰,直到所有进程都调度完毕;void SJF() /短进程优先(非抢占) char s = 非抢占短进程优先; printmat(s); PT;struct Pro *p,*q,*head;int t_num,t_work_time,t_time_in

7、;head = &pro1;/*按所有进程到达时间排序*/p = head;while(p - head pro_num) for(q = p+1; q-head time_in time_in | (q-work_time work_time & q-time_in = p-time_in) t_num = p-num,t_time_in = p-time_in,t_work_time = p-work_time; p-num = q-num,p-time_in = q-time_in,p-work_time = q-work_time; q-num = t_num, q-time_in =

8、 t_time_in,q-work_time = t_work_time; p+; /*/*找出第一个执行的进程,即最先到达的最短进程*/int time = 0;p = head;for(q = head; q judge = 0;if(q-time_in time_in)p = q;if(q-time_in = p-time_in & q-work_time work_time)p = q;int cnt = pro_num;p = head;while(cnt-)time = time time_in ? p-time_in:time;p-judge = 1;p-begin_time =

9、 time;time += p-work_time;p-end_time = time;for(q = head; q judge = 1 & q-judge = 0)p = q;else if(p-judge = 0 &(q-work_time work_time)p = q;for(p = head; p num,p-time_in,p-work_time,p-begin_time,p-end_time,p-end_time-p-time_in);puts();printmat(s);puts();3短进程优先(抢占)算法描述:按时间叠加,当新进程到达时,判断如果比当前执行的进程短,则发生

10、抢占,执行完的淘汰,直到所有进程都调度完毕。int find(int pp,int time)int i;for(i = 1; i = pro_num; i+)if(propp.l_w_time = 0 |( proi.l_w_time != 0 & proi.l_w_time = proi.time_in)pp = i;return pp;void test()int i;for(i = 1; i = pro_num; i+)printf(Format2,proi.num,proi.time_in,proi.work_time,proi.btime,proi.end_time,proi.en

11、d_time-proi.time_in);puts();void SJF2()/抢占式短进程优先char s = 抢占式短进程优先;printmat(s); PT;int i; struct Pro *p,*q;/ 先对到达时间进行排序/struct Pro *head = &pro1; int t_num, t_time_in,t_work_time;int time_cnt = 0,time; p = head = &pro1; while(p - head pro_num) for(q = p+1; q-head time_in time_in) t_num = p-num,t_time

12、_in = p-time_in,t_work_time = p-work_time; p-num = q-num,p-time_in = q-time_in,p-work_time = q-work_time; q-num = t_num, q-time_in = t_time_in,q-work_time = t_work_time; p+; for(i = 1; i = pro_num; i+)proi.l_w_time = proi.work_time;time_cnt += proi.work_time;int pp = 1;time = propp.time_in;while(tim

13、e_cnt-)propp.l_w_time-;time+;if(propp.l_w_time=0)propp.end_time = time;else;if(propp.btime = 0 & propp.time_in != 0)propp.btime = time-1;else;pp = find(pp,time);test();printmat(s);puts();4时间片轮转(以单位1为例)取当前已经到达的进程,执行一个时间片,跳转至下一个已经到达的进程,再执行一个时间片,直到所有进程都调度完毕。void TROT()char *s = 时间片轮转算法;printmat(s);PT;s

14、truct Pro *p,*q,*head;int t_num,t_time_in,t_work_time;head = &pro1;p = head;/*给所有进程按到达时间排序*/while(p - head pro_num) for(q = p+1; q-head time_in time_in) t_num = p-num,t_time_in = p-time_in,t_work_time = p-work_time; p-num = q-num,p-time_in = q-time_in,p-work_time = q-work_time; q-num = t_num, q-time

15、_in = t_time_in,q-work_time = t_work_time; p+; /*/int time = pro1.time_in;for(p = head; p judge = 0;p-left_work = p-work_time;int flag = 1;for(p = head; flag; p+)if(p-time_in left_work 0)p-left_work-;if(p-judge = 0)p-judge = 1; p-begin_time = time;if(p-left_work = 0)p-end_time = time+1;else continue

16、;time+;for(q = head; q left_work!=0)break;if(q = head + pro_num)flag = 0;if(p = head + pro_num - 1)/设从开头再开始找p = head-1;for(q = head; q num,q-time_in,q-work_time,q-begin_time,q-end_time,q-end_time-q-time_in);puts();printmat(s);5高响应比优先先对所有进程排序,已经到达的进程,每次选取响应比最高的进程进行调度,直到所有进程调度完毕。void FPF()char *s = 高响

17、应比优先算法;char *ss = *;printmat(s);PT;struct Pro *p,*q,*head;int t_num,t_time_in,t_work_time;head = &pro1;p = head;/*给所有进程按到达时间排序*/while(p - head pro_num) for(q = p+1; q-head time_in time_in) t_num = p-num,t_time_in = p-time_in,t_work_time = p-work_time; p-num = q-num,p-time_in = q-time_in,p-work_time

18、= q-work_time; q-num = t_num, q-time_in = t_time_in,q-work_time = t_work_time; p+; /*/int time = pro1.time_in;int cnt = pro_num;for(p = head; p judge = 0;p-left_work = p-work_time;p = head;while(cnt-)/查找、打印cnt次p = head;while(1)if(p-judge = 0) break;else p+;time = time time_in?p-time_in:time;for(q =

19、head; q judge = 0 & time = q-time_in & (time-q-time_in)*p-work_time(time-p-time_in)/q-work_time)p = q;p - judge = 1;p-begin_time = time;time += p-work_time;p-end_time = time;printf(Format2,p-num,p-time_in,p-work_time,p-begin_time,p-end_time,p-end_time - p-time_in);puts();printmat(ss);4总结:在本次课程设计过程中,我碰到不少程序调试的问题,但通过不懈努力一一解决了,从中我也学到了很多调试技巧,从而提升了自己在以后程序编写中的技能。另外,进程调度算法,虽然不是很难,但是再写一次,能加深对算法的理解和运用,好处还是很多的。参考文献:操作系统设计与实现第三版;电子出版社操作系统教程第四版 清华大学出版社参考网站

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1