ページフォールト

読み:ページフォールト
外語:page fault
品詞:名詞

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

仮想記憶において、物理メモリにデータがマッピングされていない状態でアクセスが行なわれるとこの例外が発生する。

この例外が発生したときは、ハードディスクドライブなどに用意されたページングファイルなどから物理メモリにデータを転送する作業(ページインページアウト)が必要となる。

原因が不正なメモリアクセスの場合もあるが、そのような場合は不正なアクセスをしたプロセスは停止させられる。

例外発生の理由

メモリにアクセスしに行く度、アクセス先が物理メモリに正しくマッピングされているか確認していたのでは、まともな機械語にならない。

そのためマッピングの管理はマイクロプロセッサに任せ、マイクロプロセッサが必要に応じて例外を送出する。その例外処理としてページインとページアウトの処理を行なうことで、機械語が簡略化できるのである。

割り込み番号

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

処理失敗時

何らかの理由でページインに失敗したとき、オペレーティングシステム(OS)は深刻な事態に陥る。

処理すべきデータが物理メモリに展開できない以上、処理の続行が不可能だからである。このため、そのような事態が発生したときはプロセスは即座に停止されるのが普通である。

なお、最悪の場合はOSにも被害が及ぶことがある。

Windows

Windowsで発生したページフォールトは「ページ違反」と呼ばれており、悪名高い。

特にWindows 9x系列は16ビットコードが中途半端に残り、これがメモリ管理の足を引っ張っていたため、ページフォールト→ページインの処理の際、頻繁に何らかの問題が発生した。

タスクの切り替えなどメモリのアクセス範囲が大幅に変わるような状況下になると、何かとページ違反のダイアログが出たり、最悪の場合は青画面が出てリセットするしかなくなることが多発してしまった。

Windows NT系列では最初から32ビットで書かれているためか、このような問題はあまり発生しない。