Si l'espace d'adressage virtuel peut être plus grand que l'espace d'adressage physique, comment les mappages d'adresses sont-ils stockés en mémoire?

14

Disons que nous travaillons avec un système qui a 40 bits d'adresse physique. L'espace d'adressage physique total (en supposant que la mémoire est adressable en octets) est de octets, soit 1 TiB. Et si les adresses virtuelles ont une longueur de 48 bits, cela signifie qu'il y a plus d'adresses disponibles pour la mémoire virtuelle qu'il n'y a d'emplacements dans la mémoire physique.240

Cela a du sens pour moi, car les adresses "en excès" peuvent également faire référence aux emplacements de disque dur. Cependant, ce que je ne comprends pas, c'est comment la traduction entre les adresses virtuelles et physiques se produit. Je suppose qu'il existe une cartographie stockée quelque part qui relie les emplacements VAS aux emplacements physiques. S'il y a plus d'emplacements d'adresses virtuelles que d'emplacements physiques, comment tous ces mappages peuvent-ils être stockés en mémoire? Au minimum, vous auriez besoin de 48 bits pour stocker chaque adresse virtuelle, puis de 40 autres pour stocker l'emplacement physique auquel elle est mappée. Donc, évidemment, vous ne pouvez pas simplement stocker un mappage 1: 1 de chaque adresse virtuelle avec son homologue physique, car le mappage de chaque emplacement prendrait plus de mémoire que la mémoire physique elle-même.

Qu'est-ce que je manque exactement ici?

Brad Power
la source
Vous ne pouvez pas le faire même avec une petite quantité de mémoire et d'espace d'adressage. Si vous aviez des adresses physiques 16 bits et des adresses virtuelles 16 bits, vous ne seriez toujours pas en mesure de stocker tous les mappages 1: 1!
user253751
2
Le problème est plus complexe que vous ne le pensez. Les ordinateurs ont rarement une To de mémoire, donc la mémoire physique est bien MOINS que l'espace d'adressage virtuel. Pire encore: chaque processus a son espace d'adressage virtuel entièrement séparé!
Mooing Duck
En plus des emplacements de disque dur, vous avez juste des bits / espace à perdre. Par exemple, vous pouvez avoir une grande région sous la pile non mappée pour éviter les débordements non détectés. Vous pouvez randomiser ce que vous chargez en empêchant une autre classe d'attaques . Vous voulez indiquer un seul bit si l'adresse appartient au noyau ou à l'utilisateur - allez-y même si vous perdez la moitié de l'espace. Alors que la plupart des manuels se concentrent sur la pagination de l'aspect de la mémoire virtuelle, il y en a beaucoup plus.
Maciej Piechotka
(Notez également que les adresses peuvent être alias, ce qui est parfois utile, donc VA A et l'adresse B font référence au même PA P même si A! = B.)
Maciej Piechotka

Réponses:

26

L'astuce pour faire ce travail est la «pagination». Lorsque vous importez des données d'un disque dur dans la mémoire physique, vous n'apportez pas seulement quelques octets. Vous apportez une page entière. 4k octets est une taille de page très courante.

Si vous avez seulement besoin de garder une trace des pages, pas de chaque octet individuel, le mappage devient beaucoup moins cher. Si vous avez un espace d'adressage de 48 bits et des pages de 4096 octets, il vous suffit de suivre laquelle des 2 ^ 36 pages (environ 69 milliards de pages). C'est beaucoup plus simple! L'enregistrement de l'emplacement de toutes les pages est appelé «tableau de pages».

Si vous avez réellement besoin de 1 à 256 To de mémoire, abandonner quelques gigaoctets pour stocker ce tableau de pages n'est pas un gros problème. Dans la pratique, cependant, nous allons faire des choses comme utiliser des tables de pages à plusieurs niveaux , ce qui nous permet d'être un peu plus efficaces, en ne conservant les pages que pour les régions de l'espace d'adressage que nous utilisons réellement.

Cort Ammon
la source
6
Un fichier d'échange est un terme Windows pour un fichier physique sur disque contenant le contenu des cadres de pages physiques qui ont été récupérés par manque de mémoire, dont le contenu doit être conservé. Si je ne me trompe pas, la structure de données mappant les adresses de pages virtuelles aux adresses de pages physiques devrait être appelée une table de pages .
Rétablir Monica - ζ--
@hexafraction Je pense que vous avez raison. J'ai fait le changement.
Cort Ammon
2
Lorsque la mémoire réelle est volumineuse, une autre façon de réduire la mémoire requise pour les tableaux de pages consiste à autoriser des pages plus grandes. x86 a une option pour mélanger 4 pages KiB avec 2/4 pages MiB.
Nate Eldredge