コンピュータにおけるプロセス:詳細解説
プロセスの概要
コンピュータプログラムは、命令の集まりです。プロセスとは、その命令が実際に実行されている状態、つまりプログラムの実行インスタンスのことです。プログラムコードだけでなく、変数や実行状態なども含みます。同じプログラムから複数のプロセスが生成されることがあり、
[オペレーティングシステム]によっては、プロセスが複数のスレッドで構成され、命令を同時並行に実行することも可能です。
マルチタスクは、複数のプロセスが
CPUなどのシステム資源を共有する技法で、各プロセスは時間的に区切られたスライス(タイムスライス)で実行されます。これにより、複数のプログラムが同時に実行されているように見えますが、実際には
CPUは一度に一つの命令しか実行できません。タイムシェアリングは
マルチタスクの代表的な形態であり、対話型アプリケーションの高速応答を可能にします。
プロセスの構成要素
プロセスは、以下の要素で構成されます。
実行命令コード: プログラムに対応するコードのイメージ。
メモリ: 実行コード、プロセス固有データ、コールスタック、ヒープ領域などを格納する領域。仮想メモリと実メモリを使用します。
リソース記述子: ファイル記述子やファイルハンドルなど、プロセスが使用するリソースの記述情報。
セキュリティ属性: プロセスの所有者やアクセス権限などのセキュリティに関する情報。
プロセッサ状態(コンテキスト): レジスタの内容、物理メモリのアドレッシング情報など、プロセスの実行状態を示す情報。
OSは、これらの情報をプロセス制御ブロックというデータ構造に保持し、プロセス間の分離とリソース管理を行います。プロセスが互いに干渉しないようにすることで、デッドロックやスラッシングなどのシステム障害を防ぎます。また、安全なプロセス間通信機構を提供することで、プロセス間の連携を可能にします。
プロセスの分類
プロセスは、役割やプログラムの性質によって分類されます。役割による分類では、OSの機能を実現するシステムプロセスと、ユーザーが実行するユーザープロセスがあります。プログラムの性質による分類では、以下のような種類があります。
再配置可能: 主記憶装置のどの位置に読み込んでも実行可能なプログラム。
再使用可能: 主記憶に読み込まれて実行を終えた後、再度の読み込みなしで再実行できるプログラム。
再帰可能: 自分自身を呼び出すことが可能なプログラム。
再入可能(リエントラント): プログラムの実行中に、別のプロセスが同じプログラムを同時に実行できるプログラム。コードとデータが分離されており、コード部分は共有できます。
プロセス状態遷移
マルチタスクOSでは、プロセスの状態は以下のように遷移します。
生成(Created/New): プロセスが作成された状態。
走行可能(Ready): メモリにロードされ、CPUの実行を待っている状態。
走行中(Running/Executing/Active): CPUで実行されている状態。
ブロック状態(Blocked/Sleeping): リソースを待機中で、実行が中断されている状態。
終了状態(Terminated): プログラムの実行が完了した状態。ゾンビプロセスは終了状態だが、まだ
リソースが解放されていない状態です。
ゾンビプロセスは、親プロセスが子プロセスの終了ステータスを読み取るまで残存します。親プロセスが適切に処理を行わないと、システムに負担がかかります。対処法としては、親プロセスにSIGCHLDシグナルを送信したり、親プロセス自体を終了させることで、initプロセスがゾンビプロセスを処理します。
仮想記憶をサポートするシステムでは、スワップアウトされたスケジュール待ち状態やブロック状態も存在します。
プロセス間通信(IPC)
プロセス間通信は、プロセスが互いに通信する仕組みです。パイプラインのように、複数のプロセスが連携して処理を行う際に必要となります。異なるマシン上で動作するプロセス間でも通信が行われ、その際には
通信プロトコルが必要となります。
歴史
初期のコンピュータシステムでは、監視制御ソフトウェアが使用されていました。
CPU時間が高価だったため、マルチプログラミングが必要となりました。これは、複数のプログラムを同時に実行する技法です。その後、プログラムの実行状態とそのコンテキストを含めた「プロセス」の概念が生まれ、リエントラントコードの発明とともに発展しました。タイムシェアリングシステム、
コンピュータネットワーク、マルチプロセッサなどの登場により、マルチプログラミングは真の
マルチタスク、マルチプロセッシング、マルチスレッドへと進化していきました。
マルチタスクOSでは、多くのプロセスを並行実行するためにコンテキストスイッチが行われます。シングルコア
CPUでは、一度に一つのプロセスしか実行できませんが、マルチプロセッシングシステムでは、複数のプロセスが同じプログラムを共有して実行することも可能です。
組み込みシステムでは、プロセスをタスクと呼ぶことが多いです。
まとめ
本稿では、コンピュータにおけるプロセスの概念、
マルチタスク、プロセス状態遷移、プロセス間通信について詳細に解説しました。OSにおけるプロセス管理、プロセスの分類、ゾンビプロセスの対処法なども含め、理解を深めていただければ幸いです。