情報処理試験を勉強していると、「FIFOって何?LIFOやLRUとどう違うの?」と混乱しがちです。
対象試験と出題頻度
FIFOは、基本情報技術者・応用情報技術者で出題されるテーマです。
データ構造の「スタック(LIFO)」との比較問題や、仮想記憶(ページング方式)のページ置換えアルゴリズムとして定番化しています。
詳細をクリックして確認
基本情報技術者
応用情報技術者
★★★☆☆
ランクB(標準)覚えておくと有利
FIFO(First In First Out)の定義
FIFO(First In First Out)とは、一言で言うと
「先に入れたデータを先に取り出す方式(先入れ先出し)」
のことです。
イメージとしては、「ラーメン屋の行列」です。
先に並んだ人から順に入店しますよね。途中で割り込みはできません。FIFOもまったく同じで、最初に格納されたデータが最初に処理されます。
📊 FIFOの基本情報
| 項目 | 内容 |
|---|---|
| 正式名称 | First In First Out(先入れ先出し) |
| 対応するデータ構造 | キュー(Queue) |
| 対になる概念 | LIFO(Last In First Out/後入れ先出し)=スタック |
| 代表的な利用場面 | キュー構造、ページ置換えアルゴリズム、印刷待ち行列 |
解説
コンピュータの内部では、データを一時的に蓄えておき、順番に処理する場面が大量に発生します。印刷ジョブの待ち行列、OSのプロセス管理、ネットワークのパケット処理など、「先に来たものから順に片付ける」ルールが自然に求められる状況は多いです。
この「先に来た順」を実現するデータ構造がキュー(Queue)であり、その動作原理がFIFOです。
キューの操作:エンキューとデキュー
キューに対する操作は2つだけです。データを末尾に追加する「エンキュー(Enqueue)」と、先頭から取り出す「デキュー(Dequeue)」です。
キュー(FIFO)の動作イメージ
エンキュー →
→ デキュー
▲ 末尾(左)から入れて、先頭(右側のA)から取り出す。A → B → C の順に出力される
FIFOとLIFOの違い
FIFOと対になる概念がLIFO(Last In First Out)です。
LIFOは「後に入れたデータを先に取り出す」方式で、対応するデータ構造はスタック(Stack)です。
| 方式 | 意味 | データ構造 | 日常の例え |
|---|---|---|---|
| FIFO | 先入れ先出し | キュー(Queue) | 行列(先に並んだ人から入店) |
| LIFO | 後入れ先出し | スタック(Stack) | 積まれた本(一番上から取る) |
ページ置換えアルゴリズムとしてのFIFO
FIFOはデータ構造だけでなく、仮想記憶のページ置換えアルゴリズムとしても登場します。主記憶のページ枠が満杯になったとき、「最も古くページインされたページを追い出す」のがFIFO方式です。
他の代表的なアルゴリズムとの違いを整理しておくと理解が深まります。
| アルゴリズム | 追い出し対象 | 見分けキーワード |
|---|---|---|
| FIFO | 最も古くページインされたページ | 先入れ先出し、最古 |
| LIFO | 最も新しくページインされたページ | 後入れ先出し、最新 |
| LRU | 最も長い時間「参照されていない」ページ | 最後の参照時刻が最古 |
| LFU | 参照回数が最も少ないページ | 使用頻度が最低 |
ここだけは確実に押さえてください。
FIFOは「ページインした時刻」だけを見ます。その後に何回参照されたかは一切考慮しません。一方、LRUは「最後に参照された時刻」を基準にします。この違いが問題を解くカギになります。
図解:FIFOによるページ置換えの流れ
ページ枠が3つ、参照順が「1→4→2→4→1→3」の場合の動きを追ってみましょう。
FIFO ページ置換えシミュレーション(ページ枠=3)
| ステップ | 参照ページ | 枠1 | 枠2 | 枠3 | 置換え |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 空 | 空 | ページイン |
| 2 | 4 | 1 | 4 | 空 | ページイン |
| 3 | 2 | 1 | 4 | 2 | ページイン |
| 4 | 4 | 1 | 4 | 2 | ヒット(置換なし) |
| 5 | 1 | 1 | 4 | 2 | ヒット(置換なし) |
| 6 | 3 | 3 | 4 | 2 | 1を追い出し→3をイン |
▲ ステップ6で枠が満杯のため、最も古くページインされた「1」が追い出される(ページ置換え回数=1回)
では、この用語が試験でどのように出題されるか見ていきましょう。
💡 FIFOの核心を3行で
・先に入れたデータを先に取り出す方式。対応するデータ構造はキュー(Queue)
・ページ置換えでは「ページインした時刻が最も古いページ」を追い出す
・LRUとの違いは「参照した時刻」を考慮するかしないか
試験ではこう出る!
FIFOは、FE・APの午前問題でデータ構造の問題とページ置換えの問題の両方で繰り返し出題されています。
出題パターンは大きく2つに分かれます。
📊 過去問での出題実績
| 試験回 | 出題内容 | 問われたポイント |
|---|---|---|
| FE H27春 午前 問5 |
キューに関する記述として最も適切なものを選ぶ問題 | ・「最初に格納されたデータが最初に取り出される」が正解 ・スタック(LIFO)、配列、リスト構造の説明がひっかけ |
| FE R2免除 問7 |
上記H27春 問5と同一構成の問題(流用) | ・FEでは同じ問題が繰り返し出る典型例 ・選択肢の文言もほぼ同一 |
| FE H29春 午前 問19 |
FIFOとLRUのページ置換え回数の組合せを求める問題 | ・ページ枠3で参照順を追って置換え回数を数える ・FIFOは3回、LRUは6回 |
| AP R5春 午前 問17 |
FIFO方式で仮想ページ参照列を処理した後の実記憶の状態を問う問題 | ・ステップごとにページ枠の状態を追えるかが鍵 ・「ヒット時はページインした時刻を更新しない」点に注意 |
📝 IPA試験での出題パターン
パターン1:「キュー(FIFO)の特徴を選べ」
データ構造の知識を問う形式。選択肢にスタック(LIFO)の説明「最後に格納されたデータが最初に取り出される」が紛れ込む。キーワードは「最初に格納」「最初に取り出す」。
パターン2:「ページ置換え回数を求めよ」
ページ参照列とページ枠数が与えられ、FIFOやLRUで追い出しが何回発生するかを数える計算問題。FIFOの場合は「ページインした順番」だけを追えば解ける。ヒットしてもページインの順序は変わらない、という点がひっかけポイント。
試験ではここまででOKです。FIFOの内部実装(リングバッファなど)まで問われることはないので、深追いは不要です。
【確認テスト】理解度チェック
ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。
Q. 仮想記憶のページ置換えで、主記憶に最も古くから存在するページを追い出すアルゴリズムはどれか。
- A. 参照されていない時間が最も長いページを追い出す方式であり、ページごとの最終参照時刻を管理する必要がある。
- B. 参照回数が最も少ないページを追い出す方式であり、ページごとの参照カウンタを管理する必要がある。
- C. ページインしてからの経過時間が最も長いページを追い出す方式であり、ページインした順序だけを管理すればよい。
正解と解説を見る
正解:C
解説:
FIFO(First In First Out)は、ページインした時刻が最も古いページを置換え対象とするアルゴリズムです。参照されたかどうかは判断基準に含まれず、ページインした順序だけで追い出しが決まります。
選択肢AはLRU(Least Recently Used)の説明です。LRUは「最後に参照された時刻」を基準にするため、ページごとに最終参照時刻を記録する必要があります。選択肢BはLFU(Least Frequently Used)の説明です。LFUは参照回数を基準にするため、ページごとのカウンタが必要になります。
よくある質問(FAQ)
Q. FIFOはページ置換え以外にどこで使われますか?
OS内部のプロセススケジューリング(到着順方式)、プリンタの印刷待ち行列(スプール)、ネットワーク機器のパケットバッファなど幅広い場面で使われています。実務でもメッセージキュー(Amazon SQSやRabbitMQなど)の基本動作はFIFOです。
Q. FIFOとLRUでは、どちらの方がページフォールトが少ないですか?
一般に、LRUの方がページフォールトが少なくなる傾向があります。LRUは「最近使われたページは今後も使われやすい」という局所参照性(Locality of Reference)を活かしているためです。FIFOは参照実績を無視するため、直前に何度も参照されたページであっても、ページインが古ければ追い出してしまいます。
Q. 「FILO」という表記を見かけますが、FIFOとは違うものですか?
FILO(First In Last Out)はLIFO(Last In First Out)と同じ意味で、スタックの動作を表す別表記です。FIFOとは逆の方式なので混同しないよう注意してください。同様に、LILO(Last In Last Out)という表記はFIFOと同義です。IPA試験ではFIFO/LIFOの表記が使われるのが通例です。
Q. 会計用語の「FIFO(先入先出法)」と同じ意味ですか?
考え方の根底は同じです。会計における先入先出法は「先に仕入れた在庫から先に払い出す」という棚卸資産の評価方法です。IT分野のFIFOは「先に入れたデータから先に取り出す」なので、順序の原則は共通しています。ただし、IPA試験で会計寄りの知識が問われることはありません。