L'image suivante montre comment un espace d'adressage virtuel de processus 32 bits est divisé :
Mais comment un espace d'adressage virtuel de processus 64 bits est-il divisé ?
Réponse acceptée :
x86
La carte de mémoire virtuelle x86 64 bits divise l'espace d'adressage en deux :la section inférieure (avec le bit supérieur défini sur 0) est l'espace utilisateur, la section supérieure (avec le bit supérieur défini sur 1) est l'espace noyau. (Notez que x86-64 définit les adresses "canoniques" "moitié inférieure" et "moitié supérieure", avec un nombre de bits effectivement limité à 48 ou 56 ; voir Wikipedia pour plus de détails.)
La carte complète est documentée en détail dans le noyau; actuellement il ressemble
Adresse de début | Décalage | Adresse de fin | Taille | Description de la zone VM |
---|---|---|---|---|
0000_0000_0000_0000 | 0000_7fff_ffff_ffff | 128 Tio | mémoire virtuelle de l'espace utilisateur | |
0000_8000_0000_0000 | +128 Tio | ffff_7fff_ffff_ffff | ~16 M Tio | non canonique |
ffff_8000_0000_0000 | -128 Tio | ffff_ffff_ffff_ffff | 128 Tio | mémoire virtuelle de l'espace noyau |
avec des adresses virtuelles 48 bits. (La variante 56 bits a la même structure, avec 64 PiB d'espace d'adressage utilisable de chaque côté d'un trou de 16 Ko PiB.)
(Notez que 16 KPiB =16MTiB =2 octets.)
Contrairement au cas 32 bits, la carte mémoire "64 bits" reflète directement les contraintes matérielles.
ARMER
ARM 64 bits a une distinction d'adresse similaire dans le matériel :les seize premiers bits sont 0 pour l'espace utilisateur, 1 pour l'espace noyau. Linux utilise 39, 42 ou 48 bits pour les adresses virtuelles, selon le nombre de niveaux de table de pages et la taille de la page. Avec ARMv8.2-LVA, quatre autres bits sont ajoutés, ce qui donne des adresses virtuelles de 52 bits.
Ceci est également documenté en détail dans le noyau.