Article Outline
メモリのページングについて
メモリのページングについて学習したため、そのまとめとしてここに整理する。
ページング
- メモリをページという単位に分割し管理、仮想的なアドレス(仮想アドレス)を割り当てる
- ページ単位でストレージに退避させることにより、実メモリのサイズよりも大きな領域を取り扱うことを可能とする
仮想アドレス
- 物理メモリに変換するためのテーブルのエントリに関する情報を持つ
- ディレクトリ (22 ~ 31bit)
- ページディレクトリ内の該当するエントリを指す
- テーブル (12 ~ 21bit)
- ページテーブル内の該当するエントリを指す
- オフセット (0 ~ 11bit)
- 割り当てるページフレーム内の相対位置を指す
ページ
- 仮想アドレス空間を一定サイズで分割し取り扱う単位
- 1ページあたり4KB
ページフレーム
- 実メモリを固定サイズで分割し取り扱う単位
- 物理ページと呼ぶこともあり
- ページをメモリに配置する枠
- ページと同じサイズ (4KB)
ページテーブル
- ページに割り当てられた仮想アドレスから、実際の物理メモリに変換するためのデータ構造
- メインメモリに配置され、CPUのページング回路を有効にする際にカーネルによって初期化される
- 最大で1024個のページへのエントリを保持する
ページディレクトリ
- ページテーブルと同じ構造をしており、1つのページテーブルを指す
- 最大で1024個のページテーブルへのエントリを保持する
仮想アドレスから物理アドレスへの変換
- 2段階に分けて変換され、それぞれの段階で別々の変換テーブルを使用する
- 対象のページディレクトリの物理アドレスは、CPUのCR3制御レジスタに保持される
- 1段階目
- ページディレクトリ
- 対象のページディレクトリから、仮想アドレスの先頭10bitを使用してページテーブルを取得する
- ページディレクトリ
- 2段階目
- ページテーブル
- 1段階目で取得したページテーブルから、仮想アドレスの12 ~ 22bitを使用して対応する物理アドレスを取得する
- ページテーブル
ページディレクトリ / ページテーブル内ののエントリの構造
- Presentフラグ
- メインメモリ内に該当するページテーブル・ページが存在するかを表す
- 1の時、メインメモリ内に存在することを表す
- 0の時、「ページフォルト例外」が発生する
- ページフレーム物理アドレスの上位20ビットを持つフィールド
- アクセス済みフラグ
- Dirtyフラグ
- ページテーブルエントリの場合のみ使用される
- ページフレームに対する書き込みが行われるたびに1が設定される
- Read / Writeフラグ
- ページ・ページテーブルのアクセス権を表す
- User / Supervisorフラグ
- ページ・ページテーブルにアクセスするのに必要な特権レベルを表す
- PCDフラグ / PWTフラグ
- ハードウェアキャッシュが、ページまたはページテーブルを処理する方法を制御する
- Page Sizeフラグ
- ページディレクトリエントリの場合のみ使用される
- エントリが2MBまたは4MBのページフレームを参照する場合は1を設定する (拡張ページングを参照)
- Globalフラグ
- ページテーブルエントリの場合のみ使用される
拡張ページング
- ページのサイズを4KBではなく、4MBにする機能
- ページテーブルが使われなくなり、物理アドレスへの変換が1段階になる