---
title: "タスクスケジューリング方式とは？プリエンプティブとノンプリエンプティブの違い【基本情報技術者試験】"
description: "タスクスケジューリング方式を、OSが実行中タスクを中断できるプリエンプティブ方式と、タスクが自らCPUを手放すまで切り替えないノンプリエンプティブ方式に分けて整理し、ラウンドロビン、優先順位、残余処理時間順との違いをFE試験向けに解説します。"
last_modified_at: "2026-07-25"
canonical_url: "https://stemtazoo.github.io/fe/task-scheduling/"
section: "fe"
---

## まず結論

タスクスケジューリング方式とは、**OSが、どのタスクにCPUを使わせるかを決める方法**です。

基本情報技術者試験では、まず次のように切り分けます。

```text
OSが実行中タスクを途中で止められる → プリエンプティブ
タスクがCPUを手放すまで待つ       → ノンプリエンプティブ
```

「実行中のタスクが、自分で待ち状態に移るか終了するまで、他のタスクを実行できない」と出たら、**ノンプリエンプティブ** と判断します。

## 直感的な説明

CPUは、同時にたくさんのタスクを実行しているように見えます。

でも実際には、CPUを使うタスクを短い時間で切り替えながら処理しています。

ここで大事なのは、**誰の判断でタスクを切り替えるか** です。

```text
OSの判断で切り替える
→ プリエンプティブ

プログラム側がCPUを手放すまで待つ
→ ノンプリエンプティブ
```

たとえるなら、プリエンプティブは先生が時間を見て発表者を交代させるイメージです。

ノンプリエンプティブは、発表者が話し終わるまで、次の人に交代できないイメージです。

英語では、preemptive は「先に割り込む」、non-preemptive は「割り込まない」という感覚です。

## 定義・仕組み

タスクスケジューリングでは、OSが実行可能状態のタスクの中から、次に実行するタスクを選びます。

代表的な用語を整理すると、次のようになります。

| 用語 | 判断のポイント |
|---|---|
| プリエンプティブ | OSが実行中タスクを中断して、別のタスクに切り替えられる |
| ノンプリエンプティブ | 実行中タスクがCPUを手放すまで、他のタスクへ切り替えない |
| ラウンドロビン方式 | 一定時間ごとに順番にCPUを割り当てる |
| 優先順位方式 | 優先度が高いタスクを先に実行する |
| 残余処理時間順方式 | 残りの処理時間が短いタスクを先に実行する |

タスクの状態は、ざっくり次のように考えると分かりやすいです。

```text
実行可能状態：CPUを使える順番を待っている
実行状態    ：今CPUを使っている
待ち状態    ：入出力などを待っていて、すぐには実行できない
```

ノンプリエンプティブでは、いったん実行状態になったタスクは、

```text
自分で待ち状態に移る
または
終了する
```

まで、CPUを使い続けます。

そのため、OSが途中で強制的に別のタスクへ切り替える、という説明ではありません。

公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。タスク管理やスケジューリングは、OSやコンピュータシステムの基本動作と関係が深い内容です。

## 科目Aでどう出る？

科目Aでは、説明文から該当するスケジューリング方式を選ぶ形で出題されやすいです。

選択肢を切るときは、次のキーワードを見ます。

| 問題文のキーワード | 選ぶ用語 |
|---|---|
| OSが中断する、CPU使用時間、優先度で切替え | プリエンプティブ |
| 自ら待ち状態に移る、終了するまで切り替えない | ノンプリエンプティブ |
| 一定時間、時間片、次のタスクへ回す | ラウンドロビン方式 |
| 優先度が高い方を実行する | 優先順位方式 |
| 残りの実行時間が短い順 | 残余処理時間順方式 |

例えば、

```text
実行状態としたタスクが自ら待ち状態に遷移するか終了するまで、
他のタスクを実行状態にできない
```

という説明なら、ポイントは **自ら待ち状態に遷移するか終了するまで** です。

これはOSが途中で奪うのではなく、タスクがCPUを手放すまで待つ説明なので、ノンプリエンプティブです。

一方、

```text
決められた時間内に待ち状態に遷移しないとき、
そのタスクを中断して次のタスクを実行する
```

なら、ラウンドロビン方式の説明です。

## どんな場面で使う？

問題文でタスクスケジューリングが出る場合は、用語名そのものよりも、**タスクの状態変化や実行順序を追う力** が大切です。

例えば、次のような情報が与えられることがあります。

- タスクの到着時刻
- 処理時間
- 優先度
- タイムクォンタム
- 待ち状態に入るタイミング

このときは、どの方式で動いているかを先に確認します。

```text
ラウンドロビン → 時間切れで次へ回す
優先順位方式   → 優先度を見る
ノンプリエンプティブ → 実行中タスクが手放すまで続く
```

方式を確認しないまま実行順序を追うと、途中でタスクを切り替えるべきかどうかを間違えやすくなります。

特に、ノンプリエンプティブでは、より優先度が高いタスクが実行可能状態になっても、実行中のタスクがCPUを手放すまで切り替えない場合があります。

## よくある誤解・混同

一番多い混同は、**ノンプリエンプティブでも、優先度が高いタスクが来たらすぐ切り替える** と思ってしまうことです。

| 混同しやすい点 | 正しい理解 |
|---|---|
| ノンプリエンプティブでもOSが途中で止める | ノンプリエンプティブでは、基本的にタスクが手放すまで待つ |
| ラウンドロビンは優先度順で実行する | ラウンドロビンは一定時間ごとに順番に回す |
| 残余処理時間順は到着順で実行する | 残り時間が短いタスクを優先する |
| 優先順位方式は必ずプリエンプティブである | 優先順位方式にも、切替えルールの違いがあり得る |

プリエンプティブとノンプリエンプティブを見分けるコツは、**中断の主導権がどこにあるか** です。

```text
OSが中断できる
→ プリエンプティブ

タスクがCPUを手放すまで待つ
→ ノンプリエンプティブ
```

また、ラウンドロビン方式は、プリエンプティブな方式の代表例として扱われることが多いです。

決められた時間を使い切ったら、実行中のタスクをいったん中断して、実行待ち行列の後ろに回します。

## まとめ（試験直前用）

- タスクスケジューリングは、OSがCPUをどのタスクに使わせるかを決める方法
- OSが途中で中断できるなら **プリエンプティブ**
- タスクが待ち状態に移るか終了するまで待つなら **ノンプリエンプティブ**
- 一定時間ごとに順番に回すなら **ラウンドロビン方式**
- 優先度なら **優先順位方式**、残り時間なら **残余処理時間順方式**
