Hayami Kaito Web
← Apps

ページ置換アルゴリズム

仮想記憶で、物理メモリが満杯のときにどのページを追い出すかを決める FIFO・LRU・Clock・LFU・OPT を、同じ参照列で 1 参照ずつ見せます。ページフォルトの数を比べ、フレームを増やすと逆に増えるベラディの異常も確かめられます。

例

OS の教科書でよく使われる 20 個の参照列です。3 フレームで FIFO は 15 回、LRU は 12 回、OPT は 9 回のページフォルトになります。

フレームの数(物理メモリに置けるページの数)

最後に使ってから一番時間がたったページを追い出します。「最近使ったものはまた使う」という局所性を活かします。

20 / 20

時刻 19: ページ 1 を参照 → 枠 1 にあるので当たり(ヒット)

時刻012345678910111213141516171819
参照
枠 177722224440001111111
枠 20000000033333300000
枠 3111333222222222777
結果FFFF○F○FFFF○○F○F○F○○
追い出し712304032

ページフォルト(F)で読み込んだページ当たり(○)参照の数字を押すと、その時刻まで進めます

今の枠の状態

枠ページ最後に使った時刻
1119
2018
3717

ここまでの結果

ページフォルト
12
当たり
8
ヒット率
40%

方式の比較

同じ参照列で、5 つの方式のページフォルトの数を比べます。表は 3 フレームのとき、グラフはフレームの数を 1〜7 に変えたときです。

方式ページフォルトOPT との差
FIFO15+6
LRU12+3
Clock14+5
LFU13+4
OPT(最適)9—
051015201234567フレームの数
FIFOLRUClockLFUOPT(最適)

この参照列では、フレームを増やしてページフォルトが増える「ベラディの異常」は起きていません。

使い方

  • 例を選ぶか、0〜9 のページ番号を並べた参照列を入力します。ランダムな参照列も作れます。
  • フレームの数と置換アルゴリズムを選び、再生や ◀ ▶ で 1 参照ずつ進めます。キーボードの ← → でも動かせ、Home / End で最初と最後に移ります。
  • 表の列が時刻、行がフレームの枠です。赤はページフォルトで読み込んだページ、緑は当たりです。参照の数字を押すとその時刻まで進みます。
  • 下の「方式の比較」で、5 つの方式のページフォルトの数と、フレームの数を変えたときの変化を比べられます。

仮想記憶とページ置換

仮想記憶では、プログラムが使うメモリをページという決まった大きさの単位に分け、物理メモリ(フレーム)にはその一部だけを置きます。物理メモリにないページを参照するとページフォルトが起き、OS がディスクからそのページを読み込みます。フレームが満杯なら、どれか 1 つのページを追い出さなければなりません。どのページを追い出すかを決めるのがページ置換アルゴリズムです。

ディスクの読み込みはメモリの読み書きより何万倍も遅いので、ページフォルトの回数がそのまま性能に響きます。プログラムは「最近使ったデータをまた使う」(時間的局所性)傾向があるので、LRU やその近似の Clock がよく使われます。本物の LRU は参照のたびに時刻を記録する必要があって重いため、実際の OS ではハードウェアが付ける参照ビットを使う Clock の仲間が主流です。

ベラディの異常

ふつうはフレームを増やせばページフォルトは減りますが、FIFO では増えることがあります(1969 年に L. A. Belady らが報告)。LRU や OPT では、n フレームのときに置かれているページが、n + 1 フレームのときにも必ず置かれている(スタックアルゴリズム)ので、この異常は起きません。「ベラディの異常」の例で確かめられます。