adresse_physique := sélecteur * 16 + déplacement |
En mode protégé, il s'agit de convertir une adresse virtuelle codée sur 48 bits, en une adresse physique de 32 bits (taille des bus et des registres d'adresses). Le calcul de l'adresse physique est différent selon que le mécanisme de pagination est ou n'est pas activé. Il est effectué par l'unité de gestion mémoire implantée dans le microprocesseur. Cette unité est elle-même composée d'une unité de segmentation et d'une unité de pagination.
La première phase de calcul est effectuée
par l'unité de segmentation, qui transforme l'adresse virtuelle
en adresse linéaire de 32 bits. On peut schématiser
le calcul de la façon suivante
adresse_linéaire :=
table_des_descripteurs [i, sélecteur].adresse_de_base + déplacement |
Ici, l'indice i désigne soit la table locale (LDT) soit la table globale (GDT), dont on extrait le champ "adresse_de_base" de l'élément d'index "sélecteur" (figure ci-dessous) :
Si le mécanisme de pagination n'est pas utilisé, l'adresse linéaire est l'adresse physique. Dans le cas contraire, l'adresse linéaire est confiée dans une seconde étape de calcul à l'unité de pagination. Elle est alors décomposée selon les champs suivants (figure ci-dessous) :
répertoire_page
:= CR3;
table_des_pages := répertoire_pages [adresse_linéaire.index_répertoire_pages].adresse; adresse_page_physique := table_des_pages [adresse_linéaire.index_table_pages].adresse; adresse_physique := adresse_page_physique + déplacement; |
La figure ci-dessous illustre le calcul de l'adresse physique à partir de l'adresse linéaire :
Comme nous l'avons vu plus haut pour le registre
GDTR, le registre CR3 est chargé avec une nouvelle valeur à
chaque commutation de contexte, permettant d'accéder à un
ensemble de pages physiques disjoint du précédent. Comme
on le voit, à une même adresse linéaire correspondent
des adresses physiques différentes selon les répertoires
et tables de pages utilisés. Inversement, il est possible de faire
partager à des activités (tâches) des ressources de
mémoire physique (des pages physiques), en donnant au registre CR3
une même valeur. Il faut aussi noter que le registre CR3 est un registre
du processeur, et à ce titre une ressource commune à tous
les processus, mais que la valeur qui y est chargée est locale
au processus actif, ce qui signifie que son espace d'adressage physique
est privé (sauf en cas de partage voulu de la mémoire).
Page prec Début
page Page suiv.