Next: Traduction d'adresses Up: Support des systèmes Previous: Généralités

Espace virtuel

Comme déjà souligné, le MIPS R10000 et l'UltraSPARC mettent en oeuvre une mémoire linéaire paginée. L'Intel PentiumPro implémente une mémoire segmentée puis paginée.

Espaces d'adressage

MIPS R10000


Le MIPS R10000 peut utiliser les deux modes d'adressages 32 et 64 bits. Le mode 32 bits est implémenté pour permettre une compatibilité ascendante avec les systèmes bâtis autour de MIPS R3000. En mode 64 bits, seuls 49 bits d'adresse sont réellement utilisés : les 44 bits VA[43:0] constituant l'adresse linéaire virtuelle et les bits VA[63:59] étant les bits de région. À chaque processus est attribué un identificateur ASID (Address Space IDentifier) différent. Cet ASID permet d'associer des tables de pages différentes à chacun des processus. L'ASID est codé sur 8 bits permettant à 256 processus de cohabiter en mémoire.

L'espace d'adressage de la mémoire est divisé en régions accessibles suivant le mode du processus (utilisateur, superviseur et noyau). Ces informations de région sont codées dans les bits VA[63:59]. Les régions sont représentées figures , et . 57 bits constituent finalement l'adresse virtuelle traduite en adresse physique : VA[43:0], VA[63:59] + ASID (8 bits).

Il est étonnant de constater que des différences notables existent par rapport au MIPS R8000[4] implémentant aussi la norme MIPS IV. Tout d'abord quatre bits de moins sur l'adresse virtuelle et une modification des bits de région. De plus, sur le MIPS R8000, le mode superviseur n'existe pas. Enfin il est à noter que, contrairement au MIPS R8000, sur le MIPS R10000 les instructions et les données ont le même ASID. Ces différences rendent pratiquement impossible l'utilisation des même versions système sur les machines bâties autour du MIPS R8000 et du MIPS R10000.

UltraSPARC


L'UltraSPARC utilise un adressage 64 bits, cependant si l'adresse virtuelle est calculée sur 64 bits, seuls les 44 bits de poids faibles sont utilisés. Un ASI (Address Space Identifier), codé sur 8 bits, identifie de plus l'adresse. Deux registres Primary Context et Secondary Context de 13 bits sont présents dans le microprocesseur. Suivant la valeur de l'ASI, l'un de ces deux registres de contexte est concaténé aux 44 bits, formant ainsi une adresse virtuelle totale sur 57 bits qui sera ensuite traduite en adresse physique.

Il est à remarquer que l'unité de gestion mémoire (MMU) de l'UltraSPARC n'est plus conforme avec la MMU spécifiée par la norme SPARC V8 [7].

PentiumPro


La taille maximale de l'espace virtuel et physique accessible à travers la segmentation classique du xxx86 est de 4 Goctets, ce qui est nettement moins que les microprocesseurs 64 bits de la nouvelle génération (MIPS R10000, UltraSPARC, DEC 21164). Si pour la plupart des systèmes matériels bâtis autour du PentiumPro (PCs, stations de travail...), ces 32 bits d'adresses devraient suffire, cette taille semble limitée pour les très grosses applications : bases de données, etc..

Le mécanisme classique d'adressage du xxx86 est le suivant : un registre de segment de 14 bits (CS, DS, etc), est concaténé à l'adresse linéaire 32 bits calculée par le programme. Le nom de ce registre segment est lié à l'instruction calculant l'adresse linéaire. Une adresse logique de 46 bits est ainsi disponible. Cette adresse logique est tout d'abord traduite par le mécanisme de segmentation en une adresse virtuelle de 32 bits. Ce mécanisme de segmentation sera décrit au paragraphe . À noter que les numéros de segments jouent ici le même rôle que l'ASI ou l'ASID pour le MIPS R10000 et l'UltraSPARC : les processus ne sont pas identifiés par un identificateur spécifique. À noter qu'un mode 16 bits est aussi implémenté : dans ce mode la taille des segments est seulement de 64 Koctets !

Outre le mécanisme d'adressage virtuel classique des autres microprocesseurs xxx86 (limité à 32 bits), le PentiumPro fournit un espace d'adressage de 36 bits qui est accessible à travers un mécanisme appelé Page Address Extensions. Ce mécanisme n'est pas actuellement documenté par Intel.

Taille des pages

MIPS R10000


Comme ses prédécesseurs le R4000 et le R8000, le MIPS R10000 manipule des pages dont les tailles peuvent varier de 4 Koctets à 16 Moctets par puissance de 4 (4, 16, 64 Koctets...). À priori, rien n'interdit à un même processus d'utiliser des pages de tailles différentes. Il est cependant rare qu'un système d'exploitation l'autorise.

UltraSPARC


Contrairement aux spécifications imposées par la norme SPARC V8 (page de 4 Koctets), l'UltraSPARC peut utiliser des tailles de page variables : 8, 64, 512 Koctets et 4 Moctets. À noter que le passage de 4 Koctets à 8 Koctets implique une refonte majeure du système d'exploitation.

PentiumPro


Comme le Pentium, le PentiumPro peut utiliser des pages de 4 Koctets, de 2 Moctets ou de 4 Moctets. Le microprocesseur i486 n'implémentait que des pages de taille de 4 Koctets. La possibilité d'utiliser des pages de taille 2 ou 4 Moctets a été introduite dans le Pentium et le PentiumPro pour pouvoir optimiser la gestion de la mémoire mais n'est pas documentée.



Next: Traduction d'adresses Up: Support des systèmes Previous: Généralités


flloansi@IRISA.irisa.fr
Tue Jun 4 09:57:56 MET DST 1996