操作系统实验报告+进程状态转换.doc

操作系统实验报告+进程状态转换.doc

ID:53564627

大小:194.00 KB

页数:9页

时间:2020-04-04

操作系统实验报告+进程状态转换.doc_第1页
操作系统实验报告+进程状态转换.doc_第2页
操作系统实验报告+进程状态转换.doc_第3页
操作系统实验报告+进程状态转换.doc_第4页
操作系统实验报告+进程状态转换.doc_第5页
资源描述:

《操作系统实验报告+进程状态转换.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_

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

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

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