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