1

プロセスが互いにどのようにリンクされているかを理解しようとしています。Linux カーネルは循環リンク リスト list_head を使用してさまざまなプロセスを接続し、その情報は task_struct という構造に保持されていることを私は知っています。task_struct には、children と sibling という 2 つのフィールドがあり、すべて list_head 型です。children->next は次の子を指し、sibling->next は共通の親からの次の兄弟を指します。そうは言っても、これらのポインターが親/兄弟プロセスをどのように指しているかについて混乱しています。

たとえば、R1、P1、P2 というプロセスがあります。R1 はルート プロセスで、P1 P2 はその子プロセスです。R1->children->next は、兄弟であるため、P1 の兄弟フィールドを指します。しかし、P2 の sibling->next はどこを指しているのでしょうか? P1 の兄弟フィールドを指す必要がありますか、それとも R1 の子フィールドを指す必要がありますか?循環リンク リストを形成します。私の直感では、P1 の兄弟フィールドを指しているはずですが、私の TA はそうではないと教えてくれました。

分かりやすいように画像にしました。どんな助けでも役に立ちます。ありがとう!

ここに画像の説明を入力

4

1 に答える 1