[SOS] Pagination (Rapport page_physique <-> page_virtuelle)

anthoine.bourgeois anthoine.bourgeois at wanadoo.fr
Ven 21 Oct 20:42:28 CEST 2005


Bonsoir,


> Message du 21/10/05 13:09
> De : "romain" <romain at hexanium.com>
> A : "'SOS mailing-list'" <sos at the-doors.enix.org>
> Copie à : 
> Objet : RE : [SOS] Pagination (Rapport page_physique <-> page_virtuelle)
> 
> Salut,
> 
> J'ai énormement de mal à comprend la pagination, je comprend à peut pres
> l'article 3, la gestion des pages "physiques", par contre quand je passe
> à l'article 4 je suis paumé, c'est pas trop le probleme, ca rentrera
> bien un jour, je vais me refader 10 fois les articles si il le faut !
> 
> En fait j'ai déjà une question qui mais en branle tous ce que je croyais
> avoir compris et quelques question qui me permettraient d'avancer.
> 
> 
> Question 1:
> -----------
> Dans l'article 4 et dans le main.c de l'article 4, vous effectuer cette
> suit d'instruction, dans cet ordre:
> (Je fais des affirmations mais c'est pour montrer ce que j'ai pus
> comprendre, c'est surement éronné)
> 
> 
> 1/ ppage_new = sos_physmem_ref_physpage_new(FALSE);
> Ok ca ca va a peut pres, on choppe une page libre !
> 
> 
> 2/ sos_paging_map(ppage_new, vpage_tmp, FALSE, SOS_VM_MAP_ATOMIC |
> SOS_VM_MAP_PROT_READ | SOS_VM_MAP_PROT_WRITE);
> Bon ca je pige pas trop dans le source pour le moment mais j'avais
> compris que la, on "associait" l'adresse virtuelle vpage_tmp à la page
> physique toute neuve récupérée plus haut.
> 
> 3/ Puis vous faite un truc qui me parait "fou":
> sos_physmem_unref_physpage(ppage_new);
> Mais du coup cette page et libre et poura etre reallouée ? Bizard, puis
> qu'on à déjà mappé notre adresse virtuelle vpage_temp dessus. Donc
> quelque part la ressource est en cours d'utilisation, mais la page
> physique ne reflete pas cette etat, du coup si on refait un
> sos_physmem_ref_physpage_new(FALSE); on va se rechopper la meme page !
> (enfin on a des chances...)

En fait le sos_paging_map fait un sos_physmem_ref_physpage_at(ppage_paddr);
donc la page est incrémenté une deuxième fois voila pourquoi on
le décrément ici.

> 
> 4/ La on utilise la ressources ( o_O ) tjrs bizard la page "physique"
> est cencé etre libre.
> 
> 5/ La vous faites : sos_paging_unmap(vpage_tmp);
> Pour défaire la relation Virtuellr -> Physique bon ok a la limite :D
> 
> 
> Ce qui me chiffone c'est l'ordre, vous le spécifiez bien dans l'article,
> 4 (pdf) mais je ne trouve pas ca coherent ! Je dois me tromper ?
> 
> 
> Si quelqu'un peu me permetre de comprendre pourquoi l'ordre du
> unref_physpage par rapport au paging_unmp n'est pas important...ca
> m'aiderai.

L'ordre est important.

> 
> 
> Question 2:
> -----------
> Est-ce qu'on peut dire que grace au "sos_paging_map" on associe une PAGE
> PHYSIQUE à une PAGE_VIRTUELLE ?

Oui c'est exactement ça

> 
> 
> Question 3:
> -----------
> Y'a-t-il d'autres solutions ormis celles exposées dans l'article 4
> (Celle de SOS "Mirroring © Copyright 2002 2005 Sos Workgroup" ou celle
> de linux expliquée) pour que lorqu'on active la pagination l'instruction
> tous de suite apres l'activation (setup cr3 et cr0) se trouve dans la
> bonne page (virtuelle et physique) ? (je comprend rien au
> "Mirroring"...)

Je pense que oui mais je peux pas te donner d'exemple.
> 
> 
> Question 4:
> -----------
> Question de base désolé, c'est quoi cette notion de "volatile" ? Quel
> difference entre un "asm" et un "asm volatile" ?

Bonne question, si quelqu'un à la réponse
> 
> 
> 
> Merci
> 
> 

Anthoine Bourgeois




Plus d'informations sur la liste de diffusion Sos