Vous n'êtes pas identifié(e).
Pages : 1
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
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
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
Pages : 1