ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:115.37KB ,
资源ID:12177910      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12177910.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课设进程调度模拟程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课设进程调度模拟程序.docx

1、操作系统课设进程调度模拟程序沈阳理工大学课程设计专用纸Noi进程调度模拟程序 1 iI I1. 设计目的及要求 1 :II2.概要设计 1 1I I3.算法流程图 2 :II四源程序及注释 6 :II五.运行结果及分析 16 :II六课程设计总结 19 ;II七.参考文献 19 ;沈阳理T人学进程调度模拟程序 :IIIII1.设计目的及要求 iIIIII编写一个进用调度程序,允许多个进用并行执行。木次设计将采用三种筛法实现进觀 :I的行执行.分别是杲岛优先数优先的调度算法(即把处理机分配给优先数垠岛的进秤):I.先来先服务算法.按时间片轮转调度算法。 :I aIII2.概要设计 1II aI

2、a(D每个进程令个进序控制块(PCB)表示。进程控制块可以包含如下信息:进程名、:I优先数、到达时间、需要运行时间、己用CPU时间、进程状态。 :2进粹的优先数及需要的运行时间可以事先人为地指定(也可以由181机数产生)。进程;的到达时间为输入进稈的时间。进程的运行时间以时间片为单位进行计算。 ;3每个进程的状态可以是就绪w (Wait).运行R (Run)、或完成F (Finish)三种状态之一。 :I4建立一个pcbobjf的数细来存放讲秤队列。 :建立一个类pcbobj存放进程的备种信息并对这些信息的操作。 :建立一个类wait_manager来对就绪进程进行管理。 :I 建立一个类cp

3、u.manager来对运行的进聊进行管理。 :沈阳理T人学沈阳理工大学课程设计专用纸No2三.算法流程图图1一1上程序流程图沈阳理T人学沈阳理工大学课程设计专用纸No?图1一2 FCFS算法流程图沈阳理T人学沈阳理工大学课程设计专用纸No4图1一3 RR算法流用图沈阳理T人学沈阳理工大学课程设计专用纸No5图1一4 HPF算法流卅图沈阳理T人学沈阳理工大学课程设计专用纸Nob四.源程序及注Tr pcbobj.h #include using namespace std;#ifndef PCBOBJ_H_#define PCBOBJ_H_enum pStaUisWait,Run,Finish,U

4、NGO/定义进程的四种状态class PCBobj public:PCBobj();PCBobj(string namejnt idjnt reachjnt execute);virtual -PCBobjO;int getExecTime() const;int ge(HasExecTime() const;int getld() const;int getReachTinie() const;siring getName() const;pStalus getStatus() const;void setHasExecTime(int hasExecTime);void setld(int

5、 pld);void setStatus(pStatus status);void setExecTime(int execTime);void setName(string pName);void setReachTime(int reachTime);bool isFinish();进程是否运行完毕bool last_statu;/l断进程上一个cpu是否是运行态private:string pName; 进丹名in( pld;进秤优先数int reachTime; 进軒到达时间int execTime; 进杆1需要运彳j:的时间ini hasExecTime;/进程lL经运彳J:的时间p

6、Stalus status;typedef PCBobj *pcbobj;#endif/* PCBOBJ_H_ */ pcbobj.cpp 代码 include ”PCBobj.h”PCBobj:PCBobj() hasExecTime=O;沈阳理人学status=UNGO;last_statu=false;)PCBobj:PCBobj(string namejnt idjnt reachjnt execute)! pName=name;pld=id;reachTime=reach;execTi me=execuie;hasExecTime=O; status=UNGO:PCBobj:-PCB

7、obj() int PCBobj:getExecTime() const return execTi me;)int PCBobj:getHasExecTime() const return hasExecTime;int PCBobj:ge(Id() constreturn pld;string PCBobj:gelName() constreturn pName;Iint PCBobj:getReachTime() constreturn reachTime;)pStatus PCBobj :getStatus() const return status;)void PCBobj:setH

8、asExecTime(int hasExecTime) this-hasExecTime = hasExecTime;)void PCBobj:setId(int pld) this-pld = pld;void PCBobj:setStatus(pStatus status)! this-status = status;)void PCBobj:setExecTime(int execTime) this-execTime = execTi me;I沈阳理T人学void PCBobj:setName(string pName) lhis-pName = pName;void PCBobj:s

9、etReachTime(int reachTime) this-reachTime = reachTime;)bool PCBobj:isFinish()bool Flag=false; if(execTime = hasExecTime) slatus=Finish;Flag=true;return Flag; waitmanager.h #include#include #includeHPCBobj.hM#ifndef WAITMANAGER.H.#define WAITMANAGER_H_class WaitManager public:WaitManager(); virtual -

10、WaitManager(); void add(pcbobj new_obj); void insert(pcbobj new_name); void remove(string name); void remove();bool emptyO;pcbobj get();pcbobj last();private:list wait.PCBJist;);#endif/* WAITMANAGER.H. / waitmanager.cpp- #include HWaitManager.hHWaitManager:WaitManager() WaitMana2er:WaitManager() voi

11、d WaitManager:add(pcbobj new_obj)wait_PCBist.push_back(new_obj); new_obj-setStatus(Wait);Ibool WaitManager:en】ply()沈阳理T人学return wait_PCBis(cmply();void WaitManager:insert(pcbobj new_obj)if(wail_PCB Jist.emptyO)add(new_obj);elsebool insertJnfo=false;/t*t看是古己经插入进去for(Iist:iterator it=waitJPCB_list.beg

12、in();it!=waitJPCBJist.end();it+)if(new_obj-getld()(*it)-getld()wait_PCB Jist.insert(it,new_obj);ncwobj sc(SkHus(Wait);insertnfo=lue;break;if(!insertnfo)wait_PCBJist.push_back(new_obj);new_obj-setStatus(Wait);void WaitManager:remove(string name)if(empty()coutvv”没有进程在就绪队列屮” vvendl;elsebool removefo=fa

13、lse;for(list:iterator it=wait_PCBJist.begin();it!=wait_PCBJist.end();it+) if(*it)-getName() = name)wail_PCB Jist.erase(it);remove_info=tme;break;if(!removejnfo)coutnameH 进程 不存在 Hendl;void WaitManager:remove() if(empty()coutvv”没有就绪进程在队列+ Mendl;沈阳理T人学elsewait_PCBJist.pop_front();)pcbobj WaitManager:ge

14、t() return wait_PCBJist.front();)pcbobj WaitManager:last()return wait.PCB Jist.back(); pumanagcr.h-#include PCBobj.hn#ifndef CPU_M ANAGER#define CPU_MANAGER_H_enum cpu.StatusFREE.BUSY /cpu 的状态 class cpu_Manager public:cpu_Manager();virtual cpu_Manager();void remove();cpuStatus getCpuJnfo() const;pcb

15、obj getCpu_pcb() const;void add(pcbobj cpu_pcb);void update();void update(int args);int cpu_timeslice;private:cpu.Status cpujnfo;pcbobj cpu_pcb;#endif/* CPU_MANAGER_H_ */ cpumanager.cpp- #include ncpu_Manager.hHcpu_Manager:cpu_Manager() cpu_pcb=();cpu_info=FREE;cpu_timeslice=4;)cpu_Manager:cpu_Manag

16、er() cpu_pcb=O;Icpu_Status cpu_Manager:getCpu_info() const 沈阳理T人学return cpujnfo;pcbobj cpuManager:getCpu_pcb() const return cpu_pcb;)void c pu_M an age r: add( pc bob j cpu_pcbl) cpu_pcb = cpu_pcb I; cpuJnfo=BUSY;void cpu_Manager: :remove() this-cpu_pcb=O; cpu_info=FREE;void cpu_Manager:update() cpu

17、_pcb-setStatus( Run); cpu_pcb-setHasExecTime(cpu_pcb-getHasExecTime()+l);void cpu_Manager:update(int args)update(); cpu_pcb-setld(cpu_pcb-getld()- args);) scheduLsimulate.h #include WaitManager.h0#include Hcpu_Manager.hH#ifndef SCHEDUL_SIMULATE_H_#define SCHEDUL_SIMULATE_H_void choice();string conve

18、rt_statu(pStatus statu);void process_i n i t( pc bob j process);void process_update(pcbobj processjnt time_record,WaitManager& wait_manager); void process_updated(pcbobj process J nt time_record,WaitManager & wait_manager);/打印进程信息 void process_record(pcbobj process J nt time.record);/ 从 wait 至lj run

19、 void waitTOrun(WaitManager& wait_manager,cpu_Manager& cpu_manager);void runTOwail(WaitManager& wait_manager,cpu_Manager& cpu_nianager);void FCFS(pcbobj process);void RR(pcbobj process);void HPF(pcbobj process);#endif/* SCHEDUL_SIMULATE_H_ / scheduLsimulate.cpp #incIudeHscheduLsimulate.hHvoid choice

20、()沈阳理T人学沈阳理工大学课程设计专用纸NoI2coutnl:FCFSnendI;coutn 2:RR Hendl;coutn3:HPF,endl;cou(v”4:quirvvendl;)string convert_statu(pStatus statu) string value = f,UNGOH;switch (statu) case Wait:value = ” Wait”;break;case Run:value = Run;break;case Finish:value = Finish;break;case UNGO:value = UNGO”;)return value;)

21、void process.init(pcbobj process) string name;int process.id;int processreach;int process_execute;cout 请按顺序输入进程的唯一标识进程名进程的优先级进程的到达时间进程的运行时间 endl;for (int i = 0; i setN ame( name);(process + i )-setId(process.id);(process + i)-setReachTime(process_reach);(process + i)-setExecTime(process_execute);cou

22、t ”第” (i+ 1) ”个进稈信息已经初始化, endl:cout 所有进程信息已经全部完成 endl;沈阳理T人学沈阳理工大学课程设计专用纸NoI3void process_update(pcbobj process, int time_record, WaitManager& wait_manager) for (int i = 0; i getReachTime() = time_record) wait_manager.add(process + i)y/H 接加到末尾void process_update.id(pcbobj process, int time_record, W

23、aitManager& wait_manager) for (int i = 0; i getReachTime() = time.record) waiLmanage r.insert(process + i);void process_record(pcbobj process,int time_record)cout 时亥ij: time_record endl;cout ”进程名l优先数t到达时间(运行时间t已经运行时间t状态 endl; cout H endl;for (int i = 0; i v 4; i+) cout (process + i)-getName() MtH (p

24、rocess + i)-getld() HtH (process + i)-getReachTime() tH (process + i)-getExecTime() HtH (process + i)-getHasExecTime() Mttn;if( (process+i)- I ast_statu)cout convert_statu(Run) endl;elsecoutconvert_statu(process+i)-getStatus()endl; (process+i)-lascsta(u=false;)cout endl;)void waitTOrun(WaitManager&

25、wait_manager, cpu_Manager& cpu.manager) cpu_manage radd(wait_manager.get();wait_manager.remove();I沈阳理T人学void runTOwait(WaitManager& wait_manager, cpu_Manager& cpu_manager) pcbobj(emp=cpu_managcgelCpu_pcb();temp-last_statu=true;wait_manager.add(temp);)void FCFS(pcbobj process) int timc_record = 0;PCB

26、obj *process_last = process + 3;WaitManager wait_manager;cpuManager cpumanager;while (processJast-getStatus() != Finish) process_update(process,time_record,wait_manager); proccss_rccord(proccss,timc_rccord);if (!wait_manager.empty() & cpumanager.getCpu_info() = FREE) waitTOrun(wait_manager, cpumanag

27、er);)if (cpumanager.getCpufo() = BUSY)cpu manage r.u pdate();if(cpumanager.getCpu_pcb()-isFi nish() cpumanager.removeO;time_record+;if (process_last-getStatus() != UNGO & !wait_manager.empty()/L2经到达 process.last = wai t.manager. Iast();Iprocess_record(process,time_record);)void RR(pcbobj process) in

28、t time_record = 0;PCBobj *process_last = process + 3;WaitManager wait_manager;cpu_Manager cpumanager;int k=();/记录时间片满则为零while (processJast-getStatus() != Finish) process_update(process,time_record,wait_manager); process_record( process J i me_record);if (!wait_manager.empty() & cpumanager.getCpunfo() = FREE) waitTOrun(wait_manager, cpumanager);if (cpumanager.getCpufo() = BUSY)cpunianager.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1