プロセス
スリープ(sleeping)状態ともいう。プロセスはリソース(ファイル、セマフォ、周辺機器など)を確保できないと、プログラム実行を続けられなくなるのでCPUから外されてブロック(blocked)状態となる。プロセスはそのリソースが利用可能となるまでブロック状態のままとなるが、これがデッドロック状態を発生させることもある。ブロック状態のプロセスに対してオペレーティングシステムはリソースが利用可能となったことを知らせる(オペレーティングシステム自体は割り込みによってリソースが利用可能となったことを知る)。オペレーティングシステムはブロックされなくなったプロセスを再び走行可能状態にし、そこから走行中状態にディスパッチされると、プロセスは利用可能となったリソースを使用することになる。
マルチタスクオペレーティングシステムでは多くのプロセスを並行実行するためにプロセス間でコンテキストスイッチを行うことがある。ただし1つのシングルコアCPUにおいては、ある一時点にひとつのプロセスしか実行できない(ハードウェアマルチスレッディングなどの技術を使っていない場合)。
主プログラムを1つのプロセスとし、それ以外を並列に動作するプロセス群として独立させ、非同期に動作するサブルーチンとして実装することもある。プロセスはリソースを所有しており、メモリ上のプログラムの「イメージ」はそのようなリソースの1つと言える。マルチプロセッシングシステムでは多くのプロセスが同じリエントラントなプログラムのメモリ上のコピーを共有しているが、プログラムの「イメージ」は個々のプロセスが所有していると言える(多重仮想記憶)。
組み込みシステムのオペレーティングシステムでは、プロセスをタスクと呼ぶことが多い。「プロセス」(あるいはタスク)という用語は「時間を占める何か」であり、対照的に「メモリ」は「空間を占める何か」である。
一般に、プロセスは以下のようなリソースから構成される(あるいは所有している):
プログラムに対応する実行命令コードの「イメージ」
メモリ(通常、仮想メモリの領域と実メモリの領域)には実行コードとプロセス固有データ、(実行中サブルーチンや他のイベントを常に注視している)コールスタック、ヒープ領域などを格納している。
プロセスに割り当てられたリソースの記述子。例えば、ファイル記述子(UNIX系)やファイルハンドル(Windows)。
セキュリティ属性。プロセスの所有者やプロセスに関わるパーミッションなど。
プロセッサ状態(コンテキスト)。レジスタの内容、物理メモリのアドレッシングなど。「状態」はプロセス実行中はレジスタに存在し、そうでないときはメモリに存在する。
OSは各プロセスのこれらの情報の大部分をプロセス制御ブロックというデータ構造に保持している。
これらリソースの一部、少なくともプロセッサの状態情報は、プロセスというよりもスレッドに対応している。
オペレーティングシステムはプロセス同士を分離させておいて必要なリソースを割り当て、プロセス間で互いに干渉しあってシステム障害(例えば、デッドロックやスラッシング)を発生したりしないようにする。オペレーティングシステムはプロセス間通信の機構も用意してプロセスが安全に通信し合えるようにしている。