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

下载本文档

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

文档简介

课程名称:课程名称:实习题目:姓名:系:专业:年级:学号:指导教师:职称:福建农林大学计算机与信息学院课程设计报告操作系统进程调度算法模拟***计算机计算机科学与技术2011级********2014年1月16日福建农林大学计算机与信息学院信息工程类

课程设计报告结果评定评语:成绩:指导教师签字:评定日期:TOC\o"1-5"\h\z进程调度算法模拟课程设计的目的 1进程调度算法模拟课程设计的要求 1进程调度算法模拟课程设计报告内容 13.1前言 13.2进程调度算法模拟设计的环境 13.3系统流程图及各模块 2总结 18参考文献 19参考网站 19进程调度算法模拟进程调度算法模拟课程设计的目的和意义2013-2014学年,在学习了《操作系统》这门课后,对当中的进程调度算法产生了浓厚的兴趣。各种调度算法,理论上比较好理解。为了加深印象,我决定把各种调度算法用C语言写出来。于是便产生这份从头到尾都让我绞尽脑汁的课程设计。做这份课程设计,对从事系统开发的人员来说,是必要的,可以在一定程度上为自己以后的发展铺路。虽然用处不是特别明显,但对加深系统调用算法的理解无疑用处是巨大的。进程调度算法模拟课程设计的要求用C语言写出至少两种进程调度算法。画出大概流程图。对算法过程出现的bug进行调试。展示最后的算法结果3.1前言:目前比较常见的几种进程调度算法有:先到先服务(FCFS)短进程优先(非抢占和抢占)算法(SPF)高响应比优先算法时间片轮转算法我选出其中三种即先到先服务,短进程优先(2种)和时间片轮转算法进行C语言描述以加深对这三种算法的理解。3.2进程调度算法模拟设计的环境VC++6.0及CodeBlocks,32位计算机WIN7操作系统。

3.3流程图判断是否所正程都被调1断是否肝歆雄已经虢挑选最先到W曲程序一次性执行完毕对各进程按到达时E进行排序查我当前己经到达的彘短进程凋用该进莲设置当前时巨为o当前时巨+1当前进程-]判J新逐程冈U至“达3.3流程图判断是否所正程都被调1断是否肝歆雄已经虢挑选最先到W曲程序一次性执行完毕对各进程按到达时E进行排序查我当前己经到达的彘短进程凋用该进莲设置当前时巨为o当前时巨+1当前进程-]£在热彳亍的进程贝』.麦尹抢占'进程是结束兰前进程减去一个时闫片单位按响应比大小'进程是结束兰前进程减去一个时闫片单位按响应比大小气到达的进理按轮转顺序选定一个进程所有进程按到二近时闫排序所有进程按到达时向排序调度该进程至结束定义进程结构体:structPro(intnum;〃进程号inttime_in; 〃进程到达时间intwork_time;//进程服务时间intbtime;//用于抢占式进程优先记录该进程开始时间intl_w_time;//用于抢占式进程优先记录剩余服务时间intend_time; 〃记录该进程结束时间,(需要时时监测)intjudge; //用于需要时的标记}pro[10];//进程结构体1先到先服务算法描述:把所有进程按到达先后排序,每次取最先到的进程执行后淘汰,再取下一个,直到所有进程调度完毕。主要代码:voidFCFS()〃先到先服务{chars[]={”先到先服务"};printmat(s);PT;inti,j;intmin;intt=pro_num;intbegin_time=0x7fff;for(i=1;i<=pro_num;i++){if(pro[i].time_in<begin_time)begin_time=pro[i].time_in;pro[i].judge=0; //所有进程号查找标志置0,表示还未查找}while(t--){for(i=1;i<=pro_num;i++){if(pro[i].judge==0){min=i;//设其为目前最早到达的时间for(j=i+1;j<=pro_num;j++){if(pro[j].judge==0&&pro[j].time_in<=pro[min].time_in)//该进程号若还未被查找且小于预设min=j;}pro[min].judge=1;//该进程号被查找过printf(Format2,pro[min].num,pro[min].time_in,pro[min].work_time,begin_time,begin_time+pro[min].work_time,begin_time+pro[min].work_time-pro[min].time_in);begin_time+=pro[min].work_time;puts(⑰;}}}printmat(s);puts(⑰;}程序截图:心心心心心心折中峰元-操作系统-进程调度模拟-课程设计玛心玛心玛"*请输入进程总数二依次输入各进程的进程号、到达时间和服务时间aia345?101005?070 ••+ZZi1.+叩女进程号到达时间月艮务日寸间开始时间结束时间周转时间1013010102341014113E914231841010023123113E9999123213123XXXXXXXXXXXXXXXXXXX先;至11先;服-务-XMXMXMXMXMXMXMXMXMX2段进程优先非抢占算法描述:每次选出最短的进程进行调度,调度完毕则淘汰,直到所有进程都调度完毕;voidSJF()〃短进程优先(非抢占){chars[]="非抢占短进程优先”;printmat(s);PT;structPro*p,*q,*head;intt_num,t_work_time,t_time_in;head=&pro[1];/************************按所有进程到达时间排序*************/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_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++;}/*************************************************************//**********找出第一个执行的进程,即最先到达的最短进程*********/inttime=0;p=head;for(q=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;}intcnt=pro_num;p=head;while(cnt--){time=time<p->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<head+pro_num;q++){if(p->judge==1&&q->judge==0)p=q;elseif(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_in,p->work_time,p->begin_time,p->end_time,p->end_time-

p->time_in);puts("");}printmat(s);puts("");}***************^中峰元-操作系统-进程调度模拟-课程设计*********g输入迸程总数二次输入各进程的进程号'到达时间和服务时间01055010进程号4到达时间0结束时间周转时间1110 50*非抢占短进程优先进程号4到达时间0结束时间周转时间1110 50*非抢占短进程优先3短进程优先(抢占)算法描述:按时间叠加,当新进程到达时,判断如果比当前执行的进程短,则发生抢占,执行完的淘汰,直到所有进程都调度完毕。intfind(intpp,inttime){inti;for(i=1;i<=pro_num;i++){if(pro[pp].l_w_time==011(pro[i].l_w_time!=0&&pro[i].l_w_time<pro[pp].l_w_time&&time>=pro[i].time_in))pp=i;}returnpp;}voidtest(){inti;for(i=1;i<=pro_num;i++){printf(Format2,pro[i].num,pro[i].time_in,pro[i].work_time,pro[i].btime,pro[i].end_time,pro[i].end_time-pro[i].time_in);puts(⑰;}}voidSJF2() 〃抢占式短进程优先{chars[]={"抢占式短进程优先"};printmat(s);PT;inti;structPro*p,*q;//先对到达时间进行排序〃structPro*head=&pro[1];intt_num,t_time_in,t_work_time;inttime_cnt=0,time;p=head=&pro[1];while(p-head<pro_num){for(q=p+1;q-head<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++;}for(i=1;i<=pro_num;i++){pro[i].l_w_time=pro[i].work_time;time_cnt+=pro[i].work_time;}intpp=1;time=pro[pp].time_in;while(time_cnt--){pro[pp].l_w_time--;time++;if(pro[pp].l_w_time==0){pro[pp].end_time=time;}else;if(pro[pp].btime==0&&pro[pp].time_in!=0)pro[pp].btime=time-1;else;

pp=find(pp,time);}test();printmat(s);puts("");}M——f中峰元—操作系统_进程调度模拟_课程设计*******请输入进程总数二依次输入各进程的进程号r到达时间和服务时间1233141073依次输入各进程的进程号r到达时间和服务时间12331410731010MIMIMIMIMIMIMIXKXKXKXXXXXX进程号到达时间12110719236719结束时间周转时间64191B29411531910M:M:M:M:M:M:M:XXXXXXXMKMKM才迁占 j芸彳呈•[尤 3(N3(N3(N3(NMNMNMNMNMN4时间片轮转(以单位1为例)取当前已经到达的进程,执行一个时间片,跳转至下一个已经到达的进程,再执行一个时间片,直到所有进程都调度完毕。voidTROT(){char*s="时间片轮转算法”;printmat(s);PT;structPro*p,*q,*head;intt_num,t_time_in,t_work_time;head=&pro[1];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->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++;}/*************************************************************/inttime=pro[1].time_in;for(p=head;p<head+pro_num;p++){p->judge=0;p->left_work=p->work_time;}intflag=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;}elsecontinue;time++;for(q=head;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("");}printmat(s);}

“msf中峰元-操作系统-进程调度模棍-课程设计**********质输入进程总数:%次输入各进程的进程号、到达时间和服务时间123TOC\o"1-5"\h\z34455&&7进程号到达时间服务曲可开菇御间结束时间周转时间123213li2343IS15345422184565252056?62?215高响应比优先先对所有进程排序,已经到达的进程,每次选取响应比最高的进程进行调度,直到所有进程调度完毕。voidFPF(){char*s="高响应比优先算法”;char*ss=char*ss=”****************”.;printmat(s);PT;structPro*p,*q,*head;intt_num,t_time_in,t_work_time;head=&pro[1];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->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++;}/*************************************************************/inttime=pro[1].time_in;intcnt=pro_num;for(p=head;p<head+pro_num;p++)(p->judge=0;p->left_work=p->work_time;}p=head;while(cnt--)〃查找、打印cnt次{p=head;while(1){if(p->judge==

温馨提示

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

评论

0/150

提交评论