Sdílet prostřednictvím


Rozšíření oken adres

Rozšíření AWE (Address Windowing Extensions) je sada rozšíření, která aplikaci umožňují rychle manipulovat s fyzickou pamětí větší než 4 GB. Některé aplikace náročné na data, jako jsou systémy pro správu databází a vědecký a technický software, potřebují přístup k velmi velkým mezipamětí dat. V případě velmi velkých datových sad je omezení mezipaměti tak, aby se vešla do 2 GB uživatelského adresního prostoru aplikace, je závažné omezení. V těchto situacích je mezipaměť příliš malá, aby správně podporovala aplikaci.

AWE tento problém řeší tím, že aplikacím umožňuje přímo řešit obrovské množství paměti a současně nadále používat 32bitové ukazatele. AWE umožňuje aplikacím ukládat data do mezipaměti větší než 4 GB (kde je dostatek fyzické paměti). AWE používá fyzickou nestránkovou paměť a zobrazení oken různých částí této fyzické paměti v rámci 32bitového virtuálního adresního prostoru.

AWE klade několik omezení, jak se tato paměť může používat, především proto, že tato omezení umožňují extrémně rychlé mapování, přemapování a uvolnění. Rychlá správa paměti je důležitá pro tyto potenciálně obrovské adresní prostory.

  • Rozsahy virtuálních adres přidělené pro AWE se nedají přesouvat s jinými procesy (a proto se nedědí). Ve skutečnosti dvě různé virtuální adresy AWE v rámci stejného procesu nesmějí mapovat stejnou fyzickou stránku. Tato omezení umožňují rychlé přemapování a vyčištění paměti při jejím uvolnění.
  • Fyzické stránky, které lze přidělit pro oblast AWE, jsou omezeny počtem fyzických stránek přítomných v počítači, protože tato paměť není nikdy stránkována – je uzamčena, dokud aplikace ji explicitně neuvolní nebo neskončí. Fyzické stránky přidělené danému procesu je možné namapovat na libovolnou virtuální oblast AWE v rámci stejného procesu. Aplikace, které používají AWE, musí být opatrné, aby nevyužívaly tolik fyzické paměti, že by způsobily nadměrné zatěžování stránkování ostatních aplikací nebo zabránily vytváření nových procesů či vláken kvůli nedostatku prostředků. K monitorování využití fyzické paměti použijte funkci GlobalMemoryStatusEx.
  • Virtuální adresy AWE jsou vždy pro čtení a zápis a nelze je chránit voláním VirtualProtect (to znamená, že nelze specifikovat paměť jen pro čtení, paměť bez přístupu, strážné stránky a podobně).
  • Rozsahy adres AWE nelze použít k ukládání dat do vyrovnávací paměti pro grafické volání nebo videohovory.
  • Rozsah paměti AWE nelze rozdělit ani odstranit jeho části. Místo toho musí být celý rozsah virtuálních adres v případě potřeby odstraněn jako jednotka. To znamená, že při volání VirtualFreemusíte zadat MEM_RELEASE .
  • Aplikace můžou mapovat více oblastí současně, pokud se nepřekrývají.
  • Aplikace, které používají AWE, nejsou podporovány v režimu emulace. To znamená, že aplikace x86, která používá funkce AWE, musí být znovu zkompilována, aby běžela na jiném procesoru, zatímco většina aplikací může běžet bez opětovného zkompilování pod emulátorem na jiných platformách.

Toto řešení řeší problémy s fyzickou pamětí velmi obecným a široce použitelným způsobem. Mezi výhody AWE patří:

  • Malá skupina nových funkcí je definována pro manipulaci s pamětí AWE.
  • AWE poskytuje velmi rychlou možnost přemapování. Přemapování se provádí manipulací s tabulkami virtuální paměti, nikoli přesunutím dat ve fyzické paměti.
  • AWE poskytuje členitost velikosti stránky odpovídající procesoru (například 4 kB na x86), což je užitečnější pro aplikace než velké stránky (například 2 MB nebo 4 MB na platformě x86).

Aby bylo možné používat AWE, musí mít aplikace oprávnění k uzamčení stránek v paměti. Chcete-li získat toto oprávnění, musí správce přidat Zamknout stránky v paměti do přiřazení uživatelských práv uživatele. Další informace o tom, jak to udělat, najdete v nápovědě k operačnímu systému v části Uživatelská práva.

Následující funkce tvoří rozhraní API AWE (Address Windowing Extensions).

Funkce Popis
VirtualAlloc a VirtualAllocEx Vyhraďte část virtuálního adresního prostoru pro použití pro AWE pomocí MEM_PHYSICAL.
AllocateUserPhysicalPages Přidělte fyzickou paměť pro použití s AWE.
MapUserPhysicalPages Mapovat (nebo zneplatnit) virtuální adresy AWE na libovolnou sadu fyzických stránek získaných pomocí AllocateUserPhysicalPages.
MapUserPhysicalPagesScatter Mapovat (nebo zneplatnit) virtuální adresy AWE na libovolnou sadu fyzických stránek získaných pomocí AllocateUserPhysicalPages, ale s jemnější kontrolou, než poskytuje MapUserPhysicalPages.
FreeUserPhysicalPages Volná fyzická paměť, která byla použita pro AWE.