Comment le kernel Linux se compare-t-il aux architectures micro-kernel?

J'ai lu une fois que l'un des avantages d'une architecture de micro-kernel est que vous pouvez arrêter / démarrer des services essentiels comme la mise en réseau et les filesystems, sans avoir à redémarrer l'set du système. Mais count tenu du fait que le kernel Linux de nos jours (était-ce toujours le cas?) Offre la possibilité d'utiliser des modules pour get le même effet, quels sont les avantages (restants) d'un microkernel?

Les microkernels nécessitent less de code pour être exécutés dans le mode le plus intime et le plus fiable que les kernelx monolithiques . Cela a de nombreux aspects, tels que:

  • Les microkernels permettent de charger et décharger à volonté des fonctionnalités non fondamentales (telles que des pilotes pour du matériel non connecté ou non utilisé). Ceci est principalement possible sur Linux, via des modules.
  • Les microkernels sont plus robustes: si un composant non-kernel se bloque, il ne prendra pas tout le système. Un système de files buggy ou un pilote de périphérique peut planter un système Linux. Linux n'a aucun moyen d'atténuer ces problèmes autres que les pratiques de encoding et les tests.
  • Les microkernels ont une base informatique de confiance plus petite. Ainsi, même un pilote de périphérique ou un système de files malveillant ne peut pas prendre le contrôle de tout le système (par exemple un pilote d'origine douteuse pour votre dernier gadget USB ne serait pas capable de lire votre disque dur).
  • Une conséquence du point précédent est que les users ordinaires peuvent charger leurs propres composants qui seraient des composants du kernel dans un kernel monolithique.

Les interfaces charts Unix sont fournies via la window X, qui est le code user (sauf pour (une partie du) pilote de périphérique video). De nombreux systèmes modernes permettent aux users ordinaires de charger des pilotes de filesystems via FUSE . Une partie du filtrage des packages réseau Linux peut être effectuée dans userland. Cependant, les pilotes de périphériques, les planificateurs, les gestionnaires de memory et la plupart des protocoles réseau ne sont encore que des kernelx.

Le débat sur Tanenbaum-Torvalds est un classique (s'il est daté) sur Linux et les microkernels. Vingt ans plus tard, on pourrait dire que Linux évolue très lentement vers une structure micro-kernel (les modules chargeables sont apparus très tôt, FUSE est plus récent), mais il rest encore beaucoup à faire.

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: à certains égards, la distinction pertinente n'est pas entre le kernel et l'user, mais entre l' hyperviseur et les systèmes d'exploitation invités.

Un microkernel limite le time que le système est en mode kernel, par opposition à l'espace user, au minimum absolu possible.

Si un crash se produit en mode kernel, le kernel entier tombe en panne, ce qui signifie que tout le système tombe en panne. Si un plantage se produit en mode user, ce process s'arrête. Linux est robuste à cet égard, mais il est toujours possible pour n'importe quel sous-système du kernel d'écrire sur la memory de n'importe quel autre sous-système du kernel, délibérément ou accidentellement.

Le concept de micro-kernel met beaucoup de choses qui sont traditionnellement le mode kernel, comme le réseau et les pilotes de périphériques, dans l'espace user. Comme le microkernel n'est pas vraiment responsable de beaucoup, cela signifie aussi qu'il peut être plus simple et plus fiable. Pensez à la façon dont le protocole IP, en étant simple et stupide, conduit vraiment à des réseaux robustes en poussant la complexité vers les bords et en laissant le cœur maigre et méchant.

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

Calcul extrême haute performance ou pourquoi les microkernels sucent

Le système de files appartient au kernel

Il suffit de jeter un oeil à l'architecture x86 – kernel monolithique utilise uniquement les anneaux 0 et 3. Un gaspillage, vraiment. Mais encore une fois, il peut être plus rapide, en raison de less de changement de context.

x86 anneaux

  1. Le kernel monolithique est beaucoup plus vieux que Microkernel . Il est utilisé dans Unix. tandis que Idea of ​​microkernel est apparu à la fin des années 1980 .

  2. l'exemple des os ayant les kernelx monolithiques sont UNIX, LINUX alors que les os ayant Microkernel sont QNX, L4, HURD , initialement Mach (pas mac os x) plus tard il sera converti en kernel hybride, même MINIX n'est pas pur kernel car driver compilé dans le cadre du kernel.

  3. Le kernel monolithique est plus rapide que le microkernel . tandis que le premier microkernel Mach est 50% plus lent que le kernel monolithique tandis que la version ultérieure comme L4 seulement 2% ou 4% plus lent que le kernel monolithique .

  4. Le kernel monolithique est généralement volumineux . tandis que le kernel monolithique pur doit être de petite taille, même en s dans le cache de premier niveau du processeur (microkernel de première génération).

  5. dans le pilote de périphérique Monolithic kernel résident dans l' espace kernel . tandis que Dans le pilote de périphérique Microkernel réside dans l' espace user .

  6. puisque le pilote de périphérique réside dans l'espace du kernel, le kernel monolithique est less sécurisé que le microkernel. (L'échec du pilote peut entraîner un plantage) alors que les microkernels sont plus sécurisés que le kernel monolithique, donc utilisés dans certains appareils militaires.

  7. Les kernelx monolithiques utilisent des signaux et des sockets pour assurer l'IPC tandis que l'approche du microkernel utilise des files d'attente de messages . 1 gen de micro-kernel mal implémenté IPC ont donc été lents sur les commutateurs de context.

  8. l'ajout d'une nouvelle fonctionnalité à un système monolithique signifie la recompilation du kernel entier pendant que vous pouvez append une nouvelle fonctionnalité ou des patches sans recompilation .

Windows NT (le kernel sous-jacent aux systèmes Windows actuels) a commencé comme une design de microkernel assez vanille. En raison de problèmes de performances, de plus en plus de code "userland" a migré dans le "micocerneur" … aujourd'hui, la structure du microkernel rest vestigiale.

Le cas est que linux kernel est un hybride de monolithique et de microkernel. Dans une implémentation monolithique pure, il n'y a pas de chargement de modules à l'exécution.

Les termes monolithic kernel et microkernel ne peuvent pas être sérieusement comparés car ils décrivent différents aspects de la design du kernel (structure par rapport à la taille).

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

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

SunOS-4.x et Solaris (SunOS-5.x) et Linux sont tous des implémentations de context unique. Tout leur code fonctionne dans un seul context MMU.

Mac OS X est basé sur Mach et s'exécute comme une implémentation multi-contexts avec plusieurs process séparés par des contexts MMU. Dans ce concept, les pilotes sont dans des process distincts et des contexts de MMU séparés.

Beaucoup de gens appellent Mac OS X un "microkernel system", mais il se peut que le kernel de base ne soit pas plus petit que le kernel de base de Solaris.

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