实验一-进程状态转换.doc

实验一-进程状态转换.doc

ID:55704517

大小:38.00 KB

页数:8页

时间:2020-05-25

实验一-进程状态转换.doc_第1页
实验一-进程状态转换.doc_第2页
实验一-进程状态转换.doc_第3页
实验一-进程状态转换.doc_第4页
实验一-进程状态转换.doc_第5页
资源描述:

《实验一-进程状态转换.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、实验一进程的状态及其转换一、实验目的:自行编制模拟程序,通过形象化的状态显示,加深理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。二、实验内容及要求:1)设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。2)独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。3)合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。4)设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB

2、内容、组织结构的变化。三、程序流程图:开始初始化使用界面创建进程就绪队列结束空就绪队列链首进程开始运行该进程运行一个时间片在时间片内是否完成运行指针指向下一个进程撤销该进程否不空是四、使用的数据结构及说明:在本实验中,主要用到的数据结构是PCB的结构,其中PCB的数据结构如下:structPCB{intP_Id;//PCB的ID号charP_Name[10];//PCB的名称charP_State[10];//PCB状态intP_Runtime;//PCB的所需要的运行时间intP_Requiry;//PCB所需要的资源要求structPCB*next;//PCB

3、块的下一个指针};其中,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"stdlib.h"#include"stdio.h"#include"string.h"

4、#include/*全局结构体及变量定义*/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*Bloc

5、k_state;//阻塞状态structPCB*Exit_state;//退出状态intsignal4=0;//标示进程4的完成状态intsignal5=0;//标示进程5的完成状态voidInsertQueue(structPCB**head,structPCB*node)//将进程插入到队列的尾部{structPCB*p,*q;node->next=NULL;if(*head==NULL)//如果队列为空{*head=node;}else//队列不空{p=*head;q=p->next;while(q!=NULL)//找到最后的元素位置{p=q;q=q->ne

6、xt;}p->next=node;//将节点插入队列}}voidDeleteQueue(structPCB**head,structPCB*node)//撤销进程,从队列中删除元素{structPCB*p,*q;p=node;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

9、=p->next;p->next=NULL;}}voidDisplay_Process(structPCB*node)//打印进程状态的元素函数{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

10、)prin

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。