操作系统中的进程表

时间:2019-03-09 11:45:11

标签: operating-system

有些文章认为过程表是所有PCB(过程控制块)的集合,而PCB是包含所有过程信息(堆栈指针,寄存器集,程序计数器等)的结构。 进程的条目将保留在终止的表单元中,并释放其资源

到目前为止,我们所知道的是正确的,但是在某些情况下,即使表项仍未终止,表项中的表项释放仍会终止? 例如在创建子进程的情况下,当父级调用等待系统调用时,应从进程表中释放子进程的条目,因为在这种情况下,父级可以通过等待系统调用(函数)处理子进程的存在状态,有些文章采用了这种概念。 ,我不知道我是否误会了, 有人可以为我更清楚地说明这个概念吗?

2 个答案:

答案 0 :(得分:2)

您在第一段中重复了学术废话。在现实世界中,PCB =“过程上下文块”。也就是说,CPU定义的结构定义了进程的状态。操作系统必须为每个进程(线程)维护一个PCB。操作系统必须维护定义该过程的其他结构。有一系列结构定义了PCB之外的过程,例如虚拟内存,特权,时间保持等等。

也许存在这样的系统(我还没有完成Linux开发),但是我从未在具有定义进程的单一结构的系统上进行过OS开发。

在操作系统中,从另一个启动的进程可以是子进程,也可以是分离的进程。子流程是链接到创建它的流程的子流程。分离的过程是未链接的过程。

如果一个进程具有子进程,则该进程无法终止,直到其所有子进程(子级)都已终止。

答案 1 :(得分:0)

情况1: wait在父级中显式调用。 在这种情况下,子项终止时,父项将获得其状态,并且子项的条目将从过程表中删除。

案例2; wait未在子级的父级中明确调用。 在这种情况下,子级终止时,父级将不会获得其状态,并且该子级进程将成为僵尸。在Linux中,此类过程显示为<defunct>。该子进程(僵尸进程)的条目仍将存在于进程表中。

情况3: wait并未在子级的父级中显式调用,但该子级是作为一个独立的进程创建的。 在这种情况下,如果子项终止,则其子项将从过程表中释放。它不会成为僵尸。