Andesi - forum

Forum francophone pour Debian

Vous n'êtes pas identifié(e).

#1 07/10/2005 20:50:51

e-miel
Membre
Inscription : 21/08/2004
Messages : 453

[Hurd] Paramètres des appels-système

La philosophie UNIX veut que les paramètres des appels-système soient empilés (instructions "push") avant l'appel "int" proprement dit. Or, Linux procède comme Microsoft : les paramètres des appels-système sont écrits dans les registres %ebx, %ecx...

Qu'en est-il avec Hurd ?

Hors ligne

#2 11/10/2005 07:50:17

Billy Charvet
Membre
Lieu : Valence
Inscription : 19/09/2005
Messages : 91
Site Web

Re : [Hurd] Paramètres des appels-système

Tout d'abord, attention, il y a plusieurs ABI sous Linux; il y a eu
quelques changements lors du noyau 2.6, qui demande de tout
recompiler pour être sûr d'en tirer partie (ou au moins la libc pour
permettre ce changement).

Et c'est pas si mal que Linux procède comme Microsoft, car le passage
de paramètres par les registres est plus rapide: la fonction appelée
n'a pas à désempiler.

Quand à Hurd, il doit fonctionner sous l'ABI par défaut de GCC, qui
passe par la pile je crois.


Je suis tel la fleur du lotus.
Bien que naissant de la boue,
aucune boue n'y adhère.

Hors ligne

#3 13/10/2005 20:04:09

e-miel
Membre
Inscription : 21/08/2004
Messages : 453

Re : [Hurd] Paramètres des appels-système

Et c'est pas si mal que Linux procède comme Microsoft, car le passage de paramètres par les registres est plus rapide: la fonction appelée n'a pas à désempiler.

C'est juste plus rapide si tu programmes directement en assembleur. Si tu programmes en C, les paramètres sont de toutes façon empilés pour être passés à la fonction (read, write...) de la libc, chargée de réaliser l'appel système proprement dit. Donc, au final, cette fonction (de la libc) devra recopier les valeurs stockées dans la pile vers les registres, et ensuite, comme le noyau a besoin des registres, la première chose qu'il va faire (lorsqu'il est appelé) c'est sauvegarder les valeurs en RAM, c'est-à-dire dans la pile, ce qu'un noyau UNIX n'a pas à faire puisque les valeurs sont déjà dans la pile au moment de l'appel.

Quand à Hurd, il doit fonctionner sous l'ABI par défaut de GCC, qui passe par la pile je crois.

C'est quoi une ABI ?

Hors ligne

Pied de page des forums