Linuxにおけるforkの動作原理

Linuxにおけるforkは新たなプロセスを作成するシステムコールの一つです。fork システムコールを呼び出すと、OSは現在プロセスにおけるすべての資源(コード、データ、スタックなど)をコピーして、新しいプロセスを作成します。その新しいプロセスは子プロセスと呼ばれます。子プロセスは元のプロセスの複製で、forkを呼び出した場所から実行を開始します。

フォークの実行原理は次のとおりです。

  1. フォークが呼び出されると、OSは子プロセスに新しいプロセスID(PID)を割り当てます。
  2. オペレーティングシステムが子プロセスに新しいプロセス制御ブロック(PCB)を作成し、子プロセス状態の情報を格納する。
  3. オペレーティングシステムは、親プロセスのコードセグメント、データセグメント、スタックセグメントを子プロセスのアドレス空間にコピーします。
  4. OSは子プロセスに独立したユーザーモードスタックを作成する。
  5. 親プロセスと子プロセスのPCBはそれぞれready状態に設定され、スケジューラによる実行待ち状態になります。

フォーク後に、親プロセスと子プロセスのコード、データ、スタックは同じものになり、主な違いは、返される値です。

  1. 親プロセスでは、fork は子プロセスの PID を返すので、その返り値によって自分が親プロセスか子プロセスか判断できる。
  2. fork では子プロセスが0を返すため、子プロセスかどうかは返り値で判断できる

フォーク後に親プロセスと子プロセスはどちらも後続のコードを実行し続けますが、別々のプロセスであり、それぞれが独自のアドレス空間とリソースを持ちます。

广告
広告は10秒後に閉じます。
bannerAds
bannerAds