ページフォールトとは
ページフォールトとは、仮想記憶を採用しているシステムにおいて、プログラムがアクセスしようとしたデータ(ページ)が、現在物理メモリ(主記憶)上に存在せず、ハードディスクなどの補助記憶装置(仮想メモリ)に退避されている状態であるときに発生する割り込み信号(イベント)のことです。ページフォールトが発生すると、OSは該当するデータを補助記憶から物理メモリに読み込む処理を行います。その際、物理メモリに空きがない場合は、LRU(最も使われていないデータを追い出す方式)などのアルゴリズムに基づいて既存のデータを退避させます。
具体例
- 重いファイルの再表示:しばらく使っていなかった大きな画像ファイルを編集する画面に戻った際、一瞬動作が引っかかり、ハードディスクのアクセスランプが点滅して少し待たされてから画面が表示される現象があります。これは、裏でページフォールトが発生し、ハードディスクから物理メモリへデータを読み戻す処理(ページイン)が行われているためです。
- LRUによるメモリ管理:机の上がノートでいっぱいになったとき、最も長い間使っていないノート(LRU)を本棚(ハードディスク)に戻し、新しいノートを机の上(物理メモリ)に広げる動作に似ています。
もう少し詳しく
ページフォールト(Page Fault)は、仮想記憶方式(特にページング方式)を採用しているコンピュータシステムにおいて、CPUがプログラムの実行中にアクセスしようとしたメモリアドレス(ページ)が、現在の物理メモリ(主記憶)上に存在しない場合に発生するハードウェアレベルの割り込み処理(例外処理)のことです。
ページフォールトが発生すると、OSは現在実行中のプロセスの処理をいったん中断(サスペンド)し、要求されたデータが格納されているハードディスクやSSDなどの補助記憶装置(ページファイルやスワップ領域)にアクセスして必要なページを探し出します。そして、物理メモリの空き領域にそのページを読み込む「ページイン」という処理を行い、完了後にプログラムの処理を中断した箇所から再開させます。
もしページインを行う際に物理メモリに空き容量がない場合は、現在物理メモリ上にあるページの中から、どれかを補助記憶装置に追い出す(ページアウトする)必要があります。どのページを追い出して空きを作るかという決定を行うアルゴリズムを「ページ置換アルゴリズム」と呼びます。代表的なものには、メモリに読み込まれた順序が最も古いページを追い出す「FIFO(First In First Out)」や、最も長い間参照されていないページを追い出す「LRU(Least Recently Used)」、最も参照回数が少ないページを追い出す「LFU(Least Frequently Used)」などがあります。一般的に、過去の使用履歴に基づいて判断するLRUの方が人間の利用パターンに近いため、効率的なアルゴリズムとして広く採用されています。
試験でのポイント
試験においてページフォールトに関する問題は、「仮想記憶システムにおける実効アクセス時間」を求める計算問題として頻出です。「ページフォールト率がpのとき、平均アクセス時間はいくつか」といった問題では、物理メモリへのアクセス時間と、ページフォールト発生時の補助記憶装置へのアクセス時間(ページ入れ替え処理時間を含む非常に長い時間)を加重平均して計算します。ミリ秒とナノ秒といった単位の違いに注意して計算する力が求められます。
また、前述のページ置換アルゴリズム(FIFO、LRU、LFUなど)の違いと特徴を問う問題も定番中の定番です。「最も長い間使われていないページを置き換え対象とする方式はどれか」といった問題文が出た場合、即座にLRUと答えられるようにキーワードを紐付けておきましょう。
さらに、搭載メモリ量が少なすぎるなどの理由でページフォールトが頻発し、OSがページの入れ替え処理にばかり時間を取られて、本来のアプリケーションプログラムの実行がほとんど進まなくなる致命的な状態である「スラッシング」も、関連する超頻出キーワードです。ページフォールト率が高まるとシステム性能が急激に低下するグラフの形などもイメージできるようにしておくと完璧です。
関連する用語
ページ置換アルゴリズム、LRU、FIFO、スラッシング