1、福建农林大学计算机与信息学院课程设计报告课程名称:操作系统实习题目:进程调度算法模拟姓名:*系:计算机专业:计算机科学与技术年级:2011级学号:*指导教师:*职称:*2014年1月16日福建农林大学计算机与信息学院信息工程类课程设计报告结果评定评语:成绩:指导教师签字:评定日期:目录1.进程调度算法模拟课程设计的目的12.进程调度算法模拟课程设计的要求13.进程调度算法模拟课程设计报告内容131前言132进程调度算法模拟设计的环境133系统流程图及各模块24总结18参考文献19参考网站19进程调度算法模拟1.进程调度算法模拟课程设计的目的和意义2013-2014学年
2、,在学习了操作系统这门课后,对当中的进程调度算法产生了浓厚的兴趣。各种调度算法,理论上比较好理解。为了加深印象,我决定把各种调度算法用C语言写出来。于是便产生这份从头到尾都让我绞尽脑汁的课程设计。做这份课程设计,对从事系统开发的人员来说,是必要的,可以在一定程度上为自己以后的发展铺路。虽然用处不是特别明显,但对加深系统调用算法的理解无疑用处是巨大的。2.进程调度算法模拟课程设计的要求1.用C语言写出至少两种进程调度算法。2.画出大概流程图。3.对算法过程出现的bug进行调试。4.展示最后的算法结果3.1前言:目前比较常见的几种进程调度算法有:1.先到先服务(FCFS)2.短进程优先
4、(需要时时监测)intjudge;/用于需要时的标记pro10;/进程结构体1先到先服务算法描述:把所有进程按到达先后排序,每次取最先到的进程执行后淘汰,再取下一个,直到所有进程调度完毕。主要代码:voidFCFS()/先到先服务chars=先到先服务;printmat(s);PT;inti,j;intmin;intt=pro_num;intbegin_time=0x7fff;for(i=1;i=pro_num;i+)if(proi.time_inbegin_time)begin_time=proi.time_in;proi.judge=
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段进程优先非抢占算法描述:每次选出最短的进程进行调度,调度完毕则淘汰,直到所有进程都调度完毕;voidSJF()/短进程优先(非抢占)chars=非抢占短进程优先;printmat(s);PT;structPro*p,*q,*head;intt_num,t_work_time,t_time_in
8、t_time_in,q-work_time=t_work_time;p+;/*/*找出第一个执行的进程,即最先到达的最短进程*/inttime=0;p=head;for(q=head;qjudge=0;if(q-time_intime_in)p=q;if(q-time_in=p-time_in&q-work_timework_time)p=q;intcnt=pro_num;p=head;while(cnt-)time=timetime_inp-time_in:time;p-judge=1;p-begin_time=
10、抢占,执行完的淘汰,直到所有进程都调度完毕。intfind(intpp,inttime)inti;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;returnpp;voidtest()inti;for(i=1;i=pro_num;i+)printf(Format2,proi.num,proi.time_in,proi.work_time,proi.btime,proi.end_time,proi.en
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;intpp=1;time=propp.time_in;while(tim
15、_in=t_time_in,q-work_time=t_work_time;p+;/*/inttime=pro1.time_in;for(p=head;pjudge=0;p-left_work=p-work_time;intflag=1;for(p=head;flag;p+)if(p-time_inleft_work0)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
16、;time+;for(q=head;qleft_work!=0)break;if(q=head+pro_num)flag=0;if(p=head+pro_num-1)/设从开头再开始找p=head-1;for(q=head;qnum,q-time_in,q-work_time,q-begin_time,q-end_time,q-end_time-q-time_in);puts();printmat(s);5高响应比优先先对所有进程排序,已经到达的进程,每次选取响应比最高的进程进行调度,直到所有进程调度完毕。voidFPF()char*s=高响
18、=q-work_time;q-num=t_num,q-time_in=t_time_in,q-work_time=t_work_time;p+;/*/inttime=pro1.time_in;intcnt=pro_num;for(p=head;pjudge=0;p-left_work=p-work_time;p=head;while(cnt-)/查找、打印cnt次p=head;while(1)if(p-judge=0)break;elsep+;time=timetime_inp-time_in:time;for(q=head;qjudge=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);put