欢迎来到天天文库
浏览记录
ID:30883399
大小:634.06 KB
页数:15页
时间:2019-01-03
《实验2进程状态转换及其pcb的变化》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验2进程状态转换及其PCB的变化1•目的自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。2.内容及要求1)设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。2)独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。3)合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。4)设计出可视性较好的界面,
2、应能反映出进程状态的变化引起的对应PCB内容、组织结构的变化。5)代码书写要规范,要适当地加入注释。6)鼓励在实验中加入新的观点或想法,并加以实现。7)认真进行预习,完成预习报告。8)实验完成后,耍认真总结,完成实验报告。3.程序流程图进程的三种基本状态及其转换如下图所示。Y「结束J4•数据结构及说明在本实验中,主要的数据结构是PCB的数据结构,具体如下:structprocess{charname;〃进程名称intneedtime;OW所需要的运行吋间intpriority;//进程的优先级4•源程序#include3、dio.h>#include#includestructprocess!charname;intneedtime;intpriority;};structprocessreadyQueue[5];structprocessrun;structprocessblockedQueue[5];conststructprocessnu归{NULL,0,0};intreadyQueueHead=O;intblockedQueueHead=0;intcpuState=0;intcpuTime=0;4、voidOrder(structprocessparameter[],inthead);//将队列中的进程按优先级排列intCreat();voidDispath();intTimeout();intEventWait();intEventOccur();voidOrder(structprocessparameter[],inthead){intk,i;structprocesstemp;for(k=0;k5、ty>=parameter[i+1].priority){temp=parameter[i];parameter[i]=parameter[i+1];parameter[i+1]=怕mp;}intCreat(){if(readyQueueHead>=5){printfC'TheReadyQueuehasbeenfull");return0;}labell:printf("inputnewprocessname(mustbealetter):rT);scanf(H%c",&(readyQueue[readyQueueHe6、ad].name));getchar();intk;for(k=O;k7、8、readyQueue[readyQueueHead].name==readyQueue[k].name+329、10、readyQueue[readyQueueHead].name==readyQueue[k].name・32){printf(Htheprocessisalreadyexist!rT);goto11、labell;}for(k=0;k12、13、readyQueue[readyQueueHead].name==blockedQueue[k].name+3214、15、readyQueue[readyQueueHead].name==blockedQueue[k].name・32){printf("theprocessisalreadyexist!rT);gotolabell;}if16、(readyQueue[readyQueueHead].name==run.name17、18、readyQueue[readyQueueHead].name==run.name+3219、20、readyQueue[readyQueueHead].name==run.name-32){printf("t
3、dio.h>#include#includestructprocess!charname;intneedtime;intpriority;};structprocessreadyQueue[5];structprocessrun;structprocessblockedQueue[5];conststructprocessnu归{NULL,0,0};intreadyQueueHead=O;intblockedQueueHead=0;intcpuState=0;intcpuTime=0;
4、voidOrder(structprocessparameter[],inthead);//将队列中的进程按优先级排列intCreat();voidDispath();intTimeout();intEventWait();intEventOccur();voidOrder(structprocessparameter[],inthead){intk,i;structprocesstemp;for(k=0;k5、ty>=parameter[i+1].priority){temp=parameter[i];parameter[i]=parameter[i+1];parameter[i+1]=怕mp;}intCreat(){if(readyQueueHead>=5){printfC'TheReadyQueuehasbeenfull");return0;}labell:printf("inputnewprocessname(mustbealetter):rT);scanf(H%c",&(readyQueue[readyQueueHe6、ad].name));getchar();intk;for(k=O;k7、8、readyQueue[readyQueueHead].name==readyQueue[k].name+329、10、readyQueue[readyQueueHead].name==readyQueue[k].name・32){printf(Htheprocessisalreadyexist!rT);goto11、labell;}for(k=0;k12、13、readyQueue[readyQueueHead].name==blockedQueue[k].name+3214、15、readyQueue[readyQueueHead].name==blockedQueue[k].name・32){printf("theprocessisalreadyexist!rT);gotolabell;}if16、(readyQueue[readyQueueHead].name==run.name17、18、readyQueue[readyQueueHead].name==run.name+3219、20、readyQueue[readyQueueHead].name==run.name-32){printf("t
5、ty>=parameter[i+1].priority){temp=parameter[i];parameter[i]=parameter[i+1];parameter[i+1]=怕mp;}intCreat(){if(readyQueueHead>=5){printfC'TheReadyQueuehasbeenfull");return0;}labell:printf("inputnewprocessname(mustbealetter):rT);scanf(H%c",&(readyQueue[readyQueueHe
6、ad].name));getchar();intk;for(k=O;k7、8、readyQueue[readyQueueHead].name==readyQueue[k].name+329、10、readyQueue[readyQueueHead].name==readyQueue[k].name・32){printf(Htheprocessisalreadyexist!rT);goto11、labell;}for(k=0;k12、13、readyQueue[readyQueueHead].name==blockedQueue[k].name+3214、15、readyQueue[readyQueueHead].name==blockedQueue[k].name・32){printf("theprocessisalreadyexist!rT);gotolabell;}if16、(readyQueue[readyQueueHead].name==run.name17、18、readyQueue[readyQueueHead].name==run.name+3219、20、readyQueue[readyQueueHead].name==run.name-32){printf("t
7、
8、readyQueue[readyQueueHead].name==readyQueue[k].name+32
9、
10、readyQueue[readyQueueHead].name==readyQueue[k].name・32){printf(Htheprocessisalreadyexist!rT);goto
11、labell;}for(k=0;k12、13、readyQueue[readyQueueHead].name==blockedQueue[k].name+3214、15、readyQueue[readyQueueHead].name==blockedQueue[k].name・32){printf("theprocessisalreadyexist!rT);gotolabell;}if16、(readyQueue[readyQueueHead].name==run.name17、18、readyQueue[readyQueueHead].name==run.name+3219、20、readyQueue[readyQueueHead].name==run.name-32){printf("t
12、
13、readyQueue[readyQueueHead].name==blockedQueue[k].name+32
14、
15、readyQueue[readyQueueHead].name==blockedQueue[k].name・32){printf("theprocessisalreadyexist!rT);gotolabell;}if
16、(readyQueue[readyQueueHead].name==run.name
17、
18、readyQueue[readyQueueHead].name==run.name+32
19、
20、readyQueue[readyQueueHead].name==run.name-32){printf("t
此文档下载收益归作者所有