Extensiones de ventana de direcciones

Address Windowing Extensions (AWE) es un conjunto de extensiones que permite a una aplicación manipular rápidamente la memoria física superior a 4 GB. Algunas aplicaciones que consumen muchos datos, como los sistemas de administración de bases de datos y el software científico e de ingeniería, necesitan acceso a cachés muy grandes de datos. En el caso de conjuntos de datos muy grandes, restringir la memoria caché para que se ajuste a los 2 GB de espacio de direcciones de usuario de una aplicación es una restricción grave. En estas situaciones, la memoria caché es demasiado pequeña para admitir correctamente la aplicación.

AWE resuelve este problema al permitir que las aplicaciones aborden directamente grandes cantidades de memoria mientras continúan usando punteros de 32 bits. AWE permite a las aplicaciones tener cachés de datos de más de 4 GB (donde hay suficiente memoria física). AWE usa vistas físicas de memoria no paginada y ventana de varias partes de esta memoria física dentro de un espacio de direcciones virtuales de 32 bits.

AWE coloca algunas restricciones sobre cómo se puede usar esta memoria, principalmente porque estas restricciones permiten una asignación extremadamente rápida, reasignación y libreción. La administración rápida de memoria es importante para estos espacios de direcciones potencialmente enormes.

  • Los intervalos de direcciones virtuales asignados para AWE no se pueden compartir con otros procesos (y, por lo tanto, no se pueden heredar). De hecho, no se permite asignar la misma página física a dos direcciones virtuales AWE diferentes dentro del mismo proceso. Estas restricciones proporcionan reasignación rápida y limpieza cuando se libera memoria.
  • Las páginas físicas que se pueden asignar para una región de AWE están limitadas por el número de páginas físicas presentes en el equipo, ya que esta memoria nunca está paginada, se bloquea hasta que la aplicación lo libera o sale explícitamente. Las páginas físicas asignadas para un proceso determinado se pueden asignar a cualquier región virtual de AWE dentro del mismo proceso. Las aplicaciones que usan AWE deben tener cuidado de no tomar tanta memoria física que hacen que otras aplicaciones se paginan excesivamente o impidan la creación de nuevos procesos o subprocesos debido a la falta de recursos. Use la función GlobalMemoryStatusEx para supervisar el uso de memoria física.
  • Las direcciones virtuales de AWE siempre son de lectura y escritura y no se pueden proteger a través de llamadas a VirtualProtect (es decir, sin memoria de solo lectura, memoria de no acceso, páginas de protección y como se puede especificar).
  • Los intervalos de direcciones AWE no se pueden usar para almacenar en búfer los datos de gráficos o videollamadas.
  • No se puede dividir un intervalo de memoria de AWE ni tampoco se pueden eliminar partes de ella. En su lugar, todo el intervalo de direcciones virtuales debe eliminarse como una unidad cuando se requiera la eliminación. Esto significa que debe especificar MEM_RELEASE al llamar a VirtualFree.
  • Las aplicaciones pueden asignar varias regiones simultáneamente, siempre que no se superpongan.
  • Las aplicaciones que usan AWE no se admiten en modo de emulación. Es decir, se debe volver a compilar una aplicación x86 que use funciones AWE para ejecutarse en otro procesador, mientras que la mayoría de las aplicaciones se pueden ejecutar sin volver a compilar en un emulador en otras plataformas.

Esta solución soluciona los problemas de memoria física de una manera muy general y ampliamente aplicable. Algunas de las ventajas de AWE son:

  • Se define un pequeño grupo de funciones nuevas para manipular la memoria de AWE.
  • AWE proporciona una funcionalidad de reasignación muy rápida. La reasignación se realiza manipulando tablas de memoria virtual, no moviendo datos en memoria física.
  • AWE proporciona granularidad de tamaño de página adecuada al procesador (por ejemplo, 4 KB en x86), que es más útil para las aplicaciones que las páginas grandes (por ejemplo, 2 MB o 4 MB en x86).

Una aplicación debe tener el privilegio Bloquear páginas en memoria para usar AWE. Para obtener este privilegio, un administrador debe agregar Bloquear páginas en memoria a las asignaciones de derechos de usuario del usuario. Para obtener más información sobre cómo hacerlo, consulte "Derechos de usuario" en la ayuda del sistema operativo.

Las siguientes funciones componen la API de extensiones de ventanas de direcciones (AWE).

Función Descripción
VirtualAlloc y VirtualAllocEx Reserve una parte del espacio de direcciones virtuales que se usará para AWE, mediante MEM_PHYSICAL.
AllocateUserPhysicalPages Asigne memoria física para su uso con AWE.
MapUserPhysicalPages Asignar (o invalidar) direcciones virtuales de AWE en cualquier conjunto de páginas físicas obtenidas con AllocateUserPhysicalPages.
MapUserPhysicalPagesScatter Asignar (o invalidar) direcciones virtuales de AWE en cualquier conjunto de páginas físicas obtenidas con AllocateUserPhysicalPages, pero con un control más fino que el proporcionado por MapUserPhysicalPages.
FreeUserPhysicalPages Memoria física libre que se usó para AWE.