欢迎来到天天文库
浏览记录
ID:53564627
大小:194.00 KB
页数:9页
时间:2020-04-04
《操作系统实验报告+进程状态转换.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实验进程状态转换及其PCB的变化一、程序流程图:开始初始化使用界面创建进程就绪队列结束空就绪队列链首进程开始运行该进程运行一个时间片在时间片内是否完成运行指针指向下一个进程撤销该进程否不空是二、使用的数据结构及说明:在本实验中,主要用到的数据结构是PCB的结构,其中PCB的数据结构如下:structPCB{intP_Id;//PCB的ID号charP_Name[10];//PCB的名称charP_State[10];//PCB状态intP_Runtime;//PCB的所需要的运行时间intP_Req
2、uiry;//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用来指向同一队列中的
3、下一个PCB块。三、程序源代码:#include"stdlib.h"#include"stdio.h"#include"string.h"/**********globlestructureandviable******/structPCB{intP_Id;//PCB的ID号charP_Name[10];//PCB的名称charP_State[10];//PCB状态intP_Runtime;//PCB的所需要的运行时间intP_Requiry;//PCB所需要的资源要求structPCB*next;
4、//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)/*i
5、nsertnodefunction*/{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)//撤销进程,从队列中删除元素{structPC
6、B*p,*q;q=*head;if(*head==NULL
7、
8、node==NULL)//如果队列为空,返回return;if(*head==node)//如果要删除的元素是队首元素{*head=(*head)->next;return;}Else//如果不是队列的首元素{while(q->next!=p&&q->next!=NULL)q=q->next;q=p->next;p->next=NULL;}}voidDisplay_Process(structPCB*node)//打印进程状态的元素函数{
9、printf("thisprocessIdis:%d",node->P_Id);printf("thisprocessnameis:%s",node->P_Name);printf("thisprocessstateis:on%s",node->P_State);printf("thisprocessRuntimeis:%d",node->P_Runtime);if(node->P_Requiry)printf("thisprocessresourceisready");
10、elseprintf("thisprocessresourceisnotready!");}voidDispatchToBlock(structPCB*node)///*dispatchtoblockfunction*/{//调度到阻塞状态的函数//structPCB*p=(structPCB*)malloc(sizeof(structPCB));if(!node->P_Requiry)//如果所需要的资源没有满足则,调度到阻塞状态{strcpy(node->P_
此文档下载收益归作者所有