[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