操作系统实验报告进程状态转换_第1页
操作系统实验报告进程状态转换_第2页
操作系统实验报告进程状态转换_第3页
操作系统实验报告进程状态转换_第4页
操作系统实验报告进程状态转换_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验 进程状态转换及其PCB的变化、程序流程图:、使用的数据结构及说明:在本实验中,主要用到的数据结构是PCB的结构,其中 PCB的数据结构如下: struct PCBint P_ld;char P_Name10;char P_State10;int P_Ru ntime;int P_Requiry; structPCB * n ext ;l -/PCB 的 ID 号/PCB的名称/PCB状态/PCB的所需要的运行时间/PCB所需要的资源要求/PCB块的下一个指针其中,P_Id,和 P_Name用来标示一个进程,而P_State用来标示进程的五种状态:int P_Id;char P_Name1

2、0;char P_State10; int P_Runtime;int P_Requiry;struct PCB * next ; ;struct PCB * Create_state;struct PCB * Run_state;struct PCB * Ready_state;struct PCB * Block_state;struct PCB * Exit_state;int signal4=0;int signal5=0;/ 创建状态/ 运行状态/ 就绪状态/ 阻塞状态/ 退出状态/ 标示进程/ 标示进程的完成状态的完成状态void InsertQueue(struct PCB *h

3、ead,struct PCB *node)struct PCB * p,*q;node-next=NULL;if(*head=NULL)*head=node;Else/* insert node function */ 如果队列为空/ 队列不空Create_state,Ready_state,Block_state,Run_state,Exit_state 。 P_Runtime 标示要完成一个进程所需 要的时间。 P_Requiry 标示一个进程的执行所需要的其他条件, 当其他的条件满足, 则 P_Requiry 置1,否则置0。Struct PCB * next用来指向同一队列中的下一个P

4、CB块。三、程序源代码 :#includestdlib.h #includestdio.h#includestring.h/* globle structure and viable */ struct PCB/PCB 的 ID 号/PCB 的名称/PCB 状态/PCB 的所需要的运行时间/PCB 所需要的资源要求/PCB 块的下一个指针 p=*head; q=p-next;while(q!=NULL)/ 找到最后的元素位置p=q;q=q-next;p-next=node;/ 将节点插入队列/ 撤销进程,从队列中删除元素void DeleteQueue(struct PCB *head,str

5、uct PCB *node) struct PCB *p,*q; q=*head;if(*head=NULL|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;void Display_Process(struct PCB * node)printf(nnthis process Id is printf(this process name is printf(this process sta

6、te is 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 readyn);elseprintf(this process resource is not ready ! n);void DispatchToBlo

7、ck(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) / di

8、spatch 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 readyqueuestruct PCB*p,*q;q=Block_state;while(q!=NULL)p=q;q=q-next;if(signal4&p-P_Id=4)DeleteQueue

9、(&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 will

10、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%d

11、 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)/ 在这里个进程 6p-P_Runtime=2;elsep-P_Runtime=1;Display_Process(p);sleep(4);printf( n process%d will be in

12、 the state of Ready, waiting to run nn,i); DispatchToReady(p);void display(struct PCB *head) struct PCB *p,*q; p=*head;while(p!=NULL) sleep(2);: %d n,p-P_Id);: %s n,p-P_Name);: on %s n ,p-P_State);: %d n,p-P_Runtime);/printf(nn/n);printf(nnthis process Id is printf(this process name is printf(this p

13、rocess state is printf(this process Runtime isif(p-P_Requiry)printf(this process resource is readyn);elseprintf(this process resource is not ready ! n); p=p-next;void Process_Run()struct PCB *p,*q;p=Ready_state;q=p;while(p!=NULL)if(p-P_RuntimeP_State,running);Display_Process(p); p-P_Runtime=p-P_Runt

14、ime-1; sleep(4);if(p-P_Runtime0)/ 进程运行函数/ 就绪队列不空则继续执行/ 如果时间片执行完了,则跳出循环/ 没有完成,则进入就绪队列printf(this process is not finished,will be dispatch to the ready queue!n); DeleteQueue(&Ready_state,p);strcpy(p-P_State,ready); InsertQueue(&Ready_state,p);Display_Process(p);Else / 执行完成,则跳出,并发送相应的信息 printf(nnProces

15、s%d is finished and will be in the state of exit!nn,p-P_Id);if(p-P_Id=4) signal4=1;if(p-P_Id=5) signal5=1; if(signal4|signal5)DispatchBlockToReady(); / 如果资源满足,则将进程调度到就绪队列 q=q-next;p=q;if(q=NULL) printf(nthere is no process ready!nSTOP Machine!n);int main(int argc,char * argv)/ 主函数int i;char c=c; / 界

16、面 printf( n); printf(Ding Hai bon);printf(Press s to start the processn);scanf(%c,&c);while(1)if(c=s)break; scanf(%c,&c);Create_Process(); / 调用创建进程函数 printf(nn); printf(n Display the Ready queue n); sleep(5);display(&Ready_state); / 显示就绪队列里的进程 printf(nn);printf(n Display the Block queuen);sleep(5);

17、/ 显示阻塞队列函数 display(&Block_state); / printf(nnnn);printf(n Now the process start to runn);sleep(5);Process_Run(); / 调用进程运行函数 四、运行结果及说明: 运行结果的截图: 下面的运行结果是程序执行的每一步进程调度的显示,从进程的创建到进程的执行,结束, 每一步进程调度都有显示。sthis process Id is1this process name isprocesslthis process state ison createthis process Runtime is:1

18、this process resource is not ready !processl will be in the state of Block, waiting the resource readythis processId is:1this processname is:processlthis processstate is:on blockthis process Runtime Is : 1this process resource is not ready !:2:process2:on createis : 1 is not ready !this process Id i

19、s this process name is this process state is this process Runtime this process resourcethis processId is:2this processname Is:process2this processstate is:on blockthis process Runtime is : 1this process resource is not ready !this process Id is this process name Is this process state is this process

20、 Runtime isthis process resource 1$:process3 :on create:1readyprocess3 will be In thestate of Ready, waiting to runthis process Id is this process name is this process state is this process Runtime Is this process resource is:process3 :on Ready :1 readythis process Id is this process name is this process state is this process Runtime Is this process resource is:4:process4:on create:1readyfile Edit Vi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论