当前位置:文档之家› 进程的三种状态转换

进程的三种状态转换

p=p->next;
p->next=ExeP->next;
ExeP->next=NULL;
阻塞状态向就绪状态转化void BlockToReady(LinkList BlockP,LinkList ReadyP,DataType key)
{ LinkList p,q;
p=LocateNode(BlockP,key);
进程状态转换中,存在四种状态转换。当进程调度程序从就绪队列中选取一个进程投入运行时引起转换1;正在执行的进程如因时间片用完而被暂停执行就会引起转换2;正在执行的进程因等待的事件尚未发生而无法执行(如进程请求完成I/O)则会引去转换3;当进程等待的事件发生时(如I/O完成)则会引起转换4。
六、实验总结(含实验心得体会,收获与不足等)
FreeP->next=p->next;
p->data=key;
q=ReadyP;
while(q->next)
q=q->next;
q->next=p;
p->next=NULL;}
就绪状态向执行状态转化void ReadyToExe(LinkList ReadyP,LinkList ExeP,DataType key)
二、实验内容(含实验原理介绍)
1.就绪状态:当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态。
2.执行状态:当进程已获得处理机,在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等
{
ExeP->next=LocateNode(ReadyP,key);
ClearList(ReadyP,key);
ExeP->next->next=NULL;
printf("Execute process %c success.\n",key);
}
执行状态向就绪状态转化void ExeToReady(LinkList ExeP,LinkList ReadyP)
case 'P': //输入进程名
if(LocateNode(ReadyP,Name))
ReadyToExe(ReadyP,ExeP,Name);
case 'E': //结束进程
while(temp->next)
temp=temp->next;
temp->next=ExeP->next;
ExeP->next=NULL;
通过本次实验,加深了我对进程概念及进程管理的理解;比较熟悉进程管理中主要数据结构的设计及算法。也让我认识到自己的不足,操作系统的有些知识,我知道的还不多,没有掌握好,还需要多多学学,不断提升自己的能力。
注:双面打印
三、实验过程及步骤(包含使用软件或实验设备等情况)
实验设备:装有vc++6.0的pc
实验步骤:
创建链表LinkList CreateListR(int Num)
LinkList head = (LinkList)malloc(sizeof(ListNode))
s=(ListNode *)malloc(sizeof(ListNode))
q=ReadyP;
while(q->next)
q=q->next;
q->next=p;
ClearList(BlockP,key);
p->next=NULL; }
执行状态向阻塞状态转化void ExeToBlock(LinkList ExeP,LinkList BlockP)
{LinkList p;
p=BlockP;
返回key结点位置LinkList LocateNode(LinkList head,DataType key)
{while (head->data != key && head)
head=head->next;
return head;}
删除进程LinkList LocateNode(LinkList head,DataType key)
while (head->data != key && head)
head=head->next
return head
显示链表void ShowList(LinkList head)
head = head->next;
在链表中删除结点key void ClearList(LinkList head,DataType key)
printf("End process %c success.\n",temp->next->data);
case 'B': //清空进程
if(ExeP->next)
printf("Block process %c success.\n",ExeP->next->data);
else
printf("Error: No process executing.\n");
case 'w': //唤醒进程Name=getchar();
getchar();
if(LocateNode(BlockP,Name))
printf("Wakeup process %c success.\n",Name);
}
... }
四、实验结果(含算法说明、程序、数据记录及分析等,可附页)
五、实验思考题
删除链表void DeleteList(LinkList head)
{head=p->next;
free(p);
p=head;}
创建链表向就绪状态转化void FreeToReady(LinkList FreeP,LinkList ReadyP,DataType key)
{p=FreeP->next;
while(p->next)
p=p->next;
p->next=ExeP->next;
ExeP->next=NULL;
int main()
{ ...cmd=getchar();
switch(cmd)
{ case 'c': //创建进程
while(LocateNode(ReadyP,Name)||LocateNode(BlockP,Name)
实验报告
实验名称
进程的三种状态转换
专业
计算机科学与技术
课程名称
操作系统
指导老师
张海燕老师
班级
2011级二表1班
姓名
姜玉龙
学号
**********
评分
实验地点
1c26217
实验日期
2013/09/18
一、实验目的
1.熟悉进程管理及其相关的基本概念。
2.通过实验掌握进程的三种转化,执行,就绪,阻塞及其相关知识。
||LocateNode(ExeP,Name))
Name=Name+1;
if((LocateNode(ReadyP,Name) || LocateNode(ExeP,Name)
||LocateNode(BlockP,Name)) == NULL)
FreeToReady(FreeP,ReadyP,Name);
相关主题