Un micro-noyau implémente tous les pilotes en tant que programmes d'espace utilisateur et implémente des fonctionnalités de base comme IPC dans le noyau lui-même. Un noyau monolithique, cependant, implémente les pilotes en tant que partie du noyau (par exemple, s'exécute en mode noyau).
J'ai lu certaines affirmations selon lesquelles les micro-noyaux sont plus lents que les noyaux monolithiques, car ils doivent gérer le message passant entre les pilotes dans l'espace utilisateur. Est-ce vrai?
Pendant longtemps, la plupart des noyaux étaient monolithiques car le matériel était trop lent pour exécuter rapidement les micro-noyaux. Cependant, il existe maintenant de nombreux micro-noyaux et noyaux hybrides, comme GNU / Hurd, Mac OS X, Windows NT, etc.
Alors, est-ce que les performances des micro-noyaux ont changé? Cette critique des micro-noyaux est-elle toujours valable aujourd'hui?
Je préfère appeler Windows NT et le noyau XNU d'Apple au lieu d'hybride. Je ne trouve pas que la classification des hybrides ait beaucoup de sens dans la pratique. En fait, l'un des ingénieurs d'origine de XNU l'appelle monolithique [1].
En ce qui concerne les performances, la seule comparaison vraiment approfondie entre monolithique et micro que je puisse trouver est "Extreme High Performance Computing or Why Microkerenels Suck" [2] et une présentation de réfutation "Do Microkernels Suck?" [3].
La modularité et la personnalisation sont davantage des problèmes de conception que des limitations inhérentes aux noyaux monolithiques. Le noyau Linux, par exemple, peut varier de plusieurs mégaoctets à environ un mégaoctet en fonction des options de compilation et de l'application de certains correctifs. La grande majorité des 15 millions de lignes de code de Linux sont des modules de noyau chargeables. Ils sont compilés séparément du noyau de base et ne sont chargés qu'en cas de besoin. Ces modules peuvent implémenter des pilotes et des appels système (même remplacer les appels système de base).
Les deux domaines dans lesquels les micro-noyaux ont un avantage incontesté sont les systèmes d'exploitation en temps réel à faible mémoire (<= 512 Ko de RAM) ou «durs», comme les systèmes de vol des compagnies aériennes ou les systèmes de contrôle des réacteurs nucléaires.
Edit: Parlant plus avant des avantages et des inconvénients de l'une ou l'autre architecture du noyau, Gernot Heiser admet librement à la fin de sa présentation [3] que les noyaux monolithiques sont intrinsèquement plus performants car un micro-noyau a toujours une surcharge supplémentaire. Cependant, cette surcharge supplémentaire conduit à une fiabilité accrue, d'où la domination des micro-noyaux sur RTOS.
[1] Louis G. Gerbarg, "Synchronisation avancée sous Mac OS X: étendre Unix à SMP et en temps réel", Actes de la conférence BSDCon 2002, pp. 2
[2] Chistoph Lameter, "Calcul haute performance extrême ou pourquoi les micro-noyaux sucent", 2007 Linux Symposium, Volume One
[3] Gernot Heiser, "Do Microkernels Suck?", 9th Linux.conf.au, janvier 2008
la source