プロセス
コンピュータ制御ソフトウェアは1960年代初めまでに IBSYS(英語版) のような監視制御ソフトウェアから実行制御ソフトウェアへと発展した。コンピュータは高速化していったが、CPU時間は安価ではなく、しかも完全に使われたわけではない。そのためマルチプログラミングが必要とされ、また可能となった。
マルチプログラミングとは、複数のプログラムを同時に(並行に、同時に並列ということもある)実行することを意味する。当初は単一のプロセッサ上で動作し、少ない資源を共有していた。マルチプログラミングはまた、より幅広い用語であるマルチプロセッシングの基本形態でもある。
プログラムは、プロセッサへの命令列で構成されている。単一のプロセッサは一度に1つの命令しか実行できない。つまり同時に複数のプログラムを実行することは不可能である。プログラムは長い待ち合わせが必要な計算資源(入力など)を必要とすることがあり、時間のかかる操作(プリンターへの出力など)を行うこともある。
コンピュータプログラムは命令の受動的集合体である。プロセスはそれら命令の実際の実行である。同じプログラムに対応する複数のプロセスが存在しうる。例えば、同じプログラムのインスタンスをいくつか開始することは、複数のプロセスの実行を意味することが多い。
マルチタスクは複数のプロセスがプロセッサ(CPU)や他のシステム資源を共有するための技法である。各CPUはある時点には1つのタスクだけを実行している。しかし、マルチタスクでは各プロセッサに各タスク間で切り替えさせることができ、各タスクの終了を待たずに次々とタスクを実行できる。OSの実装にもよるが、タスク間切り替えは入出力操作の際に行われたり、タスクが明示的に切り替え可能であることを指示したり、ハードウェア割り込みの際に行われたりする。
マルチタスクの典型的形態としてタイムシェアリングがある。タイムシェアリングは、対話型ユーザアプリケーションの素早い応答を可能にする技法である。タイムシェアリングシステムでは、コンテキストスイッチが高速に行われる。そのため、同一プロセッサ上で複数のプロセスが同時に実行されているように見える。複数プロセスを同時に実行することを並行性 (concurrency) と呼ぶ。
セキュリティと信頼性のため、現代のOSは個々のプロセス間での直接の通信ができないようにしており、厳密に統制・制御されたプロセス間通信機能を提供している。