基本情報技術者 2011年 春期 午前(科目A) 問21
問題文
LRUアルゴリズムで、ページ置換えの判断基準に用いられる項目はどれか。
選択肢
ア:最後に参照した時刻(正解)
イ:最初に参照した時刻
ウ:単位時間当たりの参照頻度
エ:累積の参照回数
🔒 解説は解答すると表示されます
LRUページ置換アルゴリズム【午前解説】
正解の理由
正解は ア(最後に参照した時刻)です。LRUは直近の参照履歴に基づき、最も長く参照されていないページを置換します。言い換えれば「最後に使われた日時」が古いページほど置換候補として優先されます。
他の選択肢は「頻度」や「最初の参照」という別の基準であり、LRUの定義と一致しません。
他の選択肢は「頻度」や「最初の参照」という別の基準であり、LRUの定義と一致しません。
解法ステップ
- 問題文からキーワードを抽出:「LRU」「ページ置換」「判断基準」→ 最近性を問う問題と認識。
- 各選択肢を「最近性」「頻度」「初回参照」に分類する。
- LRUは「最近性(最後に参照した時刻)」を使うアルゴリズムと即断する。
- 正答として ア を選択する。試験ではキーワード一致が最も確実です。
選択肢別の誤答解説
- ア:正解。最後に参照した時刻(または直近の参照履歴)で最も古いページを置換するのがLRUの本質です。
- イ:最初に参照した時刻はページの導入順や生存期間を示すだけで、最近性の評価には用いません。FIFO(先入れ先出し)では導入順が関係しますが、これは最初参照時刻と単純には一致しません。
- ウ:単位時間当たりの参照頻度は「最近の頻度」を測る指標で、LFU(Least Frequently Used)や頻度ベースの手法に関係します。LRUは頻度を直接使いません。
- エ:累積の参照回数もLFU的な基準であり、長期的なアクセス回数が少ないページを置換する方針です。LRUとは評価軸が異なります。
よくある誤解
- 「参照回数が少ない=LRUの置換対象」と誤認する:参照回数(累積や単位時間当たりの頻度)はLFUや頻度ベースの手法の基準です。
- 「最初に参照した時刻が古い=LRU」と混同する:初回参照時刻はそのページの生存期間を示すだけで、最近性評価には使わないことが多いです。
- 実装方式(タイムスタンプ vs リスト)を混同して、挙動の定義を誤る:実装は複数ありますが、判断基準は常に「最近使われたか否か」です。
補足コラム
LRUを実装する方法はいくつかあります。実用的には完全な時刻比較を行うのではなく、次のような近似やデータ構造で効率化します。
- 双方向連結リスト+ハッシュ(参照でノードを先頭へ移動)…O(1)で更新可能。
- タイムスタンプ(アクセス時に現在時刻を記録)…比較は簡単だが更新コストや精度に注意。
- 時計(Clock)アルゴリズム…LRUの近似で実装コストを下げる方法。
参考としてPythonのcollections.OrderedDictを使った簡易LRU例を示します。
from collections import OrderedDict
class LRUCache:
def __init__(self, capacity):
self.cache = OrderedDict()
self.cap = capacity
def access(self, key, value=None):
# アクセスがあれば最新に移動
if key in self.cache:
self.cache.move_to_end(key) # 末尾を最新とする
else:
if len(self.cache) >= self.cap:
self.cache.popitem(last=False) # 先頭(最も古い)を削除
self.cache[key] = value
FAQ
Q1: LRUとLFUはどちらが優れているですか?
A1: ワークロード次第です。短期的な局所性(直近の参照が重要な場合)はLRUが有利で、長期的に頻繁に参照されるものを残したいならLFUが有利です。どちらも一長一短です。
A1: ワークロード次第です。短期的な局所性(直近の参照が重要な場合)はLRUが有利で、長期的に頻繁に参照されるものを残したいならLFUが有利です。どちらも一長一短です。
Q2: LRUは最適な置換アルゴリズムですか?
A2: 未来の参照列が完全に分かっていればBeladyの最適解(OPT)が最適ですが、現実には未来は分かりません。LRUは実用的で有効なヒューリスティックです。
A2: 未来の参照列が完全に分かっていればBeladyの最適解(OPT)が最適ですが、現実には未来は分かりません。LRUは実用的で有効なヒューリスティックです。
Q3: 試験で「参照回数」や「最初の時刻」が選択肢にある場合の見分け方は?
A3: 「最近」「直近」「最後に」といった語があればLRU、「頻度」「回数」「累積」「平均」などならLFUや頻度ベース候補と判断します。
A3: 「最近」「直近」「最後に」といった語があればLRU、「頻度」「回数」「累積」「平均」などならLFUや頻度ベース候補と判断します。
関連キーワード: LRU、ページ置換、キャッシュ、仮想記憶、LFU、時計アルゴリズム、参照時刻、最近使用、置換アルゴリズム

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

