ページフォールト

ページフォールト

ページフォールト

英語表記: Page Fault

概要

ページフォールトとは、OSが提供する仮想記憶システムにおいて、CPUがアクセスしようとしたデータ(ページ)が、現在主記憶(RAM)上に存在せず、補助記憶装置(ディスク)に格納されている場合に発生する特殊な割り込み(トラップ)のことです。これはシステムエラーではなく、必要なデータをディスクからRAMへ読み込む(ページイン)ためのOSへの通知メカニズムとして機能します。この仕組みこそが、限られた主記憶を効率的に利用し、物理メモリ以上の大容量を扱える仮想記憶を実現する鍵なのです。ページフォールトは、OSの基本機能であるメモリ管理における、最も重要な動的処理の一つと言えるでしょう。

詳細解説

ページフォールトは、OSの基本機能の中でも特にメモリ管理、その中でも中核をなす仮想記憶の動作原理を理解する上で、非常に重要な概念です。仮想記憶は、プログラムが物理メモリのサイズに縛られることなく、広大なアドレス空間を使用できるようにするための技術です。

仮想記憶とページングの前提

仮想記憶システムでは、「ページング」という手法を用います。プログラムが使用するアドレス空間(仮想アドレス)を一定のサイズ(ページ)に分割し、主記憶(物理メモリ)も同じサイズの区画(フレーム)に分割して管理します。どの仮想ページがどの物理フレームに対応しているかは、「ページテーブル」という管理表に記録されています。

プログラムが実行され、CPUが仮想アドレスを使ってデータにアクセスしようとすると、メモリ管理ユニット(MMU)はまずページテーブルを参照し、アドレス変換を試みます。

ページフォールトの発生メカニズム

ここで、アクセスしようとしているページに対応するページテーブルエントリに、「現在主記憶に存在しない」ことを示すフラグ(有効/無効ビットなど)が立っている場合、ページフォールトが発生します。

このページフォールトが発生すると、CPUは通常の処理を中断し、OSのカーネルに制御を移す「トラップ」(ソフトウェア割り込みの一種)として処理されます。OSが制御を受け取ると、以下の手順でページフォールトを解消し、システムが正常に動作を継続できるようにします。

  1. 発生ページ特定: OSは、どの仮想ページが必要とされているのかを特定します。
  2. 空きフレームの確保: 主記憶(RAM)内にデータを読み込むための空きフレームを探します。もし空きがない場合は、OSが採用している置換アルゴリズム(LRUやFIFOなど)に基づき、現在使用頻度の低い、または変更されていないページを主記憶から選び出し、補助記憶に書き戻す処理(ページアウト)を行います。
  3. ページイン処理: 補助記憶(ディスク)から、必要なページの内容を確保したフレームに読み込みます。このディスクアクセスが、ページフォールト処理のボトルネックになりがちです。
  4. ページテーブル更新: 読み込みが完了したら、ページテーブルの該当エントリを更新し、「主記憶に存在する」状態(有効)に変更します。
  5. 処理再開: ページフォールトが発生した原因となった命令を最初から再実行させます。今度はページテーブルが更新されているため、アクセスは成功します。

このように、ページフォールトは「データが必要になったがRAMにない」という状況をOSに知らせ、遅延ロード(On-demand Paging)を実現するための、非常に賢い仕組みなのです。この動的なメモリ管理こそが、仮想記憶メモリ管理において不可欠な技術である理由です。

ページフォールトが多発すると、ディスクアクセスが頻繁に発生し、システムの処理速度が極端に低下します。これは「スラッシング」と呼ばれ、メモリ管理の効率が落ちているサインであり、システム管理者としては避けたい状況です。

具体例・活用シーン

ページフォールトは、私たちが普段利用しているアプリケーションの裏側で、常に発生している現象です。特に大きなプログラムを起動したり、多くのアプリケーションを同時に立ち上げたりするときに、この仕組みが活躍しています。

  • 大規模アプリケーションの起動の最適化: 例えば、巨大なデータベースソフトウェアや、複雑な機能を多数持つ統合開発環境(IDE)を起動する場合を考えてみましょう。OSは、必要な機能すべてを最初からRAMに読み込むわけではありません。実際に利用する最低限の部分だけをRAMに置き、それ以外のデータは補助記憶に残しておきます。ある機能(例えば、特定のデバッグツール)が初めて呼び出されたとき、その機能に必要なデータがRAMにないためページフォールトが発生し、OSが遅れてデータを読み込みます。これにより、起動時間を短縮し、メモリを効率的に使えます。
  • メモリ過負荷時の救済措置: システムの物理メモリ(RAM)が限界に近づいたとき、OSはしばらく使われていないデータをディスクに退避させます(ページアウト)。その後、退避させたデータにアクセスが必要になった瞬間にページフォールトが発生し、再びRAMに戻されます。この柔軟な入れ替えのおかげで、ユーザーは複数の重いアプリケーションを同時に動かせているように感じられるのです。

アナロジー:巨大な図書館の蔵書管理

ページフォールトを理解するための良いメタファーは、「巨大な図書館の蔵書管理」です。このメタファーは、仮想記憶の「必要なものを必要な時に」という思想をよく表しています。

この図書館(コンピュータシステム)は非常に大きく、すべての本(データページ)を書架(主記憶/RAM)に並べるスペースはありません。そこで、使用頻度の高い本だけを書架に置き、ほとんどの本は地下の巨大な倉庫(補助記憶/ディスク)に保管されています。

あなたが特定の専門書(データ)を探しに来たとき、まず書架を探します。

  1. アクセス要求: あなたが特定の専門書を探します。
  2. ページフォールト発生: 書架(RAM)を探したところ、「この本は現在書架にはありません。司書に依頼してください」という札(ページテーブルの無効フラグ)を見つけました。これが「ページフォールト」です。
  3. 司書(OS)の出動: あなたは司書(OS)に「本がない!」と通知します。これはCPUがOSにトラップをかける行為に相当します。
  4. ページイン処理: 司書は地下の倉庫(ディスク)に行き、その本を探し出し、書架(RAM)の空いているスペースに運びます。もし書架がいっぱいなら、司書はまず「一番古くて誰も読んでいない本」を倉庫に戻す(ページアウト)作業から始めなければなりません。
  5. 処理再開: 司書が本をセットし終えたら、あなたは再びその本を手に取って(命令を再実行して)読み始めることができます。

この一連の流れにより、図書館(システム)は限られた書架スペース(RAM)にもかかわらず、何百万冊もの本(大容量のデータ)を扱えるようになっているのです。

資格試験向けチェックポイント

OSの基本機能(メモリ管理)の分野において、ページフォールトは仮想記憶の動作原理を問う上で頻出のテーマです。

  • 定義の正確性(ITパスポート、基本情報): ページフォールトは「エラー」ではなく、「必要なページが主記憶にない」ことをOSに知らせる
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

両親の影響を受け、幼少期からロボットやエンジニアリングに親しみ、国公立大学で電気系の修士号を取得。現在はITエンジニアとして、開発から設計まで幅広く活躍している。

目次