アドレス ウィンドウ拡張機能

Address Windowing Extensions (AWE) は、アプリケーションが 4 GB を超える物理メモリをすばやく操作できるようにする一連の拡張機能です。 データベース管理システムや科学およびエンジニアリング ソフトウェアなどの特定のデータ集中型アプリケーションでは、非常に大きなデータ キャッシュにアクセスする必要があります。 非常に大きなデータ セットの場合、アプリケーションの 2 GB のユーザー アドレス空間内に収まるようにキャッシュを制限することは厳しい制限です。 このような状況では、キャッシュが小さすぎてアプリケーションを適切にサポートできません。

AWE は、32 ビット ポインターを引き続き使用しながら、アプリケーションが大量のメモリに直接対処できるようにすることで、この問題を解決します。 AWE を使用すると、アプリケーションで 4 GB を超えるデータ キャッシュを使用できます (十分な物理メモリが存在する場合)。 AWE は、32 ビット仮想アドレス空間内で、この物理メモリのさまざまな部分の物理非ページ メモリとウィンドウ ビューを使用します。

AWE では、このメモリの使用方法に関していくつかの制限があります。主に、これらの制限により、非常に高速なマッピング、再マッピング、解放が可能になるためです。 高速メモリ管理は、このような巨大なアドレス空間にとって重要です。

  • AWE に割り当てられた仮想アドレス範囲は、他のプロセスと共有できません (したがって継承できません)。 実際、同じプロセス内の 2 つの異なる AWE 仮想アドレスは、同じ物理ページをマップすることはできません。 これらの制限により、メモリが解放されたときに、高速な再マップとクリーンアップが提供されます。
  • AWE リージョンに割り当てることができる物理ページは、マシン内に存在する物理ページの数によって制限されます。このメモリはページングされないので、アプリケーションが明示的に解放または終了するまでロックダウンされます。 特定のプロセスに割り当てられた物理ページは、同じプロセス内の任意の AWE 仮想リージョンにマップできます。 AWE を使用するアプリケーションでは、他のアプリケーションが過剰にページングしたり、リソース不足による新しいプロセスやスレッドの作成を防いだりするほど多くの物理メモリを使用しないように注意する必要があります。 GlobalMemoryStatusEx 関数を使用して、物理メモリの使用を監視します。
  • AWE 仮想アドレスは常に読み取り/書き込みであり、 VirtualProtect の呼び出しを介して保護することはできません (つまり、読み取り専用メモリ、noaccess メモリ、保護ページなどを指定できます)。
  • AWE アドレス範囲を使用して、グラフィックスまたはビデオ呼び出しのデータをバッファーすることはできません。
  • AWE メモリ範囲を分割することも、その一部を削除することもできません。 代わりに、削除が必要な場合は、仮想アドレス範囲全体を単位として削除する必要があります。 つまり、VirtualFree を呼び出すときにMEM_RELEASEを指定する必要があります。
  • アプリケーションは、重複していない場合に、複数のリージョンを同時にマップできます。
  • AWE を使用するアプリケーションはエミュレーション モードではサポートされていません。 つまり、AWE 関数を使用する x86 アプリケーションを再コンパイルして別のプロセッサで実行する必要があります。一方、ほとんどのアプリケーションは、他のプラットフォームのエミュレーターで再コンパイルせずに実行できます。

このソリューションは、非常に一般的で広く適用可能な方法で物理メモリの問題に対処します。 AWE の利点の一部は次のとおりです。

  • AWE メモリを操作するために、新しい関数の小さなグループが定義されています。
  • AWE は、非常に高速な再マップ機能を提供します。 再マップは、物理メモリ内のデータを移動することによってではなく、仮想メモリ テーブルを操作することによって行われます。
  • AWE では、プロセッサに適したページ サイズの細分性 (x86 では 4 KB など) が提供されます。これは、大きなページ (x86 では 2 MB や 4 MB など) よりもアプリケーションに便利です。

AWE を使用するには、アプリケーションに Lock Pages in Memory 権限が必要です。 この特権を取得するには、管理者がユーザーのユーザー権利の割り当てメモリ内のロック ページを追加する必要があります。 これを行う方法の詳細については、オペレーティング システムのヘルプの「ユーザー権限」を参照してください。

次の関数は、アドレス ウィンドウ拡張機能 (AWE) API を構成します。

機能 Description
VirtualAllocVirtualAllocEx MEM_PHYSICALを使用して、AWE に使用する仮想アドレス空間の一部を予約します。
AllocateUserPhysicalPages AWE で使用する物理メモリを割り当てます。
MapUserPhysicalPages AllocateUserPhysicalPages で取得した物理ページのセットに AWE 仮想アドレスをマップ (または無効化) します。
MapUserPhysicalPagesScatter AWE 仮想アドレスを AllocateUserPhysicalPages で取得した物理ページのセットにマップ (または無効化) しますが、 MapUserPhysicalPages によって提供されるものよりも細かい制御が可能です。
FreeUserPhysicalPages AWE に使用された空き物理メモリ。