ページフォルトは机と本棚で考える
「机」と「本棚」で理解する仮想記憶
基本情報技術者試験で、多くの人が苦手にする分野の一つが仮想記憶(ページング)です。
「ページイン」「ページアウト」「ページフォルト」など、専門用語だけを暗記しようとすると混乱してしまいます。
そこで今回は、
- RAM=机の上
- SSD=本棚
という身近な例えを使って、ページフォルトの流れを図とともに分かりやすく解説します。
まずは全体の流れを見てみましょう

今回は仕組みを理解しやすくするために、ページテーブルをRAMの外に描いています。
実際のWindowsでは、ページテーブルもRAM上にあり、CPUはTLB(Translation Lookaside Buffer)という高速キャッシュを利用してアドレス変換を高速化しています。
また、RAMが不足すると、Windowsはpagefile.sysというページファイルを利用してページを退避します。
ただし、ページフォルトの基本的な流れは、今回の図で学んだ内容と同じです。
この図が今回の記事の全体像です。
プログラムを実行すると、必要なページだけをRAMへ読み込みます。
もし必要なページがRAMになければページフォルトが発生し、
- 必要ならページを追い出す(ページアウト)
- SSDから必要なページを読み込む(ページイン)
- ページテーブルを更新する
という流れで処理が行われます。
それでは、①〜④を順番に見ていきましょう。
① RAMとSSDの役割
コンピュータには、大きく分けて2つの保存場所があります。
- RAM(メモリ)
- 非常に高速
- 容量は小さい
- SSD
- 容量は大きい
- RAMより遅い
身近な例では、
- RAM=机の上
- SSD=本棚
と考えると理解しやすくなります。
机の上には今使う資料だけを置き、その他は本棚にしまっておくイメージです。
コンピュータも同じように、必要なページだけをRAMへ読み込んで処理しています。

② RAMにあるページを実行
CPUがページBを使いたいとします。
ページテーブルを見ると、
| ページ | RAM |
|---|---|
| A | 1 |
| B | 2 |
| C | 3 |
となっています。
ページBはRAMの2番にあるため、そのまま実行できます。
この場合はページフォルトは発生しません。

③ ページフォルト(RAMに空きがある場合)
今度はページDを使いたくなりました。
しかし、ページDはRAMにはありません。
これがページフォルトです。
RAMには全部で4つのスロットがあり、今はA・B・Cの3つが使われていて、1つだけ空きがあります。
そのため、今回はどのページも追い出す必要がなく、空いているスロットへSSDからページDを読み込むだけで済みます。
この操作をページインと呼びます。
読み込み後のページテーブルは、図の下側のようになります。

④ ページフォルト(RAMが満杯の場合)
今度はページEを使いたくなりました。
しかしRAMは
- A
- B
- C
でいっぱいです。
空きがないため、そのままではページEを読み込めません。
そこで今回は、例としてLRU(最近最も使われていないページを追い出す方式)を使います。
① ページアウト
まずページAをRAMから取り除き、SSDへ戻します。
この操作をページアウトといいます。
するとRAMの1番が空きます。
② ページイン
空いた1番へ、SSDからページEを読み込みます。
このとき、SSD上のページEは消えません。
SSDからRAMへはコピーされるだけだからです。
③ ページテーブル更新
最後にページテーブルを書き換えます。
| ページ | RAM |
|---|---|
| A | なし |
| B | 2 |
| C | 3 |
| D | なし |
| E | 1 |
実際のOSでは、BやCをわざわざ移動させることはほとんどありません。
空いた場所へ新しいページを入れるため、ページテーブルもAとEだけ更新すれば済みます。


用語を整理しよう
| 用語 | 意味 |
|---|---|
| ページフォルト | 必要なページがRAMにない状態 |
| ページイン | SSDからRAMへページを読み込む |
| ページアウト | RAMからSSDへページを戻す |
| ページテーブル | ページがRAMのどこにあるかを管理する表 |
ページ置換アルゴリズム
RAMがいっぱいになったら、どのページを追い出すかを決める必要があります。
代表的なのは次の3つです。
| 方式 | 英語(正式名称) | 和訳 | 考え方 |
|---|---|---|---|
| FIFO | First In, First Out | 先入れ先出し | 一番最初に入ったページを追い出す |
| LRU | Least Recently Used | 最も最近使われていない | 最も長い間使われていないページを追い出す |
| LFU | Least Frequently Used | 最も使用頻度が低い | 使用回数が最も少ないページを追い出す |
- FIFO
- First = 最初
- Out = 出る
- 「最初に入った人が出る」
- LRU
- Recent = 最近
- Least Recently Used = 「最近使っていない」
- 「しばらく触っていないものを捨てる」
- LFU
- Frequent = 頻繁な
- Least Frequently Used = 「あまり使われていない」
- 「人気のないものを捨てる」
特に Recent(最近) と Frequent(頻繁) の違いを意識させると混同しにくくなります。
- LRU = 「いつ使ったか」を見る(時間)
- LFU = 「何回使ったか」を見る(回数)
このように「時間」と「回数」を対比させて教えると、初学者でも違いを理解しやすくなります。
基本情報技術者試験では、この違いもよく出題されます。
まとめ
覚えておきたいポイントは次の4つです。
- RAMは机、SSDは本棚と考えるとイメージしやすい。
- RAMにページがあれば、そのまま実行できる。
- RAMになければページフォルトが発生し、ページインが行われる。
- RAMが満杯なら、ページアウトで空きを作ってからページインし、最後にページテーブルを更新する。
仮想記憶は難しく感じるかもしれませんが、「机と本棚」というイメージで考えると、ページフォルト・ページイン・ページアウトの関係が自然につながります。
用語を暗記するのではなく、「なぜその処理が必要なのか」を図と一緒に理解することが、基本情報技術者試験攻略への近道です。




ディスカッション
コメント一覧
まだ、コメントがありません