ページテーブル【page table】
概要

現代のOSでは、各プログラムが実際の物理メモリを直接操作するのではなく、「仮想アドレス空間」と呼ばれる仮想的なメモリ空間を通じてメモリにアクセスする仕組みを用いるのが一般的である。この仕組みにより、複数のプログラムが互いのメモリ領域を干渉することなく独立して動作できるようになるが、実際にデータを読み書きする際には仮想アドレスを物理メモリ上の実際のアドレスに変換する必要がある。ページテーブルはこの変換を行うための対応表である。
仮想メモリは「ページ」と呼ばれる固定サイズ(数キロバイト程度)の単位に分割されており、物理メモリも同じサイズの「ページフレーム」に分割されている。ページテーブルは仮想ページ番号と物理ページフレーム番号の対応を記録しており、CPUがメモリにアクセスするたびにこの表を参照して変換処理が行われる。
この変換処理は通常、「MMU」(Memory Management Unit:メモリ管理ユニット)と呼ばれるCPUに内蔵されたハードウェアが透過的に実行するため、ソフトウェアは変換の過程を意識する必要はなく、あたかも連続したメモリ領域が割り当てられているかのようにメモリアクセスを行うことができる。
ページテーブルの各エントリには物理アドレスの情報だけでなく、そのページが現在物理メモリ上に存在するかどうかを示す「存在ビット」、書き込み可否を示す「保護ビット」、最近アクセスされたかどうかを示す「参照ビット」なども含まれている。存在ビットが「0」の場合、そのページは現在ストレージ上のスワップ領域に退避されており、アクセスが発生すると「ページフォールト」と呼ばれる割り込みが生じてOSがストレージから物理メモリへページの内容を読み込む処理を行う。
アドレス変換のたびにページテーブルを参照するとメモリアクセスのために膨大な追加処理(オーバーヘッド)が生じることになるため、直近に参照した変換結果をキャッシュする「TLB」(Translation Lookaside Buffer)と呼ばれる高速なハードウェアを併用し、変換回数を減らすよう対策するのが一般的である。