操作系统课程设计——进程调度模拟算法(5种)_第1页
操作系统课程设计——进程调度模拟算法(5种)_第2页
操作系统课程设计——进程调度模拟算法(5种)_第3页
操作系统课程设计——进程调度模拟算法(5种)_第4页
操作系统课程设计——进程调度模拟算法(5种)_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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.

5、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,

6、promin.time_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 = "非抢占短进程优先&

7、quot; printmat(s); PT;struct Pro *p,*q,*head;int t_num,t_work_time,t_time_in;head = &pro1;/*按所有进程到达时间排序*/p = head;while(p - head < pro_num) for(q = p+1; q-head < pro_num; q+) if(q->time_in < p->time_in | (q->work_time < p->work_time && q->time_in = p->time_i

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

9、= head; q < head + pro_num; q+)q->judge = 0;if(q->time_in < p->time_in)p = q;if(q->time_in = p->time_in && q->work_time < p->work_time)p = q;int cnt = pro_num;p = head;while(cnt-)time = time < p->time_in ? p->time_in:time;p->judge = 1;p->begin_tim

10、e = time;time += p->work_time;p->end_time = time;for(q = head; q < head + pro_num; q+)if(p->judge = 1 && q->judge = 0)p = q;else if(p->judge = 0 &&(q->work_time < p->work_time)p = q;for(p = head; p < head+pro_num; p+)printf(Format2,p->num,p->time_i

11、n,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 <= pro_num; i+)if(propp.l_w_time = 0 |( proi.l_w_time !

12、= 0 && proi.l_w_time < propp.l_w_time && 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.end_time-proi.time_in);puts("");void SJF2()/抢占式短进程优先char s

13、= "抢占式短进程优先"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 < pro_num; q+) if(q->time_in < p->time_in) t_num = p->

14、;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 = proi.work_time;time_cnt

15、+= 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为例)取当前已经到达的进程,执行一个时间片,

16、跳转至下一个已经到达的进程,再执行一个时间片,直到所有进程都调度完毕。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 < pro_num; q+) if(q->time_in < p->time_in) t_num = p

17、->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;for(p = head; p < head+pro_num; p+)p-

18、>judge = 0;p->left_work = p->work_time;int flag = 1;for(p = head; flag; p+)if(p->time_in <= time && p->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;time+;for(q = he

19、ad; q < head+pro_num; q+)if(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 < head + pro_num; q+)printf(Format2,q->num,q->time_in,q->work_time,q->begin_time,q->end_time,q->end_time-q->time_in);puts("

20、;");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; q-head &l

21、t; pro_num; q+) if(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 = t_time_in,q->work_time = t_work_time; p+; /*/int time = pro1.time_in;int cnt = pro_num;for(p = head; p < head+pro_num; p+)p->judge = 0;p->left_work = p->work_time;p = he

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论