资源描述:
《进程的三种状态转换》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验报告实验名称进程的三种状态转换专业计算机科学与技术课程名称操作系统指导老师张海燕老师班级2011级二表1班姓名姜玉龙学号**********评分实验地点 1c26217实验日期 2013/09/18一、实验目的1.熟悉进程管理及其相关的基本概念。2.通过实验掌握进程的三种转化,执行,就绪,阻塞及其相关知识。二、实验内容(含实验原理介绍)1.就绪状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。2.执行状态 :当进程已获得处理机,其程序正在处理机上执行,此时的进程
2、状态称为执行状态。3.阻塞)状态 :正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等三、实验过程及步骤(包含使用软件或实验设备等情况)实验设备:装有vc++6.0的pc实验步骤:创建链表LinkListCreateListR(intNum)LinkListhead=(LinkList)malloc(sizeof(ListNode))s=(ListNode*)malloc(sizeof(ListNode))
3、返回key结点位置LinkListLocateNode(LinkListhead,DataTypekey){while(head->data!=key&&head)head=head->next;returnhead;}删除进程LinkListLocateNode(LinkListhead,DataTypekey)while(head->data!=key&&head)head=head->nextreturnhead显示链表voidShowList(LinkListhead)head=head->next;在链表中删除
4、结点keyvoidClearList(LinkListhead,DataTypekey)删除链表voidDeleteList(LinkListhead){head=p->next;free(p);p=head;}创建链表向就绪状态转化voidFreeToReady(LinkListFreeP,LinkListReadyP,DataTypekey){p=FreeP->next;FreeP->next=p->next;p->data=key;q=ReadyP;while(q->next)q=q->next;q->next=p
5、;p->next=NULL;}就绪状态向执行状态转化voidReadyToExe(LinkListReadyP,LinkListExeP,DataTypekey){ExeP->next=LocateNode(ReadyP,key);ClearList(ReadyP,key);ExeP->next->next=NULL;printf("Executeprocess%csuccess.",key);}执行状态向就绪状态转化voidExeToReady(LinkListExeP,LinkListReadyP)p=p->ne
6、xt;p->next=ExeP->next;ExeP->next=NULL;阻塞状态向就绪状态转化voidBlockToReady(LinkListBlockP,LinkListReadyP,DataTypekey){LinkListp,q;p=LocateNode(BlockP,key);q=ReadyP;while(q->next)q=q->next;q->next=p;ClearList(BlockP,key);p->next=NULL;}执行状态向阻塞状态转化voidExeToBlock(LinkListExeP
7、,LinkListBlockP){LinkListp;p=BlockP;while(p->next)p=p->next;p->next=ExeP->next;ExeP->next=NULL;intmain(){...cmd=getchar();switch(cmd){case'c'://创建进程while(LocateNode(ReadyP,Name)
8、
9、LocateNode(BlockP,Name)
10、
11、LocateNode(ExeP,Name))Name=Name+1;if((LocateNode(ReadyP,Nam
12、e)
13、
14、LocateNode(ExeP,Name)
15、
16、LocateNode(BlockP,Name))==NULL)FreeToReady(FreeP,ReadyP,Name);case'P'://输入进程名if(LocateNode(ReadyP,Name))ReadyToExe(ReadyP,ExeP,Name)