マルチタスク
出典: フリー百科事典『ウィキペディア(Wikipedia)』
マルチタスク は、OSが複数のタスク(プロセス)を切り替えながら実行すること。マルチプログラミング、マルチプロセスともいう。逆に、同時に一つのタスクしか実行できない方式をシングルタスクという。
十分短時間に切り替がおこなわれれば、ユーザーから見ると、複数のアプリケーション(タスク・プロセス)が同時に実行されているように見える。
タスクの切り替えのオーバーヘッドや、キャッシュやトランスレーション・ルックアサイド・バッファのミスヒット率の上昇などのコストがかかるが、入出力待ちなどであるタスクの実行が止まっても他のタスクが実行されるため、全体としてスループットの上昇が期待できる。
[編集] プリエンプティブ・マルチタスク
タスクの切り替えにはハードウェアタイマ割り込みが用いられることが多く、この場合割り込みによって一定時間内(タイムスライス)に強制的にオペレーティングシステム(OS)に制御が移る。OSは一定の方式に従い次のタイムスライスを実行中のタスク・プロセス・スレッド(マルチスレッドOSの場合)に割り当てる。このことをプリエンプション (preemption, 横取り)という。なお、OSによっては入出力割り込みやシステムコールの呼び出しによってプリエンプションを発生させるものもある。
この方式を特にプリエンプティブ (preemptive) なマルチタスクという。パーソナルコンピュータ用商用OSでは、OS/2、Windows NT/2000/XP/VistaといったWindows NT系OS、Mac OS Xなど(Windows 9x系は非完全ながらも対応している)。一定時間内にOSに制御が戻るため、システム全体の堅牢性が高い。一方、OSがCPU時間を管理する必要があり、また、一定時間毎にタスク切り替え処理が発生するため、処理は重くなるが、現在のCPUの能力向上と共にそのコストは問題にならなくなっており、現在は、メリットの多いこちらの方式が主流である。
タスクを切り替える間隔をクオンタムと呼ぶ。この時間が長ければ長い程、システムの負荷が軽くなる。しかし、一定期間内で同時に処理できる数はクオンタムに反比例する。この為、サーバー向けのOSではクオンタムは短くして応答を良くする様に調整される。
[編集] ノンプリエンプティブ・マルチタスク
これとは異なる方法もある。各タスク自身が、短い時間間隔でOSに処理を返す方式によって実現されているものを、ノンプリエンプティブなマルチタスクあるいは疑似マルチタスクという。例えばイベント待ち行列を参照する際などにタスクが自分でOSに制御を渡す(Novell NetWareの様にシステムコールの都度制御を返す実装もある)。OSがCPU資源を管理する必要がないので処理は軽い。しかし、長時間CPUを占有し続けるタスクが存在すると、実質的にシングルタスクと同じになってしまうという欠点がある。また特定のタスクが無限ループに陥るなどOSに処理をかえせなくなると、他のタスクを道連れにしてシステムがハングする結果になる。古いMac OSやWindows 3.xなどはこの方式である。