Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les processeurs utilisent des adresses virtuelles lors de la lecture ou de l’écriture dans des emplacements de mémoire. Pendant ces opérations, le processeur convertit l’adresse virtuelle en une adresse physique.
Il existe plusieurs avantages pour accéder à la mémoire à l’aide d’adresses virtuelles :
Un programme peut utiliser une plage contiguë d’adresses virtuelles pour accéder à une mémoire tampon de mémoire volumineuse et non liée à la mémoire physique.
Un programme peut utiliser une plage d’adresses virtuelles pour accéder à une mémoire tampon de mémoire supérieure à la mémoire physique disponible. Lorsque la mémoire physique est faible, le gestionnaire de mémoire enregistre les pages de mémoire physique (généralement 4 kilo-octets de taille) dans un fichier de disque. Le système déplace les pages de données ou de code entre la mémoire physique et le disque en fonction des besoins.
Les adresses virtuelles utilisées par différents processus sont isolées. Le code d’un processus ne peut pas modifier la mémoire physique utilisée par un autre processus ou le système d’exploitation.
La plage d’adresses virtuelles disponibles pour un processus est appelée espace d’adressage virtuel du processus. Chaque processus en mode utilisateur possède son propre espace d’adressage virtuel privé.
Un processus 32 bits a généralement un espace d’adressage virtuel dans la plage de 2 gigaoctets 0x00000000 via 0x7FFFFFFF.
Un processus 64 bits sur Windows 64 bits a un espace d’adressage virtuel dans la plage de 128 téraoctets 0x000'00000000 à 0x7FFF’FFFFFFFF.
Une plage d’adresses virtuelles est parfois appelée plage de mémoire virtuelle. Pour plus d’informations, consultez Limites d’espace d’adressage et de mémoire.
Le diagramme suivant illustre certaines fonctionnalités clés des espaces d’adressage virtuels.
Le diagramme montre les espaces d’adressage virtuels pour deux processus 64 bits : Notepad.exe et MyApp.exe. Chaque processus a son propre espace d’adressage virtuel, allant de 0x000'00000000 à 0x7FF’FFFFFFFF. Chaque bloc ombré représente une page (4 kilo-octets de taille) de mémoire virtuelle ou physique. Le processus du Bloc-notes utilise trois pages contiguës d’adresses virtuelles, à partir de 0x7F7'93950000. Toutefois, ces trois pages contiguës d’adresses virtuelles sont mappées à des pages non contiguës en mémoire physique. En outre, les deux processus utilisent une page de mémoire virtuelle commençant à 0x7F7'939500000, mais ces pages virtuelles correspondent à différentes pages de mémoire physique.
Espace utilisateur et espace système
Les processus tels que Notepad.exe et MyApp.exe s’exécutent en mode utilisateur. Les composants principaux du système d’exploitation et de nombreux pilotes s’exécutent en mode noyau plus privilégié. Pour plus d’informations sur les modes processeur, consultez le mode utilisateur et le mode noyau.
Chaque processus en mode utilisateur possède son propre espace d’adressage virtuel privé, mais tout le code qui s’exécute en mode noyau partage un espace d’adressage virtuel unique appelé espace système. L’espace d’adressage virtuel d’un processus en mode utilisateur est appelé espace utilisateur.
Dans Windows 32 bits, l’espace d’adressage virtuel disponible total est de 2^32 octets (4 gigaoctets). En règle générale, les 2 gigaoctets inférieurs sont utilisés pour l’espace utilisateur et les 2 gigaoctets supérieurs sont utilisés pour l’espace système.
Dans Windows 32 bits, vous pouvez spécifier (au moment du démarrage) que plus de 2 gigaoctets sont disponibles pour l’espace utilisateur. Toutefois, cela signifie que moins d’adresses virtuelles sont disponibles pour l’espace système. Vous pouvez augmenter la taille de l’espace utilisateur jusqu’à 3 gigaoctets, ce qui laisse seulement 1 gigaoctet pour l’espace système. Pour augmenter la taille de l’espace utilisateur, utilisez BCDEdit /set increaseuserva.
Dans Windows 64 bits, la quantité théorique d’espace d’adressage virtuel est de 2^64 octets (16 exabytes), mais seule une petite partie de la plage 16-exabyte est réellement utilisée.
Le code exécuté en mode utilisateur peut accéder à l’espace utilisateur, mais pas à l’espace système. Cette restriction empêche le code en mode utilisateur de lire ou de modifier les structures de données du système d’exploitation protégées. Le code exécuté en mode noyau peut accéder à l’espace utilisateur et à l’espace système. Autrement dit, le code exécuté en mode noyau peut accéder à l’espace système et à l’espace d’adressage virtuel du processus en mode utilisateur actuel.
Les pilotes de périphérique s’exécutant en mode noyau doivent être prudents lors de la lecture directe ou de l’écriture dans des adresses de l’espace utilisateur. Le scénario suivant illustre pourquoi.
Un programme en mode utilisateur lance une demande de lecture de données à partir d’un appareil. Le programme fournit l’adresse de départ d’une mémoire tampon pour recevoir les données.
Une routine de pilote de périphérique, en mode noyau, démarre l’opération de lecture et retourne le contrôle à son appelant.
Plus tard, l’appareil interrompt le thread en cours d’exécution pour indiquer que l’opération de lecture est terminée. Les routines de pilotes en mode noyau gèrent l’interruption sur ce thread arbitraire, qui appartient à un processus arbitraire.
À ce stade, le pilote ne doit pas écrire les données à l’adresse de départ fournie par le programme en mode utilisateur fourni à l’étape 1. Cette adresse se trouve dans l’espace d’adressage virtuel du processus qui a lancé la demande, ce qui n’est probablement pas le même que le processus actuel.
Pool paginé et pool non paginé
Dans l'espace utilisateur, toutes les pages de mémoire physique peuvent être écrites sur un fichier disque selon les besoins. Dans l’espace système, certaines pages physiques peuvent être paginées et d’autres ne peuvent pas. L’espace système comporte deux régions pour allouer dynamiquement la mémoire : pool paginé et pool non paginé.
La mémoire allouée dans le pool paginé peut être transférée dans un fichier sur disque selon les besoins. La mémoire allouée dans un pool non paginé ne peut jamais être paginée sur un fichier disque.