实验二 进程撤销模拟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)进程总链在进程撤销过程中有什么作用?
答:识别要撤销的进程的子进程,以及在撤消进程后重新组织进程之间的关系,依次维持进程总链的稳定。
三、实验总结
通过本次实验,进一步加深了对进程的终止过程理解和认识,同时对进程的创建过程进行了复习。