Pourquoi Linux est-il appelé un noyau monolithique?

209

J'ai lu que Linux est un noyau monolithique. Le noyau monolithique signifie-t-il la compilation et la liaison du code complet du noyau en un exécutable?

Si Linux est capable de prendre en charge des modules, pourquoi ne pas diviser tous les sous-systèmes en modules et les charger si nécessaire? Dans ce cas, le noyau n'a pas à charger tous les modules initialement et pourrait maintenir un index des fonctions dans le module et les charger si nécessaire.

Booléen
la source

Réponses:

291

Un noyau monolithique est un noyau où tous les services (système de fichiers, VFS, pilotes de périphériques, etc.) ainsi que les fonctionnalités de base (planification, allocation de mémoire, etc.) sont un groupe soudé partageant le même espace. Cela s'oppose directement à un micro - noyau .

Un micro-noyau préfère une approche où la fonctionnalité de base est isolée des services système et des pilotes de périphérique (qui sont essentiellement des services système). Par exemple, VFS (système de fichiers virtuel) et les systèmes de fichiers de périphérique de bloc (c'est-à-dire minixfs) sont des processus distincts qui s'exécutent en dehors de l'espace du noyau, utilisant IPC pour communiquer avec le noyau, d'autres services et processus utilisateur. En bref, s'il s'agit d'un module sous Linux, c'est un service dans un micro-noyau, indiquant un processus isolé.

Ne confondez pas le terme noyau modulaire avec tout sauf monolithique. Certains noyaux monolithiques peuvent être compilés pour être modulaires (par exemple Linux), ce qui importe, c'est que le module soit inséré et s'exécute à partir du même espace qui gère les fonctionnalités de base (espace du noyau).

L'avantage d'un micro-noyau est que tout service défaillant peut être facilement redémarré, par exemple, il n'y a pas d'arrêt du noyau si le système de fichiers racine abandonne. Cela peut également être considéré comme un inconvénient, car il peut masquer des bugs assez critiques (ou les faire paraître moins critiques, car le problème semble se résoudre en permanence). Cela est considéré comme un grand avantage dans les scénarios où vous ne pouvez tout simplement pas réparer facilement quelque chose une fois qu'il a été déployé.

L'inconvénient d'un micro-noyau est que la messagerie IPC asynchrone peut devenir très difficile à déboguer, surtout si des fibrilles sont implémentées. De plus, le simple fait de rechercher un problème FS / écriture signifie examiner le processus d'espace utilisateur, le service de périphérique de bloc, le service VFS, le service de système de fichiers et (éventuellement) le service PCI. Si vous obtenez un blanc à ce sujet, il est temps de regarder le service IPC. C'est souvent plus facile dans un noyau monolithique. GNU Hurd souffre de ces problèmes de débogage ( référence ). Je ne vais même pas entrer dans les points de contrôle lorsque je traite des files d'attente de messages complexes. Les micro-noyaux ne sont pas pour les faibles de cœur.

Le chemin le plus court vers un noyau stable et fonctionnel est l'approche monolithique. L'une ou l'autre approche peut offrir une interface POSIX, où la conception du noyau devient peu intéressante pour quelqu'un qui veut simplement écrire du code pour s'exécuter sur n'importe quelle conception donnée.

J'utilise Linux (monolithique) en production. Cependant, la majeure partie de mon apprentissage, du piratage ou du bricolage avec le développement du noyau va dans un micro-noyau, en particulier HelenOS .

Éditer

Si vous êtes allé aussi loin dans ma réponse très longue, vous aurez probablement du plaisir à lire le « Grand débat Torvalds-Tanenbaum sur la conception du noyau ». C'est encore plus drôle de lire en 2013, plus de 20 ans après qu'il soit apparu. La partie la plus drôle était la signature de Linus dans l'un des derniers messages:

Linus "my first, and hopefully last flamefest" Torvalds

De toute évidence, cela ne s'est pas réalisé plus que la prédiction de Tanenbaum selon laquelle x86 serait bientôt obsolète.

NB:

Quand je dis "Minix", je n'implique pas Minix 3. De plus, quand je mentionne The HURD, je fais référence (principalement) au micro-noyau Mach. Je n'ai pas l'intention de dénigrer le travail récent des autres.

Tim Post
la source
5
Fait intéressant, Linus Torvalds a été grandement influencé par MINIX d'Andew Tanenbaum lorsqu'il a créé Linux. Cependant, MINIX est basé sur une conception de micro-noyau tandis que Linux utilise un noyau monolithique.
Martin Liversage
2
@Martin Liversage: Plus frustré qu'influencé :) J'ai modifié ma réponse pour refléter cela.
Tim Post
25
@DigitalRoss: Vous devriez voir ma boîte de réception après avoir répondu à cette question, Linus est apprivoisé par rapport aux amateurs de Minix et Mach.
Tim Post
3
@p_l Je pense que c'est assez proche du moment où nous devons parler des différences entre micro, monolithique et hybride. Cela pourrait être une très bonne question :)
Tim Post
15

Le noyau monolithique signifie que l'ensemble du système d'exploitation s'exécute en mode noyau (c'est-à-dire hautement privilégié par le matériel). Autrement dit, aucune partie du système d'exploitation ne s'exécute en mode utilisateur (privilège inférieur). Seules les applications au-dessus du système d'exploitation fonctionnent en mode utilisateur.

Dans les systèmes d'exploitation du noyau non monolithiques, tels que Windows, une grande partie du système d'exploitation lui-même s'exécute en mode utilisateur.

Dans les deux cas, le système d'exploitation peut être hautement modulaire.

CesarGon
la source
9
Windows est certainement un noyau monolithique.
Adam Rosenfield
7
@Adam: Je ne suis pas d'accord. L'ancien Windows 16 bits était un noyau monolithique, tout comme Windows 95 et similaires. Mais les éditions NT de Windows, y compris toutes les versions du serveur plus Vista et 7, sont clairement micro-noyau ou peut-être hybrides, selon la définition de "micro-noyau" que vous utilisez.
CesarGon
8
Le fait que les pilotes d'imprimante ne fonctionnent pas dans ring0 n'en fait pas un micro-noyau :)
caf
7
@caf: Je vous suggère de jeter un œil à en.wikipedia.org/wiki/Windows_NT_kernel et en.wikipedia.org/wiki/Comparison_of_operating_system_kernels . Vous verrez que Windows NT et ses successeurs, y compris Vista, 7 et les serveurs, sont décrits comme "noyau hybride". Deux grands sous-systèmes du système d'exploitation fonctionnent entièrement en mode utilisateur, pas seulement un pilote d'imprimante. :-)
CesarGon
7
Mon commentaire était quelque peu ironique - la désignation "hybride" semble si dépourvue d'informations qu'elle est inutile.
caf
10

; tl-dr - Non, Linux est toujours monolithique.

Les modules Linux peuvent signifier modulaires dans un certain sens. Comme d'autres l'ont noté, le monolithique représente généralement un micro - noyau par rapport au noyau monolithique . Un micro-noyau traditionnel n'a que ces fonctionnalités,

  1. Planification
  2. Gestion de la mémoire
  3. Communications inter-processus

Il n'y a pas de pilotes matériels , de piles de protocoles , de systèmes de fichiers , de suspension / reprise , de gestion d'horloge , etc. dans le noyau principal. Ces choses sont identiques à n'importe quelle tâche utilisateur (bien qu'elles puissent avoir des privilèges différents via le MMU / le planificateur).


Les prédictions de Tanenbaum

  1. Les micro-noyaux sont l'avenir
  2. x86 s'éteindra et les architectures RISC domineront le marché
  3. (Dans 5 ans), tout le monde utilisera un OS GNU gratuit

Les programmeurs de PC et de serveurs peuvent rire, mais deux et trois sont certainement vrais pour la majorité des téléphones portables existants. Tanenbaum aurait raison sur tous les comptes si BlackBerry QNX était un succès.

De plus, de nombreux hyperviseurs L1 ont un micro-noyau en dessous. C'est parce qu'un hyper-viseur ne fait généralement pas grand-chose à côté du changement de contexte .

Apparemment, trois prédit le succès de Linux. ;-)


Un argument pour les micro - noyaux est que tous les sous-systèmes monolithiques doivent synchroniser plusieurs valeurs à la fois. Pour ce faire, ils doivent utiliser des verrous et souffriront de la loi d' Amdahl lorsqu'ils seront étendus à des architectures parallèles. Le compteur est que les micro - noyaux produisent de nombreux messages IPC.

Un développement majeur est l'utilisation de la programmation sans verrouillage pour éviter les conflits dans un noyau monolithique. Cela évite le verrouillage dans un noyau monolithique tout en réduisant la surcharge IPC. Récemment, tous les processeurs ont étendu leur ISA pour inclure de meilleures primitives pour les algorithmes sans verrouillage . Linux restera donc probablement un noyau monolithique pendant un certain temps.

bruit sans artifice
la source
1
Oui, je sais que Tanenbaum voulait dire Hurd. Mais GNU est passé à Linux, donc la formulation est drôle.
bruit
Pourquoi y a-t-il un manque d'utilisation de x86 pour les appareils mobiles? Qu'est-ce qui rend les autres architectures avantageuses?
Abdul
1
Abdul : Voir cette question .
bruit sans art
Oui, c'est important. Il est difficile de faire un SOC x86 (système sur puce). Il n'y a pas de code HDL standard pour fabriquer un x86 qu'un fournisseur SOC (Broadcom, Freescale, etc.) puisse acheter.
bruit sans art
9

De Wikipédia :

Un noyau monolithique est une architecture de noyau dans laquelle l'ensemble du système d'exploitation fonctionne dans l'espace du noyau et seul en mode superviseur. Contrairement à d'autres architectures, le noyau monolithique définit seul une interface virtuelle de haut niveau sur du matériel informatique, avec un ensemble de primitives ou d'appels système pour implémenter tous les services du système d'exploitation tels que la gestion des processus, la concurrence et la gestion de la mémoire elle-même et un ou plusieurs pilotes de périphériques en tant que modules.

Les versions récentes de Windows utilisent en revanche un noyau hybride .

Un noyau hybride est une architecture de noyau basée sur la combinaison d'aspects de micro-noyau et d'architectures de noyau monolithiques utilisés dans les systèmes d'exploitation informatiques. La catégorie est controversée en raison de la similitude avec le noyau monolithique; le terme a été rejeté par certains comme marketing simple. Les catégories de noyaux traditionnels sont les noyaux et micro-noyaux monolithiques (les nanocerneaux et les exokernels étant considérés comme des versions plus extrêmes des micro-noyaux).

Bob
la source
7
Si je fais quelque chose dans l'espace du noyau, je dois me souvenir d'utiliser quelque part "hybric kerkel". SCNR ;-)
Jürgen A. Erhard
1
Windows NT a toujours été un système hybride. Le noyau n'est peut-être pas exactement hybride, mais vous vous demandez ce que vous comptez en faire partie (winapi, par exemple, est implémenté en tant que service d'espace utilisateur)
p_l
5

«Monolithique» dans ce contexte ne fait pas référence à l'existence d'un seul grand exécutable, et comme vous le dites, Linux prend en charge le chargement dynamique des modules du noyau lors de l'exécution. Lorsque l'on parle de noyaux, «monolithique» signifie que l'ensemble du système d'exploitation s'exécute en mode «privilégié» ou «superviseur», contrairement à d'autres types de systèmes d'exploitation qui utilisent un type de noyau tel qu'un «micro-noyau», où seul un minimum ensemble de fonctionnalités s'exécute en mode privilégié, et la plupart du système d'exploitation s'exécute dans l'espace utilisateur.

Les partisans des micro-noyaux disent que c'est mieux car un code plus petit signifie moins de bogues, et les bogues s'exécutant en mode superviseur peuvent causer des problèmes beaucoup plus importants que dans le code de l'espace utilisateur (comme une plus grande chance d'avoir des failles de sécurité ou des pannes totales du système sous la forme d'un «panique du noyau»). Certains micro-noyaux sont suffisamment minimes pour pouvoir être «formellement vérifiés», ce qui signifie que vous pouvez prouver mathématiquement que le noyau est «correct» selon une spécification. L4 en est un bon exemple.

David Claridge
la source
Vérifiez vos sources. Le wikipage n'est pas cité. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/…
monksy
2

Le noyau monolithique est un seul grand processus entièrement exécuté dans un seul espace d'adressage. Il s'agit d'un seul fichier binaire statique. Tous les services du noyau existent et s'exécutent dans l'espace d'adressage du noyau. Le noyau peut appeler directement des fonctions. Les exemples de systèmes d'exploitation monolithiques basés sur le noyau sont Linux, Unix.

Je pense que ce post vous aidera à mieux comprendre le concept.

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html

JIN007
la source
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change.
Scott