コンピュータのマルチタスク:OSが複数のタスクを実行する仕組み
コンピュータのマルチタスクの概要。定義、プリエンプティブ/協調型の種類、コンテキストスイッチとスケジューリングの仕組み、歴史、用途、性能上のトレードオフ、マルチプロセッシングとの違いを解説します。
コンピュータのマルチタスクとは、オペレーティングシステム(OS)が、複数のアクティブなタスクまたはプログラムを同時に管理する能力である。実際には、単一の中央処理装置(CPU)がプロセッサを各プログラム間で高速に切り替えることで、複数のプログラムを並行して実行しているように見せる。この同時実行のように見える仕組みにより、利用者は、あるアプリケーションの終了を待たずに別のアプリケーション、バックグラウンドサービス、システムプロセスを実行できる。日常的な用法との比較から、複数の活動を一度に行おうとする人間にこの語が使われることもあるが、コンピュータのマルチタスクには明確な技術的機構と限界がある。
画像ギャラリー
3 画像基本的な仕組み
マルチタスクを実現する基本的な機構は、コンテキストスイッチとスケジューリングの二つである。OSがあるタスクから別のタスクへ切り替える際、切り替え元のタスクの状態(CPUレジスタ、プログラムカウンタ、メモリマッピング)を保存し、切り替え先の状態を復元する。スケジューラは、優先度、公平性、リアルタイム制約などの方針に基づき、次にどのタスクへCPU時間を割り当てるかを決定する。タスクは、プロセス全体である場合も、プロセス内でメモリを共有する、より小さなスレッドである場合もある。
種類とモデル
- プリエンプティブ・マルチタスク:OSがタスクを中断してCPU時間の断片を割り当てる方式。現代のデスクトップOSやサーバーOSで一般的である。
- 協調型マルチタスク:タスクが自発的に制御を譲る方式。より単純である一方、応答しなくなったタスクが他のタスクを妨げるおそれがある。
- 並行性と並列性:並行性は複数の活動を扱うように構成することであり、並列性は複数のCPUコアを用いてそれらを真に同時実行することである。
歴史と発展
複数の利用者やジョブの間で計算資源を共有する考え方は、20世紀半ばの初期のタイムシェアリング研究にさかのぼる。ハードウェアとOSの発展に伴い、マルチタスクは単純なジョブ切り替えから、対話的な利用、バックグラウンドデーモン、リアルタイム要件を支える高度なスケジューラへと進化した。現代のモバイルおよびデスクトップのプラットフォームは、プリエンプティブ・スケジューリング、スレッドライブラリ、並行プログラミングを簡素化する抽象化機構を実装している。
用途、例、重要性
マルチタスクは日常的なコンピューティングの中心的機能である。例えば、ウェブブラウザ、メディアプレーヤー、ファイル転送を同時に実行したり、サーバーが多数のネットワーク要求を同時に処理したりする場合に用いられる。これにより、バックグラウンド更新、負荷の大きい計算の実行中におけるユーザー入力への応答、ハードウェア資源の多重化が可能になる。イベントループや非同期I/Oなどの軽量なマルチタスクモデルは、スレッドのオーバーヘッドを最小限に抑えつつ高い並行性が必要なアプリケーションでしばしば使用される。
課題と区別
マルチタスクにはコストと危険性が伴う。コンテキストスイッチにはオーバーヘッドがあり、スレッドとプロセスはCPU、メモリ、I/Oを競合して使用する。また、共有データには、競合状態やデッドロックを避けるための同期が必要である。重要な区別として、マルチタスクとマルチプロセッシング(複数のCPUまたはコアを使用すること)、およびマルチスレッディング(一つのプロセス内に複数のスレッドを持つこと)がある。リアルタイムシステムには、汎用システムよりも厳格なスケジューリング保証が求められる。
関連資料
OS設計とタスク管理についてさらに学ぶには、スケジューラの役割やプロセスモデルに関する資料を参照するとよい。実践的に調べるには、一般的なOSがプロセスをどのように扱うかを示すオペレーティングシステムのプロセスモデル、アプリケーションの構成を扱うソフトウェア構造、プログラムの動作例を示すサンプルプログラムを参照できる。人間的要因とマルチタスクの研究については、タスク管理におけるタスク切り替えの入門資料があり、消費者向けの例としては、モバイル機器が通話とアプリをどのように管理するかを扱う電話のマルチタスクを参照できる。
関連項目
著者
AlegsaOnline.com コンピュータのマルチタスク:OSが複数のタスクを実行する仕組み Leandro Alegsa
URL: https://ja.alegsaonline.com/art/67491