[Kos-dev] Retour des processus...
Christophe
kos-dev@enix.org
Wed, 6 Mar 2002 13:15:07 +0100
Théoriquement, le handler que tu passes au thread user lors de sa création
n'est pas celui du main mais d'un handler de terminaison qui appellera le main.
C'est aussi simple que ça. Tu notereas que ce handler de terminaison est le
même pour tous les threads user mais il saura bien déterminer qui demande à
terminer.
----- Original Message -----
From: Thomas Petazzoni <thomas.petazzoni@enix.org>
To: <kos-dev@enix.org>
Sent: Wednesday, March 06, 2002 9:59 AM
Subject: [Kos-dev] Retour des processus...
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
C9 leave
C3 ret
Or C3 designe l'opcode d'un "near ret", c'est à 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
--
PETAZZONI Thomas - thomas.petazzoni@enix.org - UIN : 34937744
(Perso) http://www.enix.org/~thomas/
(KOS) http://kos.enix.org/
(Club LinUT) http://club-linut.enix.org
_______________________________________________
Kos-dev mailing list
Kos-dev@doors.enix.org
http://the-doors.enix.org/cgi-bin/mailman/listinfo/kos-dev