Sur l'architecture x86, pourquoi y a-t-il moins de bits pour l'espace d'adressage virtuel que d'espace physique?

11

Je lisais cet article sur l'informatique 64 bits, et il mentionne:

Par exemple, l'architecture AMD64 en 2011 autorisait 52 bits pour la mémoire physique et 48 bits pour la mémoire virtuelle

Je pense qu'il serait plus logique de permettre plus de mémoire virtuelle que de mémoire physique, alors pourquoi est-ce vraiment l'inverse?

Question bonus: que signifie "autoriser" 52 ou 48 bits sur une architecture 64 bits? À quoi servent les autres bits?

dougvk
la source
Pour x86, les bits VA non utilisés doivent être une extension de signe du MSbit du VA. (ARM AArch64 offre la possibilité d'autoriser 8 MSbits à être ignorés par le matériel afin qu'ils puissent être facilement utilisés pour les balises. Le processeur Azul Systems Vega - qui fait partie d'une appliance Java - a fourni 16 bits de VA à utiliser pour les balises.) Dans le tableau des pages, les bits PA réservés doivent être nuls (principalement pour garantir que le logiciel n'essaie pas de les utiliser et de rompre la compatibilité avec le matériel ultérieur).
Paul A. Clayton

Réponses:

11

Voici une image d'un tableau de pages AMD64 (extrait du Guide du programmeur d'architecture AMD, Vol. 2, Rev 3.23, 2013, page 132).

Table de pages AMD64 Longmode

La taille "naturelle" d'une page dans l'architecture AMD64 est de 2 12 = 4096 octets. (Il existe des modes dans lesquels vous pouvez avoir 2 pages de 21 = 2 Mo, mais nous allons les ignorer pour l'instant.)

Chaque entrée de table de page (PTE) (ou, selon le niveau appelé PDE, PDPE ou PML4E) est de 64 bits = 2 3 octets. Il y a donc 2 9 entrées par page. Ainsi, 4 niveaux de table de pages vous permettent d'obtenir 4x9 + 12 = 48 bits d'adresse virtuelle par processus. Marcher sur la table des pages coûte cher, donc ils ne s'étendent pas à 5 ou 6 niveaux à moins que / jusqu'à ce qu'il y ait une demande des consommateurs.

Je ne sais pas pourquoi ils ont décidé d'une limite d'adresse physique de 52 bits. Cela peut être étendu jusqu'à 63 bits à l'avenir. Aux prix d'octobre 2013 (environ 1US $ / Gigabit pour les puces 4Gbit), il coûterait plus de 32000000,00 $ US pour construire une mémoire de 2 52 octets, il faudra donc un certain temps avant qu'il n'y ait une demande importante pour augmenter la limite d'adresse physique. Il y a toutes sortes de raisons pour lesquelles vous voulez garder les adresses physiques aussi petites que possible: les balises TLB et cache doivent contenir des adresses physiques, par exemple.

Ce n'est pas nécessairement à l'envers qu'il y a plus de mémoire physique que virtuelle. La mémoire virtuelle est par processus tandis que la mémoire physique est partagée par tous les processus. Ainsi, un serveur avec des adresses virtuelles 48 bits et 2 52 octets de mémoire pourrait prendre en charge 16 processus simultanés tout en garantissant de ne pas avoir à échanger.

Logique errante
la source
Il convient de noter que les architectes informatiques ont appris à exiger que les bits supérieurs soient utilisés par le matériel, généralement par extension de signe pour s'adapter à l'utilisation courante des adresses négatives pour le système d'exploitation («À quoi servent les autres bits?»). De plus, avec la mise en cache des entrées d'annuaire Ln, une table à 5 niveaux n'a pas besoin d'être parcourue complètement la plupart du temps. Les bits PTE 52:62 sont réservés au logiciel, ils ne peuvent donc pas être utilisés pour des adresses physiques sans rupture de compatibilité, limitant les pages 4KoB à 52 bits de PA. De plus, Linus Torvalds fait rage contre PAE (VA> PA semble simplifier la conception du système d'exploitation "traditionnel").
Paul A. Clayton
"Cela peut être étendu jusqu'à 63 bits à l'avenir." Eh bien, non, non sans changer la structure de la table des pages. En l'état, les bits 52 à 62 du PxE sont réservés à l'utilisation du système d'exploitation. Et les systèmes d'exploitation les utilisent (Windows utilise ce champ pour un "index de liste de jeux de travail"), de sorte que les architectes de processeur ne sont pas libres de développer le champ PFN en eux. Il serait bien sûr possible d'avoir à l'avenir une option de type PAE qui changerait la structure du PT de manière à autoriser plus de bits de PFN, mais ce serait un changement architectural important.
Jamie Hanrahan
3

Quelques points à considérer, la RAM physique coûte cher. Bien sûr, 16 Go sont moins chers maintenant que 4 Go étaient il y a seulement quelques années, mais 2 ^ 64 (16 exaoctets) ridiculement grands.

Les extensions AMD de x86 pour x64 "ont permis" jusqu'à 2 ^ 52 en limitant les registres . Cela fait deux choses, réduit le coût des processeurs et améliore les performances. Plus de registres non utilisés signifient qu'il y a beaucoup d'espace vide qui doit encore être pris en compte lors des opérations.

Et, au cas où vous n'êtes pas un mathématicien ... La différence entre trois tailles est énorme! Je ne suis pas un gourou des mathématiques, mais en décimal, 52 bits représentent environ 0,02% de 64 bits. 48 bits est 6% de 52. (quelqu'un vérifie mes mathématiques?)

Quant à savoir pourquoi AMD a autorisé plus de RAM physique que virtuelle, l'article indique que c'est parce qu'AMD pensait aux serveurs. Les serveurs ont besoin de grandes quantités de RAM physique. La RAM virtuelle est trop lente pour prendre en charge les applications serveur moyennes pour des centaines ou des milliers d'employés.

Mes propres pensées: Nous avons laissé le temps où la RAM était petite et les disques durs devaient supporter la RAM. Le prix de la RAM est tombé à un point où le personnage moyen peut y mettre plus de suffisamment de RAM. Prenez des applications typiques, comme Office qui nécessite 1 à 2 Go de RAM. Il y a 7 ans, mon ordinateur pouvait gérer cela. Bien qu'avec des vitesses de lecture et d'écriture sur le disque, j'espère que je n'ai jamais eu à récupérer un fichier de 7 Go de la mémoire virtuelle (en utilisant l'ancienne philosophie PM * 2.5).

Je peux également supposer qu'AMD voulait laisser de la place aux registres qui utilisent les registres de RAM physiques, comme la RAM sur les GPU intégrés.

Austin T français
la source