ページフォールト
英語表記: Page Fault
概要
ページフォールトとは、プログラムがアクセスしようとしたデータ(ページ)が、現在メインメモリ(DRAM)上に存在しない場合に発生する特別な割り込み(トラップ)のことです。これはシステムエラーではなく、仮想メモリシステムが物理メモリ(DRAM)を効率的に利用するために意図的に設計された、正常な動作プロセスの一部です。ページフォールトが発生すると、OSが介入し、必要なページを二次記憶装置(ストレージ)からメインメモリに読み込む処理(スワップイン)が実行されます。
この概念は、階層構造「メモリ階層(キャッシュ, DRAM, NVRAM) → 仮想メモリとアドレッシング → ページングとスワップ」の文脈において、DRAMの容量を補完し、実行中のプログラムに広大な仮想空間を提供するための核心的な仕組みとして位置づけられます。
詳細解説
ページフォールトの理解には、「仮想メモリ」と「ページング」の仕組みを深く理解することが不可欠です。私たちが普段使っているコンピュータは、搭載されているDRAM(物理メモリ)の容量以上に多くのプログラムを同時に実行できることが多いですが、これは仮想メモリ技術のおかげです。
1. 仮想メモリとページングの役割
仮想メモリは、物理メモリと二次記憶装置(SSDやHDD)を組み合わせることで、アプリケーションに対してDRAMの容量を超えた巨大な連続したメモリ空間が存在するように見せかけます。この管理手法が「ページング」です。ページングでは、仮想アドレス空間と物理アドレス空間を固定サイズのブロック(ページ)に分割し、管理します。
2. 発生メカニズムと主要コンポーネント
ページフォールトが発生する流れは、主に以下のコンポーネントと連動しています。
- ページテーブル(Page Table): CPUが仮想アドレスを物理アドレスに変換する際に参照するOS管理下のデータ構造です。ページテーブルには、各仮想ページが現在どの物理ページに対応しているかの情報が格納されています。
- 存在ビット(Present Bit): ページテーブルエントリに含まれる重要なフラグです。このビットが「1」であれば、該当ページは現在DRAM上に存在することを示し、「0」であれば、DRAMにはなく二次記憶装置(スワップ領域)にあることを示します。
CPUが仮想アドレスを生成し、MMU(メモリ管理ユニット)がページテーブルを参照した結果、存在ビットが「0」であることが判明した場合、ページフォールトが発生します。これは、必要なデータがDRAMには載っていないという「不在通知」のようなものだと考えると分かりやすいです。
3. OSによるスワッピング処理
ページフォールトが発生すると、CPUはただちにプログラムの実行を中断し、OSに制御を移します。OSが実行する一連の処理(ページフォールトハンドラ)こそが、階層構造の最下層にある「ページングとスワップ」の具体的な動作そのものです。
- 発生ページ特定: OSはどの仮想ページへのアクセスが原因でフォールトが発生したかを特定します。
- 二次記憶装置からの読み込み(スワップイン): OSは、そのページが格納されている二次記憶装置(スワップファイルやスワップパーティション)上の場所を確認し、DRAMの空いている領域にデータを読み込みます。
- DRAMが満杯の場合(ページ置換): もしDRAMに空きがない場合は、OSは現在DRAM上に存在するページの中から、最も使用されていないページ(犠牲ページ)を選び出し、それを二次記憶装置に退避させます(スワップアウト)。そして、空いた領域に目的のページを読み込みます。この選択アルゴリズム(LRUやFIFOなど)がメモリ管理の効率を大きく左右します。
- ページテーブルの更新: 目的のページがDRAMにロードされたら、OSはページテーブル内の対応するエントリの存在ビットを「1」に更新し、新しい物理アドレスを書き込みます。
- 実行再開: OSは、中断していたプログラムの命令を、ページフォールトが発生した時点から再開させます。
この一連の処理は、二次記憶装置へのアクセスを伴うため、非常に時間がかかります。これが、ページフォールトが多発するとシステム全体のパフォーマンスが急激に低下する原因となるのです。
具体例・活用シーン
ページフォールトは、ユーザーが意識しないところで常に発生しています。特に、メモリを大量に消費するアプリケーションを起動したり、多くのタブを開いたりしたときに、システムが一時的にフリーズしたり、HDDのアクセスランプが激しく点滅したりする現象は、まさにページフォールト処理の真っ最中である可能性が高いです。
図書館の司書と書庫のメタファー
ページフォールトのメカニズムは、「机の上での作業」と「巨大な書庫」に例えると非常に分かりやすいです。
- あなたの机(DRAM): あなたが今作業している場所、つまりメインメモリです。アクセス速度は非常に速いですが、スペースには限りがあります。
- 巨大な書庫(二次記憶装置/スワップ領域): ほとんどすべてのデータが格納されている場所です。容量は大きいですが、アクセスするには時間がかかります。
- 司書(OS): メモリ管理を担当するオペレーティングシステムです。
あなたが作業中、特定の資料(ページ)が必要になりました。まず、あなたは机の上(DRAM)を探しますが、見つかりません。「机の上にない!」と気づいた瞬間、これがページフォールトの発生です。
あなたは司書(OS)を呼びます。司書は書庫(二次記憶装置)まで行き、必要な資料を探し出します。もし机の上に資料を置くスペースがなければ、司書は今使っていない古い資料を一時的に書庫に戻し(スワップアウト)、新しい資料を机の上に運びます(スワップイン)。
資料が机の上に置かれると、あなたは再び作業を再開できます。この「司書が書庫へ行って資料を持ってくる時間」が、システムが感じる遅延時間(レイテンシ)に相当します。ページフォールトが頻繁に起こる、つまりあなたが何度も司書を呼ぶ状況は、作業効率(パフォーマンス)を著しく低下させることになります。
活用シーン:デマンドページング
ページフォールトは、無駄なメモリ利用を避けるための「デマンドページング(要求時ページング)」という戦略の基盤となっています。
アプリケーションが起動するとき、プログラムのすべてのコードやデータがDRAMに読み込まれるわけではありません。まずは実行に必要な最小限のページだけが読み込まれます。そして、プログラムが実行を進める中で、まだDRAMにない部分にアクセスしようとしたときに、意図的にページフォールトを発生させます。このフォールトをトリガーとして、必要な部分だけをオンデマンドでDRAMに持ってくることで、メモリ資源を節約し、プログラムの起動時間を短縮しています。これは、メモリ階層全体を効率的に活用するための非常に賢い手法だと言えるでしょう。
資格試験向けチェックポイント
ITパスポート、基本情報技術者試験、応用情報技術者試験において、「ページフォールト」は仮想メモリ管理の核心として頻出します。特に、この概念がエラーではなく、正常な動作であることを理解することが重要です。
| 試験レベル | 頻出ポイントと対策 |
| :— | :— |
| ITパスポート | 仮想メモリの仕組みと関連付けて、「ページフォールト=必要なデータがメインメモリにない状態」であること、そして「スワップ」が発生するきっかけとなることを理解しておきましょう。エラーではない、という点が重要です。 |
| 基本情報技術者 | ページテーブルの役割、特に「存在ビット」のチェックがページフォールト発生のトリガーであることを問われます。また、ページフォールト後のOSの処理(スワップイン、ページ置換)の流れを正確に把握してください。 |
| 応用情報技術者 | パフォーマンス分析の文脈で出題されます。ページフォールトが多発することによる影響、特に「スラッシング」と呼ばれる極端な性能低下現象との関連が重要です。ページ置換アルゴリズム(LRU, FIFO, LFUなど)が、ページフォールト率をいかに低減させるかという観点も学習が必要です。 |
| 共通重要点 | ページフォールトはエラーではない:これが最大のひっかけポイントです。また、ページフォールトが発生すると、二次記憶装置(低速なストレージ)にアクセスするため、処理速度が大幅に低下するという因果関係を覚えておきましょう。これは、メモリ階層におけるDRAMと二次記憶装置の速度差が原因である、という理解が深まります。 |
関連用語
ページフォールトの理解を深めるためには、ページング、スワッピング(スワップイン/スワップアウト)、ページテーブル、仮想アドレス、物理アドレス、スラッシングといった用語の理解が不可欠です。
現在、これらの関連用語の情報不足がありますが、ページフォールトが「ページング」という手法の中で発生し、「スワッピング」という処理を引き起こす中心的なイベントである、という関係性を押さえておけば、この概念の全体像を掴むことができます。特に、「ページテーブル」の存在ビットが、ページフォールトの発生を決定づける鍵であることを覚えておいてください。
