Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

プロセス(プロセス)とは | 意味や読み方など丁寧でわかりやすい用語解説

プロセス(プロセス)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

プロセス (プロセス)

英語表記

process (プロセス)

用語解説

コンピュータシステムにおいて「プロセス」とは、プログラムが実行されている状態、またはその実行単位そのものを指す。プログラムはハードディスクなどのストレージに保存された、命令やデータが記述された静的なファイルであり、それ自体では何も実行しない設計図のようなものである。対照的にプロセスは、このプログラムがメモリ上に読み込まれ、中央処理装置(CPU)によって実際に命令が実行され、動作している動的な実体である。

複数のプログラムを同時に実行しているように見える現代のコンピュータでは、オペレーティングシステム(OS)がそれぞれのプログラムの実行状態を「プロセス」として管理している。例えば、Webブラウザを起動すればWebブラウザのプロセスが一つ生成され、文書作成ソフトウェアを起動すればそのソフトウェアのプロセスが生成される。これらはそれぞれ独立した存在として、必要なメモリ空間、CPU時間、開いているファイルなどのリソースをOSから割り当てられ、実行される。

プロセスは、その実行サイクルの中でいくつかの状態を遷移する。主な状態として、「生成」「実行可能」「実行中」「待機」「終了」がある。プロセスが作成された直後は「生成」状態にあり、必要なリソースが確保されるとCPUによる実行を待つ「実行可能」状態へ移行する。OSのスケジューラによってCPUが割り当てられると、実際に命令が実行される「実行中」状態となる。もし入出力処理の完了や特定のイベントの発生を待つ必要がある場合、プロセスは一時的に「待機」状態へ移り、イベントが完了すると再び「実行可能」状態に戻る。最終的にプログラムの実行が完了したり、何らかのエラーが発生したりすると、プロセスは「終了」状態となり、OSによってそのプロセスが使用していたリソースが解放される。OSはこれらの状態遷移を常に監視し、制御することで、システム全体が効率的かつ安定して動作するように管理している。

プロセスは単に実行されるプログラムコードだけでなく、その実行に必要な多くの情報とリソースの集合体である。具体的には、プログラムコード本体が格納される「テキスト領域」、グローバル変数や静的変数が格納される「データ領域」、動的にメモリが確保される「ヒープ領域」、関数呼び出し情報やローカル変数が格納される「スタック領域」といったメモリ空間を持つ。さらに、次に実行すべき命令のアドレスを示す「プログラムカウンタ」、CPU内部の高速な一時記憶領域である「レジスタ群」の値、開いているファイルの一覧、割り当てられているリソースの情報などもプロセスに紐づく重要な要素である。

オペレーティングシステムは、個々のプロセスを効率的に管理するため、「プロセス制御ブロック(PCB)」と呼ばれるデータ構造を利用する。PCBはプロセスの身分証明書や管理台帳のようなものであり、プロセスの識別子(プロセスID)、現在の状態(実行中、待機中など)、プログラムカウンタの値、CPUレジスタの内容、メモリ管理情報、プロセスが現在開いているファイルの一覧、スケジューリング情報、入出力状態など、プロセスに関するあらゆる情報が格納されている。OSはPCBを参照することで、どのプロセスがどの状態にあり、次に何をすべきか、どのリソースを使用しているかを把握し、複数のプロセスを並行して適切に動作させることができる。

複数のプロセスが同時に存在し、限られたCPUやメモリといったリソースを共有するため、OSには高度なプロセス管理の仕組みが不可欠である。OSの「スケジューラ」は、実行可能なプロセスの中から次にCPUを割り当てるプロセスを決定する役割を担う。また、OSがCPUをあるプロセスから別のプロセスへ切り替える際には、「コンテキストスイッチ」という処理が行われる。コンテキストスイッチでは、現在実行中のプロセスの状態(レジスタ値、プログラムカウンタなど)をそのプロセスのPCBに保存し、次に実行するプロセスの状態をそのPCBから読み出してCPUに復元する。この切り替え処理は非常に高速に行われるため、ユーザーは複数のプロセスが同時に動作しているかのように感じる。このような仕組みによって、一つのCPUでも複数のプロセスを並行して実行する「マルチプログラミング」や「タイムシェアリング」が実現され、CPUの利用効率が向上する。

プロセスは、他のプロセスから生成されることがある。新しいプロセスを生成した側が「親プロセス」、生成された側が「子プロセス」となる。子プロセスは親プロセスから特定のリソースを引き継ぎ、独立して動作することが一般的である。また、ユーザーが直接操作するインタラクティブなプロセスとは別に、バックグラウンドで特定のタスクを実行し続けるプロセスも存在する。これらは一般に「デーモンプロセス」と呼ばれ、システムサービスの提供や監視など、ユーザーの意識に上らないところで重要な役割を果たしている。

プロセスと似た概念に「スレッド」があるが、これらは異なるレベルの実行単位である。プロセスは、それぞれが独立したメモリ空間、ファイル、リソースを持つ実行単位であるのに対し、スレッドは一つのプロセス内でメモリ空間やファイル記述子といったリソースを共有しながら、独立した実行の流れを持つ軽量な実行単位である。つまり、プロセスが「独立した実行環境」を提供するのに対し、スレッドは「プロセス内の並行処理の最小単位」を提供する。スレッドはプロセスよりも生成や切り替えのコストが低く、一つのプログラム内で複数のタスクを並行して実行する際に、より効率的な並行処理を実現するために利用されることが多い。

関連コンテンツ

関連IT用語

関連ITニュース

関連プログラミング言語