ページフォールト
読み:ページフォールト
外語:PF: page fault
仮想記憶
機構を持っている
マイクロプロセッサー
が発生させる
例外
の一つ。
目次
概要
特徴
発生原因
処理失敗時
x86
PTE
NXビット/XDビット
割り込み番号
Windows
概要
仮想記憶において、物理メモリーにデータが
マッピング
されていない状態でアクセスが行なわれるとこの例外が発生する。
この例外が発生したときは、
ハードディスクドライブ
などに用意された
ページ ファイル
などから物理メモリーにデータを転送する作業(
ページイン
、
ページアウト
)が必要となる。
原因が不正なメモリーアクセスの場合もあるが、そのような場合は不正なアクセスをした
プロセス
は停止させられる。
特徴
発生原因
メモリー
にアクセスしに行く度、アクセス先が物理メモリーに正しくマッピングされているか確認していたのでは、まともなプログラムにならない。そのため、マッピングの管理はマイクロプロセッサーに任せる。
マイクロプロセッサーは、必要に応じて例外を送出する。その
例外処理
としてページインとページアウトの処理を行なうことで、プログラムが簡略化できる。
処理失敗時
何らかの理由でページインに失敗したとき、必要なメモリー領域へのアクセスが不能になるため、
オペレーティングシステム
(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ビットで書かれているためか、このような問題はあまり発生しない。
再検索