246 votes

Pourquoi Linux est-il appelé un noyau monolithique ?

J'ai lu que Linux est un noyau monolithique. Est-ce que noyau monolithique signifie compiler et lier le code complet du noyau dans un exécutable ?

Si Linux est capable de supporter des modules, pourquoi ne pas décomposer tous les sous-systèmes en modules et les charger quand c'est nécessaire ? Dans ce cas, le noyau n'a pas besoin de charger tous les modules initialement et pourrait maintenir un index des fonctions dans le module et les charger quand c'est nécessaire.

326voto

Tim Post Points 21270

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 (ordonnancement, allocation de mémoire, etc.) constituent 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é principale est isolée des services système et des pilotes de périphériques (qui ne sont en fait que des services système). Par exemple, les systèmes de fichiers VFS (virtual file system) et block device (i.e. minixfs) sont des processus séparés qui s'exécutent en dehors de l'espace du noyau, utilisant l'IPC pour communiquer avec le noyau, les autres services et les processus utilisateurs. En bref, si c'est un module sous Linux, c'est un service dans un micro-noyau, indiquant un processus isolé.

Ne pas confondre le terme modulaire noyau pour être 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é dans le même espace que celui qui gère la fonctionnalité de base (espace du noyau) et qu'il s'exécute à partir de celui-ci.

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 lance une interruption. Cela peut également être considéré comme un inconvénient, car cela peut cacher des bogues assez critiques (ou les faire paraître moins critiques, car le problème semble se résoudre continuellement). Il est considéré comme un grand avantage dans les scénarios où vous ne pouvez tout simplement pas corriger quelque chose de façon pratique 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 fibrilles sont mises en œuvre. En outre, la recherche d'un problème de FS/écriture implique d'examiner le processus de l'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 n'obtenez rien, il est temps d'examiner le service IPC. Ceci est souvent plus facile dans un noyau monolithique. GNU Hurd souffre de ces problèmes de débogage ( référence ). Je ne parlerai même pas du checkpointing dans le cas de files de messages complexes. Les micro-noyaux ne sont pas faits pour les âmes sensibles.

Le chemin le plus court vers un noyau stable et fonctionnel est l'approche monolithique. L'une ou l'autre de ces approches peut offrir une interface POSIX, où la conception du noyau devient de peu d'intérêt pour quelqu'un qui veut simplement écrire du code à exécuter sur une conception donnée.

J'utilise Linux (monolithique) en production. Cependant, la majeure partie de mon apprentissage, de mon piratage ou de mon bricolage en matière de développement de noyau est consacrée à un micro-noyau, à savoir HelenOS .

Modifier

Si vous êtes arrivé jusqu'ici à travers ma très longue réponse, vous allez probablement vous amuser en lisant l'article " ". Grand débat Torvalds-Tanenbaum sur la conception du noyau '. C'est encore plus drôle à lire en 2013, plus de 20 ans après que cela ait transpiré. La partie la plus drôle était la signature de Linus dans un des derniers messages :

Linus "my first, and hopefully last flamefest" Torvalds

Évidemment, cela ne s'est pas réalisé, pas plus que la prédiction de Tanenbaum selon laquelle les x86 seraient bientôt obsolètes.

NB :

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

6 votes

Il est intéressant de noter que Linus Torvalds a été grandement influencé par le MINIX d'Andew Tanenbaum lorsqu'il a créé Linux. Cependant, MINIX est basé sur une conception de micro-noyau alors que Linux utilise un noyau monolithique.

2 votes

@Martin Liversage : Plus frustré qu'influencé :) J'ai modifié ma réponse pour refléter cela.

25 votes

@DigitalRoss : Vous devriez voir ma boîte de réception après avoir répondu à cette question, Linus est apprivoisé par rapport aux enthousiastes de Minix et Mach.

22voto

CesarGon Points 8710

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

Dans les systèmes d'exploitation à noyau non monolithique, tels que Windows, une grande partie du système d'exploitation lui-même fonctionne en mode utilisateur.

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

0 votes

Pouvez-vous expliquer comment un noyau monolithique peut être modulaire, ce qui, je suppose, signifie que vous pouvez retirer certaines des fonctionnalités de base (les pilotes par exemple) et les transformer en modules séparés.

14 votes

Windows est très certainement un noyau monolithique.

0 votes

@James : Un noyau monolithique OS peut être modulaire, comme Linux. Linux est composé de plusieurs fichiers exécutables qui fonctionnent comme des démons et des processus ; vous pouvez choisir d'en exécuter certains ou de ne pas en exécuter d'autres, en sélectionnant différentes configurations. C'est la modularité. D'après Wikipedia, "La plupart des systèmes d'exploitation monolithiques modernes tels que OpenVMS, Linux, BSD et les variantes UNIX telles que FreeBSD, NetBSD, SunOS, AIX et MULTICS peuvent charger (et décharger) dynamiquement des modules exécutables au moment de l'exécution".

9voto

Bob Points 34449

De Wikipedia :

Un noyau monolithique est une architecture de noyau où l'ensemble du système d'exploitation fonctionne dans l'espace du noyau et seul en mode superviseur. À la différence des autres architectures, le noyau monolithique définit seul une interface virtuelle de haut niveau sur le matériel informatique, avec un ensemble de primitives ou d'appels système pour mettre en œuvre tous les services du système d'exploitation, tels que la gestion des processus, la concurrence et la gestion de la mémoire, ainsi qu'un ou plusieurs pilotes de périphériques en tant que modules.

Les versions récentes de Windows, en revanche, utilisent une Noyau hybride .

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

7 votes

Si jamais je fais quelque chose dans l'espace noyau, je dois me souvenir d'utiliser "hybric kerkel" quelque part. SCNR ;-)

1 votes

Windows NT a été toujours un système hybride. Le noyau n'est peut-être pas exactement hybride, mais on peut se demander ce que l'on considère comme faisant partie du noyau (winapi, par exemple, est implémenté comme un service en espace utilisateur).

8voto

David Claridge Points 2266

Dans ce contexte, le terme "monolithique" ne signifie pas qu'il n'y a qu'un seul grand exécutable et, comme vous le dites, Linux prend en charge le chargement dynamique des modules du noyau au moment de l'exécution. Lorsqu'on parle de noyaux, le terme "monolithique" signifie que l'ensemble du système d'exploitation s'exécute en mode "privilégié" ou "superviseur", par opposition à d'autres types de systèmes d'exploitation qui utilisent un type de noyau tel qu'un "micro-noyau", où seul un ensemble minimal de fonctionnalités s'exécute en mode privilégié, et la majeure partie du système d'exploitation s'exécute dans l'espace utilisateur.

Les partisans des micro-noyaux affirment que c'est mieux ainsi, 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 vulnérabilités de sécurité ou des pannes totales du système sous la forme d'une "panique du noyau"). Certains micro-noyaux sont suffisamment minimaux pour ê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.

0 votes

Vérifiez vos sources. La page wikipédia n'est pas citée. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/

3voto

user3287223 Points 21

Un noyau monolithique est un seul gros processus fonctionnant entièrement 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 invoquer des fonctions directement. Les exemples de systèmes d'exploitation basés sur un noyau monolithique sont Linux, Unix.

Je pense que cet article vous aidera à mieux comprendre le concept.

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

0 votes

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 pour référence. Les réponses ne comportant qu'un lien peuvent devenir invalides si la page liée change.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X