【ページフォールト】

ページフォールト とは?

最終更新:
💡 本棚にない本を図書館の倉庫から取り寄せるようなメモリの仕組み

プログラムがアクセスした仮想メモリのページが、そのままでは使えない(物理メモリに対応付けられていない等)ときにCPUが発生させる例外。OSが対応付けやディスクからの読み込みを行えば処理を続行し、不正なアクセスならプログラムを止める。

📌 このページのポイント
ページフォールト:ディスクから読む場合 プロセス ページ参照 ページテーブル 今は対応付けがない CPUが例外を通知 OSの例外処理 必要なページを用意 ディスク ページファイルなど 読み出す 物理メモリ ページ1 読み込む 転送 対応付けを更新して、処理を再開 ディスクを読まない場合もある
割り当て済みの有効なページを読み込む例。ディスク不要のソフトフォールトもあり、不正なアクセスは処理を続行できない。
ひよこ ひよこ
ページフォールトって何なの?エラーが起きているの?
ペンギン先生 ペンギン先生
エラーというよりは「ちょっと待って、必要なデータがメモリにないから取りに行くね」という合図だよ。図書館で読みたい本が棚になくて、倉庫から取り寄せてもらうような感じだね。
ひよこ ひよこ
どうしてメモリにデータがないことがあるの?
ペンギン先生 ペンギン先生
仮想メモリの仕組みで、物理メモリに乗り切らないデータはディスク(スワップ領域)に退避されることがあるんだ。ほかにも、確保しただけでまだ一度も使っていないページは、最初に触った時点で初めて物理メモリが割り当てられるよ。プログラムは仮想アドレスでアクセスするから、こうした状態はCPUがアクセスした時点で見つかるんだ。
ひよこ ひよこ
ページフォールトが起きるとどうなるの?
ペンギン先生 ペンギン先生
CPUが例外を起こしてOSのページフォールト処理に切り替わるんだ。ディスクから読む必要があるページなら物理メモリに読み込み、そうでなければ空きページを割り当てたり、メモリ上にある別のページを対応付けたりする。終わったらプログラムは何事もなかったかのように実行を再開するよ。ただし、ディスクから読むタイプはメモリだけで済む場合よりずっと時間がかかるんだ。
ひよこ ひよこ
頻繁に起きると何が問題なの?
ペンギン先生 ペンギン先生
物理メモリが足りず、ディスクとの間でページの入れ替えが止まらなくなる状態をスラッシングと呼ぶんだ。ページの読み書きを待つ時間ばかり増えて、本来の計算がほとんど進まなくなるよ。HDDのパソコンなら、異常に遅くなってディスクのアクセスが続きっぱなしになる、あの状態だね。
ひよこ ひよこ
ページフォールトを減らす方法ってあるの?
ペンギン先生 ペンギン先生
ディスク読み込みを伴うものを減らすなら、一番シンプルなのは物理メモリを増やすことだね。あとはページ置換アルゴリズムの選択も重要で、LRUのように「最近使っていないページ」から追い出す方式だと、頻繁に使うページがメモリに残りやすく、アクセスの傾向によってはフォールトを減らせるよ。プログラム側でもデータのアクセスパターンを局所性が高くなるように工夫すると効果的なんだ。
もっと詳しく知りたい人へ

ページフォールトの回数が多いと、必ずパソコンの調子が悪いということ?

そうとは限らないよ。初めて使うページへの割り当てや、すでにメモリ上にあるページの対応付けなど、ディスクを読まずに済むソフトフォールト(マイナーフォールト)は普段から起きている。性能の目安にするなら、ディスクから読むハードフォールト(メジャーフォールト)が増えていないかを分けて見よう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ページフォールト」って出てきたら「使おうとしたメモリのページがすぐ使えず、OSが用意しに行く合図」と思えればだいたいOK!
📖 おまけ:英語の意味
「Page Fault」 = ページ障害・ページ不在例外
💬 faultは「障害・欠陥」という意味だよ。ここではエラーそのものより、CPUが「このページはこのままでは使えない」とOSに知らせる例外を指すんだ

参考資料

← 用語集にもどる