2

os/161に精通していて、いくつかの質問に答えてくれる人はいますか?

子pid、親pidはどのように機能しますか。

現在のスレッドに別のスレッド ベースを作成している場合thread_fork()、新しいスレッドには自分自身の一意の ID と別のファイル記述子テーブルが必要です。sys_forkから子を作成する間curthread、子は pid 以外は親と同じです。しかし、私は pid と親 pid がどのように機能するかについて混乱しています。

これがプロセステーブルの私の解釈です。システム全体で 1 つのプロセス テーブルしかありません。今のところparent_pidmy_pidすべてのスレッドについてあります。
-親スレッドは複数の子を持つことができます (呼び出し続けることによりsys_fork)。
- 子は親を 1 人しか持つことができません。
- が呼び出されるたびsys_forkに、子が作成され、parent_pidこの子の が、この子を作成したスレッドの pid に設定されます。
-pid 1 は、ブート/メニュー スレッド用です。

プロセステーブルがどのように機能するかを理解する上で、私は正しい軌道に乗っていますか?

最後の質問: For sys_waitpid(): 親だけがwaitpid?を使用できます。そして、彼らは子供たちを待つことしかできませんか?子waitpidは親で使用できますか (または、これによりデッドロックが発生しますか)?

Google でいろいろ調べてみたのですが、矛盾が多すぎて、今でも疑問に対する明確な答えが見つかりません。

4

1 に答える 1

4

私は OS/161 について何も知りませんが、あなたの説明は標準の POSIX システムのように聞こえます。それで、あなたの質問が POSIX でどのように機能するかは次のとおりです。OS/161 でも同様に意味があることを願っています。

電話をかけるのは親だけwaitpid()です。アプリケーションはこれに基づいて設計されています。の POSIX 仕様では、pid が呼び出しプロセスの子でない場合、waitpid()errno を に設定してエラーを返す必要があります。ECHILD

子供たちは、自分のparent pid:をチェックすることで、親が死亡したかどうかを判断できますgetppid(3)。である場合1、その親は死亡しており、親は に設定されていinitます。(は、孤立したすべてのinit子が死亡したときにそれらを取得する準備ができているため、プロセス状態が長続きせず、システム プロセス テーブルがゾンビ プロセスでいっぱいになることはありません。) (最近のシステムには「プロセス テーブル」がなくなりましたが、pid は再利用され、何らかのプロセス制御情報は、プロセスを取得するために何らかの呼び出しが行われるまで、カーネルに保持されなければなりません. そのメモリは重要すぎて、長時間アイドル状態のままにしておくことはできません.)wait()

于 2011-11-11T01:27:55.097 に答える