web-dev-qa-db-fra.com

Comment le noyau Linux est-il comparable aux architectures de microkernel?

J'ai lu une fois qu'un avantage d'une architecture de microkernel 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 compte tenu de ce noyau Linux (é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 microkernel?

39
tshepang

microkernelles nécessite moins de code à exécuter dans le mode le plus profond, le plus fiable que noyaux monolithiques . Cela a de nombreux aspects, tels que:

  • Les microkernelles autorisent des caractéristiques non fondamentales (telles que les pilotes pour le matériel qui n'est pas connecté ou non utilisé) à charger et à décharger à volonté. Ceci est surtout réalisable sur Linux, par le biais de modules.
  • Les microkernelles sont plus robustes: si un composant non-noyau se bloque, il ne prendra pas tout le système avec elle. Un système de fichiers de buggy ou pilote de périphérique peut bloquer un système Linux. Linux n'a aucun moyen d'atténuer ces problèmes autres que des pratiques et des tests de codage.
  • Les microkernelles ont une base moins petite Base informatique de confiance . Donc, même un pilote ou un système de fichiers malveillant ne peut pas prendre le contrôle de l'ensemble du système (par exemple, un conducteur d'origine douteuse pour votre dernier gadget USB ne serait pas en mesure de 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 du noyau dans un noyau monolithique.

Les GIV UNIX sont fournies via X Fenêtre, qui est le code UseLland (à l'exception de (une partie de) le pilote de périphérique vidéo). De nombreux avis modernes permettent aux utilisateurs ordinaires de charger des pilotes de système de fichiers via fusible . Certains du filtrage de paquets réseau Linux peuvent être effectués dans Userland. Cependant, les pilotes de périphériques, les planificateurs, les gestionnaires de la mémoire et la plupart des protocoles de réseau ne sont encore que du noyau.

Un classique (si daté) lu sur Linux et les microkernelles est le Débat Tanenbaum-Torvalds . Vingt ans plus tard, on pourrait dire que Linux se déplaçait très lentement vers une structure de microkernel (les modules chargés sont apparus tôt, le fusible est plus récent), mais il reste encore un long chemin à parcourir.

Une autre chose qui a changé est la pertinence accrue de Virtualisation sur des ordinateurs de bureau et des ordinateurs intégrés haut de gamme: à certaines fins, la distinction pertinente n'est pas entre le noyau et l'US Userland, mais entre le Hypervisor et les OS invités.

Un micro-noyau limite le temps que le système est en mode noyau, par opposition à des utilisateurs, au minimum absolu possible.

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

Le concept de microkernel met beaucoup de choses qui est traditionnellement en mode de noyau, telles que la mise en réseau et les pilotes de périphériques, dans l'espace utilisateur. Étant donné que le microkernel n'est pas vraiment responsable de beaucoup, cela signifie également qu'il peut être plus simple et plus fiable. Pensez à la manière dont le protocole IP, en étant simple et stupide, conduit vraiment à des réseaux robustes en poussant la complexité aux bords et laissant le noyau maigre et la moyenne.

15
LawrenceC
5
Bruce Ediger

Il suffit de regarder l'architecture X86 - le noyau monolithique utilise uniquement bagues 0 et 3. Un gaspillage, vraiment. Mais encore plus, cela peut être plus rapide, en raison de la commutation moins de contexte.

x86 rings

1
vartec
  1. Le noyau monolithique est beaucoup plus vieux que le microkernel. Il est utilisé à UNIX tandis que l'idée de microkernel est apparue à la fin du fichier 1980.

  2. Exemples d'OSES ayant les noyaux monolithiques sont Unix, Linux tandis que les OSES ayant microkernel sont QNX, L4, Hurd et initialement Mach (pas MacOS X) qui a ensuite été converti en noyau hybride. Même [~ # ~] Minix [~ # ~] n'est pas un microkernel pur car ses pilotes de périphérique sont compilés dans le noyau.

  3. Les noyaux monolithiques sont plus vite que les microkernelles. Le premier microkernel Mach est de 50% plus lent que les noyaux monolithiques. Les versions ultérieures telles que L4 sont uniquement 2% ou 4% plus lentes que le noyau monolithique.

  4. Les noyaux monolithiques sont généralement volumineux tandis que le microkernel pur doit être de petite taille, même dans le cache de premier niveau du processeur (microkernel de première génération).

  5. Dans les noyaux monolithiques, les pilotes de périphérique résident dans espace du noyau tandis que dans les pilotes de périphérique microkernel résident dans espace utilisateur.

  6. Les pilotes de périphérique résident dans l'espace du noyau, il rend le noyau monolithique moins sécurisé que microkernel (l'échec dans le conducteur peut entraîner un crash). Les microkernels sont plus sécurisé que les noyaux monolithiques, ils sont donc utilisés dans de nombreux appareils militaires.

  7. Les noyaux monolithiques utilisent signaux et sockets Pour vous assurer IPC tandis que l'approche de microkernel utilise files d'attente de messages. Le 1st Gén de microkernel mal implémenté IPC Donc, ils étaient ralentissés sur des commutateurs contextuels.

  8. Ajout de nouvelles fonctionnalités à un système de monolithique signifie Recompilation du noyau entier Lorsque vous pouvez ajouter une nouvelle fonctionnalité ou des correctifs sans recompilation

1
Rahul Bhadana

Windows NT (le noyau sous-jacent aux systèmes Windows actuels) a commencé comme une conception de microkernel tout à fait vanille. En raison des problèmes de performance, de plus en plus du code "Userland" migrent dans le "micokernel" ... Aujourd'hui, sa structure de microkernel est vestigial.

0
vonbrand