情報処理試験を勉強していると、「プリエンプティブとノンプリエンプティブって何が違うの?」「マルチタスクの仕組みってどこまで覚えればいいの?」と迷う場面が出てきます。
結論から言えば、この2つは「タスクの切り替えをOSが強制的にやるか、タスク自身に任せるか」の違いです。ここだけは確実に押さえてください。
対象試験と出題頻度
マルチタスク(プリエンプティブ/ノンプリエンプティブ)は、基本情報技術者・応用情報技術者で出題されるテーマです。
OS(オペレーティングシステム)のタスク管理機能に属する用語で、スケジューリング方式の比較問題として繰り返し出題されています。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
用語の定義
マルチタスク(Multitask)とは、一言で言うと
「1つのCPUで複数のタスク(処理)を並行して実行する仕組み」
のことです。
イメージとしては、「1人のシェフが複数の料理を同時進行で作っている状態」です。
パスタを茹でている間にサラダを盛り付け、オーブンのタイマーが鳴ったら焼き物を取り出す。
1人しかいなくても、作業を細かく切り替えることで複数の料理が「同時に進んでいるように見える」わけです。
このとき、作業の切り替え方に2つの方式があります。
📊 マルチタスクの基本情報
| 項目 | 内容 |
|---|---|
| 英語名 | Multitask / Multitasking |
| 分類 | OSのタスク管理機能 |
| 切り替え方式 | プリエンプティブ方式 / ノンプリエンプティブ方式 |
| 関連用語 | ディスパッチ、タイムスライス、ラウンドロビン、優先度方式 |
解説
初期のコンピュータは、1つのプログラムが終わるまで次のプログラムを実行できませんでした。
しかしCPUは高速でも入出力装置(ディスクやプリンタ)は低速なため、I/O待ちの間CPUが遊休状態になるという非効率が生じていました。
この問題を解消するために「CPUの空き時間に別のタスクを実行する」というマルチタスクの考え方が生まれ、タスクの切り替え方法として2つの方式が確立されました。
プリエンプティブ方式とノンプリエンプティブ方式
2つの方式の決定的な違いは、「誰がタスクの切り替えを決定するか」です。
| 比較項目 | プリエンプティブ方式 | ノンプリエンプティブ方式 |
|---|---|---|
| 切替の主導権 | OS(強制的に切り替える) | タスク自身(自発的にCPUを手放す) |
| 英語の意味 | Preemptive=「先取りする」 | Non-preemptive=「先取りしない」 |
| CPU独占 | 起きにくい(OSが割り込む) | 起きやすい(タスクが手放すまで続く) |
| コンテキスト切替の頻度 | 多い(オーバーヘッド大) | 少ない(オーバーヘッド小) |
| 代表的な採用OS | Windows、macOS、Linux など現代のOS | Windows 3.x、Classic Mac OS |
| 別名 | 非協調型マルチタスク | 協調型マルチタスク |
図解:2つの方式のタスク切り替えイメージ
先ほどのシェフの例えで言えば、プリエンプティブ方式はキッチンマネージャー(OS)が「はい3分経った、次の料理に移って!」と強制的に指示するスタイル。
ノンプリエンプティブ方式はシェフ自身が「パスタの茹で加減を見たいからまだ離れない」と判断し、自分のタイミングで次の作業に移るスタイルです。
プリエンプティブ方式のタスク切り替え
▲ OSがタイムスライスや優先度に基づき、強制的にタスクを切り替える
ノンプリエンプティブ方式のタスク切り替え
▲ タスクAが自発的にCPUを手放すまで、タスクBは実行できない
代表的なスケジューリングアルゴリズムとの対応
プリエンプティブ方式・ノンプリエンプティブ方式それぞれに、代表的なスケジューリングアルゴリズムが紐づいています。
| 方式 | アルゴリズム | 概要 |
|---|---|---|
| プリエンプティブ | ラウンドロビン方式 | 各タスクに均等な時間(タイムスライス)を割り当て、時間切れで次のタスクに強制切替 |
| 残余処理時間順方式 | 残りの処理時間が最も短いタスクに優先的にCPUを割り当てる | |
| ノンプリエンプティブ | 到着順方式(FCFS) | 実行可能状態になった順にCPUを割り当て、終了まで中断しない |
| 処理時間順方式(SPT) | 処理時間が短いタスクを先に実行し、開始したら終了まで中断しない |
では、この2つの方式が試験でどのように出題されるか見ていきましょう。
💡 マルチタスクの核心を3行で
・1つのCPUで複数タスクを並行処理する仕組み
・プリエンプティブ方式 = OSが強制切替(現代のOS)/ノンプリエンプティブ方式 = タスク自身が自発的に切替
・ラウンドロビンはプリエンプティブ、到着順(FCFS)はノンプリエンプティブの代表例
試験ではこう出る!
プリエンプティブ方式・ノンプリエンプティブ方式は、FE・APの午前問題で繰り返し出題されています。出題パターンは大きく3つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H27春 午前 問19 |
ノンプリエンプティブなスケジューリング方式の説明を選ぶ問題 | 「タスクが自ら待ち状態に遷移するか終了するまで、他のタスクを実行状態にできない」が正解 |
| FE H28春 午前 問16 |
組込みリアルタイムOSでのプリエンプティブなスケジューリングの利用方法 | 「重要度及び緊急度に応じて処理を行う」が正解。均等配分(ラウンドロビン)がひっかけ |
| AP H26春 午前 問16 |
プリエンプティブ方式に関する記述として正しいものを選ぶ問題 | 「OSがプロセスを強制的に切り替えて実行する機構が必要」が正解 |
| AP H30秋 午前 問17 |
プリエンプションが発生する契機を問う問題 | 「実行中のタスクより優先度の高いタスクが実行可能状態になった」ときに発生 |
| AP R6春 午前 問16 |
ノンプリエンプティブ方式のタスク状態遷移に関する記述を選ぶ問題 | 「実行中タスクの切替えは、そのタスクが自発的にCPUを解放したときだけ発生」が正解 |
📝 IPA試験での出題パターン
パターン1:「方式の説明を選べ」
プリエンプティブまたはノンプリエンプティブの説明を4択から選ぶ形式。ひっかけとして「ラウンドロビン方式の説明」(タイムスライスで均等配分)や「残余処理時間順方式の説明」が紛れ込む。キーワードは「OSが強制的に切替」か「タスクが自発的にCPUを開放」。
パターン2:「リアルタイムOSでの利用方法」
FE H28春 問16のように、プリエンプティブなスケジューリングの適用場面を問う形式。リアルタイムOSでは「優先度の高いタスクを即座に実行する」ためにプリエンプティブ方式が必要、という論点が定番。
パターン3:「タスク状態遷移の計算問題」
AP R5秋 問17のように、優先度ベースのプリエンプティブスケジューリングで2つの周期タスクがデッドラインを守れるかを計算させる形式。前述の方式の違いを理解した上で、タイムラインを描くと解ける。
試験ではここまででOKです。コンテキスト切替の具体的なCPUレジスタ操作などは問われないため、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. マルチタスクOSにおけるノンプリエンプティブ方式の説明として、最も適切なものはどれでしょうか?
- A. OSがCPUの使用時間や優先度を監視し、一定条件を満たすとタスクを強制的に切り替える方式である。
- B. 実行状態のタスクが自ら待ち状態に遷移するか終了するまで、他のタスクを実行状態にできない方式である。
- C. 各タスクに均等なCPU時間(タイムスライス)を割り当て、時間切れで次のタスクに巡回させる方式である。
正解と解説を見る
正解:B
解説:
ノンプリエンプティブ方式は、実行中のタスクが自発的にCPUを手放す(待ち状態への遷移または処理終了)まで、OSが他のタスクに切り替えることができない方式です。FE H27春 午前問19でも同じ論点が出題されました。
選択肢Aはプリエンプティブ方式の説明です。OSが強制的に切り替えを行う点がノンプリエンプティブ方式とは正反対の特徴です。選択肢Cはラウンドロビン方式の説明です。ラウンドロビンはプリエンプティブ方式に分類されるスケジューリングアルゴリズムであり、ノンプリエンプティブ方式ではありません。
よくある質問(FAQ)
Q. 現代のOSはすべてプリエンプティブ方式ですか?
一般的なデスクトップOS・モバイルOS(Windows、macOS、Linux、iOS、Android)はすべてプリエンプティブ方式を採用しています。ノンプリエンプティブ方式は、Windows 3.xやClassic Mac OS(Mac OS 9以前)で使われていた歴史的な方式です。ただし、組込みシステムの一部や軽量RTOSでは、タスクの切り替えを開発者が明示的に制御する協調型の考え方を採用している場合もあります。
Q. 「プリエンプション」と「ディスパッチ」は何が違いますか?
ディスパッチは「実行可能状態のタスクにCPUを割り当てて実行状態にする」操作です。一方、プリエンプションは「実行中のタスクからCPUを取り上げて実行可能状態に戻す」操作です。タスクの3状態遷移モデルで言えば、ディスパッチは「実行可能→実行」、プリエンプションは「実行→実行可能」の遷移に対応します。試験では両者を混同させるひっかけが出るため、方向の違いを意識しておくと安全です。
Q. マルチタスクとマルチプロセスは同じ意味ですか?
厳密には異なります。マルチタスクは「複数のタスクを並行処理する概念」を広く指す言葉で、OSの内部的な実現方式に依存しません。マルチプロセスは「複数のプロセス(独立したメモリ空間を持つ実行単位)を同時に走らせる」ことを指します。さらに、1つのプロセス内に複数のスレッドを生成する「マルチスレッド」もあります。IPA試験の範囲では「マルチタスク ≒ マルチプログラミング」と理解していれば解答に支障はありません。
Q. コンテキスト切替(コンテキストスイッチ)のオーバーヘッドとは具体的に何ですか?
タスクを切り替える際、OSは現在実行中のタスクのCPUレジスタ値やプログラムカウンタなどの情報(コンテキスト)をメモリに退避し、次に実行するタスクのコンテキストを復元します。この退避・復元処理の間はアプリケーションの有効な仕事が進まないため「オーバーヘッド」と呼ばれます。プリエンプティブ方式はこの切替が頻繁に発生するため、ノンプリエンプティブ方式に比べてオーバーヘッドが大きくなります。AP H26春 午前問16の選択肢イでもこの点がひっかけとして出題されました。