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

上传人:ji****72 文档编号:27375047 上传时间:2018-01-09 格式:DOC 页数:16 大小:279.50KB
返回 下载 相关 举报
操作系统课程设计——进程调度模拟算法_第1页
第1页 / 共16页
操作系统课程设计——进程调度模拟算法_第2页
第2页 / 共16页
操作系统课程设计——进程调度模拟算法_第3页
第3页 / 共16页
操作系统课程设计——进程调度模拟算法_第4页
第4页 / 共16页
操作系统课程设计——进程调度模拟算法_第5页
第5页 / 共16页
点击查看更多>>
资源描述

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

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

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

3、有:1. 先到先服务(FCFS)2. 短进程优先(非抢占和抢占)算法(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;/用于抢占式进程优先

4、记录剩余服务时间int end_time; /记录该进程结束时间, (需要时时监测)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 time_in time_in | (q-work_time work_time & q-

5、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 = 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 t

6、ime_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 = 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_ti

7、me)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 短进程优先(抢占)算法描述:按时间叠加,当新进程到达时,判断如果比当前执行的进程短,则发生抢占,执行完的淘汰,直到所有进程都调度完毕。int find(int pp,int time)int i;for(i = 1; i = proi.time_in)pp = i;return pp;void test()int i;for(i = 1; i ti

8、me_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_in = t_time_in,q-work_time = t_work_time;p+;for(i = 1; i time_in time_in) t_num = p-num,t_time_in = p-time_in,t_work_time = p-work_time;p-nu

9、m = 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+;/*/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

10、 = 1; p-begin_time = time;if(p-left_work = 0) p-end_time = time+1;else continue;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();printma

11、t(s);5 高响应比优先先对所有进程排序,已经到达的进程,每次选取响应比最高的进程进行调度,直到所有进程调度完毕。void FPF()char *s = 高响应比优先算法;char *ss = *;printmat(s);PT;struct Pro *p,*q,*head;int t_num,t_time_in,t_work_time;head = p = head;/*给所有进程按到达时间排序*/while(p - head time_in time_in)t_num = p-num,t_time_in = p-time_in,t_work_time = p-work_time;p-num

12、 = 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+;/*/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+

13、;time = time time_in?p-time_in:time;for(q = 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 总结:在本次课程设计过程中,我碰到不少程序调试的问题,但通过不懈努力一一解决了,从中我也学到了很多调试技巧,从而提升了自己在以后程序编写中的技能。另外,进程调度算法,虽然不是很难,但是再写一次,能加深对算法的理解和运用,好处还是很多的。参考文献:操作系统设计与实现第三版;电子出版社操作系统教程第四版 清华大学出版社参考网站http:/

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

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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