实验进程状态转换及其PCB的变化一、程序流程图:开始初始化使用界面创建进程就绪队列结束空就绪队列链首进程开始运行该进程运行一个时间片在时间片内是否完成运行指针指向下一个进程撤销该进程否不空是二、使用的数据结构及说明: 在本实验中,主要用到的数据结构是PCB的结构,其中PCB的数据结构如下:structPCB{intP_Id; //PCB的ID号charP_Name[10]; //PCB的名称charP_State[10]; //PCB状态intP_Runtime; //PCB的所需要的运行时间intP_Requiry; //PCB所需要的资源要求structPCB*next; //PCB块的下一个指针}; 其中,P_Id,和P_Name用来标示一个进程,而P_State用来标示进程的五种状态:Create_state,Ready_state,Block_state,Run_state,Exit_state。P_Runtime标示要完成一个进程所需要的时间。P_Requiry标示一个进程的执行所需要的其他条件,当其他的条件满足,则P_Requiry置1,否则置0。StructPCB*next用来指向同一队列中的下一个PCB块。三、程序源代码:#include""#include""#include""/**********globlestructureandviable******/structPCB{intP_Id; //PCB的ID号charP_Name[10]; //PCB的名称charP_State[10]; //PCB状态intP_Runtime; //PCB的所需要的运行时间intP_Requiry; //PCB所需要的资源要求structPCB*next; //PCB块的下一个指针};structPCB*Create_state; //创建状态structPCB*Run_state; //运行状态structPCB*Ready_state; //就绪状态structPCB*Block_state; //阻塞状态structPCB*Exit_state; //退出状态intsignal4=0; //标示进程4的完成状态intsignal5=0; //标示进程5的完成状态voidInsertQueue(structPCB**head,structPCB*node)/*insertnodefunction*/{structPCB*p,*q;node->next=NULL;if(*head==NULL) //如果队列为空{*head=node;}Else //队列不空{p=*head;q=p->next;while(q!=NULL) //找到最后的元素位置{ p=q;q=q->next; }p->next=node; //将节点插入队列}}voidDeleteQueue(structPCB**head,structPCB*node)//撤销进程,从队列中删除元素{ structPCB*p,*q; q=*head; if(*head==NULL||node==NULL) //如果队列为空,返回 return; if(*head==node) //如果要删除的元素是队首元素 { *head=(*head)
操作系统实验报告 进程状态转换 来自淘豆网m.daumloan.com转载请标明出处.