From: Manuel Menal Subject: [HurdFr] Re: question about hurd Date: Wed, 12 Mar 2003 22:17:09 +0100 Message-ID: <20030312211709.GA12310@woof> User-Agent: Mutt/1.5.3i > I've got a couple of question when looking at Hurd boot sequence. To > start the system, Grub (or any other multiboot bootloader) launch 3 > modules : the kernel, the exec server and the filesystem server. But, > how thoses 3 modules know each other ? I can't figure out what low level > mecanisms are in use for that. Je ne suis pas bien sûr sûr de comprendre la question, en fait. On démarre d'abord, via multiboot, et via Grub, donc, directement (après le noyau, évidemment), et en premier, ext2fs.static, version compilée en statique (diskfs, la GNU C Library, etc., sont directement intégrées, pas de link dynamique) du serveur ext2fs, ici chargé du /. Pour "contacter" l'autre serveur, exec - notamment pour lancer /hurd/init, il le fait comme pour n'importe quel autre serveur : par le mécanisme des translators, il obtient un port, et ensuite, envoit des messages sur ce port via mach_msg (c'est "caché" dans les sources du Hurd, c'est à dire que tu as l'impression que chaque serveur fait des appels de fonction, mais tu dois bien te rendre compte que c'est strictement impossible : ça voudrait dire que chaque tâche a accès à l'espace d'adressage des autres tâches (elle peut jump'er à une adresse de fonction d'une autre tâche); c'est donc par le kernel que ça passe, et ce sont les stubs code que vont générer MiG qui vont appeler le system call mach_msg; le kernel, lui, peut écrire où il veut quand il veut, et en l'occurence, c'est la tâche correspondante qui va recevoir le message et va voir "ah, on me dit de faire ça, ok, go", et voilà.) Ensuite, pour les appels systèmes, le problème est tout différent, mais absolument pas spécifique au Hurd/Mach : http://www.lnxscene.org/assembly/intro/hello.html#AEN55 présente un court aperçu de comment ça marche. J'avais fait une courte introduction au Hurd, inachevée, bourrée de fautes d'orthographe, et peut-être de quelques inexactitudes (je revendique les inexactitudes, mais les fautes d'orthographe ne sont pas de moi, promis :-) disponible sur . > Also, when a new module is loaded, how its interface, made of functions > and shared variables, is made accessible for other modules, library or > task ? For exemple, with the three modules (kernel, exec and > filesystem), how exec can know the entry point of a specific function of > the kernel or the filesystem ? C'est strictement impossible s'il s'agit d'un autre serveur, pour les raisons évoquées ci-dessus : ce sont des tâches à part, dans des espaces d'adressages à part. Le MMU t'interdira d'accéder à l'espace d'adressage, ne serait-ce que pour un jump (imagine le trou _énorme_). En revanche, pour le noyau, il en va bien évidemment différemment. Tout le monde doit être capable d'appeler le noyau, sinon il ferait rien du tout (pas d'I/O, pas de ..). Ce que tu vois comme un appel de fonctions entre serveurs est un RPC, Remote Procedure Call. Le serveur qui veut communiquer va obtenir un port vers le serveur désiré par le mécanisme des translators. Il va ensuite envoyer un message sur ce port, message qui comportera généralement, pour un RPC, un ID dans un champ spécial de l'en-tête du message, correspondant à la fonction appelée, et dans le corps les arguments éventuels (et souvent, un droit send-once (un seul envoi) sur un port de réponse). Le serveur en face va faire ce qui lui est demandé dans la mesure où elle le peut, pendant ce temps là, le premier serveur (appelant) vaque à ses occupations, et quand l'autre (l'appelé) a fini, il renvoit un message (via mach_msg) avec le retour de la fonction si y'a, ou sinon, il renvoit rien. Je te conseille de lire la documentation qui t'a été pointée sur bug-hurd, et également de faire les exercices proposés sur . N'hésite pas à poser des questions. > I'm very interested in OS low level mecanisms and in Hurd specialy. > Maybe, when my level of knowledge will become better, I will be able to > contribute to this project, but for the moment, I need to learn more. Hé, HurdFr est là pour ça, donc si tu souhaites t'abonner à la liste et continuer à apprendre en posant des questions, faisant des exercices, etc. etc. :-) bonne soirée, -- Manuel Menal