クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

ページ置換アルゴリズム

このレッスンのあとで: FIFOとLRUのページ置換を、手順どおりにシミュレーションすることができる。

55分のレッスンコマンド2件毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

ページ置換アルゴリズムとは

ページ置換アルゴリズムとは、物理メモリのフレームがすべて埋まったとき、どのページを追い出して新しいページを入れるかを決める決まりです。選び方がよいと、遅いディスクの読み込みが減って、プログラムが速く動きます。

図書館で、机に本を3冊しか置けない場面を考えてください。新しい本を置くには、1冊を書棚に戻します。どれを戻すかで、書棚への往復の回数が変わります。

このレッスンのゴール

メモ

FIFOとLRUのページ置換を、手順どおりにシミュレーションすることができる。

キーワード

ことばいみれい
ページフォールト使うページが、今メモリにないこと
ヒット使うページが、すでにメモリにあること
参照列プログラムがページを使った順の記録1, 2, 3, 1
FIFO最も古く入ったページを追い出す方法
LRU最も長く使われていないページを追い出す方法
スワップ領域追い出したページを置くディスクの場所

学生が入力するセルは、このプレビューでは空白です。

参照列で何回フォールトするか数える

プログラムがページを使った順番を、参照列といいます。使うたびに、そのページがフレームにあるかを調べます。あればヒットで、なければページフォールトです。

フォールトのたびに、遅いディスクを読みます。だから、置換の方法はフォールトの回数で比べます。ここでは、フレームは3つです。

FIFOは古く入ったものから追い出す

FIFOは、First In, First Out の略で、先に入ったものを先に出す方法です。いちばん長くメモリにいるページを追い出します。使われたかどうかは見ません。

参照列 1, 2, 3, 1, 4, 1 を見ます。フレームの中身は、古い順に左から並べます。

例: FIFOで1、2、3、1、4、1

参照結果フレームの中身(古い順)追い出したページ
1フォールト1-
2フォールト1, 2-
3フォールト1, 2, 3-
1ヒット1, 2, 3-
4フォールト2, 3, 41
1フォールト3, 4, 12

学生が入力するセルは、このプレビューでは空白です。

LRUは最近使っていないものから追い出す

LRUは、Least Recently Used の略です。最も長く使われていないページを追い出します。最近使ったページは、またすぐ使われやすい、という考えです。

同じ参照列で動かします。使うたびに、そのページを「最近」の側へ移します。中身は、使ったのが古い順です。

例: LRUで1、2、3、1、4、1

参照結果フレームの中身(使った古い順)追い出したページ
1フォールト1-
2フォールト1, 2-
3フォールト1, 2, 3-
1ヒット2, 3, 1-
4フォールト3, 1, 42
1ヒット3, 4, 1-

学生が入力するセルは、このプレビューでは空白です。

フレームを増やしても減らないことがある

長めの参照列 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 で、フレームを3つから4つに増やします。

FIFOでは、フォールトが9回から10回に増えます。メモリを増やしたのに悪くなる、この現象をベレイディの異常と呼びます。LRUでは、10回から8回に減りました。

例: フォールトの回数

方法フレーム3つフレーム4つ
FIFO9回10回
LRU10回8回

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

「メモリを増やせば、ページフォールトは必ず減る」と考える人が多くいます。多くの場合は減ります。ただし、FIFOでは増えることがあります。方法とデータしだいなので、数えて確かめます。

Linuxで追い出し先を見る

追い出したページを置くディスクの場所がスワップ領域です。Linux は、今の一覧を /proc/swaps に出します。1行目は見出しで、領域がなければ、見出しだけが出ます。

ページフォールトの回数は、/proc/vmstat にあります。pgfault は全部の数、pgmajfault はディスクを読んだ数です。数は変わるので、項目名だけを取り出します。

スワップ一覧の見出しを出す

コマンド
head -n 1 /proc/swaps

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

フォールトの項目名を出す

コマンド
grep -E '^(pgfault|pgmajfault)' /proc/vmstat | cut -d' ' -f1

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

このラボとソースについて: 毎日使う Linux コマンドのラボ:エンジニアが暗記している30のコマンド

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。