公式の回答に似たグラフが必要な場合は、物事がどのように同時に実行されるかを考えるのをやめ、代わりにプロセスの世代 (親、子、孫など) に集中してください。
最初は 1 つのプロセスがありp0
、3 つのフォークがあります。これらの 3 つのフォークを実行すると、残りのフォークp1
が 2 つ、残りのフォークp2
が 1 つになり、p3
残りのフォークがなくなります。次にp0
終了します ( のみp1
、p2
およびp3
残ります)。
フォークが残っていないので、と)p3
だけを残して捨てることができます。p1
p2
次に、プロセスは 1 つのフォークを残しp1
て 2 番目のフォーク生成p4
を実行し、次にフォークを残さずに 3 番目のフォーク作成p5
を実行します。p1
これで完了し、終了します ( p2
、p4
およびp5
残ります)。
と同様にp3
、p5
フォークが残っていないため、投げることができます。これはp2
と を残しp4
ます。
同様に、p2
フォークが 1 つ残っていたので、フォークが残っていない状態で作成p6
されます。次に、フォークが残っていないため、p2
との両方がp6
終了し、 を残しp4
ます。
プロセスp4
にはフォークが 1 つ残っていたため、フォークなしで作成p7
され、両方とも終了します。
プロセスがいつ開始されるかではなく、親子関係に基づいた深さでチャートを描くことによって (ただし、開始時間(a)はプロセスが特定の深さで水平方向に存在する場所を制御します。たとえば、 および を参照p1
しp2
てくださいp3
)、図は与えられたものと一致するはずです。
したがって、次のように考えてください。
Sequence within generation -------->
G
e ______p00______
n / | \
e p01 p02 p03
r / \ |
a p04 p05 p06
t |
i p07
o
n
|
V
(a)ここで定義されている開始時刻は、プロセスが存在するときであることに注意してください。プロセスが実際の有用な作業を実行する順序は、スケジューリングの気まぐれにも依存します。