[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