PAE
読み:ピーエイイー
外語:PAE: Physical Address Extension

 x86プロセッサーにおいて、物理アドレスバス幅を32ビットから36ビット以上に拡張する機能を提供するもの。物理アドレス拡張。後のPSE-36とは異なる技術である。
目次

概要
 32ビットプロセッサーであるIA-32では、仮想アドレス物理アドレスも32ビットだった。
 PAEは、このうち物理アドレスを32ビットから増やす機能を提供する技術の一つである。実際の実装では、4ビット増やして36ビットに拡張する機能を提供しており、最大64Giバイトの物理メモリー空間を提供する。
 P6マイクロアーキテクチャから追加された機能で、1995(平成7)年発売のPentium Pro以降のCPUで利用できるが、一部のノートPC向けCPU(一部のPentium Mなど)や一部の互換CPU(VIA C3など)は対応しないものもある。
 Windowsでは、Windows 2000以降で対応する。なお、64ビットWindowsではPAEは利用されない(する必要がない)。

特徴

機能の有無判別
 機能の有無は、EAXレジスターに1を代入してCPUID命令を実行し、EDXレジスターに得られたフラグのビット6が1かどうかで確認できる。

機構

PAE対応前
 まず仮想記憶に対応するCPUとOSはページテーブルを併用し、ページ切り替えを実現している。
 仮想記憶に対応し、PAEが有効なCPUであっても、結局32ビットCPUであるx86はリニアアドレス長も仮想アドレス空間も32ビットアドレスであり上限が4Giバイトまでであるのは変わらないし、これを変えることはできない。
 そこでPAEが実施した拡張は、この従来の仮想記憶のための機能を拡張して、物理アドレス空間を32ビットから4ビット追加して36ビット、あるいはそれ以上へと拡張するための技術を提供した。このために、従来のページテーブルの前にもう一段のページテーブルを追加しており、アクセスできる物理アドレス空間を増やしている。このため、OS側の対応も必須となる。
 まず32ビット時代がどうだったを考えると、32ビット長のリニアアドレスに対し、上位から次のように割り当てられている(ページサイズが4Kiバイトの場合)。
 リニアアドレスの下12ビットはページテーブル先頭からのオフセットであり、ページディレクトリーとページテーブルで32ビットのアドレスが完成している。

PAE対応後
 PAEでは、上位から次のように割り当てるよう変更された(ページサイズが4Kiバイトの場合)。
 こちらもリニアアドレスの下12ビットはページテーブル先頭からのオフセットであり、ページディレクトリーポインターテーブル・ページディレクトリー・ページテーブルの組み合わせで36ビットのアドレスが完成している。
 なお、32ビットの中から2ビット分を捻出するために、ページディレクトリーとページテーブルの幅が10ビットから9ビットに減り、都合一段あたり1024エントリーから512エントリーに半減されている。

有効化

有効化
 Windows XP SP2以降、およびWindows Vistaなどでは、メモリーが4Giバイト以上実装されている場合や、DEP(データ実行防止)が有効の状態であれば、自動的にPAEが有効になっている。
 もし何らかの理由でPAEが有効になっておらず、なおかつメモリーを多く積んでいる場合は、以下の方法で強制的にPAEを有効化することは可能である。

NT 5.2時代まで
 Windows XP(NT 5.1)やWindows Server 2003(NT 5.2)までで、強制的にPAEを有効化する最も手っ取り早い方法は、C:\boot.iniを直接書き換える方法である。
 [operating system] にある起動オプションの行の最後に "/pae" のオプションを追記する。複数のOSメニューがある場合は、起動したいOSの行だけを書き換える。
 こうして再起動すると、システムのプロパティを確認したときに「物理アドレス拡張」と表示され、機能が有効になっていることが確認できる。
 もし起動しない場合は使うことができないので、セーフモードで起動してboot.iniに追記した/paeを削除する。

NT 6.0時代
 Windows VistaWindows Server 2008からは、boot.iniファイルは廃止され、新たにBCDストアと呼ばれるデータで起動情報が管理されるようになった。
 PAEを有効にするには次のコマンドを実行し、再起動する。
 bcdedit /set pae forceenable
 もし起動しない場合は使うことができないので、セーフモードで起動して、設定を無効化する必要がある。
 無効にするには次のコマンドを実行する。
 bcdedit /set pae forcedisalbe
 デフォルト状態に戻すには次のコマンドを実行する。
 bcdedit /set pae default

OSごとの上限
 これによって理論上は64Giバイトまでのメモリーに、32ビットOSのままで対応する。
 ただし、Windowsのエディションごとに対応するメモリーの上限があり、コンシューマー向けの32ビットWindowsは4Giバイトまでしか対応しない。それを超えるメモリーに実際に対応する32ビットWidnowsは、EnterpriseやDatacenterなどのエディションのみである。

アプリからの利用
 OSのPAE機能を有効にしたからといって、全てのアプリのプロセスで自動的にアドレス拡張されるわけではない。
 アプリがPAE対応のAPIであるAddress Windowing Extensions(AWE API)などを利用する必要がある。

再検索