Adressfönstertillägg
Adressfönstertillägg (AWE) är en uppsättning tillägg som gör att ett program snabbt kan manipulera fysiskt minne som är större än 4 GB. Vissa dataintensiva program, till exempel databashanteringssystem och vetenskaplig och teknisk programvara, behöver åtkomst till mycket stora datacacheminnen. När det gäller mycket stora datauppsättningar är det en allvarlig begränsning att begränsa cachen så att den får plats i ett programs 2 GB användaradressutrymme. I dessa situationer är cachen för liten för att programmet ska kunna stödjas korrekt.
AWE löser det här problemet genom att tillåta program att direkt hantera stora mängder minne samtidigt som de fortsätter att använda 32-bitarspekare. Med AWE kan program ha datacacheminnen som är större än 4 GB (där tillräckligt med fysiskt minne finns). AWE använder fysiskt icke-sidsidigt minne och fönstervyer av olika delar av det här fysiska minnet inom ett 32-bitars virtuellt adressutrymme.
AWE har några begränsningar för hur det här minnet kan användas, främst på grund av att dessa begränsningar tillåter extremt snabb mappning, ommappning och frigöring. Snabb minneshantering är viktigt för dessa potentiellt enorma adressutrymmen.
- Virtuella adressintervall som allokerats för AWE kan inte delas med andra processer (och kan därför inte ärva). Faktum är att två olika virtuella AWE-adresser inom samma process inte tillåts mappa samma fysiska sida. Dessa begränsningar ger snabb ommappning och rensning när minnet frigörs.
- De fysiska sidor som kan allokeras för en AWE-region begränsas av antalet fysiska sidor som finns i maskinen, eftersom det här minnet aldrig pagineras – det hålls låst tills programmet uttryckligen frigör det eller avslutar. De fysiska sidor som allokerats för en viss process kan mappas till valfri virtuell AWE-region inom samma process. Program som använder AWE måste vara noga med att inte ta så mycket fysiskt minne att de gör att andra program kan sidför mycket eller förhindra att nya processer eller trådar skapas på grund av brist på resurser. Använd funktionen GlobalMemoryStatusEx för att övervaka användningen av fysiskt minne.
- Virtuella AWE-adresser är alltid skrivskyddade och kan inte skyddas via anrop till VirtualProtect (d.v.s. inget skrivskyddat minne, ingetåtkomstminne, skyddssidor och liknande kan anges).
- AWE-adressintervall kan inte användas för att buffra data för grafik- eller videosamtal.
- Det går inte att dela upp ett AWE-minnesintervall och delar av det kan inte heller tas bort. I stället måste hela det virtuella adressintervallet tas bort som en enhet när borttagning krävs. Det innebär att du måste ange MEM_RELEASE när du anropar VirtualFree.
- Program kan mappa flera regioner samtidigt, förutsatt att de inte överlappar varandra.
- Program som använder AWE stöds inte i emuleringsläge. Ett x86-program som använder AWE-funktioner måste alltså kompileras om för att köras på en annan processor, medan de flesta program kan köras utan omkompilering under en emulator på andra plattformar.
Den här lösningen hanterar problem med fysiskt minne på ett mycket allmänt och allmänt tillämpligt sätt. Några av fördelarna med AWE är:
- En liten grupp nya funktioner definieras för att manipulera AWE-minne.
- AWE ger en mycket snabb ommappningsfunktion. Ommappning görs genom att manipulera virtuella minnestabeller, inte genom att flytta data i fysiskt minne.
- AWE tillhandahåller sidstorlekskornighet som är lämplig för processorn (till exempel 4 KB på x86), vilket är mer användbart för program än stora sidor (till exempel 2 MB eller 4 MB på x86).
Ett program måste ha behörigheten Lås sidor i minnet för att kunna använda AWE. För att få den här behörigheten måste en administratör lägga till Lås sidor i minnet till användarens tilldelningar av användarrättigheter. Mer information om hur du gör detta finns i "Användarrättigheter" i operativsystemets hjälp.
Följande funktioner utgör API:et för adressfönstertillägg (AWE).
Funktion | Beskrivning |
---|---|
VirtualAlloc och VirtualAllocEx | Reservera en del av det virtuella adressutrymme som ska användas för AWE med hjälp av MEM_PHYSICAL. |
AllocateUserPhysicalPages | Allokera fysiskt minne för användning med AWE. |
MapUserPhysicalPages | Mappa (eller ogiltigförklara) virtuella AWE-adresser till alla fysiska sidor som hämtas med AllocateUserPhysicalPages. |
MapUserPhysicalPagesScatter | Mappa (eller ogiltigförklara) virtuella AWE-adresser till alla fysiska sidor som hämtas med AllocateUserPhysicalPages, men med finare kontroll än den som tillhandahålls av MapUserPhysicalPages. |
FriaAnvändarFysiskaSidor | Ledigt fysiskt minne som användes för AWE. |