位址視窗擴展
位址視窗擴展(AWE)是一組擴展,使應用程式可以快速操作大於 4GB 的實體記憶體。 某些需要大量數據的應用程式,例如資料庫管理系統和科學和工程軟體,都需要存取非常大量的數據快取。 在非常大的數據集的情況下,將快取限制在應用程式 2GB 的使用者位址空間內是一個嚴重的限制。 在這些情況下,快取太小,無法正確支持應用程式。
AWE 藉由允許應用程式在繼續使用 32 位元指標的同時,直接存取大量的記憶體來解決此問題。 AWE 可讓應用程式擁有大於 4GB 的數據快取(其中有足夠的物理記憶體存在)。 AWE 在 32 位虛擬位址空間中,使用物理非分頁記憶體以及對該物理記憶體不同部分的視窗檢視。
AWE 會限制此記憶體的使用方式,主要是因為這些限制允許非常快速的對應、重新對應和釋放。 快速記憶體管理對於這些潛在的巨大地址空間很重要。
- 配置給 AWE 的虛擬位址範圍無法與其他進程共用(因此不可繼承)。 事實上,在同一個進程中,不允許兩個不同的 AWE 虛擬位址映射到相同的實體頁面。 這些限制可在釋放記憶體時提供快速重新映射和資源回收。
- 可以配置給 AWE 區域的實體頁面受限於機器中現有的實體頁面數量,因為此記憶體不會被分頁,它會被鎖定,直到應用程式明確地將其釋放或結束為止。 為指定進程配置的實體頁面可以對應至相同進程中的任何 AWE 虛擬區域。 使用 AWE 的應用程式必須小心不要佔用太多物理記憶體,以免造成其他應用程式過度分頁,或因為資源不足而無法建立新的進程或線程。 使用 GlobalMemoryStatusEx 函式來監視物理記憶體使用量。
- AWE 虛擬位址一律為讀取/寫入,且無法透過呼叫 VirtualProtect 來保護。也就是說,無法指定為只讀記憶體、無法存取記憶體、防護頁面等。
- AWE 位址範圍無法用來緩衝圖形或視訊通話的數據。
- AWE 記憶體範圍無法分割,也無法刪除它的片段。 相反地,當需要刪除時,必須將整個虛擬位址範圍刪除為單位。 這表示您必須在呼叫 VirtualFree時指定MEM_RELEASE。
- 應用程式可以同時對應多個區域,但前提是它們不會重疊。
- 模擬模式不支援使用 AWE 的應用程式。 也就是說,使用 AWE 函式的 x86 應用程式必須重新編譯,才能在另一個處理器上執行,而大部分的應用程式可以在其他平臺上的模擬器下執行,而不需要重新編譯。
此解決方案會以非常一般、廣泛適用的方式解決物理記憶體問題。 AWE 的一些優點包括:
- 定義一小組新函式來操作 AWE 記憶體。
- AWE 提供非常快速的重新對應功能。 重新對應是藉由操作虛擬記憶體表來完成,而不是藉由移動物理記憶體中的數據來完成。
- AWE 提供適合處理器的頁面大小粒度(例如 x86 上的 4 KB),這對應用程式比大型頁面更有用(例如 x86 上的 2MB 或 4MB)。
應用程式必須具有鎖定記憶體中頁面的權限,才能使用 AWE。 若要取得此權限,系統管理員必須將 鎖定記憶體中的頁面 新增至使用者的 使用者權力指派。 如需有關如何執行此操作的詳細資訊,請參閱作業系統說明中的「使用者權限」。
下列函式組成位址視窗延伸模組 (AWE) API。
功能 | 描述 |
---|---|
VirtualAlloc 和 VirtualAllocEx | 使用 MEM_PHYSICAL,保留部分虛擬位址空間以用於 AWE。 |
分配用戶物理頁面 | 配置物理記憶體以搭配 AWE 使用。 |
MapUserPhysicalPages | 將 AWE 虛擬位址對應(或失效)至以 AllocateUserPhysicalPages 取得的任何一組實體頁面 。 |
MapUserPhysicalPagesScatter | 將 AWE 虛擬位址映射(或使其無效)至透過 AllocateUserPhysicalPages取得的實體頁面的任何一組,但具有比 MapUserPhysicalPages所提供的更精細的控制。 |
FreeUserPhysicalPages | 釋放用於 AWE 的實體記憶體。 |