您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 操作系统作业《模拟进程转换》
实验一进程状态转换实验一进程状态模拟进程状态转换及其PCB的变化一.实验目的自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。二.实验要求设计并实现一个模拟进程状态转换及其相应PCB组织结构变化的程序;独立设计、编写、调试程序;程序界面应能反映出在模拟条件下,进程之间状态转换及其对应的PCB组织的变化。三.程序流程图实验一进程状态转换时间片超时初始化进程状态接收用户操作命令S时间等待进程调度开始S=1?S=2?S=3?事件发生显示PCB信息结束退出?实验一进程状态转换四.数据结构本次试验主要用到的是队列的数据结构:就绪队列:queueQ0;等待队列:queueQ1;五.源程序#includeiostream#includestdlib.h#includequeueusingnamespacestd;queuecharq[11];voidmenu();charch;//CPU中运行的进程voidQout(inta)//输出队列中的进程{charc;switch(a){case0:cout就绪队列:;break;case1:cout等待队列:;break;case2:cout就绪队列:;break;case3:cout等待队列:;break;case4:cout就绪队列:;break;case5:cout等待队列:;break;case6:cout就绪队列:;break;case7:cout等待队列:;break;case8:cout就绪队列:;break;case9:cout等待队列:;break;case10:cout就绪队列:;break;case11:cout等待队列:;break;default:break;}while(!q[a].empty()){c=q[a].front();coutc;q[a].pop();}coutendl;}实验一进程状态转换voidDispatch(){if(q[0].empty())cout就绪队列为空,无法调度!endl;else{ch=q[0].front();q[0].pop();q[2]=q[0];q[3]=q[1];Qout(2);Qout(3);cout运行:chendl;}menu();}voidTimeout(){if(ch='A'&&ch='E')//判断CPU不为空{q[0].push(ch);ch=q[0].front();q[0].pop();q[4]=q[0];q[5]=q[1];Qout(4);Qout(5);cout运行:chendl;}elsecoutCPU空闲,不存在超时!endl;menu();}voidEvent_Wait(){if(ch='A'&&ch='E'&&!q[0].empty()){q[1].push(ch);ch=q[0].front();q[0].pop();q[8]=q[0];q[9]=q[1];Qout(8);Qout(9);cout运行:chendl;实验一进程状态转换}else{coutCPU空闲或就绪队列为空!endl;if(ch='A'&&ch='E'){q[1].push(ch);ch='';q[10]=q[0];q[11]=q[1];Qout(10);Qout(11);cout运行:chendl;}}menu();}voidEvent_Occor(){ch='';if(!q[1].empty()){charc2=q[1].front();q[0].push(c2);q[1].pop();if(ch='A'&&ch='E'){q[6]=q[0];q[7]=q[1];Qout(6);Qout(7);cout运行:chendl;}else{ch=q[0].front();q[0].pop();q[6]=q[0];q[7]=q[1];Qout(6);Qout(7);cout运行:chendl;}}实验一进程状态转换elsecout等待队列为空!endl;menu();}voidmenu(){ints,m;cout退出?(1:是;0:否)[]\b\b;cinm;while(1){if(m==1)exit(0);elseif(m==0)break;else{cout输入错误,请重新选择:[]\b\b;cinm;}}cout请选择操作:[]\b\b;cins;while(s!=1&&s!=2&&s!=3&&s!=4){cout无此操作,请重新选择:[]\b\b;cins;}switch(s){case1:Dispatch();break;case2:Timeout();break;case3:Event_Wait();break;case4:Event_Occor();break;default:break;}}intmain(){charch1='A';cout操作说明:(1)Dispatch,(2)Timeout,(3)Event_Wait,(4)Event_Occorendl;cout我们预设初始状态如下endl;cout就绪队列:;for(inti=0;i3;i++)//定义2个进程入就绪队列{coutch1;q[0].push(ch1);ch1+=1;}coutendl;实验一进程状态转换cout等待队列:;for(intj=0;j2;j++)//定义3个进程入等待队列{coutch1;q[1].push(ch1);ch1+=1;}coutendl;cout运行:endl;menu();return0;}六.运行结果实验一进程状态转换
本文标题:操作系统作业《模拟进程转换》
链接地址:https://www.777doc.com/doc-5961749 .html