19 votes

Pourquoi le système d'exploitation ne peut-il pas utiliser la totalité des 64 bits pour l'adressage ? Pourquoi seulement les 48-bits ?

Je suis en train de lire "Understanding Linux Kernel".

Pagination pour les architectures 64 bits

Comme nous l'avons vu dans le précédent sections précédentes, la pagination à deux niveaux est couramment utilisée par les microprocesseurs 32 bits. La pagination à deux niveaux, cependant, n'est pas convient pas aux ordinateurs qui adoptent une architecture 64 bits. Nous allons utiliser une expérience de pensée pour expliquer pourquoi :

Commencez par supposer une taille de page standard de 4 Ko. Comme 1 Ko couvre une gamme de 2 10 adresses, 4 KB couvre 2 12 adresses, le champ Offset est donc de 12 bits. Cela laisse jusqu'à 52 bits de l'adresse l'adresse linéaire à distribuer entre le champ Table et le champ Directory et le champ Directory. Si nous décidons maintenant d'utiliser seulement 48 des 64 bits pour l'adressage (cette restriction nous laisse avec un espace d'adressage confortable de 256 TB) , les 48-12 = 36 bits restants devront devront être répartis entre les champs Table et champ Répertoire. Si nous décidons maintenant de de réserver 18 bits pour chacun de ces deux champs, le répertoire de pages et les tables de pages de chaque processus devraient inclure 2 18 entrées, c'est-à-dire plus de 256 000 entrées.

  1. "Si nous décidons maintenant d'utiliser seulement 48 des 64 bits pour l'adressage". Pourquoi ? & Pourquoi seulement 48 bits ? Pourquoi pas un autre nombre ?

  2. Je ne suis qu'un simple utilisateur de PC et un programmeur. J'ai du mal à croire que l'adressage 32 bits, c'est-à-dire un espace d'adressage de 4GB (2GB/3GB pour être plus correct) par processus, soit une limite. Si vous vraiment a rencontré cette limite. Veuillez me donner un exemple.

  3. Quelle est cette limite pour Windows ?

  4. Je sais que la mémoire virtuelle != la mémoire physique & les broches d'adresse du processeur n'ont rien à voir avec la mémoire virtuelle. Il s'agit d'une question complètement différente. Comment connaître le nombre de broches d'adresse (= taille du bus d'adresse) pour un processeur. http://ark.intel.com Les spécifications d'un processeur n'incluent pas cette spécification.

Réponse :

Voir La réponse de Paul Betts pour une réponse raisonnable à la première question.

1voto

ChrisF Points 74295

J'ai du mal à croire que l'adressage 32 bits, c'est-à-dire un espace d'adressage de 4GB (2GB/3GB pour être plus correct) par processus, soit une limite. Si vous avez vraiment rencontré cette limite. S'il vous plaît donnez-moi un exemple.

Il n'existe plus (sauf sur les machines personnelles de certains anciens employés) mais j'ai travaillé sur une suite de logiciels appelée RealiMation à la fin des années 1990 et au début des années 2000. Il s'agissait d'un moteur 3D en temps réel pour la visualisation et la simulation. Un de nos clients créait régulièrement des modèles très détaillés qui atteignaient la limite de 2 Go de mémoire. Nous chargions les textures à la volée au fur et à mesure des besoins et devions ajouter du code pour vérifier l'absence d'allocation de mémoire afin de pouvoir continuer à afficher le modèle, bien que sans texture.

0voto

Erik van Velzen Points 342

Du point de vue du matériel, l'alignement est une autre considération.

Dès que vous avez besoin d'un type de données de plus de 4 octets, disons 6, vous devez les placer sur des frontières de 8 octets pour les récupérer en une seule instruction. Si vous ne les alignez pas, vous devez masquer et décaler les bits, et ajouter des vérifications à ce sujet dans le code (assembleur).

Lors du passage au 64 bits, de nombreuses personnes ont été contrariées par le fait que leurs programmes consommaient beaucoup plus de mémoire. Ils auraient recherché Les pointeurs 48 bits, et si les restrictions sur l'alignement n'existaient pas, les fabricants de processeurs auraient probablement créé une architecture 48 bits.

Notez que si vous êtes tellement à court de mémoire que vous voulez que vos pointeurs soient de 6 octets, il existe des moyens de le faire. Mais il y a une pénalité au niveau du temps d'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X