この項目では、コンピュータのマルチタスクについて説明しています。人間のマルチタスクについては「マルチタスク (心理学)」をご覧ください。
マルチタスク (英: multi tasking) は、コンピュータにおいて複数のタスク(プロセス)を切り替えて実行できるシステムのことである。Unixなど「プロセス」という用語を使うシステムではマルチプロセスともいう(ほぼ同じものを別のシステムでは別の名で呼んでいることもあれば、違うものを同じ名で呼んでいることもあれば、何らかの理由で呼び分けていることもある)。マルチプログラミングという語は複数のプログラムを動かすという点に着目した語である(一般に、「タスク」とか「プロセス」は、プログラムの活動実体、といったようなものを指す語である)。逆に、同時に一つのタスクしか実行できない方式をシングルタスクという。
目次
1 概要
2 プリエンプティブ・マルチタスク
3 ノンプリエンプティブ・マルチタスク
4 商標登録
5 脚注
6 関連項目
コンピュータはプロセッサ(CPU)、記憶装置、ディスプレイやキーボードなどのヒューマンマシンインタフェース、ネットワークインターフェースなどのインターコネクション、などから構成される。一般的に、CPUの計算処理時間に比べ、ディスクやネットワークの処理時間は数十から数百倍かかる。シングルタスク環境では、逐次処理が行われるため、入力待ちや通信待ちなど、CPUが計算を実行できずに、待つ時間が発生する。マルチタスクの導入によって、これらの待ち時間の間にCPUを動作させ別の計算を行い、全体の処理時間の短縮を実現することが可能になる。さらに、並行プログラミングの手法が利用でき、機能をタスクとして分割することで、ソフトウェアの再利用性を上げられる。 ひとつのCPUしかないコンピュータでは、ある瞬間にはひとつの処理しか実行できない。しかし、CPUの処理時間を数十ミリ秒といった短い時間で区切り、タスク間でひとつのCPUを順に使い回すことによって、ユーザーから見ると、複数のアプリケーション(タスク・プロセス)が同時に実行されているように見える。 タスクの切り替えのオーバーヘッドや、キャッシュやトランスレーション・ルックアサイド・バッファのミス率の上昇などのコストがかかるが、入出力待ちなどであるタスクの実行が止まっても他のタスクが実行されるため、全体としてスループットの上昇が期待できる。 また、タスクという単位よりも、ユーザ単位で「1基のコンピュータを時分割でシェアする」という点に主眼がある語として「タイムシェアリングシステム」がある。 タスクの切り替えにはハードウェアタイマ割り込みが用いられることが多く、この場合割り込みによって一定時間内(タイムスライス)に強制的にオペレーティングシステム (以下、OS) に制御が移る。OSは一定の方式に従い次のタイムスライスを実行中のタスク・プロセス・スレッド(マルチスレッドOSの場合)に割り当てる。このことをプリエンプション (横取り) という。 この方式を特に指す場合はプリエンプティブ[1]なマルチタスクという。Unix系(Linuxなど)のシステムや、パーソナルコンピューター用商用OSでは、OS/2、NT系 Windows、Mac OSなどがある。企業向けシステムのメインフレーム用OS(タイムシェアリングシステム)などもほぼ全てこの方式である。一定時間内にOSに制御が戻るため、システム全体の堅牢性が高い。一方、OSがCPU時間を管理する必要があり、また、一定時間毎にタスク切り替え処理が発生するため、処理にはコストがかかるが、現在のCPUの能力向上と共にそのコストは問題にならなくなっており、現在は、メリットの多いこちらの方式が主流である。
概要
プリエンプティブ・マルチタスク詳細は「プリエンプション」を参照