ページフォールト
読み:ページフォールト
外語:PF: page fault

 仮想記憶機構を持っているマイクロプロセッサーが発生させる例外の一つ。
目次

概要
 仮想記憶において、物理メモリーにデータがマッピングされていない状態でアクセスが行なわれるとこの例外が発生する。
 この例外が発生したときは、ハードディスクドライブなどに用意されたページ ファイルなどから物理メモリーにデータを転送する作業(ページインページアウト)が必要となる。
 原因が不正なメモリーアクセスの場合もあるが、そのような場合は不正なアクセスをしたプロセスは停止させられる。

特徴

発生原因
 メモリーにアクセスしに行く度、アクセス先が物理メモリーに正しくマッピングされているか確認していたのでは、まともなプログラムにならない。そのため、マッピングの管理はマイクロプロセッサーに任せる。
 マイクロプロセッサーは、必要に応じて例外を送出する。その例外処理としてページインとページアウトの処理を行なうことで、プログラムが簡略化できる。

処理失敗時
 何らかの理由でページインに失敗したとき、必要なメモリー領域へのアクセスが不能になるため、オペレーティングシステム(OS)は深刻な事態に陥る。
 処理すべきデータが物理メモリーに展開できない以上、処理の続行は不可能である。このため、そのような事態が発生したときはプロセスは即座に停止されるのが普通である。
 なお、最悪の場合はOSにも被害が及ぶことがある。

x86

PTE
 プログラムから見えるアドレスは仮想アドレスで、これを実際の物理アドレスに変換する機能が仮想記憶である。
 x86では(x86に限らず他でも同様だが)、この仮想アドレスと物理アドレスはページテーブルとする変換表に記録される。仮想アドレスに対する物理アドレスがない場合は例外が発生し、例外ハンドラーで対応付ける物理アドレスを通知することで、相互の対応付けがなされる。
 この時、仮想アドレスごとに可能なアクセス種類(読み出し、書き込み、実行)などが選択できるようになっていることがあり、不正なアクセスを実施しようとした場合は、例外ハンドラーは対応付けをせず、エラーとして処理する。

NXビット/XDビット
 NXビット(Intel名XDビット)機能を用い、実行禁止領域のコードを実行しようとした場合も、ページフォールトが発生する。
 NX/XDビットに対応する前のx86は、アクセス種類は読み出し、書き込みの2種類しかなかった。読み出し可能な領域は、実行も可能だった。
 NX/XDビット対応後は、実行可能な領域とそうでない領域を明確化し、不正なコードの実行を防止するようになった。

割り込み番号
 i386以降のx86系マイクロプロセッサーでは割り込み0Ehで表わされる。

Windows
 Windowsで発生したページフォールトは「ページ違反」と呼ばれており、悪名高い。
 特にWindows 9x系列は16ビットコードが中途半端に残り、これがメモリー管理の足を引っ張っていたため、ページフォールト→ページインの処理の際、頻繁に何らかの問題が発生した。
 タスクの切り替えなどメモリーのアクセス範囲が大幅に変わるような状況下になると、何かとページ違反ダイアログが出たり、最悪の場合は青画面が出てリセットするしかなくなることが多発してしまった。
 Windows NT系列では最初から32ビットで書かれているためか、このような問題はあまり発生しない。

再検索