基本情報技術者 2017年 春期 午前(科目A) 問19
問題文
仮想記憶方式のコンピュータにおいて、実記憶に割り当てられるページ数は3とし、追い出すページを選ぶアルゴリズムは、FIFOとLRUの二つを考える。あるタスクのページのアクセス順序が
1, 3, 2, 1, 4, 5, 2, 3, 4, 5
のとき、ページを置き換える回数の組合せとして、適切なものはどれか。

選択肢
ア:
イ:(正解)
ウ:
エ:
🔒 解説は解答すると表示されます
ページ置換アルゴリズムの比較【午前解説】
正解の理由
正解は イ(FIFO = 3 回、LRU = 6 回)です。実フレーム数を 3 として、それぞれのアルゴリズムで参照列を順に処理すると、FIFO では実際にページを追い出す(置き換える)回数が 3 回、LRU では 6 回になります。両アルゴリズムを具体的にシミュレーションして、追い出しが発生したタイミングを数えればこの数値になるため、選択肢イが正しいと判断できます。
解法ステップ
- 問題の定義を確認:実記憶フレーム数 = 3、参照列 = 1,3,2,1,4,5,2,3,4,5、置換回数は「追い出し(eviction)の回数」か確認。
- FIFO のシミュレーション:挿入順をキューとして管理し、参照ごとにフレーム内かを確認。満杯でミスならキューの先頭を追い出して新しいページを入れ、追い出し回数をカウント。
- LRU のシミュレーション:最近参照された順(MRU)を更新して管理し、満杯でミスなら最も古く参照された(LRU)ページを追い出して新しいページを入れ、追い出し回数をカウント。
- 両者の追い出し回数を比較して選択肢と照合する。
(シミュレーションの要点)
- FIFO は挿入順 [1,3,2] が中盤以降に 1→3→2 の順で追い出され、追い出しは合計 3 回。
- LRU は参照更新により最終的に頻繁に「もっとも古い」ページが入れ替わり続け、追い出しは合計 6 回。
選択肢別の誤答解説
- ア:FIFO = 3、LRU = 2
- FIFO の 3 は正しいが、LRU = 2 は過小評価です。中盤以降のミス連続で少なくとも 6 回の追い出しが発生するため誤りです。
- イ:FIFO = 3、LRU = 6(正解)
- FIFO は挿入順管理により追い出し 3 回、LRU は参照で再配置するため追い出し 6 回になります。
- ウ:FIFO = 4、LRU = 3
- FIFO の 4 はシミュレーションと合わず過大評価、LRU の 3 は過小評価です。どちらも参照の順序変化を正確に追えていません。
- エ:FIFO = 5、LRU = 4
- 両方とも過大評価/過小評価が混在しており、実際の逐次シミュレーション結果とは一致しません。特に FIFO の 5 は明らかに多すぎます。
よくある誤解
- 「ページフォールト=置き換え回数」と考える誤り:空フレームに初回ロードされるときのフォールトは置き換え(追い出し)には含めない問題設定が多く、問題文の意図を確認する必要があります。
- 「ヒットで順序が変わるのは FIFO だ」と勘違いする人がいる:ヒット時に参照順を更新するのは LRU であり、FIFO はヒットでも挿入順を変えません。
- 参照履歴を追わずに直感で判断する:短い列でも挿入順や最終参照順が複雑に絡むため、必ずステップごとに状態を追うことが必要です。
補足コラム
- Belady の異常(Belady's anomaly):FIFO はフレーム数を増やしてもページフォールトが増える場合があり得る(Belady の異常)。一方、LRU はスタック制約を満たすためそのような異常は起きません。本問はフレーム数固定の比較問題であり、異常の有無を尋ねるものではありませんが、アルゴリズムの性質を理解する上で重要な概念です。
- 「置換回数」に関しては、問題によっては初期ロードもカウントする場合があるため、設問文や採点基準に合わせて扱いを確認してください。本問は「追い出すページを選ぶアルゴリズム」であるため、実質的に追い出しの回数を数えます。
FAQ
Q1. 「ページフォールト」と「ページ置換(追い出し)」は同じですか?
A1. 完全に同じではありません。ページフォールトは参照したページがメモリ内にない状態で発生しますが、空きフレームがある場合は単純にロードして置換(追い出し)は発生しません。問題が「置き換える回数」を求めている場合は、追い出し(eviction)の回数を数えます。
A1. 完全に同じではありません。ページフォールトは参照したページがメモリ内にない状態で発生しますが、空きフレームがある場合は単純にロードして置換(追い出し)は発生しません。問題が「置き換える回数」を求めている場合は、追い出し(eviction)の回数を数えます。
Q2. LRU の実装が難しいと言われますが、試験ではどう扱うべきですか?
A2. 理論的な挙動(直近参照を最優先で残す)を理解して逐次シミュレーションできれば十分です。実装の詳細(スタックやカウンタ)は出題範囲外のことが多いです。
A2. 理論的な挙動(直近参照を最優先で残す)を理解して逐次シミュレーションできれば十分です。実装の詳細(スタックやカウンタ)は出題範囲外のことが多いです。
Q3. FIFO と LRU、どちらが常に優れている?
A3. 一般的には LRU が実務的な局面でヒット率が良いことが多いですが、参照パターン次第で FIFO が有利になる場合や Belady の異常が発生する場合もあります。設問では具体的な参照列で比較してください。
A3. 一般的には LRU が実務的な局面でヒット率が良いことが多いですが、参照パターン次第で FIFO が有利になる場合や Belady の異常が発生する場合もあります。設問では具体的な参照列で比較してください。
関連キーワード: ページ置換、FIFO、LRU、仮想記憶、ページフォールト、Beladyの異常、キャッシュ管理、メモリ管理

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

