概要
コンピューターにおけるマルチタスク(multi tasking) は、複数の処理(タスク)を同時に進める(並列実行)仕組みのこと。タスク管理は、オペレーティングシステム(OS)の基本的な機能の一つである。
マルチタスクを実装したOSは、各タスクの優先順位に従って実行中のプロセスの処理を一時中断(プリエンプション)するなどして、効率的な処理を実現する。
対義語はシングルタスク(single tasking)。
関連する概念
ユーザーがコンピューターにさせる仕事のステップである。たとえば、ファイルのコピーや削除、文書の保存、計算の実行、印刷といったことである。ジョブを受け付けたOSは、1つまたは複数のプロセスやスレッドを立ち上げてこれを実行する。
タスクは、コンピューターが実行する特定の作業や操作の単位。ジョブがユーザー側から見た仕事の単位なのに対し、タスクはコンピューター側から見た仕事の単位である。タスクの実体はプロセスである場合もスレッドである場合もある。
プロセスは、OSが実行中のプログラムのまとまり。基本的に個々のプロセスは独立したメモリ空間を持っていて、エラーを起こしたり暴走しても他のプロセスに影響が及ばないようになっている(メモリ保護)。
今日のモダンなOSのユーザーインターフェース(ウィンドウシステムなど)は、処理本体とは独立したプロセスで動作している。メモリ空間がプロセスごとに独立していなかった昔のClassicMacOS(MS-DOSやWindows9xも)では、特定のプログラムがエラーを起こすとOS本体もユーザーの入力を受け付けなくなり、そのままフリーズしてしまうことがよくあったが、今のmacOSではそんなことはまず起こらない。
スレッドは、プロセス内で動作する細かい処理の単位のこと。多くのプロセスは複数のスレッドを含む(マルチスレッド)。スレッドを利用することで、並列処理を効率的に実行できる。マルチコアCPUのような並列動作を前提としたハードウェアを効率的に利用できる上、(うまくいけば)応答性がよくなる。個々のスレッドはメモリ保護されていないため、同じプロセス内の他のスレッドの影響を受けるが、そのかわりタスクの切り替えが非常に高速である。
一方で、デッドロック(スレッドが別のスレッドの完了を待ち合って、結果的にすべてのスレッドが停止してしまう状態)を起こしてプロセスが完全に止まってしまったり、複数のスレッドが1つのデータに対して同時にアクセスすることによりデータの整合性が破綻してしまうというリスクがある。開発者は安全にマルチスレッドプログラムが動作する(スレッドセーフ)よう注意を払わないといけない。
割り込みは、処理を一時中断し、重要なタスクを優先的に処理する仕組みである。キーボードの入力、マウスカーソルの動きなどにレスポンスを返すハードウェア割り込み(外部割り込み)と、実行中のプログラムがエラーを起こしたり、書き込み禁止のメモリ領域へ書き込もうとしたりした場合などに処理を中断するソフトウェア割り込み(内部割り込み)に分けられる。プログラム自身がスーパーバイザコールを発行してあえて割り込みを発生させることもあるが、これは保護されたCPUモードでは実行できないタスクを実行したい際に、特権モードにアクセスできるカーネルに処理を依頼するのに用いられ、セキュリティ上のリスクが高い行為である。