De nombreuses personnes 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 disparaîtront.
Dire qu'un processeur est de 32 ou 64 bits ne signifie pas qu'il doit avoir un bus d'adresse de 32 ou 64 bits respectivement... Je répète que ce n'est pas le cas !
Un processeur 32 bits signifie qu'il possède une ALU (unité arithmétique et logique) de 32 bits... ce qui signifie qu'il peut opérer sur un opérande binaire de 32 bits (ou simplement un nombre binaire de 32 chiffres) et de la même manière, un processeur 64 bits peut opérer sur un opérande binaire de 64 bits. Ainsi, le fait qu'un processeur soit de 32 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 à une calculatrice à 10 chiffres qui peut calculer des résultats jusqu'à 10 chiffres... elle ne peut pas nous donner 11 chiffres ou tout autre résultat plus grand... bien que ce soit en décimal, mais je raconte cette analogie pour simplifier)... mais ce que vous dites est l'espace d'adressage qui est la taille maximale directement interfaçable de la mémoire (RAM). 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 ou même de l'ALU sur laquelle est définie la taille du processeur (32/64 bits). Oui, si un processeur a un "bus d'adresse" de 32 bits, alors il est capable d'adresser 2^32 octets = 4GB de RAM (ou pour 64 bits, ce sera 2^64)... mais dire qu'un processeur a 32 ou 64 bits n'a rien à voir avec cet espace d'adressage (espace d'adressage = jusqu'où il peut accéder à la mémoire ou la taille maximale de la RAM) et cela dépend uniquement de la taille de son UAL. 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 l'intel 8086 est un processeur 16 bits (car il a une UAL 16 bits) donc comme vous le dites il devrait avoir accès à 2^16 octets = 64 Ko de mémoire mais ce n'est pas vrai. Il peut accéder jusqu'à 1 MB de mémoire pour avoir un bus d'adresse de 20 bits....Vous pouvez chercher sur Google si vous avez des doutes :)
Je pense que mon point de vue est clair. Maintenant, pour en venir à votre question... comme un processeur de 64 bits ne signifie pas qu'il doit avoir un bus d'adresse de 64 bits, il n'y a rien de mal à avoir un bus d'adresse de 48 bits dans un processeur de 64 bits... ils ont gardé l'espace d'adresse plus petit pour rendre la conception et la fabrication bon marché.... comme personne ne va utiliser une mémoire aussi grande (2^64 octets)... où 2^48 octets sont plus que suffisants de nos jours.
19 votes
Le livre devait parler spécifiquement de l'implémentation actuelle de l'architecture AMD64 (x86-64). Seuls les 48 bits de poids faible sont utilisés. Il ne s'agit pas d'une limitation matérielle, cependant - tous les 64 bits sont disponibles.
13 votes
C'est toujours une bonne idée d'identifier le livre.
1 votes
Je suppose que les lignes d'adresses physiques ne sont pas libres (il faut au moins 16 broches supplémentaires pour le processeur). Et je ne connais pas encore de matériel capable de remplir un espace de 48 bits avec des puces de RAM physique sur le même processeur. Lorsque cela deviendra possible, je suis sûr qu'AMD ajoutera les 16 broches manquantes :)
0 votes
@Cody : Je sais ce que vous voulez dire, mais n'est-ce pas exactement une limitation matérielle, si elle est spécifique à l'implémentation actuelle de l'AMD64 ;)
8 votes
Même,
The 32-bit processors have 2^32 possible addresses
n'est pas nécessairement vrai, il peut exister des processeurs 32 bits avec seulement 24 "broches" pour l'adressage de la mémoire. Par exemple, le 68EC020 (version 68020 moins chère) est un processeur 32 bits mais avec 24 bits pour l'adressage de la mémoire.28 votes
Il y a un problème très réel avec l'adressage physique 64 bits, la taille des pages de la mémoire virtuelle est trop petite. Il en résulte d'énormes répertoires de pages et des vidages de cache TLB extrêmement coûteux à chaque changement de contexte. Passer de 4KB à 4MB est une option, mais elle est très incompatible avec les systèmes d'exploitation actuels.
1 votes
En outre,
The 32-bit processors have 2^32 possible addresses
est plutôt vague ; par exemple, un certain nombre de CPU x86 32 bits (généralement des serveurs/stations de travail) prennent en charge le PAE, qui permet un espace d'adressage physique de 36 bits. Un certain nombre de CPU x86_64 modernes prennent en charge un espace d'adressage physique de 48 bits et un espace d'adressage virtuel de 52 bits.1 votes
@HansPassant Pouvez-vous développer ce point ? Je ne suis pas tout à fait sûr de ce que vous voulez dire. Comment la taille de la page individuelle d'un système d'exploitation est-elle liée à l'espace d'adressage ? En quoi le fait de modifier la taille des pages permet-il d'augmenter l'espace d'adressage physique ?
1 votes
@AaronFranke : pour une taille de page et un nombre d'entrées TLB fixes, vous ne pouvez couvrir qu'une quantité fixe de la taille de l'ensemble de travail virtuel. Avec plus de RAM, c'est une fraction de plus en plus petite de la mémoire disponible, et comme la bande passante de la mémoire s'améliore, vous mâchez cet ensemble plus rapidement et obtenez plus d'échecs TLB. Mais je pense que Hans parlait principalement de la quantité d'espace nécessaire uniquement pour les tables de pages afin d'indiquer au CPU où se trouve la page physique pour chaque page virtuelle. Avec des tables de pages imbriquées plus profondément, le page walker est plus coûteux, et les TLB plus grandes coûtent plus cher si vous les videz toutes.