HOME/Articles/

メモリのページングについて

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段階になる