プロセス(コンピューティング):実行インスタンス、ライフサイクルと特性
コンピューティングにおけるプロセスは、実行中のプログラムのインスタンスです。プロセスの構成要素と状態、OSによる管理、スレッドとの違いを解説します。
概要
コンピューティングにおけるプロセスとは、動作環境によって実行される、実行時のプログラムのインスタンスである。ディスクまたはメモリに格納されたプログラムは受動的な命令の集合であるのに対し、プロセスは、プログラムコードに加え、そのコードを実行するために必要な実行コンテキストを含む能動的な実体である。現代のシステムは多数のプロセスを並行して実行できる。単一CPUのコンピュータでも、タイムスライシングにより同時に活動しているように見せることができる。
画像ギャラリー
3 画像特性と構成要素
プロセスは通常、オペレーティングシステムによって管理される、識別可能な複数の部分から構成される。これには一意の識別子、割り当てられたメモリ領域、実行コンテキストが含まれる。OSはプロセス制御ブロックなどの構造に管理情報を保持し、プロセスの中断、再開、スケジューリングを可能にする。
- 識別子:プロセス識別子(PID)と、親子関係。
- メモリ配置:読み取り専用のコード(テキスト)、初期化済みおよび未初期化のデータ、動的割り当て用のヒープ、関数呼び出しとローカル記憶域のための1個以上のスタック。
- CPUコンテキスト:コンテキストスイッチに必要なレジスタ値、プログラムカウンタ、プロセッサ状態。
- リソース:プロセスが所有する、開いているファイル、ネットワークソケット、その他のハンドル。
- 権限と環境:ユーザーID、環境変数、セキュリティコンテキスト。
ライフサイクルと動作
プロセスは存続期間中に一連の状態を移行する。一般的に、新規(作成済み)、レディ(実行可能)、実行中(CPU上で実行)、待機またはブロック(入出力または同期のため停止)、終了(完了)という状態が説明される。OSはレディ状態のプロセスをプロセッサに割り当て、プロセス間で実行を切り替える際にはコンテキストスイッチを行い、CPUコンテキストを保存・復元する。
作成と終了の仕組みはシステムごとに異なる。Unix系システムでは、プロセスが自らを複製した後、新しいコードを実行するためにそのイメージを置き換えるfork/execモデルがよく用いられる。一方、プロセスを直接生成するAPIを提供するシステムもある。ゾンビプロセスや孤児プロセスといった問題は、プロセス終了と親子関係の管理に由来する副産物である。
用途、相違点、注目すべき事項
プロセスは分離を提供する。あるプロセスで障害やクラッシュが発生しても、通常は別のプロセスのメモリを破壊しない。同じプログラムの複数のプロセスを同時に実行することもでき、たとえばアプリケーションの複数のウィンドウを開くと、通常は複数のプロセスインスタンスが作成される。プロセスと対比されることが多いのがスレッドである。スレッドはプロセスのアドレス空間とリソースを共有する、より小さな実行単位であり、より軽量な並行実行を可能にする一方、慎重な同期を必要とする。
OSによってプロセスモデルと用語は異なる。たとえば、利用者向けの環境には、実行中のアプリケーションインスタンスを「タスク」と呼ぶものがある。一般的なシステムや環境では、プロセス管理の実装や調整方法も異なる。開発者は上記の標準的な概念を利用しつつ、プラットフォーム固有のAPIによってプロセスの作成、調査、制御を行う。さらに技術的な参照先として、インスタンス、プログラム、並行性、OS、Microsoft Windowsを通じて、OSの文書および開発者向けガイドを参照できる。
関連項目
著者
AlegsaOnline.com プロセス(コンピューティング):実行インスタンス、ライフサイクルと特性 Leandro Alegsa
URL: https://ja.alegsaonline.com/art/79322