コンピュータが物理メモリより大きなメモリ空間を扱えるのは、仮想記憶の仕組みがあるからです。
その中核を担う技術のひとつがページング方式であり、メモリを固定サイズの「ページ」という単位で管理することで、効率的なメモリの割り当てと仮想アドレス空間の提供を実現します。
本記事ではページング方式の基本概念・仕組み・ページテーブルの役割について詳しく解説していきます。
ページング方式とは?仮想記憶の中核技術の結論
それではまず、ページング方式の基本的な定義と概念について解説していきます。
ページング方式とは、物理メモリと論理アドレス空間をそれぞれ固定サイズのブロック(ページ・ページフレーム)に分割して管理するメモリ管理方式です。
論理アドレス空間の分割単位を「ページ(Page)」、物理メモリの分割単位を「ページフレーム(Page Frame)」と呼び、OSがこの2つの対応関係をページテーブルで管理します。
ページサイズは一般的に4KB〜2MB程度が使われ、最近では大きなページサイズ(ヒュージページ)をサポートするOSも増えています。
ページング方式の基本要素
| 要素 | 説明 |
|---|---|
| ページ | 論理アドレス空間の固定サイズブロック |
| ページフレーム | 物理メモリの固定サイズブロック |
| ページテーブル | 論理ページと物理フレームの対応表 |
| ページフォルト | 必要なページが物理メモリにない状態 |
| スワップ | ページを物理メモリとディスク間で入れ替える処理 |
論理アドレスと物理アドレスの変換
プログラムが使用する論理アドレス(仮想アドレス)は、CPUのMMU(メモリ管理ユニット)とページテーブルを通じて物理アドレスに変換されます。
論理アドレスはページ番号とページ内オフセットで構成されており、ページ番号をもとにページテーブルを参照して対応する物理フレーム番号を取得します。
この変換処理はハードウェア(MMU)によって高速に処理されるため、プログラムはアドレス変換を意識せずに動作できます。
ページング方式のメリット
ページング方式の最大のメリットは、外部断片化が発生しないことです。
セグメント方式などの可変サイズ分割では、割り当て・解放を繰り返すうちに物理メモリが細かく断片化して大きなメモリ領域を確保しにくくなります。
ページング方式では固定サイズでの管理により、空きフレームがあれば必ず割り当てられるため、外部断片化を原理的に防ぐことができます。
ページテーブルの仕組みと管理
続いては、ページング方式の中核を担うページテーブルの仕組みについて確認していきます。
ページテーブルの構造
ページテーブルは各ページに対応するエントリを持ち、エントリには物理フレーム番号のほかに存在ビット・保護ビット・ダーティビット・参照ビットなどの情報が含まれます。
存在ビット(Present Bit)は対応するページが現在物理メモリに存在するかを示し、ページフォルト検出に使用されます。
ダーティビット(Dirty Bit)はページが変更されたかを示し、スワップアウト時に変更がある場合のみディスクへの書き戻しが行われます。
TLB(Translation Lookaside Buffer)の役割
ページテーブルへのアクセスは毎回メモリアクセスを伴うため、そのままでは処理速度に影響します。
この問題を解決するのがTLB(Translation Lookaside Buffer)というキャッシュです。
最近変換したアドレスのページ番号と物理フレーム番号の対応をキャッシュしており、TLBにヒットした場合はページテーブルにアクセスせずに高速にアドレス変換が行えます。
多段ページテーブルと仮想アドレス空間
現代の64ビットOSでは仮想アドレス空間が巨大なため、単一のページテーブルは非現実的なサイズになります。
この問題を解決するのが多段ページテーブル(マルチレベルページテーブル)であり、ページテーブルを階層化することで使用しているアドレス空間のページテーブルエントリのみをメモリ上に配置できます。
ページフォルトとスワップの仕組み
続いては、ページング方式における重要な概念であるページフォルトとスワップの仕組みを確認していきます。
ページフォルトの発生と処理
プログラムがアクセスしようとしたページが物理メモリに存在しない場合、ページフォルトが発生します。
ページフォルトが発生するとCPUが割り込みをOSに通知し、OSはディスク上のスワップ領域から必要なページを物理メモリに読み込む処理を行います。
この仕組みにより、プログラムは物理メモリ容量を超えた仮想アドレス空間を使用できます。
ページ置換アルゴリズム
物理メモリが不足している場合、新しいページを読み込むために既存のページをスワップアウト(ディスクに書き出す)する必要があります。
どのページを追い出すかを決めるのがページ置換アルゴリズムで、LRU(最近最も使われていないページを置換)・FIFO(最初に読み込まれたページを置換)・LFU(最も使用頻度が低いページを置換)などが代表的です。
| アルゴリズム | 置換基準 | 特徴 |
|---|---|---|
| LRU | 最近最も使われていないページ | 効果的だが実装コストが高い |
| FIFO | 最も古くからあるページ | シンプルだが効率は低い |
| LFU | 使用頻度が最も低いページ | 長期的な使用パターンを反映 |
| Clock | 参照ビットを利用した近似LRU | LRUの近似で実装が現実的 |
まとめ
本記事では、ページング方式の基本概念・ページテーブルの仕組み・ページフォルトとスワップの処理について解説しました。
ページング方式は固定サイズのページ・ページフレームでメモリを管理し、ページテーブルによる論理・物理アドレスの変換でプログラムに広大な仮想アドレス空間を提供する仕組みです。
TLBによる変換高速化・多段ページテーブルによる効率化・ページ置換アルゴリズムによるメモリ管理の最適化を通じて、現代のOSは限られた物理メモリを効率的に活用してプログラムの実行を支えています。
ページング方式の理解はOSの動作原理やパフォーマンスチューニングの基礎となる重要な知識です。