Estensioni di windowing degli indirizzi

Address Windowing Extensions (AWE) è un set di estensioni che consente a un'applicazione di modificare rapidamente la memoria fisica maggiore di 4 GB. Alcune applicazioni a elevato utilizzo di dati, ad esempio sistemi di gestione di database e software scientifico e tecnico, devono accedere a cache di dati molto grandi. Nel caso di set di dati di dimensioni molto grandi, la limitazione della cache all'interno di 2 GB di spazio indirizzi utente di un'applicazione è una restrizione grave. In queste situazioni, la cache è troppo piccola per supportare correttamente l'applicazione.

AWE risolve questo problema consentendo alle applicazioni di risolvere direttamente grandi quantità di memoria continuando a usare puntatori a 32 bit. AWE consente alle applicazioni di avere cache di dati superiori a 4 GB (in cui è presente memoria fisica sufficiente). AWE usa la memoria fisica non in pagine e le visualizzazioni finestra di varie parti di questa memoria fisica all'interno di uno spazio indirizzi virtuale a 32 bit.

AWE pone alcune restrizioni sul modo in cui questa memoria può essere usata, principalmente perché queste restrizioni consentono un mapping estremamente rapido, il mapping e la liberazione. La gestione rapida della memoria è importante per questi spazi indirizzi potenzialmente enormi.

  • Gli intervalli di indirizzi virtuali allocati per AWE non sono condivisibili con altri processi e pertanto non ereditabili. Infatti, due indirizzi virtuali AWE diversi all'interno dello stesso processo non sono autorizzati a eseguire il mapping della stessa pagina fisica. Queste restrizioni consentono di eseguire rapidamente il mapping e la pulizia quando la memoria viene liberata.
  • Le pagine fisiche che è possibile allocare per un'area AWE sono limitate dal numero di pagine fisiche presenti nel computer, poiché questa memoria non viene mai inserita in pagine, viene bloccata fino a quando l'applicazione non lo libera o si chiude in modo esplicito. Le pagine fisiche allocate per un determinato processo possono essere mappate in qualsiasi area virtuale AWE all'interno dello stesso processo. Le applicazioni che usano AWE devono prestare attenzione a non accettare così tanta memoria fisica che causano una pagina eccessiva di altre applicazioni o impediscono la creazione di nuovi processi o thread a causa della mancanza di risorse. Usare la funzione GlobalMemoryStatusEx per monitorare l'uso della memoria fisica.
  • Gli indirizzi virtuali AWE sono sempre di lettura/scrittura e non possono essere protetti tramite chiamate a VirtualProtect ( ovvero non è possibile specificare memoria di sola lettura, memoria noaccess, pagine di protezione e così via).
  • Gli intervalli di indirizzi AWE non possono essere usati per memorizzare nel buffer i dati per le chiamate grafiche o video.
  • Non è possibile dividere un intervallo di memoria AWE, né eliminarlo. Al contrario, l'intero intervallo di indirizzi virtuali deve essere eliminato come unità quando è necessaria l'eliminazione. Ciò significa che è necessario specificare MEM_RELEASE quando si chiama VirtualFree.
  • Le applicazioni possono eseguire il mapping di più aree contemporaneamente, purché non si sovrappongano.
  • Le applicazioni che usano AWE non sono supportate in modalità di emulazione. Ovvero, un'applicazione x86 che usa funzioni AWE deve essere ricompilata per l'esecuzione in un altro processore, mentre la maggior parte delle applicazioni può essere eseguita senza ricompilare in un emulatore in altre piattaforme.

Questa soluzione risolve i problemi di memoria fisica in modo molto generale e ampiamente applicabile. Alcuni dei vantaggi di AWE sono:

  • Viene definito un piccolo gruppo di nuove funzioni per modificare la memoria AWE.
  • AWE offre una funzionalità di rimmapping molto veloce. Il mapping viene eseguito modificando le tabelle di memoria virtuale, non spostando i dati nella memoria fisica.
  • AWE fornisce la granularità delle dimensioni della pagina appropriata per il processore (ad esempio, 4 KB in x86), che è più utile per le applicazioni rispetto alle pagine di grandi dimensioni (ad esempio, 2 MB o 4 MB in x86).

Per usare AWE, un'applicazione deve avere il privilegio Lock Pages in Memory. Per ottenere questo privilegio, un amministratore deve aggiungere le pagine di blocco in memoria alle assegnazioni dei diritti utente dell'utente. Per altre informazioni su come eseguire questa operazione, vedere "Diritti utente" nella Guida del sistema operativo.

Le funzioni seguenti costituiscono l'API AWE (Address Windowing Extensions).

Funzione Descrizione
VirtualAlloc e VirtualAllocEx Riservare una parte dello spazio indirizzi virtuale da usare per AWE, usando MEM_PHYSICAL.
AllocateUserPhysicalPages Allocare memoria fisica per l'uso con AWE.
MapUserPhysicalPages Eseguire il mapping (o invalidare) gli indirizzi virtuali AWE in qualsiasi set di pagine fisiche ottenute con AllocateUserPhysicalPages.
MapUserPhysicalPagesScatter Eseguire il mapping (o invalidare) gli indirizzi virtuali AWE in qualsiasi set di pagine fisiche ottenute con AllocateUserPhysicalPages, ma con un controllo più corretto rispetto a quello fornito da MapUserPhysicalPages.
FreeUserPhysicalPages Memoria fisica libera usata per AWE.