资源预览内容
第1页 / 共16页
第2页 / 共16页
第3页 / 共16页
第4页 / 共16页
第5页 / 共16页
第6页 / 共16页
第7页 / 共16页
第8页 / 共16页
第9页 / 共16页
第10页 / 共16页
亲,该文档总共16页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
操作系统课程设计报告题目: 进程调度算法院系:信息学院班级:信管11-2姓名:王裕辰学号:1101051024指导教师:赵华、概述本次设计的程序主要功能是模拟 CPU 的进程调度过程,实现先来先服务调度算法、 短作业优先调度算法、非抢占优先权调度算法、时间片轮转法四个进程调度算法,并根 据输入的数据和相应的调度算法计算每个进程的调度结果,对四个算法的平均周转时间 进行比较和评价。本程序主要解决的是 CPU 的四种进程调度算法的评价和比较问题,包括平均周转 时间和平均等待时间。通过这四种调度算法的比较,有利于加深对四种算法的理解,使 用户能够更好、更快的运用四种调度算法。二、设计的基本概念和原理1、基本概念(1) 到达时间:指进程到达 CPU 的时间点。(2) 服务时间:指进程需要 CPU 执行的时间长度。(3) 完成时间:指进程执行完成的时间。(4) 周转时间:指进程从到达到执行完成所经过的时间。(5) 带权周转时间:进程的周转时间与服务时间的比值,用于反映长短进程的差别。(6) 平均周转时间:指一个调度算法中所有进程的周转时间的平均值。用于衡量不同 调度算法对相同进程的调度性能。(7) 平均带权周转时间:指一个调度算法中所有进程的带权周转时间的平均值。用于 比较调度算法对不同进程的调度性能。2、基本原理( 1) FCFS 调度算法按照进程的到达时间从小到大进行排序,放入就绪队列中,每次调度都是从就绪队列中 选择对头的进程进入内存,运行此程序至完成,然后继续从就绪队列中再次调入一个进 程,运行,结束。重复上述过程直到就绪队列中所有进程全部运行完成。( 2) SPF 调度算法从就绪队列中选出一个服务时间最短的进程,将其调入内存,将 CPU 分配给它,使它 立即执行并一直执行到完成,然后再从当前就绪队列中选出一个服务时间最短的进程, 调入内存执行到完成。重复此过程直到所有进程全部执行完成。( 3) 非抢占高优先权优先调度算法从就绪队列中选出一个优先权最高的进程,将其调入内存,并为其分配CPU,该进程一 直执行直至完成。然后再次重复上述过程。(4) 基于时间片的轮转调度算法 将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把 CPU 分配给队 首进程,并执行一个时间片。当执行的时间片用完,调度进程便停止该进程的执行,并 将它送往就绪队列的末尾,然后再把 CPU 分配给就绪队列中新的队首进程,同时也让它执行一个时间片。三、总体设计本程序才用了结构化程序设计方法,首先将进程抽象为一个类,用用户所输入的每个进 程的信息来把每个对象来初始化。然后分块地调用不同的函数实现不同的调度算法。 本程序包括以下三个模块:(1)预定义及进程类定义模块定义程序所用到的头文件和常量。定义进程类的类成员,成员函数以及进程的构造函数 和析构函数。(2)主程序模块包括以下五个步骤 选择进程调度算法 输入进程相关信息 调用所选的进程调度算法 计算每个进程的完成时间、周转时间、带权周转时间 输出每个进程的时间参数,计算并输出所选算法的平均周转时间和平均带权周转时 间(3)其它函数模块 定义了四种调度算法和程序中调用的其他函数。程序流程图:是choice=0?否是choice=1?否是choice=2?否输入进程 信息选择调度算法输入choice输出各个 进程输出平均周转 时间和平均带 .权周转时间否*choice=3?*计算平均周转时间和 平均带权周转时间调用高优先权算 法调用SPJ调用RR调用FCFS四、详细设计每个模块的代码及分析如下:1、预定义及进程类定义模块#include stdafx.h #include #include #include #define MAX 100/进程的最大数量class Processprivate:int arritime,sevtime,finitime,zhtime,sevtime1,priority;/arritime- 到达时间, sevtime、 sevtimel-服务时间,finitime-完成时间,zhtime-周转时间priority-优先权double qtime;/ 带权周转时间 public:string pname;/ 进程名Process。/无参构造函数,用于构造对象数组 arritime=0; sevtime=0; sevtimel=0; finitime=0; zhtime=0; qtime=0; priority=0;int getarritime()return arritime;/ 返回到达时间int getsevtime()return sevtime;/ 返回服务时间时间int getsevtime1()return sevtime1; 返回服务时间 1 时间int getfinitime()return finitime;/ 返回完成时间int getzhtime()return zhtime;/ 返回周转时间 int getprior()return priority;/返 回优先权 double getqtime()return qtime;/ 返回带权周转时间 void setpname(string n)pname=n; 设置进程名 void setarritime(int t)arritime=t; 设置到达时间 void setsevtime1(int t)sevtime1=t;/ 设置服务时间 1 void setsevtime(int t)sevtime=t;/ 设置服务时间 void setfinitime(int t)finitime=t;/ 设置完成时间 void setzhtime(int t)zhtime=t;/ 设置周转时间 void setqtime(double t)qtime=t;/ 设置带权周转时间 void setprior(int t)priority=t;/ 设置优先权 void show() const;/输出类成员(到达时间,服务时间,完成时间,周转时间,priority, 带权周转时间)定义为常量函数,防止对成员变量进行修改void showQHP() const;/ 输出优先权;void Process:showQHP() const coutsetw(5)pnamesetw(10)arritimesetw(10)sevtimesetw(10)finitim esetw(10)zhtimesetw(13)qtimesetw(10)priorityendl;void Process:show() const coutsetw(5)pnamesetw(10)arritimesetw(10)sevtimesetw(10)finitim esetw(10)zhtimesetw(13)qtimesetw(10)endl;2、主程序模块int main(int argc, char* argv)/主函数int n,Arrive,Serve,i,q,choice,Priority;string Pname;Process proMAX;/ 定义对象数组用于存放进程double averz,averq;/averz-平均周转时间,averq-平均带权周转时间 while(1)/ 死循环,重复选择调度算法。根据选择调用相关的调度算法,若为 0,退出程序。 cout进 程 调 度 算 法endl;cout1.先来先服务2.短作业优先endl;cout3.高优先级4.时间片轮转endl;cout0. 退 出endl;cout请选择进程调度算法:choice;if(choice=0)return 0;coutvv输入进程数目n:vvendl;cinn;coutendl;coutvv输入每个进程的信息:vvendl;coutPname; proi.setpname(Pname);coutvv到达时间;cinArrive;proi.setarritime(Arrive);coutvv服务时间;cinServe;proi.setsevtime(Serve);proi.setsevtime1(Serve);if(choice=1)FCFS(pro,n); /按到达时间从小到大排序coutvvendlvvFCFS算法调度各进程相关时间:vvendl;if(choice=2)SJF(pro,n); /调用短作业优先算法 coutvvendlvvSJF 算法调度各进程相关时间: vvendl;if(choice=3)for(i=0;ivn;i+) / 输入进程的优先权coutvv输入vv第vvi+lvv个进程的优先级:vvendl; cinPriority;proi.setprior(Priority);QHP(pro,n);调用高优先权算法 coutvvendlvvQHP 算法调度各进程相关时间: vvendl;if(choice=4)coutvv输入时间片大小:vvendl;cinq;RR(pro,n,q); /调用时间片轮转算法 coutvvendlvvFCFS 算法调度各进程相关时间: vvendl;averz=calaverzh(pro,n);计算平均周转时间 averq=calaverqt(pro,n);计算平均带权周转时间/输出进程的到达时间、服务时间、完成时间、周转时间、带权周转时间、优先级、平均周转时间、平均带权周转时间if(choice=3) coutsetw(5) 进 程 名 setw(10) 到 达 时 间 setw(10) 服 务 时 间vvsetw(10)vvsetw(10)vv完成时间vvsetw(10)vv周转时间vvsetw(13)vv带权周转时 间vvsetw(10)vv优先级vvendl;for(i=0;in;i+) proi.showQHP();/ 如果选择高优先权算法,输出每个进程的优先权elsecoutvvsetw(5)vv进程名vvsetw(10)vv到达时间vvsetw(10)vv服务时间 vvsetw(10)vv完成时间vvsetw(10)vv周转时间
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号