現在地

Windows

Windowsのメモリを扱う際に必要な事項を書いています。

メモリは通常4096(0x1000)バイト単位で分割され、メモリではページ、ディスクではフレームという単位で呼ばれることが多いです。アドレス変換は32bitであるか64bitであるか、PAE(Physical Address Extension)やAWE(Address Windowing Extentions)がサポートされているかによって異なります。

アドレス変換プロセスは3つの段階からなります。Windowsはプロセスの動作中にDTB(Directory Table Base)をCR3レジスタ内に保持します。DTBはそのプロセスのPDE(Page Directory Entries)テーブルの基準となるアドレスを含みます。PDEはPTE(Page Table Entries)のページの基準となるアドレスを探すために使われます。そして、PTEは物理アドレスのページの基準となるアドレスを指しています。

PDE, PTEはそれぞれvビット(valid)をもち、そのページが有効であるか識別するようになっています。vビットが0であれば無効なページです。また、10番目のbitをpビット(prototype)、11番目のbitをtビット(transition)と定義しています。これらが示す値によって以下のような役割をもちます。

  • p, tビットが0
  • Pagefileであり、1-4ビットがPageFileNumberを、12-31ビットがPageFileOffsetを示します。

  • p, tビットが0かつPageFileNumber, PageFileOffsetも0
  • DemandZero(ゼロクリアしたページ?)であることを示します。

  • pが0でtが1
  • Transitionであり、そのページは修正されたがディスクに反映されていないことを示します。

  • pが1
  • prototype page table entryを指し、tはプロトタイプのindex番号に使われます。prototype PTEは1つ以上のプロセスがメモリの同一ページを使っている時のPTEです。

  • entryが0
  • 情報がなく、OSによって利用可能とされているがアクセス不可であることを示します。