操作系统实验二

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

实验二进程撤销模拟

一、实验目的

1) 理解进程撤销相关理论;

2) 掌握进程撤销流程。

二、实验内容

本实验针对操作系统中进程撤销相关理论进行实验。要求实验者设计一个程序,该程序可模拟撤销多个进程及其子孙进程。

1) 采用动态或静态方法生成一颗进程树(进程数目≥20);

2) 设计进程撤销算法;

3) 实现进程撤销函数,采用级联方式撤销;

4) 可动态撤销进程;

5) 可动态观察进程树的情况;

6) 测试程序并得到正确结果。

实验过程:

进程的创建(进程数目≥20):

此时树的形状为:

第一次撤销进程:

此时的树的形状为:

第二次撤销进程:

此时树的形状为:

第三次撤销进程:

此时树的形状为:

第四次撤销进程:

此时树的形状为:

第五次撤销进程:

此时树的形状为:

直到此时,所有的子孙进程均被撤销完毕。

三、实验原理

1)进程创建流程

(1) 从PCB 链中找到该进程的PCB,从中读出该进程的状态;

(2) 如果该进程处于执行状态,则终止该进程并置调度标志为真;

(3) 若该进程有子孙进程,需要撤销其子孙进程;

(4) 释放该进程占有的资源;

(5) 从PCB 链中移出该进程的PCB。

2)进程子树的删除

对于已经创建的进程树(可以参考实验 1 创建进程),在删除的时候,首先需要考虑把该进程及其子孙从整棵树中脱离出来,这样才不会破坏整棵树的完整性。

3)进程总链元素的删除

对于进程树种撤销的所有进程,必须在进程总链中进行删除。

四、思考题

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

进程撤销的核心内容是撤销其相关的资源和所拥有的子孙进程。

撤销流程:

1.寻找此进程,若存在则寻找父进程,记录相应进程,若不存在则输入不存在。

2.首先查找此进程有无子进程,若存在则进入递归循环,若不存在再查找此进程的

父进程,如果父进程的子进程是此进程,则将此进程的兄弟进程作为父进程的子进程,若不是子进程,则将此进程的兄弟进程指向下一个兄弟进程。

3.从存储链表中将相应进程删除。

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

关闭相关数据。

五、核心代码

//撤销进程

void deletepc(pnode *parent,pnode *currect)

{

if (currect->sub==NULL) //如果要撤销的进程为空

{

if(parent->sub==currect)

{

parent->sub=currect->brother;

}

else

{

for(pnode*p=parent->sub;p->brother!=currect;p=p->brother);

p->brother=currect->brother;

}

pnode *tempperent;

for (tempperent=plink;tempperent;tempperent=tempperent->next) //删除进程

{

if (tempperent->next->node->pid==currect->node->pid)

{

tempperent->next=tempperent->next->next;

break;

}

}

}

else //递归调用

{

deletepc(currect,currect->sub);

deletepc(parent,currect);

}

}

六、实习总结

这次实习有了上次的铺垫,理解起来没有更复杂,但就是代码有些难理解。进程的撤销是以进程的创建为基础的,进程的撤销采用级联方式,即只要撤销了父进程,则父进程下面的子孙进程均会被撤销,这跟数据结构里面的删除结点很相似,因此理解起来不是很困难。总体感觉还好,我会继续努力的。

相关文档
最新文档