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 :

Autrement dit, on a envie de se dire que le répertoire des pages et les tables des pages d’une part, et les PDE et les PTE d’autre part, sont “presque” interchangeables. Le seul point délicat est que PDE et PTE n’ont pas tout à fait la même structure. En pratique cependant tous ces éléments sont bien interchangeables : les 2 bits dont la signification diffère entre PDE et PTE sont “compatibles”. En effet, même s’ils ne signifient pas la même chose pour les PDE et les PTE, la valeur qu’ils prennent pour ces 2 types d’entr´ees est la même.

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

schema explicatif du mirroring

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 >