位址視窗延伸模組
位址視窗化延伸模組 (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 (位址視窗延伸模組。
| 函式 | 描述 |
|---|---|
| VirtualAlloc和VirtualAllocEx | 使用 MEM_PHYSICAL,保留一部分虛擬位址空間以用於 AWE。 |
| AllocateUserPhysicalPages | 配置實體記憶體以搭配 AWE 使用。 |
| MapUserPhysicalPages | 將 (或) AWE 虛擬位址對應至使用 AllocateUserPhysicalPages取得的任何實體頁面集。 |
| MapUserPhysicalPagesScatter | 將 (或無效) AWE 虛擬位址對應到 使用 AllocateUserPhysicalPages取得的任何實體頁面集,但具有比 MapUserPhysicalPages所提供的更精細控制。 |
| FreeUserPhysicalPages | 釋放用於 AWE 的實體記憶體。 |