web-dev-qa-db-fra.com

Pourquoi les systèmes x86-64 ne disposent-ils que d'un espace d'adressage virtuel 48 bits?

Dans un livre, j'ai lu ce qui suit:

Les processeurs 32 bits ont 2 ^ 32 adresses possibles, tandis que les processeurs 64 bits actuels disposent d'un espace d'adressage de 48 bits

Je m'attendais à ce que, s'il s'agit d'un processeur 64 bits, l'espace d'adressage soit également de 2 ^ 64. 

Alors je me demandais quelle est la raison de cette limitation?

66
er4z0r

Parce que c'est tout ce qui est nécessaire. 48 bits vous donnent un espace d'adressage de 256 téraoctets. C'est beaucoup. Vous n'allez pas voir un système qui a besoin de plus que cela de si tôt.

Les fabricants de processeurs ont donc pris un raccourci. Ils utilisent un jeu d'instructions qui autorise un espace d'adressage de 64 bits complet, mais les CPU actuelles n'utilisent que les 48 bits les plus bas. L’alternative consistait à gaspiller des transistors pour gérer un plus grand espace d’adresses, qui ne serait plus nécessaire avant de nombreuses années.

Donc, une fois que nous approchons de la limite de 48 bits, il ne reste plus qu'à libérer les processeurs qui gèrent tout l'espace d'adressage, mais cela ne nécessite aucune modification du jeu d'instructions, ni de compatibilité.

104
jalf

Toute réponse faisant référence à la taille du bus et à la mémoire physique est légèrement fausse, car la question de OP portait sur espace d'adressage virtuel pas espace d'adressage physique . Par exemple, la limite supposée analogue sur certains 386 était une limite à la mémoire physique qu'ils pouvaient utiliser, pas à l'espace d'adressage virtuel, qui était toujours de 32 bits complets. En principe, vous pouvez utiliser un espace d'adressage virtuel de 64 bits, même avec seulement quelques Mo de mémoire physique. bien sûr, vous pouvez le faire en permutant ou en effectuant des tâches spécialisées pour lesquelles vous souhaitez mapper la même page à la plupart des adresses (par exemple, certaines opérations de données fragmentées).

Je pense que la vraie réponse est qu'AMD était juste bon marché et espérait que personne ne s'en soucierait pour l'instant, mais je n'ai pas de références à citer.

16
R..

Lisez la section limitations de l'article de wikipedia :

Un PC ne peut pas contenir 4 pétaoctets de mémoire (à cause de la taille des puces de mémoire actuelles), mais AMD envisageait des serveurs de grande taille, des clusters de mémoire partagée et d’autres utilisations de l’espace adresse physique susceptibles de l’être dans un avenir proche. L'adresse physique de bit offre une marge de manœuvre suffisante pour l'expansion tout en évitant les coûts liés à la mise en oeuvre d'adresses physiques 64 bits.

Autrement dit, il est inutile de mettre en place un adressage 64 bits complet à ce stade, car nous ne pouvons pas construire un système capable d'utiliser pleinement un tel espace d'adresses. Nous choisissons donc quelque chose de pratique pour les systèmes d'aujourd'hui (et de demain).

9

La largeur de registre/d'opération interne interne n'a pas besoin de il faut que soit reflété dans la largeur du bus d'adresses externe.

Supposons que vous ayez un processeur 64 bits qui n’a besoin que d’accéder à 1 Mo de RAM. Un bus d'adresse de 20 bits est tout ce qui est requis. Pourquoi s'embêter avec le coût et la complexité matérielle de toutes les broches supplémentaires que vous n'utiliserez pas?

Le Motorola 68000 était comme ça; 32 bits en interne, mais avec un bus d’adresse de 23 bits (et un bus de données de 16 bits). Le processeur pouvait accéder à 16 mégaoctets de RAM et charger le type de données natif (32 bits) nécessitait deux accès mémoire (chacun portant 16 bits de données).

9
user82238

Il existe une raison plus grave que de simplement enregistrer des transistors dans le chemin d’adresse de la CPU: si vous augmentez la taille de l’espace adresse, vous devez augmenter la taille de la page, augmenter la taille des tables de pages est plus de niveaux de tables de traduction). Toutes ces choses augmentent le coût d'un échec TLB, ce qui nuit aux performances. 

6
Brendan

De mon point de vue, cela résulte de la taille de la page. Chaque page au plus contient 4096/8 = 512 entrées de table de page. Et 2 ^ 9 = 512. Donc, 9 * 4 + 12 = 48.

6
linzuojian

Pour répondre à la question initiale: Il n’était pas nécessaire d’ajouter plus de 48 bits de PA.

Les serveurs ont besoin de la plus grande quantité de mémoire possible. Essayons donc de creuser plus profondément.

1) La configuration de serveur la plus grande (couramment utilisée) est un système à 8 sockets. Un système 8S n’est rien d’autre que 8 CPU de serveur reliés par une interconnexion cohérente haut débit (ou simplement un "bus" haut débit) pour former un seul nœud. Il existe de plus grands groupes mais ils sont peu nombreux, nous parlons ici de configurations couramment utilisées. Notez que dans la réalité, le système 2 Socket est l’un des serveurs les plus utilisés et 8S est généralement considéré comme très haut de gamme.

2) Les principaux types de mémoire utilisés par les serveurs sont les suivants: mémoire DRAM adressable sur octets (par exemple, mémoire DDR3/DDR4), mémoire mappée IO - MMIO (telle que la mémoire utilisée par une carte d'extension), ainsi que la configuration. Espace utilisé pour configurer les périphériques présents dans le système. Le premier type de mémoire est celui qui est généralement le plus grand (et a donc besoin du plus grand nombre de bits d'adresse). Certains serveurs haut de gamme utilisent également une grande quantité de MMIO, en fonction de la configuration réelle du système.

3) Supposons que chaque processeur de serveur puisse contenir 16 DIMM DDR4 dans chaque logement. Avec une taille maximale DIMM DDR4 de 256 Go. (En fonction de la version du serveur, ce nombre de DIMM possibles par socket est en réalité inférieur à 16 DIMM, mais poursuivez la lecture pour l'exemple.).

Ainsi, chaque socket peut théoriquement avoir 16 * 256 Go = 4096 Go = 4 To . Pour notre exemple système 8S, la taille de la DRAM peut être au maximum de 4 * 8 = 32 To. Cela signifie que Le nombre maximal de bits nécessaires pour adresser cet espace de DRAM est de 45 (= log2 32 To/log2 2).

Nous n'entrerons pas dans les détails des autres types de mémoire (MMIO, MMCFG, etc.), mais le point ici est que le type de mémoire le plus "exigeant" pour un système à 8 sockets avec les plus grands types de DIMM DDR4 disponibles à ce jour (256 Go) DIMM) utilisent seulement 45 bits.

Pour un système d’exploitation prenant en charge 48 bits (WS16 par exemple), il reste (48-45 =) 3 bits restants . Ce qui signifie que si nous utilisons les 45 bits inférieurs uniquement pour 32 To de DRAM, il reste 2 ^ 3 temps de mémoire adressable pouvant être utilisés pour MMIO/MMCFG pour un total de 256 TB d’espace adressable.

Donc, pour résumer: 1) Une adresse physique de 48 bits est suffisante pour prendre en charge les plus grands systèmes d’aujourd’hui, qui sont "entièrement chargés" avec d’importantes quantités de DDR4, ainsi que de nombreux autres IO qui exigent Espace MMIO. 256 To pour être exact. 

Notez que cet espace d'adressage de 256 To (= 48 bits d'adresse physique) n'inclut PAS les lecteurs de disque tels que les lecteurs SATA car ils ne font PAS partie de la mappe d'adresses, ils n'incluent que la mémoire adressable sur octets et exposée au système d'exploitation.

2) Le matériel de la CPU peut choisir d'implémenter 46, 48 ou> 48 bits en fonction de la génération du serveur. Mais un autre facteur important est le nombre de bits reconnu par le système d'exploitation… .. Aujourd'hui, WS16 prend en charge les adresses physiques 48 bits (= 256 To). 

Ce que cela signifie pour l'utilisateur, même si l'on dispose d'un processeur serveur ultramoderne pouvant prendre en charge plus de 48 bits d'adressage. Si vous utilisez un système d'exploitation ne prenant en charge que 48 bits de sonorisation, vous ne pouvez profiter que de 256 To. . 

3) Au total, deux facteurs principaux permettent de tirer parti d'un nombre plus élevé de bits d'adresse (= plus de capacité de mémoire).

a) Combien de bits votre matériel informatique prend-il en charge? (Cela peut être déterminé par l'instruction CPUID des processeurs Intel).

b) Quelle version de système d'exploitation utilisez-vous et combien de bits de PA reconnaissent-ils/prennent-ils en charge?.

Le minimum de (a, b) déterminera en définitive la quantité d'espace adressable que votre système peut exploiter.

J'ai écrit cette réponse sans examiner les autres réponses en détail. De plus, je n’ai pas approfondi les nuances de MMIO, MMCFG et l’ensemble de la construction de la carte d’adresses. Mais j'espère que cela aide.

Merci, Anand K Enamandram, Architecte de plate-forme de serveursIntel Corporation

2
Anand K Enamandram

Ce n'est pas vrai que seuls les 48 bits de poids faible d'un VA 64 bits sont utilisés, au moins avec Intel 64. Les 16 bits supérieurs sont utilisés, en quelque sorte, en quelque sorte.

Le chapitre 3.3.7.1 Adressage canonique du Manuel du développeur du logiciel pour architectures Intel® 64 et IA-32 dit:

une adresse canonique doit avoir les bits 63 à 48 définis sur des zéros ou des uns (selon que le bit 47 est à zéro ou à un)

Ainsi, les bits 47 à 63 forment un super-bit, soit tous les 1, soit tous les 0. Si une adresse n'est pas sous forme canonique, l'implémentation doit faire défaut.

Sur AArch64, c'est différent. Selon l’aperçu du jeu d’instructions ARMv8 , il s’agit d’un VA 49 bits. 

Le système de traduction en mémoire AArch64 prend en charge une adresse virtuelle de 49 bits (48 bits par table de traduction). Les adresses virtuelles sont étendues à 49 bits et sont stockées dans un pointeur 64 bits. Eventuellement, sous le contrôle d'un registre système, les 8 bits les plus significatifs d'un pointeur à 64 bits peuvent contenir une "balise" qui sera ignorée si elle est utilisée comme adresse de chargement/stockage ou comme cible d'une branche indirecte. 

1
Olsonist

Beaucoup de gens ont cette idée fausse. Mais je vous promets que si vous lisez ceci attentivement, toutes vos idées fausses seront claires.

Dire qu'un processeur 32 bits ou 64 bits ne signifie pas qu'il devrait avoir un bus d'adresses 32 bits ou un bus d'adresses 64 bits, respectivement! ... Je le répète, ça ne marche pas !!

Processeur 32 bits signifie qu'il a une ALU 32 bits (unité arithmétique et logique) ... ce qui signifie qu'il peut fonctionner sur un opérande binaire 32 bits (ou simplement dire un nombre binaire de 32 chiffres) et qu'un processeur 64 bits peut également fonctionner sur des bits opérande. Ainsi, un processeur 32 bits ou 64 bits ne signifie PAS que la quantité de mémoire maximale peut être installée. Ils montrent simplement à quel point l'opérande peut être grand ... (Par exemple, une calculatrice à 10 chiffres peut calculer des résultats jusqu'à 10 chiffres ... elle ne peut pas nous donner 11 chiffres ou d'autres résultats plus grands ... bien que ce soit décimal, mais je dis cette analogie pour plus de simplicité) ... mais ce que vous dites, c’est un espace d’adresse qui correspond à la taille maximale de la mémoire vive (RAM) qui peut être interfacée directement. La taille maximale possible de la RAM est déterminée par la taille du bus d'adresse et ce n'est pas la taille du bus de données ni même de l'ALU sur laquelle la taille du processeur est définie (32/64 bits). Oui, si un processeur a un "bus d’adresse" de 32 bits, il est alors en mesure de traiter 2 ^ 32 octets = 4 Go de RAM (ou pour 64 bits, il sera de 2 ^ 64) ... mais en disant un processeur de 32 bits ou 64 bits n’a rien de pertinent pour cet espace d’adresses (espace d’adresses = dans quelle mesure il peut accéder à la mémoire ou à la taille maximale de la RAM) et il dépend uniquement de la taille de son ALU. Bien sûr, le bus de données et le bus d’adresses peuvent être de la même taille et il peut alors sembler que le processeur 32 bits signifie qu’il aura accès à une mémoire de 2 ^ 32 octets ou de 4 Go ... pour tous .... par exemple, intel 8086 est un processeur 16 bits (comme il a une ALU 16 bits) donc vous dites qu'il aurait dû accéder à 2 ^ 16 octets = 64 Ko de mémoire, mais ce n'est pas vrai. Il peut accéder à jusqu'à 1 Mo de mémoire pour avoir un bus d'adresse 20 bits .... Vous pouvez google si vous avez des doutes :)

Je pense que j'ai bien expliqué mon point. Maintenant, venez à votre question ... en tant que processeur 64 bits ne signifie pas qu'il doit avoir un bus d'adresse 64 bits, il n'y a donc aucune erreur d'avoir un bus d'adresse 48 bits dans un processeur 64 bits ... ils ont gardé l'espace d'adressage plus petit pour que la conception et la fabrication soient économiques ... car personne n'utilisera une mémoire aussi importante (2 ^ 64 octets) ... où 2 ^ 48 octets suffisent amplement.

1
hafiz031

Une CPU est considérée comme un "N-bits" principalement en raison de sa taille de bus de données et d'une grande partie de ses entités (architecture interne) : Registres, Accumulateurs, Unité logique arithmétique (ALU), Jeu d'instructions, etc. Par exemple: le bon vieux processeur Motorola 6800 (ou Intel 8050) est un processeur 8 bits. Il possède un bus de données à 8 bits, une architecture interne à 8 bits et un bus d’adresse à 16 bits.


  • Bien que la CPU N-bits puisse avoir certaines entités autres que N-taille. Par exemple, les modifications du 6809 par rapport au 6800 (les deux sont des CPU 8 bits avec un bus de données 8 bits). Parmi les améliorations significatives introduites dans le 6809, citons l’utilisation de deux accumulateurs à 8 bits (A et B pouvant être combinés dans un seul registre à 16 bits, D), deux registres à index de 16 bits (X, Y) et deux Pointeurs de pile 16 bits.
0
Amit G.