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 ont un espace d'adressage de 48 bits
Je m'attendais à ce que s'il s'agissait d'un processeur 64 bits, l'espace d'adressage devrait également être de 2 ^ 64.
Alors je me demandais quelle est la raison de cette limitation?
The 32-bit processors have 2^32 possible addresses
n'est pas forcément vrai, il peut exister un processeur 32 bits avec seulement 24 "broches" pour la mémoire d'adressage. Par exemple, 68EC020 (version 68020 moins chère) est un processeur 32 bits mais avec 24 bits pour la mémoire d'adressage.Réponses:
Parce que c'est tout ce dont vous avez besoin. 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 complet de 64 bits, mais les processeurs actuels n'utilisent que les 48 bits inférieurs. L'alternative était de gaspiller des transistors pour gérer un plus grand espace d'adressage qui ne serait pas nécessaire pendant de nombreuses années.
Ainsi, une fois que nous approchons de la limite de 48 bits, il ne s'agit que de libérer des processeurs qui gèrent tout l'espace d'adressage, mais cela ne nécessitera aucune modification du jeu d'instructions et ne rompra pas la compatibilité.
la source
Toute réponse faisant référence à la taille du bus et à la mémoire physique est légèrement erronée, puisque la question de OP portait sur l' espace d'adressage virtuel et non sur l'espace d'adressage physique . Par exemple, la limite supposée analogue sur certains 386 était une limite de la mémoire physique qu'ils pouvaient utiliser, et non de l'espace d'adressage virtuel, qui était toujours de 32 bits complets. En principe, vous pouvez utiliser 64 bits d'espace d'adressage virtuel, même avec seulement quelques Mo de mémoire physique; bien sûr, vous pouvez le faire en permutant, ou pour des tâches spécialisées où vous souhaitez mapper la même page à la plupart des adresses (par exemple, certaines opérations de données rares).
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.
la source
__far
(ou pire encore,FAR
/far
!) Des pointeurs ...Lisez la section des limitations de l' article wikipedia :
Autrement dit, il ne sert à rien d'implémenter un adressage 64 bits complet à ce stade, car nous ne pouvons pas construire un système qui pourrait utiliser un tel espace d'adressage dans son intégralité - nous choisissons donc quelque chose de pratique pour les systèmes d'aujourd'hui (et de demain).
la source
Le registre natif interne / la largeur d'opération n'a pas besoin d'être reflété dans la largeur du bus d'adresse externe.
Supposons que vous ayez un processeur 64 bits qui n'a besoin que d'accéder à 1 mégaoctet de RAM. Un bus d'adresse de 20 bits suffit. 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 23 bits (et un bus de données 16 bits). Le processeur pouvait accéder à 16 mégaoctets de RAM et pour charger le type de données natif (32 bits), il fallait deux accès à la mémoire (chacun portant 16 bits de données).
la source
Il y a une raison plus grave que la simple sauvegarde des transistors dans le chemin d'adresse du processeur: si vous augmentez la taille de l'espace d'adressage, vous devez augmenter la taille de la page, augmenter la taille des tables de page ou avoir une structure de table de page plus profonde (qui est plus de niveaux de tables de traduction). Toutes ces choses augmentent le coût d'un échec TLB, ce qui nuit aux performances.
la source
De mon point de vue, c'est le résultat de la taille de la page.Chaque page contient au plus 4096/8 = 512 entrées de table de page. Et 2 ^ 9 = 512. Donc 9 * 4 + 12 = 48.
la source
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 quantité maximale de mémoire, alors essayons de creuser plus profondément.
1) La configuration de serveur la plus importante (couramment utilisée) est un système à 8 sockets. Un système 8S n'est rien d'autre que 8 CPU serveurs connectés par une interconnexion cohérente à grande vitesse (ou simplement, un «bus» à grande vitesse) pour former un seul nœud. Il existe des clusters plus importants, mais ils sont rares, nous parlons ici de configurations couramment utilisées. Notez que dans les utilisations du monde réel, le système 2 Socket est l'un des serveurs les plus couramment 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 la mémoire DRAM ordinaire adressable par octets (par exemple, la mémoire DDR3 / DDR4), la mémoire mappée IO - MMIO (comme la mémoire utilisée par une carte d'extension), ainsi que l'espace de configuration 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 peut héberger 16 modules DIMM DDR4 dans chaque emplacement. Avec une taille maximale de DIMM DDR4 de 256 Go. (Selon la version du serveur, ce nombre de DIMM possibles par socket est en fait inférieur à 16 DIMM, mais continuez à lire pour le bien de l'exemple).
Ainsi, chaque socket peut théoriquement avoir 16 * 256 Go = 4096 Go = 4 To. Pour notre exemple de 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 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 aujourd'hui (256 Go DIMM) n'utilisent que 45 bits.
Pour un système d'exploitation prenant en charge 48 bits (WS16 par exemple), il reste (48-45 =) 3 bits. Ce qui signifie que si nous avons utilisé les 45 bits inférieurs uniquement pour 32 To de DRAM, nous avons toujours 2 ^ 3 fois de mémoire adressable qui peut être utilisée pour MMIO / MMCFG pour un total de 256 To d'espace adressable.
Donc, pour résumer: 1) 48 bits d'adresse physique, c'est beaucoup de bits pour prendre en charge les plus grands systèmes d'aujourd'hui qui sont "entièrement chargés" avec de grandes quantités de DDR4 et aussi de nombreux autres périphériques IO qui nécessitent de l'espace MMIO. 256 To pour être exact.
Notez que cet espace d'adressage de 256 To (= 48 bits d'adresse physique) n'inclut PAS de lecteurs de disque comme les lecteurs SATA car ils ne font PAS partie de la mappe d'adresses, ils n'incluent que la mémoire adressable par octets et exposée au système d'exploitation.
2) Le matériel 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 que le système d'exploitation reconnaît. Aujourd'hui, WS16 prend en charge les adresses physiques 48 bits (= 256 To).
Ce que cela signifie pour l'utilisateur, c'est que, même si l'on dispose d'un grand processeur de serveur ultra moderne pouvant prendre en charge> 48 bits d'adressage, si vous exécutez un système d'exploitation qui ne prend en charge que 48 bits de PA, vous ne pouvez profiter que de 256 To. .
3) Dans l'ensemble, il y a deux facteurs principaux pour profiter d'un plus grand nombre de bits d'adresse (= plus de capacité de mémoire).
a) Combien de bits votre CPU HW prend-il en charge? (Cela peut être déterminé par l'instruction CPUID dans les processeurs Intel).
b) Quelle version du système d'exploitation utilisez-vous et combien de bits de PA reconnaît-il / prend en charge.
Le minimum de (a, b) déterminera finalement la quantité d'espace adressable dont votre système peut tirer parti.
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'intégralité de la construction de la carte d'adresses. Mais j'espère que cela aide.
Merci, Anand K Enamandram, architecte de la plate-forme serveur Intel Corporation
la source
Beaucoup de gens ont cette idée fausse. Mais je vous promets que si vous lisez ceci attentivement, après avoir lu ceci, toutes vos idées fausses seront claires.
Dire qu'un processeur 32 bits ou 64 bits ne signifie pas qu'il doit avoir respectivement un bus d'adresse 32 bits ou un bus d'adresse 64 bits! ... Je le répète, PAS !!
Processeur 32 bits signifie qu'il a 32 bits ALU (unité arithmétique et logique) ... cela signifie qu'il peut fonctionner sur un opérande binaire 32 bits (ou simplement dire un nombre binaire ayant 32 chiffres) et de même un processeur 64 bits peut fonctionner sur un binaire 64 bits opérande. Donc, la météo d'un processeur 32 bits ou 64 bits NE signifie PAS que la quantité maximale de mémoire peut être installée. Ils montrent simplement la taille de l'opérande ... (par analogie, vous pouvez penser qu'une calculatrice à 10 chiffres peut calculer des résultats jusqu'à 10 chiffres ... cela ne peut pas nous donner 11 chiffres ou d'autres résultats plus importants ... bien que ce soit en décimal mais je dis cette analogie pour simplifier) ... mais ce que vous dites est l'espace d'adressage qui est la taille maximale directement interfacable de la mémoire (RAM). Le bélier' La taille maximale possible de s est déterminée par la taille du bus d'adresse et ce n'est pas la taille du bus de données ou même de l'ALU sur lequel la taille du processeur est définie (32/64 bits). Oui si un processeur a un "bus d'adresse" 32 bits alors il est capable d'adresser 2 ^ 32 octets = 4 Go de RAM (ou pour 64 bits ce sera 2 ^ 64) ... mais en disant qu'un processeur 32 bits ou 64 bits a rien de pertinent pour cet espace d'adressage (espace d'adressage = jusqu'où il peut accéder à la mémoire ou la taille maximale de la RAM) et il ne dépend que de la taille de son ALU. Bien sûr, le bus de données et le bus d'adresse peuvent être de la même taille et alors il peut sembler qu'un processeur 32 bits signifie qu'il accédera à 2 ^ 32 octets ou 4 Go de mémoire ... mais ce n'est qu'une coïncidence et ce ne sera pas la même chose pour tous.... par exemple intel 8086 est un processeur 16 bits (car il a 16 bits ALU) donc comme vous le dites, 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 avoir clarifié mon point de vue.Maintenant, pour venir à votre question ... comme un processeur 64 bits ne signifie pas qu'il doit avoir un bus d'adresse 64 bits, il n'y a donc rien de mal à avoir un bus d'adresse 48 bits dans un processeur 64 bits ... ils ont réduit l'espace d'adressage pour rendre la conception et la fabrication bon marché ... car personne n'utilisera une mémoire aussi grande (2 ^ 64 octets) ... où 2 ^ 48 octets sont plus que suffisants de nos jours.
la source
Ce n'est pas vrai que seuls les 48 bits de poids faible d'un VA 64 bits sont utilisés, du moins avec Intel 64. Les 16 bits supérieurs sont utilisés, en quelque sorte, en quelque sorte.
La section 3.3.7.1 Adressage canonique dans le manuel du développeur de logiciels des architectures Intel® 64 et IA-32 dit:
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 être défaillante.
Sur AArch64, c'est différent. Selon l' aperçu du jeu d'instructions ARMv8 , il s'agit d'un VA 49 bits.
la source
[vsyscall]
page. (Il peut s'agir d'exporter des éléments tels que le PID actuel, ce quigetpid()
est purement de l'espace utilisateur. Vousgettimeofday()
pouvez également simplement utiliser rdtsc dans l'espace utilisateur + les facteurs d'échelle exportés par le noyau. Bien que je pense en partie[vdso]
, ce moitié inférieure.)__VMALLOC_BASE
fait. Il n'est probablement pas utilisé directement.Un CPU est considéré comme "N-bits" principalement sur sa taille de bus de données, et sur une grande partie de ses entités (architecture interne) : registres, accumulateurs, unité arithmétique-logique (ALU), jeu d'instructions, etc. Par exemple: Le bon vieux processeur Motorola 6800 (ou Intel 8050) est un processeur 8 bits. Il a un bus de données 8 bits, une architecture interne 8 bits et un bus d'adresse 16 bits.
la source