[Kos-dev] Retour des processus...
kos-dev@enix.org
kos-dev@enix.org
Wed, 06 Mar 2002 20:29:21 +0000
Salut,
Thomas wrote:
> oui, j'ai bien compris cela, et c'est ce qu'on fait
> avec les threads noyau (thread_end_handler). La
> question etait plutot : ce handler pour
> les threads CPL3, est-il du code CPL3, ou du code
> CPL0 ? A mon avis du code CPL3, parce que sinon faut
> modifier a la main les binaires
> compilees par gcc pour qu'a la place de faire un
> "near ret", ca fasse un "far ret".
en general (pour linux/posix):
Au demarrage le process ne commence pas a main mais
_start qui est dans le crt0.o de gcc, qui appelle a son
tour un _libc_main qui appelle main qui retourne avec un
ret normal. Puis _libc_main appele exit avec la valuer
retourner par main, exit fait en definitive le system
call exit, qui fait le nettoyage, envoie les signaux ou
ils faut etc...
(donc tu étais correct)
La terminaison des process est donc gere en CPL0, et un
process qui oublie d'appeler exit va surement
s'autoterminer avec un segfault si il essaye un ret avec
une adresse de retour non valide.
Dans le cas de thread (pthread) c'est le meme genre de
schemas sauf que quand le process se termine est appele
les pthreads vont aussi se faire eliminer soient par un
des handlers appeler par exit soit par des jeux de
signaux.
En gros linux n'a que deux syscall pour terminer un
process (exit et kill) les details concernant les
threads et leurs etat d'ames quand leur freres ou leur
parents meurent etant gérés au niveau user.
Dans votre cas il faut peut-etre ajouter des functions
pour gerer tous les cas, mais globalement un
process/thread ne se termine pas seulement par un ret
mais par un appel explicite a un syscall (dans le cas ou
le process/thread est gere par le noyau) ou une fonction
(si les threads sont gérés en user space) qui peut
eventuellement utiliser des syscalls (cas hybride).
Tout ca pour dire que le formulaire d'abonnement aux
mailing listes ne marche plus (doors.enix.org doit sans
doute etre remplace par enix.org un peu partout)
A+
-- Fabrice