[Kos-dev] Retour des processus...

Thomas Petazzoni kos-dev@enix.org
06 Mar 2002 09:59:32 +0100


Salut,

J'ai commence a m'interesser a la terminaison des threads CPL3. J'ai
lu les bouts de la doc Intel interessants. Au depart, je voulais que
lorsque le main() du processus (thread) fait return, on se retrouve
dans le noyua dans un handler qui se charge de terminer proprement le
thread.

Mais gcc remplace les return par=20
 C9 leave
 C3 ret
Or C3 designe l'opcode d'un "near ret", c'est =E0 dire d'un ret dans le
meme segment. Or nous voulons retourner dans un autre segment, et
pour cela il faut utiliser "far ret" (opcode CB).

Apparemment, sous Linux les main() des programmes se terminent bien
par un "near ret", donc a mon avis ca doit retourner dans un code qui
est aussi dans l'espace utilisateur, et ce code se charge d'appeler
l'appel systeme 'exit'. Est-ce bien ca ?

Maintenant, pour nous c'est plus complexe, etant donne qu'on a des
threads CPL3... Comment fais-t-on ?

Voici ma proposition. Lorsqu'un des thread CPL3 d'une team se termine
(near ret), on se retrouve dans un code dans l'espace user qui se
charge de dire au noyau : tel thread est termine. Puis le noyau, quand
il voit qu'il n'y a plus de threads dans une team, il degage la team.

Qu'en pensez-vous ?

Thomas
--=20
PETAZZONI Thomas - thomas.petazzoni@enix.org - UIN : 34937744
(Perso)      http://www.enix.org/~thomas/
(KOS)        http://kos.enix.org/=20
(Club LinUT) http://club-linut.enix.org