[SOS] Paging.

David Decotigny david.decotigny at free.fr
Jeu 30 Déc 12:46:04 CET 2004


Bonjour,

LfvrChris at aol.com wrote:
>     Malheureusement, je dois faire un blocage, car je ne comprends pas 
> bien ou se trouve exactement la table des pages ainsi que le répertoire 
> des pages ?

En RAM : l'adresse stockee dans le PDBR [ie registre cr3] et les 
adresses stockees dans les PDE/PTE sont bien des adresses _physiques_.

Dans le cas general, il n'y a aucune obligation pour que les PDE/PTE 
soient /egalement/ accessibles en memoire virtuelle. Mais, une fois la 
pagination activee, le CPU n'a acces qu'a des donnees mappees en memoire 
virtuelle : impossible d'acceder directement aux donnees par leurs 
adresses physiques.

On comprend donc qu'il faut mapper les PD/PT en memoire virtuelle pour 
pouvoir les modifier (ie mapper/demapper des pages). N'empeche que les 
donnees stockees dans les PDE/PTE demeurent des adresses physiques.

L'astuce du mirroring permet de faciliter la localisation des PDE/PTE en 
memoire virtuelle : il suffit de connaitre une seule adresse virtuelle 
(l'adresse de base du mirroring) et hop ! toutes les adresses virtuelles 
de toutes les PDE/PTE sont automatiquement connues par une arithmetique 
tres simple. Il n'empeche que ce qu'on stocke a ces adresses virtuelles 
reste des adresses physiques.

>     Il est indiqué dans l'article que le "Mirroring" début à l'adresse 
> linéaire 0x3FC00000. Cela veut dire quoi exactement ?

Que la zone (4Mo) des PD/PT en memoire virtuelle sont accessibles a 
partir de cette adresse. Le fait qu'elles soient mappees en memoire 
virtuelle n'est pas obligatoire dans le cas general : c'est necessaire 
seulement dans le cas ou on souhaite pouvoir modifier les PD/PT apres 
activation de la pagination, ce qui est notre cas. Donc dans la notre 
cas (et dans la majorite des cas), il FAUT que les PD/PT soient 
accessibles en memoire virtuelle, meme si ca ne fait absolument pas 
partie du fonctionnement de la pagination et de la MMU, et meme si les 
adresses qui sont stockees dans ces tables restent des adresses 
physiques. Et le fait qu'on utilise l'astuce du mirroring, c'est 
seulement pour simplifier la mise a jour des PDE/PTE, puisqu'on peut 
alors se contenter de cette adresse de base + d'une arithmetique tres 
simple.

>     Cette zone se trouve où exactement dans la mémoire physique (RAM) ?

Dans tous les cas : peu importe, c'est totalement transparent, c'est 
meme un des grands interets de la pagination (que de s'abstraire des 
adresses physiques).

3eme repetition : dans le cas ou on veut pouvoir modifier les PD/PT, il 
faut seulement associer une adresse virtuelle a l'adresse physique de 
ces PD/PT, ie les mapper. Donc dans ce cas, ce qui compte davantage que 
les adresses physique de ces tables du point de vue du programmeur de 
l'OS, c'est leurs adresses virtuelles. L'astuce du mirroring permet de 
simplifier la localisation de ces tables en memoire virtuelle. Ce n'est 
qu'une astuce, et encore : tres specifique au x86.

>     Si j'ai bien compris, on réserve une page d'une taille de 4 Ko 
> n'importe où dans la mémoire physique (RAM) et ensuite on créée une 
> correspondance entre l'adresse de départ de cette page physique et 
> l'adresse linéaire 0x1000. Ce qui reste arbitraire la dedans ce n'est 
> autre que le choix de l'adresse linéaire 0x1000.

En effet.

>     D'après vous, ai-je bien compris ou suis-je encore confus ?

J'espere qu'apres 3 repetitions de la meme chose dans mon mail, ca 
devrait etre plus clair ;)

Bonne journee,


Plus d'informations sur la liste de diffusion Sos