Croisière au coeur d'un OS Etape 4 : La pagination
Simple OS : le mirroring
principe
Les tables de traductions (PD et PT) doivent être accessible
avec une adresse linéaire si on veut les modifier, ce sont aussi des données
stockées en mémoire.
Le “mirroring” que nous décrivons ici est un moyen
simple de maintenir automatiquement à jour les traductions
entre les adresses linéaires des tables de
traduction (répertoire et tables des pages) et leurs
adresses physiques associées, même lorsque les entrées
du répertoire des pages (ie les adresses des tables des
pages) sont modifiées. Ce mécanisme est assez original
et à été présenté par Christophe Avoinne au
d´ebut de KOS. Nous employons le terme “mirroring”
sans savoir s’il est le terme consacré.
Observations fondamentales
Tout le principe du mirroring s’appuie sur les caractéristiques particulières des structures des tables de traduction pour la pagination sur x86 :
- Le répertoire des pages (PD) sur x86 est un tableau de 4 Ko formé de 1024 PDE. Et chaque table des pages (PT) est un tableau de 4 Ko formé de 1024 PTE. Les pages normales ont elles-mêmes une taille de 4 Ko ;
- – Les PDE et les PTE ont presque la même structure (voir la section 2.3).
Mise en oeuvre
Lorsqu’on construit le répertoire des pages (disons : à l’adresse AddrPD en RAM), on indique dans une entrée arbitraire de ce répertoire des pages (disons : celle à l’index idxMirror) que l’adresse de la table des pages associée est... AddrPD.
PDE[idxMirror] = addrPD

Avec cette configuration toute simple du répertoire des pages, on accède à toutes les PTE possibles par les 4Mo situés à l’adresse linéaire idxMirror * 4Mo et on accède aux 1024 PDE par la page située à l’adresse linéaire idxMirror * 4Mo+idxMirror * 4Ko. Une partie de l’espace des adresses linéaires reflète ainsi la configuration de cet espace des adresses linéaires (en termes de tables de traduction d’adresses), d’où le terme “mirroring”. L’intérêt de cette méthode est que si on modifie la ieme PDE, la nouvelle table des pages associée est automatiquement accessible à l’adresse idxMirror * 4Mo + i * 4Ko sans aucune autre opération. Toute autre solution aurait nécessité de changer à la main une PTE pour garder la table des pages accessible quelque part dans l’espace des adresses linéaires. Ici, puisque les PDE sont aussi les PTE d’une table des pages particulière (le répertoire des pages en l’occurrence), ceci se fait automatiquement dès qu’on modifie la PDE.
remarque
Cette technique de mirroring est très particulière à l’architecture x86 : elle repose sur les observations faites précédemment qui sont vraiment propres à cette architecture. Le portage du mirroring sur d’autres architectures risque d’être diffi- cile voire impossible.
page suivante >