[Kos-dev] Anonymous : pas si facile que ca

d2 kos-dev@enix.org
02 Apr 2002 12:56:30 +0200


>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@utbm.fr> writes:
    Thomas> Oui, mais tu n'avais pas precise au'il faut alors faire un
    Thomas> open sur /dev/null pour chaque region anonyme. Ex : tu
    Thomas> veux une region de 2 pages a l'adresse A, et une region de
    Thomas> 4 pages a l'adresse B, il te faut 2 sr.

C'est effectivement implicite : si je fais map(/dev/null) ca veut dire
(cf le premier mail qui expliquait ce "raccourci") que je fais
resource = open("/dev/null"), puis map(resource). Dans ce cas, j'ai
bien 1 SR nouvellement creee pour la team. Ca m'empeche pas de mapper
plusieurs fois cette SR a des endroits differents => plusieurs VR du
team pour cette meme SR "anonyme". Donc si je fais comme tu dis, je
n'ai qu'une seule et meme SR anonyme, avec les 2 VR [A, A+8192[ et [B,
B+16384[. Le nombre de SR pour /dev/null ne depend pas du nombre de
map(), mais du nombre de open().

    Thomas> => oui c vrai aue si on veut rester arch independent au
    Thomas> max faudrait trouver une autre solution.

Comme tu veux. Mais je crois qu'on peut quand meme repondre "oui" a la
question. Ne serait-ce que parce que la plupart des archi proposent
des bits pour l'aging : qd une page n'est pas presente, ces bits
doivent pouvoir etre utilises pour nous, pour qu'on puisse indiquer si
la page est dans le swap ou dans le backing store de la SR originale.

    Thomas> dans team A (pourtant il va bien falloir commiter a un
    Thomas> moment les trucs sur le disque non ?).

Le commit a lieu pour les shared. Pour les private, le backing store,
c'est le swap.

    >> - team A => fork() => team C : copie (ou COW) des PT + copie
    >> des VR + MAJ des rmap - dans ce cas, A et C mappent un melange
    >> de pages de /foobar orignal presentes ou absentes de swap/RAM
    >> (mais presentes sur disque), et des pages anonymous
    >> differenciees mais qui sont forcement physiquement presentes
    >> (RAM ou SWAP), donc on est capable dans les 2 cas de gerer le
    >> partage des pages effectif (via la liste des VR de /foobar, ou
    >> via le rmap).

    Thomas> Hum... oui, je suis pas sur de pouvoir dire "donc on est
    Thomas> capable dans les 2 cas de gerer".

Je pense que si. Je ne vois que 3 cas :
  - pages non mappees => regarder la liste des VR de la SR
  - pages mappees =>
    + mapping SR normal (ie non differencie) => liste des VR de la SR
    + mapping anonymous (ie differencie) => RAM/swap rmap

    Thomas> Et le cas ou
    Thomas> team A mappe en PRIVATE une region anonyme VA team A fork
    Thomas> pour donner naissance a team B -> creation d'une region
    Thomas> anonyme VB en PRIVATE, pointant sur la meme SR.

    Thomas> Comment va se faire la differenciation ?

Comme dans mon mail qui deroule l'algo, ce fork s'accompagne d'un
passage des PTE en Read-Only [RO], afin de detecter la
differenciation. Ensuite, l'algo est deroule (a chaque #PF, COW du
cote des shared ou des private, et passage des PTE en RW [si la VR est
RW]).

    Thomas> Honnetementm, avoir plein de SR pour /dev/null ca me plait
    Thomas> moyen. En plus j'ai peur que si on envisage des cas de
    Thomas> forks sur plusieurs niveaux (team A => team B => team C)
    Thomas> on ait des vieilles listes a parcourir. Je m'explique : PF
    Thomas> en read sur VC (region anonyme de la team C, issue du fork
    Thomas> de B, elle meme issue du fork de A). Alors on va chercher
    Thomas> la page : est-elle dans B (zou un parcours), si oui OK,
    Thomas> sinon est-elle dans A..  Bref imagine ce aue ca va donner
    Thomas> au bout d'un moment.

C'est plutot dans l'autre sens. Si c'est A qui fait le map(/dev/null),
alors VA est associee a la "SA" (nouvellement allouee par
open()). fork() de A => creation team B => copie AS de A dans B => B
possede la copie de VA, avec la meme SR "SA" sous-jacente. Idem pour
team C, issu de fork dans team B. Maintenant, j'imagine que C fait #PF
dans *sa* copie de "VA" => je choppe la SR sous-jacente => c'est la SR
"SA". La SR "SA" possede la liste des VR qui lui sont associees => qui
contient {VA original, copie de VA pour B, copie de VA pour C}. Reste
plus qu'a mapper une page pour tout le monde puisque justement on
connait tout le monde (ou a faire une differencation si au moins l'un
des 3 est passe en PRIVATE). On ne peut pas faire moins.

    Thomas> Est-ce qu'on pourrait essayer d'avoir relu la doc de UVM
    Thomas> pour vendredi (pdt le train ca se fait) pour qu'on puisse
    Thomas> causer sur une base interessante ?

Pour moi => dans le train.

-- 
d2