有没有熟悉os/161的人可以回答我几个问题?
子pid,父pid到底是如何工作的。
我知道当您调用thread_fork()时,您是在当前线程的基础上创建另一个线程,新线程本身应该有一个唯一的id和一个不同的文件描述符表。当sys_fork从curthread创建子对象时,除了pid之外,该子对象与父对象相同。但我对pid和父pid的工作原理感到困惑。
这是我对工艺表的解释。整个系统只有一个流程表。现在,我对每个线程都有parent_pid和my_pid。
-A父线程可以有多个子线程(通过不断调用sys_fork)。
-A子级只能有一个父级。
调用-Whenever sys_fork,创建一个子级,并将该子级的parent_pid设置为创建该子级的线程的pid。
1的-pid用于引导/菜单线程。
我在理解工艺表是如何工作的方面是正确的吗?
最后一个问题:对于sys_waitpid():只有家长才能使用waitpid?他们只能伺候他们的孩子?子进程是否可以在父进程上使用waitpid (或者这是否会导致死锁)?
我一直在谷歌上搜索,但我发现了太多的矛盾,直到现在我仍然找不到一个明确的答案。
发布于 2011-11-11 09:27:55
我对OS/161一无所知--但是您的描述听起来很像标准的POSIX系统。因此,这里是如何使用POSIX解决您的问题的,希望它们对OS/161也有意义。
只有父母才会给waitpid()打电话。应用程序就是围绕这一点设计的。如果pid不是调用进程的子进程,waitpid()的POSIX规范要求返回一个错误,并将errno设置为ECHILD。
孩子可以通过检查他们自己的parent pid:getppid(3)来确定他们的父母是否已经死亡。如果为1,则其父节点已死亡,且其父节点已设置为init。(init准备好在孤儿子进程死亡时获取它们,这样进程状态就不会停留,并用僵尸进程填充系统进程表。)(现代系统不再有“进程表”,但是pids必须循环使用,并且一些进程控制信息必须保留在内核中,直到调用了某种wait()来获取进程。内存太重要了,不能空闲很长时间。)
https://stackoverflow.com/questions/8088373
复制相似问题