Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

プリエンプティブマルチタスク(プリエンプティブマルチタスク)とは | 意味や読み方など丁寧でわかりやすい用語解説

プリエンプティブマルチタスク(プリエンプティブマルチタスク)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

プリエンプティブマルチタスク (プリエンプティブマルチタスク)

英語表記

preemptive multitasking (プリエンプティブ・マルチタスキング)

用語解説

プリエンプティブマルチタスクとは、現代の主要なオペレーティングシステム(OS)で広く採用されている、複数のタスクを並行して実行する手法の一つである。コンピュータが一つしかCPUを持たない場合でも、あたかも同時に多くのプログラムが動いているかのように見せるための技術であり、特にシステム全体の応答性と安定性を高める上で非常に重要な役割を担っている。ここで言う「プリエンプティブ(preemptive)」とは「先取りする」「割り込む」といった意味を持つ言葉であり、その名の通り、OSがタスクの実行を強制的に中断させ、別のタスクにCPUの利用権を割り当てる制御方式を指す。

この方式の核心は、OS自身がタスクの実行を厳密に管理する点にある。従来のノンプリエンプティブマルチタスク(協調的マルチタスク)が、各タスクが自発的にCPUの利用権を解放することを前提としていたのに対し、プリエンプティブマルチタスクでは、OSが「司令塔」となり、現在実行中のタスクがどのような状態であっても、必要に応じてその実行を停止させ、待機中の別のタスクにCPUを割り当てる。これにより、特定のタスクがCPUを独占し続けることを防ぎ、システム全体の公平性と応答性を確保する。

詳細な動作原理について解説する。プリエンプティブマルチタスクを実現するために、OSは「スケジューラ」と呼ばれる機能を持つ。スケジューラは、実行可能な複数のタスクの中から、次にどのタスクにCPUを割り当てるかを決定する役割を担う。この決定には、タスクに設定された優先度や、タスクがCPUをどれくらい利用してきたかといった情報が用いられる。

具体的なタスク切り替えのメカニズムは以下のようになる。まず、OSは各タスクに対して「時間量子(タイムスライス)」と呼ばれるごく短いCPU利用時間を割り当てる。これは通常、数ミリ秒から数十ミリ秒程度の時間だ。タスクは割り当てられた時間量子内で処理を実行する。時間量子が終了すると、タイマー割り込みと呼ばれる仕組みが作動し、CPUの制御が強制的にOSに戻される。

OSに制御が戻ると、スケジューラが次の実行タスクを決定する。現在実行中だったタスクは、その時点のCPUの状態(レジスタの値やプログラムカウンタなど)がメモリに保存される。この保存された状態を「コンテキスト」と呼ぶ。そして、次に実行されるタスクのコンテキストがメモリからCPUに復元される。この一連の処理を「コンテキストスイッチ」と呼ぶ。コンテキストスイッチが完了すると、新たなタスクは中断された地点から実行を再開する。このような高速なコンテキストスイッチが繰り返し行われることで、ユーザーは複数のタスクが同時に動いているかのように錯覚する。

プリエンプティブマルチタスクの最大の利点は、システムの応答性が飛躍的に向上することにある。もしあるタスクが無限ループに陥ったり、非常に時間のかかる処理を実行していたとしても、OSが強制的にそのタスクを中断させ、別のタスクにCPUを割り当てるため、システム全体がフリーズするような事態を防ぐことができる。例えば、ウェブブラウザで重いページを読み込んでいる最中でも、同時にテキストエディタで文章を編集したり、音楽を再生したりといった操作がスムーズに行えるのは、このプリエンプティブマルチタスクのおかげである。

また、リソースの公平な分配も重要な利点だ。各タスクに均等にCPU時間が割り振られるため、特定のタスクがシステムリソースを独占することを防ぎ、全体として安定した動作を保証する。これにより、システム全体の信頼性が高まる。さらに、プログラマーの視点から見ると、タスクの切り替えタイミングを意識することなくプログラムを記述できるため、開発の負担が軽減されるという側面もある。協調的マルチタスクでは、プログラマーが明示的にCPUの利用権を解放するコードを記述する必要があったが、プリエンプティブマルチタスクではOSが自動的に処理してくれる。

一方で、プリエンプティブマルチタスクにはいくつかの課題も存在する。一つは「コンテキストスイッチのオーバーヘッド」である。コンテキストスイッチのたびにCPUの状態を保存・復元する処理が必要となり、これはごく短い時間ではあるが、CPUの計算リソースを消費する。非常に頻繁にタスクが切り替わる環境では、このオーバーヘッドが無視できないパフォーマンス低下につながる場合がある。

もう一つの重要な課題は「排他制御の必要性」である。複数のタスクが同時に同じ共有リソース(例えば、共有メモリ領域やファイル)にアクセスしようとすると、データの整合性が失われる可能性がある。例えば、あるタスクがデータの一部を更新中に別のタスクがそのデータを読み書きしてしまうと、データが壊れたり、意図しない結果が生じたりする。これを防ぐためには、「ロック」や「セマフォ」といった排他制御の仕組みを用いて、一度に一つのタスクしか共有リソースにアクセスできないようにする必要がある。排他制御を適切に設計しないと、「デッドロック」(複数のタスクが互いに相手が保持しているリソースの解放を待ち続け、結果としてどのタスクも処理を進められなくなる状態)のような深刻な問題が発生する可能性がある。

ノンプリエンプティブマルチタスク(協調的マルチタスク)との比較をより詳細に見る。協調的マルチタスクでは、タスクが自分から「もうCPUは使わない」とOSに通知しない限り、OSは制御を奪うことができなかった。そのため、悪意のある、あるいは単にバグのあるタスクがCPUを独占し続けると、システム全体が応答不能になり、マウスカーソルさえ動かせなくなるような事態が頻繁に発生した。これはユーザー体験を著しく損なうものであり、システムの安定性という点で大きな問題があった。

これに対し、プリエンプティブマルチタスクはOSが強力な制御権を持つことで、協調的マルチタスクが抱えていたこれらの問題を根本的に解決した。現代のWindows、macOS、Linuxなどの主要な汎用OSはすべてプリエンプティブマルチタスクを採用しており、これによりユーザーは複数のアプリケーションを同時に快適に利用できる環境が実現されている。この技術は、今日のコンピュータシステムが複雑な処理を効率的かつ安定して実行するために不可欠な基盤となっているのである。

関連コンテンツ

関連IT用語