Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

ページフォールト(ページフォールト)とは | 意味や読み方など丁寧でわかりやすい用語解説

ページフォールト(ページフォールト)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

ページフォールト (ページフォールト)

英語表記

page fault (ページフォールト)

用語解説

ページフォールトは、オペレーティングシステム(OS)がプログラムを実行する際に、仮想記憶システムで発生する現象の一つだ。システムエンジニアを目指す上で、OSがどのようにメモリを管理し、アプリケーションの動作に影響を与えるかを理解する上で非常に重要な概念である。

概要 ページフォールトとは、簡単に言えば、CPUがアクセスしようとしたデータやプログラムコードが、現在物理メモリ(RAM)上に存在しない場合に発生する「割り込み」のことである。OSは、実行中のプログラムが利用するメモリ空間を仮想記憶という仕組みで管理している。この仮想記憶は、物理メモリの容量に制約されずに広大なメモリ空間をプログラムに提供するための技術であり、物理メモリと補助記憶装置(ハードディスクやSSDなどのストレージ)を組み合わせて利用する。プログラムは、自身が物理メモリのどこにあるかを意識せず、連続した仮想アドレス空間を扱うことができる。OSはこの仮想アドレスを物理アドレスに変換して、実際のメモリへのアクセスを行う。この変換処理の中で、目的のデータが物理メモリになかった場合に、OSはストレージからそのデータを物理メモリに読み込む必要がある。この一連の動作のきっかけとなるのが、ページフォールトという現象である。ページフォールトは一見するとエラーのように聞こえるかもしれないが、実際には仮想記憶システムの正常な動作の一部であり、メモリを効率的に利用するための不可欠なメカニズムだ。しかし、あまりにも頻繁に発生すると、システムの性能を著しく低下させる原因にもなるため、その仕組みを理解しておくことは非常に重要である。

詳細 ページフォールトのメカニズムを深く理解するためには、まず仮想記憶の基本を押さえる必要がある。OSは、プログラムがメモリを使用する際に、メモリ空間を「ページ」と呼ばれる固定サイズの小さなブロックに分割して管理する。例えば、多くのシステムでは1ページあたり4KB(キロバイト)のようなサイズが用いられる。物理メモリも同様に、「フレーム」と呼ばれる同サイズのブロックに分割されている。OSは、プログラムが使用する仮想ページが、物理メモリ上のどのフレームに対応しているかを「ページテーブル」というデータ構造で管理している。ページテーブルには、各仮想ページに対応する物理フレームのアドレス情報や、そのページが現在物理メモリ上に存在するかどうかを示す「存在ビット(または有効/無効ビット)」などの管理情報が記録されている。

CPUがプログラムの命令を実行する際、ある仮想アドレスにアクセスしようとすると、OSはまずページテーブルを参照して、その仮想アドレスが属する仮想ページが物理メモリ上のどのフレームに格納されているかを調べる。このとき、ページテーブルの存在ビットが「無効」を示していた場合、つまりそのページが現在物理メモリ上にないことを検出した場合、CPUは通常のプログラム実行を中断し、「ページフォールト」という特殊な割り込み(ソフトウェア割り込みの一種)を発生させる。

このページフォールト割り込みが発生すると、OSはCPUの制御を引き継ぎ、以下のような一連の処理を実行する。

  1. ページフォールトの検出と割り込み処理の開始: CPUがページテーブルを参照し、要求されたページが物理メモリに存在しないことを検出すると、ページフォールト割り込みを発生させる。OSはこれを受けて、専用の割り込みハンドラ(処理プログラム)を起動する。
  2. 空きフレームの確保: OSは、要求されたページを読み込むための物理メモリ上の空きフレーム(領域)を探す。
    • もし空いているフレームがあれば、それを確保する。
    • もし空きフレームが一つもなければ、現在物理メモリ上に存在するページの中から、どのページをストレージに書き出して(ページアウト、またはスワップアウト)空きフレームを作るかを決定する必要がある。この選択は「ページ置換アルゴリズム」に基づいて行われる。代表的なアルゴリズムとしては、最も長い間使われていないページを追い出す「LRU(Least Recently Used)」や、最初に入ったページを追い出す「FIFO(First-In, First-Out)」などがある。選ばれたページの内容が変更されていた場合、OSはその内容をストレージに書き戻してから、そのフレームを解放する。
  3. ページの読み込み(ページイン): 空きフレームが確保できたら、OSはストレージ(ハードディスクやSSD)上の該当する場所から、要求されたページの内容をその空きフレームに読み込む。このディスクI/O操作は、CPUの処理速度と比較して非常に時間がかかる処理である。
  4. ページテーブルの更新: ページが物理メモリに読み込まれたら、OSは該当するページテーブルのエントリを更新する。具体的には、その仮想ページが物理メモリ上のどのフレームに格納されているかのアドレス情報を書き込み、存在ビットを「有効」に設定し直す。
  5. 命令の再実行: OSは、ページフォールトの原因となった命令を最初から再実行するようCPUに指示する。このときには、要求されたページはすでに物理メモリ上に存在するため、CPUは正常にメモリにアクセスし、プログラムの実行を続行できる。

ページフォールトにはいくつかの種類がある。

  • ソフトページフォールト: ページが物理メモリ上には存在するものの、何らかの理由でページテーブルのエントリが無効になっていたり、共有メモリ領域が参照されたりした場合に発生する。ディスクアクセスを伴わないため、処理時間は比較的短く、システムの性能への影響は小さい。
  • ハードページフォールト: ページが物理メモリ上に存在せず、ストレージからの読み込み(ディスクI/O)が必要となる場合を指す。これが一般的に「ページフォールト」と呼ばれるもので、ディスクアクセスを伴うため処理時間が長く、システムの性能に大きな影響を与える可能性がある。

ハードページフォールトが頻繁に発生すると、OSはページの読み込みや書き出し(ページイン/ページアウト)ばかりに時間を費やし、本来のプログラム処理がほとんど進まなくなる状態に陥ることがある。この現象を「スラッシング(Thrashing)」と呼ぶ。スラッシングが発生すると、CPU使用率は高くなるものの、実質的な処理能力は著しく低下し、システム全体の応答性が悪化する。スラッシングは、物理メモリの容量が不足している場合や、同時に実行されるプログラムが要求するメモリ総量が物理メモリの容量を大幅に超えている場合に発生しやすい。

システムエンジニアとして、ページフォールトの仕組みを理解することは、メモリ関連の性能問題を診断し、解決策を検討する上で非常に重要である。例えば、システムの応答が遅い場合、タスクマネージャーやOSの提供する監視ツールでページフォールトの発生頻度やディスクI/Oの状況をチェックすることで、物理メモリの増設が必要か、あるいはアプリケーションのメモリ使用量を最適化すべきか、といった判断材料を得ることができる。ページフォールトは仮想記憶システムの根幹をなす動作であり、その理解は、OSとハードウェアがどのように連携して動作しているかを把握するための第一歩となるだろう。

関連コンテンツ

関連IT用語