Extensions de fenêtrage d’adresse

Address Windowing Extensions (AWE) est un ensemble d’extensions qui permet à une application de manipuler rapidement la mémoire physique supérieure à 4 Go. Certaines applications gourmandes en données, telles que les systèmes de gestion de base de données et les logiciels scientifiques et d’ingénierie, ont besoin d’accéder à des caches de données très volumineux. Dans le cas de jeux de données très volumineux, la restriction du cache pour qu’il s’intègre dans l’espace d’adressage utilisateur de 2 Go d’une application est une restriction sévère. Dans ces situations, le cache est trop petit pour prendre correctement en charge l’application.

AWE résout ce problème en permettant aux applications de traiter directement d’énormes quantités de mémoire tout en continuant à utiliser des pointeurs 32 bits. AWE permet aux applications d’avoir des caches de données supérieurs à 4 Go (où la mémoire physique est suffisante). AWE utilise la mémoire physique non pagée et les affichages de fenêtres de différentes parties de cette mémoire physique dans un espace d’adressage virtuel 32 bits.

AWE impose quelques restrictions sur la façon dont cette mémoire peut être utilisée, principalement parce que ces restrictions permettent un mappage, un remappage et une libération extrêmement rapides. La gestion rapide de la mémoire est importante pour ces espaces d’adressage potentiellement énormes.

  • Les plages d’adresses virtuelles allouées à l’AWE ne sont pas partageables avec d’autres processus (et ne peuvent donc pas être héritées). En fait, deux adresses virtuelles AWE différentes dans le même processus ne sont pas autorisées à mapper la même page physique. Ces restrictions fournissent un remapping et un nettoyage rapides lorsque la mémoire est libérée.
  • Les pages physiques qui peuvent être allouées pour une région AWE sont limitées par le nombre de pages physiques présentes sur l’ordinateur, car cette mémoire n’est jamais paginée : elle est verrouillée jusqu’à ce que l’application la libère explicitement ou se ferme. Les pages physiques allouées à un processus donné peuvent être mappées dans n’importe quelle région virtuelle AWE au sein du même processus. Les applications qui utilisent AWE doivent veiller à ne pas prendre tellement de mémoire physique qu’elles entraînent une page excessive d’autres applications ou empêchent la création de nouveaux processus ou threads en raison d’un manque de ressources. Utilisez la fonction GlobalMemoryStatusEx pour surveiller l’utilisation de la mémoire physique.
  • Les adresses virtuelles AWE sont toujours en lecture/écriture et ne peuvent pas être protégées via des appels à VirtualProtect (c’est-à-dire, aucune mémoire en lecture seule, aucune mémoire d’accès, pages de protection, etc. peuvent être spécifiées).
  • Les plages d’adresses AWE ne peuvent pas être utilisées pour mettre en mémoire tampon les données pour les appels graphiques ou vidéo.
  • Une plage de mémoire AWE ne peut pas être fractionnée, ni supprimer des parties de celle-ci. Au lieu de cela, l’ensemble de la plage d’adresses virtuelles doit être supprimé en tant qu’unité lorsque la suppression est requise. Cela signifie que vous devez spécifier MEM_RELEASE lors de l’appel de VirtualFree.
  • Les applications peuvent mapper plusieurs régions simultanément, à condition qu’elles ne se chevauchent pas.
  • Les applications qui utilisent AWE ne sont pas prises en charge en mode émulation. Autrement dit, une application x86 qui utilise des fonctions AWE doit être recompilée pour s’exécuter sur un autre processeur, tandis que la plupart des applications peuvent s’exécuter sans recompilation sous un émulateur sur d’autres plateformes.

Cette solution résout les problèmes de mémoire physique d’une manière très générale et largement applicable. Voici quelques-uns des avantages de l’AWE :

  • Un petit groupe de nouvelles fonctions est défini pour manipuler la mémoire AWE.
  • AWE fournit une fonctionnalité de remapping très rapide. Le remapping s’effectue en manipulant des tables de mémoire virtuelle, et non en déplaçant des données dans la mémoire physique.
  • AWE fournit une granularité de taille de page adaptée au processeur (par exemple, 4 Ko sur x86), ce qui est plus utile pour les applications que les grandes pages (par exemple, 2 Mo ou 4 Mo sur x86).

Une application doit avoir le privilège Verrouiller les pages en mémoire pour utiliser AWE. Pour obtenir ce privilège, un administrateur doit ajouter des pages de verrouillage en mémoire aux attributions de droits utilisateur de l’utilisateur. Pour plus d’informations sur la procédure à suivre, consultez « Droits de l’utilisateur » dans l’aide du système d’exploitation.

Les fonctions suivantes constituent l’API AWE (Address Windowing Extensions).

Fonction Description
VirtualAlloc et VirtualAllocEx Réservez une partie de l’espace d’adressage virtuel à utiliser pour AWE, à l’aide de MEM_PHYSICAL.
AllocateUserPhysicalPages Allouer de la mémoire physique à utiliser avec AWE.
MapUserPhysicalPages Mapper (ou invalider) des adresses virtuelles AWE sur n’importe quel ensemble de pages physiques obtenues avec AllocateUserPhysicalPages.
MapUserPhysicalPagesScatter Mapper (ou invalider) des adresses virtuelles AWE sur n’importe quel ensemble de pages physiques obtenues avec AllocateUserPhysicalPages, mais avec un contrôle plus fin que celui fourni par MapUserPhysicalPages.
FreeUserPhysicalPages Libérer la mémoire physique utilisée pour AWE.