プロセス
そういったとき、プロセッサは何もしていない「アイドル」状態になる。プロセッサを常に動作させるため、そういった入出力待ち状態のプログラムの実行を中断し、別のプログラムを起動または再開させる。ユーザーから見れば、複数のプログラムが同時に動作しているように見える。
間もなく「プログラム」の観念は「実行中プログラムとそのコンテキスト」という観念に拡張された。これがプロセスという概念の誕生である。
これは、リエントラントなコードの発明とともに必要になった。
スレッドという概念が生まれるのはその少し後になる。タイムシェアリングシステム、コンピュータネットワーク、マルチプロセッサ、メモリ共有型コンピュータなどが登場し、古い「マルチプログラミング」は真のマルチタスクやマルチプロセッシングにとって代わられ、さらにはマルチスレッドへと進化していったのである。
プログラムの実行中、別のプロセスが同じプログラムを同時に実行できるもの。プログラム(コード)部分とデータ部分が別の記憶領域に分かれていて、コード部分だけ共有できればよい。同時実行したいプロセスは、データ部分だけ独自に新しく用意する。リエントラントなコードは、当然にリカーシブ、リユーザブルである。
プロセスは、その役割で分類すると、OSの機能を実現するシステムプロセスと、ユーザー権限で実行されるユーザープロセスがある。
プロセスは、そのプログラム部分の性質で分類すると、以下のようになる。