os161父子线程pid

时间:2011-11-11 00:42:13

标签: operating-system os161

是否有人熟悉os/161并且可以为我回答几个问题?

孩子pid,父母pid如何运作。

我知道当你调用thread_fork()时,你正在创建另一个基于当前线程的线程,新线程应该有自己的唯一id和不同的文件描述符表。当sys_forkcurthread创建一个孩子时,除了pid之外,孩子与父母一样。但我对pid和父pid的工作原理感到困惑。

这是我对流程表的解释。整个系统只有一个进程表。现在我的每个帖子都有parent_pidmy_pid - 父线程可以有多个子节点(通过不断调用sys_fork) - 一个孩子只能有一个父母 - 无论何时调用sys_fork,都会创建一个子项,并将此子项的parent_pid设置为创建此子项的线程的pid。
-pid为1用于启动/菜单线程。

我是否正在理解流程表如何运作?

最后一个问题: 对于sys_waitpid():只有父级才能使用waitpid?他们只能等待他们的孩子?孩子可以在父母身上使用waitpid(或者这会导致死锁)吗?

我一直在搜索谷歌,但是我发现了很多矛盾,到目前为止我仍然无法找到答案。

1 个答案:

答案 0 :(得分:3)

我对OS / 161一无所知 - 但你的描述听起来很像标准的POSIX系统。所以,这就是你的问题如何与POSIX一起使用,并希望它们对OS / 161也有意义。

只有父母打电话给waitpid()。应用程序围绕此设计。如果pid不是调用进程的子进程,则waitpid()的POSIX规范要求返回错误,并将errno设置为ECHILD

儿童可以通过查看自己的parent pidgetppid(3)来判断其父母是否已经死亡。如果是1,那么他们的父母已经死亡,他们的父母已经设置为init。 (init准备好在所有孤儿死亡时收获它们,因此进程状态不会延迟并用僵尸进程填充系统进程表。)(现代系统没有一个“进程表”,但是pid必须被回收,并且一些进程控制信息必须保留在内核中,直到调用某种类型的wait()来获得进程。这个内存太重要了,不能留空长。)