---
title: "RISCプロセッサの5段パイプラインとは？IF・ID・EX・MEM・WBの順番を解説【基本情報技術者試験】"
description: "RISCプロセッサの5段パイプラインを「命令フェッチ、命令デコード、実行、メモリアクセス、書込み」の順番で整理し、FE試験で迷いやすい命令フェッチとメモリアクセスの違いを解説します。"
last_modified_at: "2026-07-25"
canonical_url: "https://stemtazoo.github.io/fe/risc-five-stage-pipeline/"
section: "fe"
---

## まず結論

RISCプロセッサの5段パイプラインは、命令を次の5段階に分けて処理する考え方です。

```text
IF → ID → EX → MEM → WB
```

日本語では、次の順番です。

```text
命令フェッチ
↓
命令デコード・レジスタ読出し
↓
実行・アドレス生成
↓
メモリアクセス
↓
書込み
```

基本情報技術者試験では、**取る → 読む → 実行 → メモリ → 書く** と覚えると、選択肢を切りやすくなります。

## 直感的な説明

CPUが命令を処理する流れは、料理の手順に少し似ています。

```text
レシピを取る
↓
内容を読む
↓
作業する
↓
材料置き場を使う
↓
結果を記録する
```

命令処理も同じように、まず命令を取ってきて、その意味を読み、必要な計算やアクセスをして、最後に結果を書き込みます。

```text
命令を取る
↓
命令を読む
↓
計算する
↓
必要ならメモリを使う
↓
結果を書き込む
```

この流れを5つのステージに分けたものが、5段パイプラインです。

## 定義・仕組み

5段パイプラインの代表的なステージは、次の5つです。

| 略称 | ステージ | 役割 |
|---|---|---|
| IF | Instruction Fetch | 命令フェッチ。命令を取り出す |
| ID | Instruction Decode | 命令デコード。命令を解読し、レジスタを読む |
| EX | Execute | 実行。演算やアドレス生成を行う |
| MEM | Memory Access | メモリアクセス。データを主記憶から読む、または書く |
| WB | Write Back | 書込み。結果をレジスタなどに書き戻す |

パイプライン処理では、1つの命令を最後まで終えてから次の命令を始めるのではなく、複数の命令を少しずつずらして同時進行します。

例えば、ある命令がIDに進んだら、次の命令はIFに入れます。

```text
命令1：IF → ID → EX → MEM → WB
命令2：     IF → ID → EX  → MEM → WB
命令3：          IF → ID  → EX  → MEM → WB
```

このように、工場の流れ作業のように命令を処理することで、全体の処理効率を高めます。

このテーマは、基本情報技術者試験の「コンピュータシステム」や「プロセッサ」と関係する内容です。公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。

## 科目Aでどう出る？

科目Aでは、5段パイプラインの順番を問う問題として出題されやすいです。

まずは、次の順番を固定で押さえます。

```text
IF → ID → EX → MEM → WB
```

日本語の選択肢では、次のように対応させます。

| 順番 | 日本語の表現 | 英語略称 |
|---:|---|---|
| 1 | 命令フェッチ | IF |
| 2 | 命令デコードとレジスタファイル読出し | ID |
| 3 | 実行とアドレス生成 | EX |
| 4 | メモリアクセス | MEM |
| 5 | 書込み | WB |

例えば、選択肢に次の5つがある場合を考えます。

```text
① 書込み
② 実行とアドレス生成
③ 命令デコードとレジスタファイル読出し
④ 命令フェッチ
⑤ メモリアクセス
```

正しい順番は、次のようになります。

```text
④ → ③ → ② → ⑤ → ①
```

考え方は、次の通りです。

```text
命令を取る
↓
命令を読む
↓
実行する
↓
必要ならメモリを使う
↓
結果を書く
```

## どんな場面で使う？

問題文では、パイプラインの表や処理の流れを読んで、どの命令がどの段階にいるかを判断する場面があります。

パイプラインの基本は、複数の命令を1ステージずつずらして処理することです。

```text
時刻1：命令1 IF
時刻2：命令1 ID、命令2 IF
時刻3：命令1 EX、命令2 ID、命令3 IF
```

ただし、命令同士に依存関係がある場合、すぐに次のステージへ進めないことがあります。

例えば、前の命令の計算結果を次の命令が使う場合です。

```text
命令1の結果がまだ書き込まれていない
↓
命令2がその結果を使いたい
↓
待ちが発生することがある
```

このような待ちや遅れは、パイプラインの性能問題として扱われます。

まずは、各命令が **IF → ID → EX → MEM → WB** の順で進むことを押さえると、表を読みやすくなります。

## よくある誤解・混同

5段パイプラインでよくある誤解は、**命令フェッチとメモリアクセスを同じものとして見てしまうこと** です。

| 誤解 | 正しい理解 |
|---|---|
| メモリアクセスが最初に来る | 最初は命令フェッチ |
| 命令フェッチとメモリアクセスは同じ段階 | 命令フェッチは命令を取る。メモリアクセスはデータを読む・書く |
| 命令デコードは命令フェッチの前にできる | 命令を取ってからでないと解読できない |
| 書込みは実行の前に行う | 実行結果を最後に書き戻す |
| MEMは必ず主記憶から命令を取る段階 | MEMは主にデータアクセスの段階 |

特に、次の切り分けが大切です。

| 用語 | 何を扱う？ | 位置 |
|---|---|---|
| 命令フェッチ | 次に実行する命令 | 最初 |
| メモリアクセス | 命令が使うデータ | 実行の後 |

どちらも記憶装置に関係するので似ていますが、試験では役割を分けて考えます。

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

- RISCの5段パイプラインは `IF → ID → EX → MEM → WB`
- 日本語では、命令フェッチ → 命令デコード → 実行 → メモリアクセス → 書込み
- 命令フェッチは、命令を取る段階
- メモリアクセスは、命令が使うデータを読む・書く段階
- 命令を取る前にデコードはできない
- 実行結果は最後に書き込む
- 覚え方は「取る → 読む → 実行 → メモリ → 書く」
