ページ置換アルゴリズム(LRU・Clock)とは?メモリが満杯のときどのページを追い出すかを決める方

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

ページ置換アルゴリズムとは(全体像)

ページ置換アルゴリズムは、メモリがいっぱいになったとき、新しいページを入れる場所を空けるため、どのページを追い出すかを選ぶルールのこと。

身近にたとえると、机の上がいっぱいになったときに、どの本を本棚へ戻すかだ。古く置いた本から戻す(FIFO)、最近読んでいない本を戻す(LRU)、読みかけマークを見て戻す(Clock)、と、選び方にいくつか流派がある。

押さえるのは、「どれを追い出すかの基準」がアルゴリズムごとに違うこと。理想は「これから使わないものを追い出す」ことだが、未来は読めないので、近い判断をする工夫が生まれた。


詳しく:4つのアルゴリズムの違いだけ覚えれば戦える

ここが記事の心臓部。代表的な4つを比べましょう。

ページ置換アルゴリズム4つ

方法追い出すページ特徴
FIFO最初に入れた(古い)ページ単純。Beladyの異常あり
LRU最近いちばん使っていないページ理想に近いが実装が重い
Clock参照マークを見て選ぶLRUの軽い近似。実用的
OPTこれから先いちばん使わないページ理論上の最適。実装できない

FIFO(先入先出)は、最初に入れた古いページから追い出す方法。単純ですが、Beladyの異常という弱点があります。これは「メモリを増やしたのに、かえって性能が悪くなることがある」という不思議な現象で、FIFOだけに起こります。

LRU(最近最も使われていない)は、最近いちばん使っていないページを追い出す方法。直感的に良い選び方ですが、毎回「いつ使ったか」を記録するため実装が重いです。

そこで実用で使われるのがClock(二次機会)です。各ページに参照マーク(使ったら1)を持たせ、時計の針のように順に見て、マークが1なら0に戻して見逃し、0なら追い出します。LRUに近い性能を、軽い実装で実現できます。

ここで取り違えやすいのがFIFOとLRUです。FIFOは「入れた時刻(到着順)」、LRUは「最後に使った時刻」で選びます。基準が違うので、別物です。

最後にOPT(最適)。これは「これから先いちばん長く使わないページ」を追い出す、理論上いちばん良い方法ですが、未来の使われ方を知っている前提なので実装できません。ほかの方法の良し悪しを測る基準として使います。

わかりやすく言い換えると

要するに、机の本のたとえで覚えるとラクです。

FIFO・LRU … FIFOは古く置いた本から戻す(到着順)、LRUは最近読んでいない本を戻す(最後に使った順)

Clock … 読みかけマークを見て戻す(LRUを軽く実装)

OPT … これから読まない本を戻す(理想だが未来を知る前提で実装できない)

つまり、「FIFOは到着順・LRUは最近使った順」「ClockはLRUの軽い近似」、この2点が試験の急所です。


試験のツボ

🔴 一番出る:FIFOとLRUの違い

①FIFO = 最初に入れた(到着順が古い)ページを追い出す

②LRU = 最後に使った時刻がいちばん古いページを追い出す

🔴 次に出る:Beladyの異常とClock

①Beladyの異常 = FIFOでメモリを増やすと性能が悪化することがある(LRU・Clock・OPTにはない)

②Clock = 参照マークで判定するLRUの軽い近似

🟡 押さえると安定:OPT

①OPT = これから先いちばん使わないページを追い出す理論上の最適

②未来を知る前提なので実装できない(評価の基準に使う)


よくある間違い

「FIFOとLRUは同じ基準で選ぶ」→ ✗  FIFOは入れた時刻(到着順)、LRUは最後に使った時刻。基準が違う。

「OPT(最適アルゴリズム)は実際に実装できる」→ ✗  OPTは未来の参照を知っている前提。実用システムには実装できない理論モデル。

「Beladyの異常はLRUでも起こる」→ ✗  Beladyの異常(メモリ増で性能悪化)はFIFOの弱点。LRU・Clock・OPTには起こらない。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(FIFOとLRU)

📝 オリジナル問題 1 FIFOとLRUの違い

FIFOとLRUに関する次の記述のうち、正しいものはどれか。

  1. FIFOは最後に使った時刻で選び、LRUは最初に入れた到着順で選ぶ方式とされているのだ
  2. FIFOは最初に入れたページを追い出し、LRUは最近いちばん使っていないページを追い出す
  3. FIFOもLRUもまったく同じ基準で選び、追い出すページに違いはないものとされているのだ
  4. FIFOもLRUも紙に印刷する手順のことで、メモリ管理とは無関係なものとされているものだ
テクマスター
テクマスター 解答・解説

解答は 2 ですよ。

FIFOは最初に入れた古いページを追い出し、LRUは最近いちばん使っていないページを追い出しますね。FIFOは到着順、LRUは最後に使った順です。

選択肢1のFIFOとLRUが逆、選択肢3の「同じ基準」、選択肢4の「印刷する手順」はどれも誤りですよ。

選択肢判定理由
1FIFOとLRUの基準が逆
2FIFOは到着順・LRUは使った順
3選ぶ基準が違う
4印刷する手順ではない

オリジナル問題2(Beladyの異常)

📝 オリジナル問題 2 Beladyの異常

Beladyの異常に関する次の記述のうち、正しいものはどれか。

  1. Beladyの異常はLRUの弱点で、メモリを減らすと必ず性能が上がる現象とされているものだ
  2. Beladyの異常はすべてのアルゴリズムで必ず起こり、避ける方法はないものとされているのだ
  3. Beladyの異常はFIFOの弱点で、メモリを増やしたのに性能が悪化することがある現象だ
  4. Beladyの異常は紙に印刷する装置の故障のことで、メモリとは無関係なものとされている
テクマスター
テクマスター 解答・解説

解答は 3 ですよ。

Beladyの異常はFIFOの弱点で、メモリを増やしたのに性能が悪化することがある現象ですね。LRU・Clock・OPTには起こりません。

選択肢1の「LRUの弱点」、選択肢2の「すべてで起こる」、選択肢4の「印刷する装置の故障」はどれも誤りですよ。

選択肢判定理由
1FIFOの弱点・メモリ増で悪化
2LRUなどでは起こらない
3FIFOでメモリ増でも悪化しうる
4印刷装置の故障ではない

オリジナル問題3(ClockとOPT)

📝 オリジナル問題 3 ClockとOPT

ClockとOPTに関する次の記述のうち、正しいものはどれか。

  1. Clockは参照マークで選ぶLRUの軽い近似で、OPTは未来を知る前提で実装できない最適だ
  2. ClockもOPTもまったく同じ方法で、参照マークも未来予知も使わないものとされているのだ
  3. Clockは未来を完全に知って選び、OPTは参照マークで選ぶ実用的な方法とされているものだ
  4. ClockもOPTも紙に印刷する手順のことで、メモリ管理とは無関係なものとされているものだ
テクマスター
テクマスター 解答・解説

解答は 1 ですよ。

Clockは参照マークで選ぶLRUの軽い近似、OPTは未来を知る前提で実装できない最適ですね。OPTは評価の基準に使います。

選択肢2の「同じ方法」、選択肢3のClockとOPTが逆、選択肢4の「印刷する手順」はどれも誤りですよ。

選択肢判定理由
1ClockはLRU近似・OPTは実装不可
2参照マークと未来予知で別物
3ClockとOPTの説明が逆
4印刷する手順ではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る