Extensões de janela de endereço

A AWE (Extensões de Janela de Endereço) é um conjunto de extensões que permite que um aplicativo manipule rapidamente a memória física com mais de 4 GB. Determinados aplicativos com uso intensivo de dados, como sistemas de gerenciamento de banco de dados e software científico e de engenharia, precisam de acesso a caches muito grandes de dados. No caso de conjuntos de dados muito grandes, restringir o cache para caber dentro de 2 GB de espaço de endereço de usuário de um aplicativo é uma restrição severa. Nessas situações, o cache é muito pequeno para dar suporte adequado ao aplicativo.

A AWE resolve esse problema permitindo que os aplicativos resolvam diretamente grandes quantidades de memória enquanto continuam a usar ponteiros de 32 bits. A AWE permite que os aplicativos tenham caches de dados maiores que 4 GB (onde há memória física suficiente). A AWE usa exibições físicas de memória nãopagada e janela de várias partes dessa memória física em um espaço de endereço virtual de 32 bits.

A AWE coloca algumas restrições sobre como essa memória pode ser usada, principalmente porque essas restrições permitem mapeamento, remapeamento e liberação extremamente rápidos. O gerenciamento rápido de memória é importante para esses espaços de endereço potencialmente enormes.

  • Os intervalos de endereços virtuais alocados para a AWE não são fragmentáveis com outros processos (e, portanto, não herdáveis). Na verdade, dois endereços virtuais diferentes da AWE dentro do mesmo processo não têm permissão para mapear a mesma página física. Essas restrições fornecem remapeamento rápido e limpeza quando a memória é liberada.
  • As páginas físicas que podem ser alocadas para uma região do AWE são limitadas pelo número de páginas físicas presentes no computador, pois essa memória nunca é paginada – ela é bloqueada até que o aplicativo a libere ou saia explicitamente. As páginas físicas alocadas para um determinado processo podem ser mapeadas para qualquer região virtual da AWE dentro do mesmo processo. Os aplicativos que usam a AWE devem ter cuidado para não tirar tanta memória física que fazem com que outros aplicativos façam a página excessivamente ou impeçam a criação de novos processos ou threads devido à falta de recursos. Use a função GlobalMemoryStatusEx para monitorar o uso de memória física.
  • Os endereços virtuais da AWE são sempre leitura/gravação e não podem ser protegidos por meio de chamadas para VirtualProtect (ou seja, nenhuma memória somente leitura, memória de acesso, páginas de proteção e similares podem ser especificadas).
  • Os intervalos de endereços AWE não podem ser usados para armazenar dados em buffer para chamadas gráficas ou de vídeo.
  • Um intervalo de memória AWE não pode ser dividido, nem partes dela podem ser excluídas. Em vez disso, todo o intervalo de endereços virtuais deve ser excluído como uma unidade quando a exclusão é necessária. Isso significa que você deve especificar MEM_RELEASE ao chamar VirtualFree.
  • Os aplicativos podem mapear várias regiões simultaneamente, desde que não se sobreponham.
  • Não há suporte para aplicativos que usam a AWE no modo de emulação. Ou seja, um aplicativo x86 que usa funções AWE deve ser recompilado para ser executado em outro processador, enquanto a maioria dos aplicativos pode ser executada sem recompilar em um emulador em outras plataformas.

Essa solução aborda os problemas de memória física de maneira muito geral e amplamente aplicável. Alguns dos benefícios da AWE são:

  • Um pequeno grupo de novas funções é definido para manipular a memória do AWE.
  • A AWE fornece uma funcionalidade de remapeamento muito rápida. O remapeamento é feito manipulando tabelas de memória virtual, não movendo dados na memória física.
  • A AWE fornece granularidade de tamanho de página apropriada para o processador (por exemplo, 4 KB em x86), o que é mais útil para aplicativos do que páginas grandes (por exemplo, 2 MB ou 4 MB em x86).

Um aplicativo deve ter o privilégio Bloquear Páginas na Memória para usar o AWE. Para obter esse privilégio, um administrador deve adicionar Páginas de Bloqueio na Memória às Atribuições de Direitos de Usuário do usuário. Para obter mais informações sobre como fazer isso, consulte "Direitos de Usuário" na ajuda do sistema operacional.

As funções a seguir compõem a API AWE (Extensões de Janela de Endereço).

Função Descrição
VirtualAlloc e VirtualAllocEx Reserve uma parte do espaço de endereço virtual a ser usado para a AWE, usando MEM_PHYSICAL.
AllocateUserPhysicalPages Alocar memória física para uso com a AWE.
MapUserPhysicalPages Mapeie (ou invalide) endereços virtuais da AWE em qualquer conjunto de páginas físicas obtidas com AllocateUserPhysicalPages.
MapUserPhysicalPagesScatter Mapeie (ou invalide) endereços virtuais da AWE em qualquer conjunto de páginas físicas obtidas com AllocateUserPhysicalPages, mas com um controle mais fino do que o fornecido por MapUserPhysicalPages.
FreeUserPhysicalPages Memória física livre que foi usada para a AWE.