实验二 进程撤销模拟

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二进程撤销模拟

一实习内容

(一).设计并说明delete(para)函数的功能,并以流程图或文字的形式展现;

int deletepc(pnode *pp,pnode *pc) 函数主要用于删除进程,此函数是在主函数找到要删除进程的父进程之后调用,其函数功能流程图如图1-1所示:

图1-1deletepc(pnode *pp,pnode *pc)函数功能示意图

(二)实习步骤如下:

1.在实验一的基础上进行进程的创建,创建出的进程如图2-1所示:

图2-1 创建进程的进程总链示意图其在程序中执行显示如下图4-2所示:

图2-2 程序显示进程的创建2.进程的撤销过程

①撤销进程P12,撤销进程后进程链示意图如图2-3所示:

图2-3 撤销进程P12后进程链示意图

其在程序中执行显示如下图2-4所示:

图2-4 撤销进程P12程序显示图

②撤销进程P7,P11,撤销进程后进程链示意图如图2-5所示:

图2-5 撤销进程P7,P11后进程链示意图

其在程序中执行显示如下图2-6所示:

图2-6 撤销进程P7,P11程序显示图

③撤销进程P2,P3,P4,撤销进程后进程链示意图如图2-7所示:

图2-7 撤销进程P2,P3,P4后进程链示意图

其在程序中执行显示如下图2-8所示:

图2-8撤销进程P2,P3,P4程序显示图

④撤销进程P1,撤销进程后进程链中只有根进程P0,结构示意图如图2-9所示:

图2-9 撤销进程P1后进程链示意图

其在程序中执行显示如下图2-10所示:

图2-10撤销进程P1程序显示图

(三)delete(para)函数代码如下:

//delete process

int deletepc(pnode *pp,pnode *pc)

{

if (pc->sub==NULL) //如果要撤销进程无子进程{

if(pp->sub==pc)

{

pp->sub=pc->brother;

}

else

{

pnode *p;

for (p=pp->sub; p->brother!=pc; p=p->brother);

p->brother=pc->brother;

}

pnode *temp;

for (temp=plink; temp; temp=temp->next) //删除并释放进程

{

if (temp->next->node->pid==pc->node->pid)

{

temp->next=temp->next->next;

delete pc; //释放进程资源

break;

}

}

}

else //要删除的进程存在子进程

{

deletepc(pc,pc->sub);

deletepc(pp,pc);

}

return 0;

}

在主函数中增加的代码如下:

else if(s2)

{

cflag=1;

para = (int *)malloc(2);

s2 = substr(s2,instr(s2,'(')+1,strlen(s2)-2);

para=strtoarray(s2);

pnode *pp=plink,*pc=plink;

pnode *p,*p1;

bool findflag=false;

for(p=plink; p; p=p->next)

{

if(p->node->pid==para[0])//找到要删除的进程

{

for (p1=plink; p1; p1=p1->next)

{

if((p1->node->pid)==p->node->ppid) //找到父进程

{

pp=p1;//pp 父进程

pc=p; //p 当前进程

break;

}

}

findflag=true;

break;

}

}

if(findflag)

{

if(pp==pc)

{

printf("你不能删除进程号为0的根进程!\n");

}

else

{

deletepc(pp,pc);

}

}

else

printf("你要删除的进程不存在!\n");

pflag=1;

}

二、思考题

1)进程撤销的核心内容是什么?

答:根据标识符,检索出该进程的PCB,读出状态;若正处于执行状态,应立即终止,置调度标志为真;若该进程还有子孙进程,终止其所有子孙进程;归还全部资源给其父进程或者系统;将被终止进程(它的PCB)从所在队列(或链表)中移出。

2)进程总链在进程撤销过程中有什么作用?

答:识别要撤销的进程的子进程,以及在撤消进程后重新组织进程之间的关系,依次维持进程总链的稳定。

三、实验总结

通过本次实验,进一步加深了对进程的终止过程理解和认识,同时对进程的创建过程进行了复习。

相关文档
最新文档