[Kos-dev] Explications à propos du dernier log de CVS

Thomas Petazzoni thomas.petazzoni at enix.org
Fri Dec 26 12:39:49 CET 2003


Bonjour,

Au sujet du dernier commit, quelques explications s'avèrent nécessaires.

En fait, quand nous avons modifié avec Julien KOS le WE dernier, nous
avons effectué un changement qui obligeait à être dans l'espace
d'adressage d'une team pour pouvoir y charger un fichier ELF. On ne
pouvait pas dire au chargeur ELF : charge moi ce binaire dans telle team
si on était pas précisement dans cette team. Ceci est du au fait que dès
le chargement, un #PF est provoqué si pour un segment de binaire on a
p_memsz > p_filesz. Ce #PF est provoqué pour pouvoir charger la partie
de la page issue du fichier, et initialiser à 0 le reste de la page
(c'est le début du BSS).

Ce qu'on avait fait, c'est qu'il n'y avait plus de "first team" : le
premier thread utilisateur, éxécutant "/file/test" était directement
dans la kernel_team. Or, nous n'avions pas vérifié, mais fork() ne
pouvait plus fonctionner : il faut que la team appelant fork() aie au
maximum 1 thread, or la kernel team possède tout un tas de thread noyau.

J'ai donc remis en place une "first team" différente de kernel_team.
C'est un thread noyau au sein de "first team" qui va charger
l'éxécutable /file/test et créer le premier thread utilisateur, ce qui
permet de résoudre le problème. 

C'est pour l'instant la solution que j'ai trouvée. On pourrait
éventuellement dire à fork() que si il y a des threads noyaux dans une
team, il ne les duplique pas, ce qui permettrait de créer le premier
user thread dans la kernel_team tout en laissant la possibilité de
forker. 

Egalement dans le commit, j'ai clarifié un peu la gestion des piles
utilisateur au travers de fork() et exec(). Dans un fork(), on oubliait
de copier le tableau des user_stack_slots, dans un exec(), on oubliait
de copier l'adresse, la taille et l'ID de la pile.

On peut donc maintenant avoir un thread utilisateur qui fait des fork(),
des exec(), des brk() et des thread_create() (mais *après* le fork()).

Voilà pour ce commit. Je suis en train de continuer à rédiger le rapport
de TX pour KOS.

Bonne journée,

Thomas
-- 
PETAZZONI Thomas - thomas.petazzoni at enix.org 
http://www.enix.org/~thomas/ - Jabber: kos_tom at sourcecode.de
KOS: http://kos.enix.org/ - Lolut: http://lolut.utbm.info
Fingerprint : 0BE1 4CF3 CEA4 AC9D CC6E  1624 F653 CB30 98D3 F7A7
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://the-doors.enix.org/pipermail/kos-dev/attachments/20031226/02d58304/attachment.pgp


More information about the Kos-dev mailing list