操作系统课程设计报告书进程调度模拟程序.doc
《操作系统课程设计报告书进程调度模拟程序.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计报告书进程调度模拟程序.doc(20页珍藏版)》请在三一办公上搜索。
1、目 录进程调度模拟程序1一设计目的及要求1二概要设计1三算法流程图2四源程序及注释6五运行结果及分析16六课程设计总结19七参考文献19进程调度模拟程序一设计目的及要求编写一个进程调度程序,允许多个进程并行执行。本次设计将采用三种算法实现进程的并行执行,分别是最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)、先来先服务算法、按时间片轮转调度算法。 二概要设计 每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态。 进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为输入
2、进程的时间。进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 建立一个pcbobj的数组来存放进程队列。建立一个类pcbobj存放进程的各种信息并对这些信息的操作。建立一个类wait_manager 来对就绪进程进行管理。建立一个类cpu_manager 来对运行的进程进行管理。三算法流程图开始初始化进程信息FCFS算法结束RR算法HPF算法Y调用FCFS算法调用RR算法Y调用HPF算法YNNN图11 主程序流程图 start信息初始化进程调度完毕输出该时刻的进程状态表EndY更新进程信息打印进程状态就绪
3、队列不为空&cpu空闲Y将就绪队列的第一个进程给cpuCpu为busy态NY更新运行的进程信息运行进程运行完毕Cpu.remove()YN时间记录加一N 图12 FCFS算法流程图start信息初始化进程调度完毕输出该时刻的进程状态表EndNY更新进程信息打印进程状态就绪队列不为空&cpu空闲Y将就绪队列的第一个进程给cpuCpu为busy态NY更新运行的进程信息进程时间加一运行进程运行完毕Cpu.remove()进程时间清零YN时间记录加一是否超时进程加到就绪队列进程时间清零YNN 图13 RR算法流程图start信息初始化进程调度完毕输出该时刻的进程状态表EndY更新进程信息打印进程状态就
4、绪队列不为空&cpu空闲Y将就绪队列的第一个进程给cpuCpu为busy态NY更新运行的进程信息运行进程运行完毕进程加到就绪队列记录进程临时信息NN时间记录加一NCpu.remove()Y 图14 HPF算法流程图四源程序及注释 -pcbobj.h -#include using namespace std;#ifndef PCBOBJ_H_#define PCBOBJ_H_enum pStatusWait,Run,Finish,UNGO;/定义进程的四种状态class PCBobj public:PCBobj();PCBobj(string name,int id,int reach,int
5、 execute);virtual PCBobj(); int getExecTime() const; int getHasExecTime() const; int getId() const; int getReachTime() const; string getName() const; pStatus getStatus() const; void setHasExecTime(int hasExecTime); void setId(int pId); void setStatus(pStatus status); void setExecTime(int execTime);
6、void setName(string pName); void setReachTime(int reachTime); bool isFinish();/进程是否运行完毕 bool last_statu;/判断进程上一个cpu是否是运行态private: string pName; /进程名 int pId; /进程优先数 int reachTime; /进程到达时间 int execTime; /进程需要运行的时间 int hasExecTime; /进程已经运行 的 时间 pStatus status;typedef PCBobj *pcbobj;#endif /* PCBOBJ_H_
7、 */-pcbobj.cpp代码-#include PCBobj.hPCBobj:PCBobj() hasExecTime=0;status=UNGO;last_statu=false;PCBobj:PCBobj(string name,int id,int reach,int execute)pName=name;pId=id;reachTime=reach;execTime=execute;hasExecTime=0;status=UNGO;PCBobj:PCBobj() int PCBobj:getExecTime() const return execTime;int PCBobj:g
8、etHasExecTime() const return hasExecTime;int PCBobj:getId() const return pId;string PCBobj:getName() const return pName;int PCBobj:getReachTime() const return reachTime;pStatus PCBobj:getStatus() const return status;void PCBobj:setHasExecTime(int hasExecTime) this-hasExecTime = hasExecTime;void PCBo
9、bj:setId(int pId) this-pId = pId;void PCBobj:setStatus(pStatus status) this-status = status;void PCBobj:setExecTime(int execTime) this-execTime = execTime;void PCBobj:setName(string pName) this-pName = pName;void PCBobj:setReachTime(int reachTime) this-reachTime = reachTime;bool PCBobj:isFinish()boo
10、l Flag=false;if(execTime = hasExecTime)status=Finish;Flag=true;return Flag;-waitmanager.h-#include#include #includePCBobj.h#ifndef WAITMANAGER_H_#define WAITMANAGER_H_class WaitManager public:WaitManager();virtual WaitManager();void add(pcbobj new_obj);void insert(pcbobj new_name);void remove(string
11、 name);void remove();bool empty();pcbobj get();pcbobj last();private:list wait_PCB_list;#endif /* WAITMANAGER_H_ */-waitmanager.cpp-#include WaitManager.hWaitManager:WaitManager() WaitManager:WaitManager() void WaitManager:add(pcbobj new_obj)wait_PCB_list.push_back(new_obj);new_obj-setStatus(Wait);b
12、ool WaitManager:empty()return wait_PCB_list.empty();void WaitManager:insert(pcbobj new_obj)if(wait_PCB_list.empty()add(new_obj);elsebool insert_info=false;/查看是否已经插入进去for(list:iterator it=wait_PCB_list.begin();it!=wait_PCB_list.end();it+)if(new_obj-getId()(*it)-getId()wait_PCB_list.insert(it,new_obj)
13、;new_obj-setStatus(Wait);insert_info=true;break;if(!insert_info)wait_PCB_list.push_back(new_obj);new_obj-setStatus(Wait);void WaitManager:remove(string name)if(empty()cout没有进程在就绪队列中endl;elsebool remove_info=false;for(list:iterator it=wait_PCB_list.begin();it!=wait_PCB_list.end();it+)if(*it)-getName(
14、) = name)wait_PCB_list.erase(it);remove_info=true;break;if(!remove_info)coutname进程不存在endl;void WaitManager:remove()if(empty()cout没有就绪进程在队列中cpu_pcb=0;cpu_info=FREE;void cpu_Manager:update()cpu_pcb-setStatus(Run);cpu_pcb-setHasExecTime(cpu_pcb-getHasExecTime()+1);void cpu_Manager:update(int args)updat
15、e();cpu_pcb-setId(cpu_pcb-getId()- args);- schedul_simulate.h-#include WaitManager.h#include cpu_Manager.h#ifndef SCHEDUL_SIMULATE_H_#define SCHEDUL_SIMULATE_H_void choice();string convert_statu(pStatus statu);void process_init(pcbobj process);void process_update(pcbobj process,int time_record,WaitM
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告书 进程 调度 模拟 程序
链接地址:https://www.31ppt.com/p-4102464.html