最終更新日:2026年8月16日
fe fe-technology computer-architecture cpu
まず結論
5段パイプラインでは、1つの命令を次の5段階に分けて処理します。
IF → ID → EX → MEM → WB
日本語では、次のように対応させると分かりやすいです。
命令を取る
→ 命令を解読する
→ 演算する・アドレスを求める
→ データメモリにアクセスする
→ 結果を書き戻す
基本情報技術者試験では、IF → ID → EX → MEM → WB の順番と、それぞれの役割を対応させられることが重要です。
直感的な説明
5段パイプラインは、仕事を5つの工程に分けて流れ作業にするイメージです。
例えば、工場で製品を作るときに、
材料を受け取る
→ 作業内容を確認する
→ 加工する
→ 必要な部品を出し入れする
→ 完成品を所定の場所へ戻す
という工程に分ければ、前の製品が次の工程へ進んだあと、次の製品を最初の工程に入れられます。
CPUのパイプラインも同じで、命令をいくつかの段階に分け、複数の命令の処理を少しずつ重ねて進めることで、処理効率を高めます。
ただし、FE試験の順序問題では、まず「複数命令を重ねる」という話よりも、1命令の中で各段階がどの順に並ぶかを押さえることを優先します。
定義・仕組み
代表的な5段パイプラインは、次の5ステージで構成されます。
| 略称 | 英語 | 主な役割 |
|---|---|---|
| IF | Instruction Fetch | 命令を取り出す |
| ID | Instruction Decode | 命令を解読し、レジスタを読み出す |
| EX | Execute | 演算やアドレス生成を行う |
| MEM | Memory Access | データメモリを読み書きする |
| WB | Write Back | 結果をレジスタへ書き戻す |
IF:命令フェッチ
次に実行する命令を取り出します。
プログラムカウンタ
↓
次の命令の場所を確認
↓
命令を読み出す
ここで取り出すのは、処理対象のデータではなく命令そのものです。
CPUの一般的な命令実行サイクルは、CPUの命令実行サイクルでも整理しています。
ID:命令デコードとレジスタ読出し
読み出した命令を解読し、どの演算をするのか、どのレジスタを使うのかを判断します。
命令を解読
+
必要なレジスタの値を読み出す
5段パイプラインでは、命令デコードとレジスタファイル読出しを同じステージで扱う形がよく使われます。
EX:実行とアドレス生成
演算を実行します。
例えば、加算命令なら足し算を行います。
また、ロード命令やストア命令では、メモリにアクセスするための実効アドレスを計算します。
ベースアドレス + オフセット
→ アクセス先アドレスを求める
ここで重要なのは、EXでアドレスを求め、MEMでそのアドレスへ実際にアクセスするという順番です。
MEM:メモリアクセス
ロード命令やストア命令などで、データメモリへアクセスします。
ロード
→ メモリからデータを読む
ストア
→ メモリへデータを書く
すべての命令が必ずデータメモリを読み書きするわけではありません。
例えば、レジスタ同士の単純な加算なら、MEMステージでは実質的にメモリ操作を行わない場合があります。
WB:書戻し
演算結果や、ロード命令で読み出した値をレジスタへ書き戻します。
演算結果
または
メモリから読み出した値
↓
レジスタへ書き戻す
ここまでで1命令の処理が完了します。
このテーマは、基本情報技術者試験の「コンピュータ構成要素」と関係する内容です。公式の出題範囲やシラバスは、IPA:基本情報技術者試験 から確認できます。
科目Aでどう出る?
科目Aでは、5つの処理を並べ替える問題や、各ステージの役割を問う問題に注意します。
まずは、次の順番を基準にします。
IF
命令フェッチ
↓
ID
命令デコード・レジスタ読出し
↓
EX
実行・アドレス生成
↓
MEM
メモリアクセス
↓
WB
書戻し
並べ替えは前後関係で切る
順番を忘れた場合は、処理の依存関係から復元できます。
命令を取っていない
→ 解読できない
命令を解読していない
→ 何を実行するか分からない
アドレスを求めていない
→ その場所へメモリアクセスできない
結果が出ていない
→ 書戻しできない
したがって、
フェッチ → デコード → 実行 → メモリアクセス → 書戻し
という流れになります。
EXとMEMを混同しない
特に引っかかりやすいのが、ロード・ストア命令です。
EX
→ アクセス先のアドレスを計算
MEM
→ そのアドレスのメモリを読み書き
アドレス生成が先、実際のメモリアクセスが後です。
IFとMEMを混同しない
どちらもメモリから何かを読むイメージがあるため、混同しやすいです。
IF
→ 命令を取り出す
MEM
→ 命令が扱うデータにアクセスする
「命令なのか、データなのか」で切り分けます。
どんな場面で使う?
パイプラインは、CPUが命令処理の各段階を重ね合わせて実行し、単位時間当たりに処理できる命令数を増やすために使われます。
例えば、1命令ずつ5工程をすべて終えてから次の命令を始めるのではなく、各工程をずらして進めます。
時刻1:命令A IF
時刻2:命令A ID / 命令B IF
時刻3:命令A EX / 命令B ID / 命令C IF
このように、複数の命令が異なるステージに同時に存在できます。
ただし実際には、命令同士の依存関係や分岐などによって、理想どおりに流せないことがあります。
このような問題はパイプラインハザードと呼ばれます。
FE試験では、まず5段階の順番と役割を押さえ、その後に必要に応じてハザードや分岐による影響を学ぶと整理しやすいです。
よくある誤解・混同
命令フェッチとメモリアクセスは同じ?
同じではありません。
IF
→ 命令を取る
MEM
→ データを読み書きする
どちらも「メモリにアクセスする」と見えますが、何を扱っているかが違います。
EXでメモリを読み出す?
5段パイプラインの基本的な整理では、EXは演算やアドレス生成を行う段階です。
ロード命令なら、
EX
→ 読む場所を計算
MEM
→ その場所から読む
と切り分けます。
WBは主記憶への書込み?
基本的な5段パイプラインでWBは、レジスタへの書戻しを表します。
一方、ストア命令で主記憶へデータを書き込む処理はMEMで行います。
MEM
→ メモリへの書込み
WB
→ レジスタへの書戻し
「どこへ書くのか」を確認します。
5段パイプラインなら1命令が5倍速くなる?
そういう意味ではありません。
パイプラインの狙いは、1命令そのものの処理時間を単純に5分の1にすることではなく、複数命令を重ねて処理してスループットを高めることです。
1命令を極端に速くする
→ ではない
複数命令を流れ作業で処理する
→ パイプライン
CPUの命令実行サイクルと5段パイプラインは同じ?
関連は深いですが、学習上は分けて考えると整理しやすいです。
CPUの命令実行サイクルでは、命令を取り出して解読し、必要なデータを用意して実行するという基本の流れを扱います。
5段パイプラインでは、その流れをIF・ID・EX・MEM・WBという段階に分けて並列的に進める構成として捉えます。
まとめ(試験直前用)
- 5段パイプラインの基本順序は IF → ID → EX → MEM → WB
- IFは命令フェッチ、IDは命令デコードとレジスタ読出し
- EXは演算・アドレス生成、MEMはデータメモリアクセス、WBはレジスタへの書戻し
- ロード・ストアでは EXでアドレス生成 → MEMで実際にアクセス
- IFは命令、MEMはデータを扱うと切り分ける
- パイプラインは1命令を5倍速くするのではなく、複数命令を重ねてスループットを高める仕組み