操作系统实验报告进程状态转换.pdf
《操作系统实验报告进程状态转换.pdf》由会员分享,可在线阅读,更多相关《操作系统实验报告进程状态转换.pdf(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验 进程状态转换及其PCB的变化、程序流程图:、使用的数据结构及说明:在本实验中,主要用到的数据结构是PCB 的结构,其中 PCB 的数据结构如下: struct PCBint P_ld;char P_Name10;char P_State10;int P_Ru ntime;int P_Requiry; struct PCB *n ext ;l -其中,P_Id,和 P_Name用来标示一个进程,而 P_State 用来标示进程的五种状态:/PCB 的 ID 号/PCB 的名称/PCB 状态/PCB 的所需要的运行时间/PCB 所需要的资源要求/PCB 块的下一个指针Create_state
2、,Ready_state,Block_state,Run_state,Exit_state 。 P_Runtime 标示要完成一个进程所需 要的时间。 P_Requiry 标示一个进程的执行所需要的其他条件, 当其他的条件满足, 则 P_Requiry 置 1,否则置 0。Struct PCB * next用来指向同一队列中的下一个PCB 块。三、程序源代码 :#includestdlib.h #includestdio.h#includestring.h/* globle structure and viable */ struct PCB/PCB 的 ID 号/PCB 的名称int P_I
3、d;char P_Name10;char P_State10;int P_Runtime;while(q!=NULL)int P_Requiry;struct PCB * next ; ;/PCB 状态/PCB 的所需要的运行时间/PCB 所需要的资源要求/PCB 块的下一个指针p=*head; q=p-next;/ 找到最后的元素位置struct PCB * Create_state;struct PCB * Run_state;struct PCB * Ready_state;struct PCB * Block_state;struct PCB * Exit_state;int sign
4、al4=0;int signal5=0;/ 创建状态/ 运行状态/ 就绪状态/ 阻塞状态/ 退出状态/ 标示进程/ 标示进程的完成状态的完成状态/* insert node function */void InsertQueue(struct PCB *head,struct PCB *node)struct PCB * p,*q;node-next=NULL;if(*head=NULL)/ 如果队列为空*head=node;Else/ 队列不空p=q;q=q-next;p-next=node;/ 将节点插入队列void DeleteQueue(struct PCB *head,struct
5、PCB *node)struct PCB *p,*q; q=*head;if(*head=NULL|node=NULL) return ;if(*head=node)*head=(*head)-next; return;Elsewhile(q-next!=p&q-next!=NULL)q=q-next;q=p-next; p-next=NULL;void Display_Process(struct PCB * node)/ 撤销进程,从队列中删除元素/ 如果队列为空,返回/ 如果要删除的元素是队首元素/ 如果不是队列的首元素printf(nnthis process Id is printf
6、(thisprocess name is printf(this process stateis printf(this process Runtime is/ 打印进程状态的元素函数: %d n,node-P_Id);: %s n,node-P_Name);: on %s n ,node-P_State);: %d n,node-P_Runtime);if(node-P_Requiry)printf(this process resource is readyelseprintf(this process resource is not ready ! n);n);void Dispatch
7、ToBlock(struct PCB *node) / /* dispatch to block function*/ / 调度到阻塞状态的函数/struct PCB *p=(struct PCB *)malloc(sizeof(struct PCB);if(!node-P_Requiry) / 如果所需要的资源没有满足则,调度到阻塞状态strcpy(node-P_State,block);InsertQueue(&Block_state,node); / 插入到阻塞队列 Display_Process(node);void DispatchToReady(struct PCB *node)
8、/ dispatch to ready state / 调度到就绪状态的函数 if(node-P_Requiry) / 如果所需的资源满足,则调度strcpy(node-P_State,Ready);InsertQueue(&Ready_state,node);Display_Process(node);void DispatchBlockToReady() /dispatch the process to readyqueue/ 从阻塞状态调度到就绪状态函数struct PCB*p,*q;q=Block_state;while(q!=NULL)p=q;q=q-next;if(signal4&
9、p-P_Id=4)/ 如果阻塞状态队列不空/如果所需要的资源满足DeleteQueue(&Block_state,p);strcpy(p-P_State,ready);InsertQueue(&Ready_state,p);printf(process4 will be in the state of ready!n);Display_Process(p);if(signal5&p-P_Id=5)DeleteQueue(&Block_state,p); strcpy(p-P_State,ready);InsertQueue(&Ready_state,p);printf(process5 wil
10、l be in the state of ready!n);Display_Process(p);void Create_Process()/ 创建进程函数int i;struct PCB *p;char name10;strcpy(name,process);for(i=1;iP_Id=i;name7=i+0;name8=0; strcpy(p-P_Name,name);strcpy(p-P_State,create);p-P_Runtime=1; / 所需要的时间片为 1 p-P_Requiry=0;Display_Process(p);sleep(4);printf( n process
11、%d will be in the state of Block, waiting the resource ready nn,i);DispatchToBlock(p); / 同时调度到阻塞队列for(i=3;iP_Id=i;name7=i+0;name8=0;strcpy(p-P_Name,name); strcpy(p-P_State,create);p-P_Requiry=1;if(i=6)p-P_Runtime=2;elsep-P_Runtime=1;Display_Process(p);sleep(4);printf( n process%d will be in the stat
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告 进程 状态 转换
限制150内