欢迎来到天天文库
浏览记录
ID:38672879
大小:138.61 KB
页数:9页
时间:2019-06-17
《实验2 进程状态转换及其PCB的变化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验2进程状态转换及其PCB的变化一、目的:自行编制模拟程序,通过形象化的状态显示,深入理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。二、内容及要求:1)设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。2)独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择(本实验采用5状态)。3)合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。4
2、)设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB内容、组织结构的变化。5)代码书写要规范,要适当地加入注释。6)认真进行预习,完成预习报告。7)实验完成后,要认真总结,完成实验报告。三、程序流程图:四、使用的数据结构及说明:在本实验中,主要用到的数据结构是PCB的结构,其中进PCB的数据结构如下:structPCB{inttime;//所需时间片charPid;//进程IDintPpri;//进程优先级};其中time是进程所需的时间片,Pid是进程的ID号,每产生一个进程ID+1,Ppri是进程优先级
3、,数字越大优先级越高。五、运行结果及说明:运行结果的截图:创建进程:进程开始运行每个时间片用完的进程调度进程阻塞进程异常终止进程从阻塞态到就绪态上面的运行结果是程序执行的每一步进程调度的显示,从进程的创建到进程的执行,结束,每一步进程调度都有显示。七、程序使用说明:1)输入字符’P’创建进程,’T’当前时间片用完,’D’当前运行进程异常结束,’W’当前运行进程阻塞,’O’阻塞进程得到足够资源,编程就绪态,’R’当前运行进程为空时,就绪态进程进入运行态。3)程序将显示每一步进程的执行状态。八、程序源代码及其文字说明:#in
4、clude#include#include#includeusingnamespacestd;structpro{inttime;//所需时间片charPid;//进程IDintPpri;//进程优先级};vectorReady;//就绪队列vectorBlocked;//等待队列proRun;//running进程charp='a';boolgreaterpro(constpro&s1,constpros2){retu
5、rns1.Ppri>s2.Ppri;}voidOccurs()//阻塞态->就绪态{if(Ready.size()<=5){if(!Blocked.empty()){Ready.push_back(Blocked.front());Blocked.erase(Blocked.begin());//sort((Ready.begin()),Ready.end(),greaterpro);//ready队列排序}}elsecout<<"readyqueueisfull."<6、程{if(Ready.size()<=5){proprocess;cout<<"pleaseinputtime:";cin>>process.time;cout<<"pleaseinputpriority:";cin>>process.Ppri;process.Pid=p;Ready.push_back(process);sort((Ready.begin()),Ready.end(),greaterpro);p++;}elsecout<<"readyqueueisfull."<7、//运行态空时往运行态添加一个进程{protemp;if(Run.Pid==NULL)//running状态为空{if(!Ready.empty()&&(*Ready.begin()).Ppri>Run.Ppri){Run=Ready.front();Ready.erase(Ready.begin());}}elseif(Ready.front().Ppri>Run.Ppri)//running状态不为空,而且ready队列有process优先级高于running状态process优先级{temp=Run;Run=Rea8、dy.front();Ready.erase(Ready.begin());Ready.push_back(temp);sort((Ready.begin()),Ready.end(),greaterpro);}elsecout<<"thereisaprocessisruning"<
6、程{if(Ready.size()<=5){proprocess;cout<<"pleaseinputtime:";cin>>process.time;cout<<"pleaseinputpriority:";cin>>process.Ppri;process.Pid=p;Ready.push_back(process);sort((Ready.begin()),Ready.end(),greaterpro);p++;}elsecout<<"readyqueueisfull."<7、//运行态空时往运行态添加一个进程{protemp;if(Run.Pid==NULL)//running状态为空{if(!Ready.empty()&&(*Ready.begin()).Ppri>Run.Ppri){Run=Ready.front();Ready.erase(Ready.begin());}}elseif(Ready.front().Ppri>Run.Ppri)//running状态不为空,而且ready队列有process优先级高于running状态process优先级{temp=Run;Run=Rea8、dy.front();Ready.erase(Ready.begin());Ready.push_back(temp);sort((Ready.begin()),Ready.end(),greaterpro);}elsecout<<"thereisaprocessisruning"<
7、//运行态空时往运行态添加一个进程{protemp;if(Run.Pid==NULL)//running状态为空{if(!Ready.empty()&&(*Ready.begin()).Ppri>Run.Ppri){Run=Ready.front();Ready.erase(Ready.begin());}}elseif(Ready.front().Ppri>Run.Ppri)//running状态不为空,而且ready队列有process优先级高于running状态process优先级{temp=Run;Run=Rea
8、dy.front();Ready.erase(Ready.begin());Ready.push_back(temp);sort((Ready.begin()),Ready.end(),greaterpro);}elsecout<<"thereisaprocessisruning"<
此文档下载收益归作者所有