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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

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

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

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

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

4、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 = pro_num; i+) if(proi.time_in begin_time) begin_time

5、= proi.time_in; proi.judge = 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.tim

6、e_in,promin.work_time, begin_time,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,*he

7、ad; int t_num,t_work_time,t_time_in; 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 =

8、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 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

9、 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_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(); pr

10、intmat(s); puts();3短进程优先(抢占) 算法描述:按时间叠加,当新进程到达时,判断如果比当前执行的进程短,则发生抢占,执行完的淘汰,直到所有进程都调度完毕。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(Form

11、at2,proi.num,proi.time_in,proi.work_time,proi.btime,proi.end_time,proi.end_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;

12、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_in = t_time_in,q-work_time = t_work_time; p+; for(i = 1; i = pro_num; i+) proi.l_w_time = p

13、roi.work_time; time_cnt += proi.work_time; int pp = 1; time = propp.time_in; while(time_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为例) 取当前已

14、经到达的进程,执行一个时间片,跳转至下一个已经到达的进程,再执行一个时间片,直到所有进程都调度完毕。void TROT() char *s = 时间片轮转算法; 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_

15、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 = 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-l

16、eft_work-; if(p-judge = 0) p-judge = 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-en

17、d_time,q-end_time-q-time_in); puts(); printmat(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 = &pro1; p = head; /*给所有进程按到达时间排序*/ while(p - head pro_num) for(q = p+1;

18、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_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_w

19、ork = 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 = 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-wor

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2