[Kos-dev] Id ressources

d2 kos-dev@enix.org
25 Apr 2002 18:51:46 +0200


>>>>> "Thomas" == Thomas Petazzoni <thomas.petazzoni@utbm.fr> writes:
    Thomas> Non, non, non et non pere et fils ne partagent pas la meme
    Thomas> resource, mais a chaque fois on recopie les resources du
    Thomas> pere, aka on cree une nouvelle reference vers une shadow
    Thomas> resource !

D'ou la question : une ressource cote user, c'est bien l'adresse d'une
donnee stockee dans l'espace noyau ? Si c'est pas vrai, ignore la
suite. Par contre, si c'est vrai, ca chie...

Pour chaque ressource du pere, il est certain qu'on doit allouer une
ressource vers la meme SR pour le fils au moment du fork. Ca, je n'en
doute pas une seconde. Mais alors la question que je pose est :
comment tu vas changer toutes les references a la ressource du cote du
fils ? Par un gros grep sur l'espace memoire cpl3 du fils : partout ou
on voit l'adresse correspondant a une ressource qu'avait le pere, on
la remplace (la reference) par la nouvelle adresse de la ressource
nouvellement allouee ?  Je persiste et signe : c'est pas une bonne
solution (euphemisme).

Imaginons. La team pere possede une ressource, mettons qu'elle
s'appelle 0x1234 (= adresse de la ressource dans le noyau). Fork() ->
le noyau alloue la ressource, a l'adresse 0x4321, vers la meme SR que
0x1234 pour le fils, et y copie le contenu de 0x1234. Or, pour la team
fils, la ressource s'appelle toujours "0x1234" et non pas "0x4321"
(c'est forcement stocke quelque part dans un registre, ou en
memoire). La question est donc : je fais comment pour le lui dire, au
fils, que, pour lui, la ressource devrait s'appeler 0x4321 maintenant ?

-- 
d2