2025年9月27日土曜日

Index Page

 タイトル一覧

プロセス~UNIXプログラムの動いている実体~

 UNIXで(Windowsでも同じですが)プログラムを実行するには、まずはソースコードを作成し、これをコンパイルして「実行可能な(executable)プログラム」を生成しなければなりません。

ただし、このプログラムは実行可能な形式でHDD上に保存されているだけで、実行するにはメモリ上に適正な形式で展開(「ローディング」と言います)しなければなりません。
「本を読む時、いつでも読める本を本棚から取り出して机の上に広げる必要があるのと同じです」というとイメージが湧くでしょうか?
このメモリにローディングされた状態のプログラムのことをプロセスと言います。

さて、UNIXでは一度にたくさんのプロセスが実行されます。そこでそれらのプロセスを管理するために各プロセスにはプロセス番号が割り振られ、これによって各プロセスは識別されます。 UNIXにはプロセスを操作するコマンドがいくつかありますが、それらはプロセスを特定するのにプロセス番号を使用します。

最初にプロセスの生成についてお話します。
プロセスは既に存在する(親)プロセスから生成されます。従ってすべてのプロセスには(ただ一つの例外を除いて)親プロセスが存在することになります。またプロセスには0個以上の子プロセスが存在します。つまり、プロセスはすべてのプロセスの始祖となるプロセスが存在し、そこから全プロセスに繋がっているツリー構造を形成していることになります。

ではここでUNIXにおけるプロセス生成の方法を簡単に説明しておきましょう。
UNIXに限らず、一般的にプログラムを実行するには何らかの制御プログラムがHDDから目的のプログラムをメモリに展開して実行権を与えます。
UNIX以外のOSでは、新しいプログラムを実行する場合、上記の通り親に当たる制御プログラムが直接的に実行したいプログラムを起動します。
これに対してUNIXでは以下のように2段階に分けて実施します。
①制御プロセスが自身のコピーを作成する。ただし、プロセス番号だけは異なるものとする。
②コピーしたプロセス(子プロセス)に目的プログラムの実行可能形式ファイルを上書きする。

 

 

 

Index Page へ 

Index Page

  タイトル一覧 プロセス~UNIXプログラムの動いている実体 コマンド実行の仕組み:fork/exec