Comment le noyau Linux se compare-t-il aux architectures de micro-noyaux?

39

J'ai lu un jour que l'un des avantages d'une architecture de micro-noyau est que vous pouvez arrêter / démarrer des services essentiels tels que la mise en réseau et les systèmes de fichiers, sans avoir à redémarrer l'ensemble du système. Mais étant donné que le noyau Linux de nos jours (était-ce toujours le cas?) Offre la possibilité d'utiliser des modules pour obtenir le même effet, quels sont les avantages (restants) d'un micro-noyau?

Tshepang
la source
5
Sur le sujet des micro-noyaux et de Linux, voyez aussi cette très bonne réponse à «Pourquoi Linux est appelé noyau monolithique» .
Gilles 'SO- arrête d'être méchant' le
1
Vous pouvez lire le débat sur le noyau MicroKernel vs Monolithic. oreilly.com/openbook/opensources/book/appa.html Dans cet article, Andrew Tanenbaum prend en charge Microkernel et Linus Torvalds prend en charge le noyau monolithique.
Bhuwan

Réponses:

35

Les micro- noyaux nécessitent moins de code pour être exécutés dans le mode le plus interne et le plus fiable que les noyaux monolithiques . Cela comporte de nombreux aspects, tels que:

  • Les micro-noyaux permettent de charger et de décharger à volonté des fonctionnalités non fondamentales (telles que des pilotes pour du matériel non connecté ou non utilisé). Ceci est principalement réalisable sous Linux, via des modules.
  • Les micro-noyaux sont plus robustes: si un composant non noyau tombe en panne, il ne prendra pas tout le système avec. Un système de fichiers ou un pilote de périphérique présentant un bogue peut planter un système Linux. Linux n'a pas d'autre moyen d'atténuer ces problèmes que les pratiques de codage et les tests.
  • Les micro-noyaux ont une base informatique de confiance plus petite . Ainsi, même un pilote de périphérique ou un système de fichiers malveillant ne peut pas prendre le contrôle de l’ensemble du système (par exemple, un pilote d’origine douteuse pour votre dernier gadget USB ne pourrait pas lire votre disque dur).
  • Une conséquence du point précédent est que les utilisateurs ordinaires peuvent charger leurs propres composants qui seraient des composants de noyau dans un noyau monolithique.

Les interfaces graphiques Unix sont fournies via la fenêtre X, qui correspond au code utilisateur (à l'exception du pilote de périphérique vidéo). De nombreux ordinateurs modernes permettent aux utilisateurs ordinaires de charger des pilotes de système de fichiers via FUSE . Une partie du filtrage des paquets sur le réseau Linux peut être effectuée dans les pays utilisateurs. Toutefois, les pilotes de périphérique, les planificateurs, les gestionnaires de mémoire et la plupart des protocoles de réseau ne sont toujours basés que sur le noyau.

Un débat classique (si daté) sur Linux et les micro-noyaux est le débat Tanenbaum – Torvalds . Vingt ans plus tard, on pourrait dire que Linux évolue très lentement vers une structure de micro-noyau (les modules chargeables sont apparus très tôt, FUSE est plus récent), mais il reste encore un long chemin à parcourir.

Une autre chose qui a changé est la pertinence accrue de la virtualisation sur les ordinateurs de bureau et les ordinateurs embarqués haut de gamme: pour certaines raisons, la distinction pertinente n’est pas entre le noyau et l’utilisateur, mais entre l’ OS hyperviseur et les systèmes d’exploitation invités.

Gilles, arrête de faire le mal
la source
1
C'est une très belle théorie. Si un périphérique est coincé d'une manière ou d'une autre, le système est porté à la tâche. Si un pilote se bloque à mi-chemin d'une opération, son redémarrage ne rétablira pas le système. Si vous voulez des performances, les pilotes doivent être multithreads ... et l'avantage d'un "programmateur unique" est complètement perdu. Vous voulez des performances, vous devez éviter (de plus en plus coûteux) les copies de mémoire et les changements de contexte ... et la "modularité" est perdue. Recherchez les tailles de certains micro-noyaux et vous verrez que leur taille et leur complexité sont comparables à celles des noyaux monolithiques avec les pilotes inclus .
vonbrand
15

Un micro-noyau limite le temps pendant lequel le système est en mode noyau, par opposition à l'espace utilisateur, au minimum absolu.

Si un crash se produit en mode noyau, tout le noyau tombe en panne, ce qui signifie que tout le système tombe en panne. Si un crash se produit en mode utilisateur, seul ce processus est interrompu. Linux est robuste à cet égard, mais il est toujours possible pour tout sous-système du noyau d'écrire sur la mémoire de tout autre sous-système du noyau, à dessein ou accidentellement.

Le concept de micro-noyau met beaucoup de choses qui sont traditionnellement en mode noyau, telles que la mise en réseau et les pilotes de périphériques, dans l'espace utilisateur. Puisque le micro-noyau n’est pas vraiment responsable de beaucoup, cela signifie également qu’il peut être plus simple et plus fiable. Pensez à la façon dont le protocole IP, en étant simple et stupide, conduit réellement à des réseaux robustes en poussant la complexité vers les bords et en laissant le noyau maigre et moyen.

LawrenceC
la source
5

Vous devriez lire l'autre côté du problème:

Extreme High Performance Computing ou Pourquoi les micro-noyaux craignent

Le système de fichiers appartient au noyau

Bruce Ediger
la source
Merci d'avoir posté les liens vers les lectures! Ce que Brent W dit en résumé est valable et, dans une certaine mesure, je comprends la préoccupation de Christoph L. concernant la complexité excessive des mécanismes de synchronisation des micro-noyaux. Cependant, je pense que ce dernier article peut négliger des boucles d’événements basées sur des messages. Comme les boucles d’événements ne partagent pas la mémoire entre elles, le verrou n’est plus nécessaire et, étant donné (IMO), elles se prêtent à un style de codage déclaratif, un algorithme cohérent peut être défini explicitement (le point du lambda calcul ...) - J'ai l'habitude de coder des applications, mais ce Q a été une expérience d'apprentissage agréable
anthropic android
1

Jetez un coup d’œil à l’architecture x86 - le noyau monolithique n’utilise que les anneaux 0 et 3. Un véritable gâchis. Mais encore une fois, cela peut être plus rapide, en raison de moins de changements de contexte.

anneaux x86

vartec
la source
La structure de l'anneau x86 est juste une ingénierie en trop. Aucune utilisation pratique (sauf les machines virtuelles, mais cela est de plus en plus utilisé ...)
vonbrand
1
  1. Le noyau monolithique est beaucoup plus ancien que le microkernel . Il est utilisé dans Unix alors que l’idée du micro-noyau est apparue à la fin des années 80 .

  2. Les exemples de systèmes d'exploitation dotés de noyaux monolithiques sont UNIX, LINUX, tandis que les systèmes d'exploitation dotés de micro- noyaux sont QNX, L4, HURD et initialement Mach (non MacOS X), qui a ensuite été converti en noyau hybride. Même MINIX n'est pas un micro-noyau pur, car ses pilotes de périphérique sont compilés dans le noyau.

  3. Les noyaux monolithiques sont plus rapides que les micro- noyaux . Le premier micro-noyau de Mach est 50% plus lent que les noyaux monolithiques. Les versions ultérieures telles que L4 ne sont que 2% ou 4% moins rapides que le noyau monolithique .

  4. Les noyaux monolithiques sont généralement volumineux, tandis que les micro- noyaux purs doivent être de petite taille , même dans le cache de premier niveau du processeur (micro-noyau de première génération).

  5. Dans les noyaux monolithiques, les pilotes de périphérique résident dans l’ espace noyau tandis que dans le micro-noyau, les pilotes de périphérique résident dans l’ espace utilisateur .

  6. Étant donné que les pilotes de périphérique résident dans l’espace noyau, le noyau monolithique est moins sécurisé que le microkernel (une défaillance du pilote peut entraîner un crash). Les micro- noyaux sont plus sûrs que les noyaux monolithiques, ils sont donc utilisés dans de nombreux dispositifs militaires.

  7. Les noyaux monolithiques utilisent des signaux et des sockets pour assurer l'IPC, tandis que l'approche du micro-noyau utilise des files de messages . Le 1 er gen de micronoyau mal mis en œuvre IPC afin qu'ils étaient lents sur les changements de contexte.

  8. Ajouter de nouvelles fonctionnalités à un système monolithique signifie recompiler l’ensemble du noyau tout en permettant d’ajouter de nouvelles fonctionnalités ou correctifs sans recompiler.

Rahul Bhadana
la source
Dans (4), vous comparez des pommes et des pastèques. Le micro-noyau lui-même (par conception) ne contient que des fonctionnalités minimales, le noyau monolithique en contient beaucoup plus. (6) est une théorie intéressante, cela dépend de la compétence avec laquelle les éléments sont développés et du degré de fuite du véritable mécanisme IPC (pour la performance, il ne peut s'agir d'un véritable "transfert de message"). La note (7) signifie un traitement très complexe des "files de messages", annulant ainsi principalement leurs avantages. Pour (8), dans le cas de Linux par exemple, il est certainement possible de compiler un module indépendant du noyau. Ceci est fait systématiquement pour le développement de pilotes, en fait.
vonbrand
0

Windows NT (le noyau sous-jacent aux systèmes Windows actuels) a commencé comme une conception de micro-noyau tout à fait vanille. En raison de problèmes de performances, de plus en plus de code "userland" a migré dans le "micokernel" ... aujourd'hui, sa structure de micro-noyau est restée inchangée.

vonbrand
la source
-1

Le cas est que le noyau Linux est un hybride de monolithique et de microkernel. Dans une implémentation monolithique pure, aucun module ne se charge au moment de l'exécution.


la source
9
ce n'est pas. le fait que les modules soient chargés de manière dynamique ne change pas le fait qu'ils sont exécutés avec des privilèges de noyau complets et dans le cadre d'un noyau monolithique.
vartec
3
Pour une conception hybride, il serait plus important que certains pilotes (USB, Scanners, Imprimantes et graphiques) soient implémentés dans l’espace utilisateur plutôt que dans le noyau. La distinction n'est pas claire et Linux peut être défini comme un noyau hybride puisqu'il existe libusb, sane, cups et mesa - non pas parce qu'il y a insmod et rmmod.
Maciej Piechotka
-1

Les termes monolithic kernelet microkernelne peuvent pas être comparés sérieusement car ils décrivent différents aspects de la conception du noyau (structure par rapport à la taille).

Un noyau monolithique typique était le noyau SunOS-4.x et Linux est toujours similaire, car vous configurez manuellement le contenu du noyau de base.

Le noyau Solaris (à partir de 2.1 sur 1992) ne peut plus être appelé monolithique car tous les pilotes sont chargés automatiquement à la demande et seule une infime partie est chargée lors du démarrage initial.

SunOS-4.x, Solaris (SunOS-5.x) et Linux sont tous des implémentations à contexte unique. Tout leur code s'exécute dans un seul contexte MMU.

Mac OS X est basé sur Mach et fonctionne comme une implémentation multi-contextes avec plusieurs processus séparés par des contextes MMU. Dans ce concept, les pilotes sont dans des processus et des contextes MMU distincts.

De nombreuses personnes qualifient Mac OS X de "système à micro-noyau", mais il se peut que le noyau de base ne soit pas plus petit que le noyau de base de Solaris.

Il semble donc qu'il serait préférable de parler single context kernelscontre multi context kernels.

schily
la source
1
MacOS exécute une cale BSD (essentiellement monolitique) sur un micro-noyau. Aucune séparation en processus séparés, pas de conception micro-noyau réelle .
vonbrand
1
Vous admettez donc une conception qui utilise au moins deux processus dits de noyau. Le terme microkernelest faux de toute façon car il est généralement utilisé pour quelque chose qui devrait être appelé multi context kernel.
Schily