位址視窗延伸模組

位址視窗延伸模組 (AWE) 是一組延伸模組,可讓應用程式快速操作大於 4GB 的實體記憶體。 某些需要大量資料的應用程式,例如資料庫管理系統和科學和工程軟體,都需要存取非常大型的資料快取。 在非常大型的資料集的情況下,限制快取以符合應用程式的 2GB 使用者位址空間是嚴重的限制。 在這些情況下,快取太小,無法正確支援應用程式。

AWE 藉由允許應用程式直接解決大量的記憶體,同時繼續使用 32 位指標來解決此問題。 AWE 可讓應用程式的資料快取大於 4GB (,其中有足夠的實體記憶體存在) 。 AWE 會在 32 位虛擬位址空間內,使用此實體記憶體各種部分的實體非分頁式記憶體和視窗檢視。

AWE 會限制如何使用此記憶體,主要是因為這些限制允許非常快速的對應、重新對應和釋放。 快速記憶體管理對於這些可能龐大的位址空間很重要。

  • 配置給 AWE 的虛擬位址範圍無法與其他進程共用 (,因此無法繼承) 。 事實上,相同程式中不允許兩個不同的 AWE 虛擬位址對應相同的實體頁面。 這些限制可在釋放記憶體時提供快速重新對應和清除。
  • 可以配置給 AWE 區域的實體頁面會受限於機器中存在的實體頁面數目,因為此記憶體永遠不會分頁– 直到應用程式明確釋放或結束為止,才會鎖定它。 配置給指定進程的實體頁面可以對應至相同進程內的任何 AWE 虛擬區域。 使用 AWE 的應用程式必須小心,不要佔用太多實體記憶體,導致其他應用程式過度分頁,或防止因為資源不足而建立新的進程或執行緒。 使用 GlobalMemoryStatusEx 函式來監視實體記憶體使用量。
  • AWE 虛擬位址一律為讀取/寫入,無法透過對 VirtualProtect 的呼叫來保護 (,也就是沒有唯讀記憶體、noaccess 記憶體、防護頁面等等,可以在) 指定。
  • AWE 位址範圍無法用來緩衝處理圖形或視訊通話的資料。
  • AWE 記憶體範圍無法分割,也無法刪除它的片段。 相反地,需要刪除時,必須將整個虛擬位址範圍刪除為單位。 這表示您必須在呼叫VirtualFree時指定MEM_RELEASE
  • 應用程式可以同時對應多個區域,前提是它們不會重迭。
  • 模擬模式不支援使用 AWE 的應用程式。 也就是說,使用 AWE 函式的 x86 應用程式必須重新編譯,才能在另一個處理器上執行,而大部分的應用程式可以在其他平臺上的模擬器下執行而不重新編譯。

此解決方案以非常一般、廣泛適用的方式解決實體記憶體問題。 AWE 的一些優點包括:

  • 系統會定義一小組新的函式來操作 AWE 記憶體。
  • AWE 提供非常快速的重新對應功能。 重新對應是透過操作虛擬記憶體資料表來完成,而不是藉由在實體記憶體中移動資料來完成。
  • AWE 提供適用于處理器 (的頁面大小細微性,例如 x86) 上的 4 KB,比大型頁面 (的應用程式更實用,例如 x86) 上的 2MB 或 4MB。

應用程式必須具有 [鎖定記憶體中的頁面] 許可權,才能使用 AWE。 若要取得此許可權,系統管理員必須將 [鎖定記憶體中的頁面 ] 新增至使用者的 [使用者權限指派]。 如需如何執行這項操作的詳細資訊,請參閱作業系統說明中的。

下列函式組成 AWE) API (位址視窗延伸模組。

函式 描述
VirtualAllocVirtualAllocEx 使用 MEM_PHYSICAL,保留一部分虛擬位址空間以供 AWE 使用。
AllocateUserPhysicalPages 配置實體記憶體以搭配 AWE 使用。
MapUserPhysicalPages 將 (或失效) AWE 虛擬位址對應至使用 AllocateUserPhysicalPages取得的任何一組實體頁面。
MapUserPhysicalPagesScatter 將 (或無效) AWE 虛擬位址對應至 使用 AllocateUserPhysicalPages取得的任何實體頁面集,但具有比 MapUserPhysicalPages所提供的更精細控制。
FreeUserPhysicalPages 釋放用於 AWE 的實體記憶體。