Question

J'ai lu que Linux est un noyau monolithique. Un noyau monolithique signifie-t-il la compilation et la liaison de tout le code 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 si nécessaire? Dans ce cas, le noyau ne doit pas charger tous les modules initialement et peut conserver un index des fonctions dans le module et les charger si nécessaire.

Était-ce utile?

La solution

Un noyau monolithique est un noyau dans lequel tous les services (système de fichiers, VFS, pilotes de périphérique, etc.) ainsi que les fonctionnalités principales (planification, allocation de mémoire, etc.) constituent un groupe soudé partageant le même espace. Ceci oppose directement un microkernel .

Un micro-noyau préfère une approche dans laquelle les fonctionnalités principales sont isolées 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 en mode bloc (par exemple, minixfs) sont des processus distincts qui s'exécutent en dehors de l'espace du noyau, utilisant IPC pour communiquer avec le noyau, les autres services et les processus utilisateur. En bref, s’il s’agit d’un module sous Linux, il s’agit d’un service dans un micro-noyau, indiquant un processus isolé.

Ne confondez pas le terme noyau modulaire avec autre chose que monolithique. Certains noyaux monolithiques peuvent être compilés pour être modulaires (par exemple, Linux). Ce qui compte, c'est que le module soit inséré dans le même espace que celui qui gère les fonctionnalités principales (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 annule un abandon. Cela peut également être considéré comme un inconvénient, car il peut masquer des bogues assez critiques (ou les rendre moins critiques, car le problème semble se résoudre continuellement). Cela est considéré comme un avantage considérable dans les scénarios dans lesquels vous ne pouvez tout simplement pas réparer facilement une tâche après son déploiement.

L’inconvénient du micro-noyau est que la messagerie IPC asynchrone peut devenir très difficile à déboguer, en particulier si fibrilles sont mis en œuvre. De plus, le simple fait de dépister un problème d'écriture / FS signifie d'examiner le processus d'espace utilisateur, le service de périphérique en mode 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 me lancer dans un checkpoint quand il s'agit de files d'attente de messages complexes. Les micro-noyaux ne sont pas pour les âmes sensibles.

Le chemin le plus court vers un noyau stable et fonctionnel est l’approche monolithique. Chacune de ces approches peut offrir une interface POSIX, dans laquelle la conception du noyau n’intéresse plus une personne qui souhaite simplement écrire du code s’exécutant sur une conception donnée.

J'utilise Linux (monolithique) en production. Cependant, l'essentiel de mes connaissances, le piratage informatique ou le bricolage du développement du noyau va dans un micro-noyau, en particulier HelenOS .

Modifier

Si vous en êtes à ce point avec ma longue réponse, vous aurez probablement du plaisir à lire le ' Grand débat Torvalds-Tanenbaum sur la conception du noyau '. C'est encore plus amusant à lire en 2013, plus de 20 ans après son apparition. 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

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

NB:

Lorsque 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 de Mach. Ce n'est pas mon intention de dénigrer le travail récent d'autres personnes.

Autres conseils

Noyau monolithique signifie que l’ensemble du système d’exploitation fonctionne 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 situées en haut du système d'exploitation s'exécutent 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 s'exécute en mode utilisateur.

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

De Wikipedia :

  

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

Les versions récentes de Windows utilisent quant à elles un noyau hybride .

  

Un noyau hybride est une architecture de noyau basée sur la combinaison d'aspects d'architectures de noyau micro-noyau et monolithique utilisées 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 étant un simple marketing. Les catégories de noyaux traditionnelles sont les noyaux monolithiques et les micro-noyaux (les nanokernels et les exokernels étant considérés comme des versions plus extrêmes des micro-noyaux).

  

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

Les

modules Linux peuvent signifier modulaire dans un sens. Comme d'autres l'ont déjà noté, monolithique représente généralement un noyau microkernel ou monolithique . Un micro-noyau traditionnel ne possède que ces fonctionnalités,

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

Il n'y a pas de pilote matériel , des piles de protocoles , des systèmes de fichiers , suspendre / reprendre , une horloge gestion , etc. dans le noyau principal. Ces choses sont identiques à n'importe quelle tâche utilisateur (bien qu'ils puissent avoir des privilèges différents via le MMU / ordonnanceur).

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 système d’exploitation 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. En effet, un hyper-viseur ne fait généralement pas grand chose à côté du commutateur context .

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

Un argument pour microkernels est que tous les sous-systèmes monolithiques doivent synchroniser plusieurs valeurs à la fois. Pour ce faire, ils doivent utiliser des verrous et souffrent de la loi d'Amdahl lors de son extension. aux architectures parallèles. Le compteur est que microkernels génèrent 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 les coûts IPC. Récemment, tous les processeurs ont étendu leur architecture ISA pour inclure de meilleures primitives pour les algorithmes sans verrouillage . Donc, Linux restera probablement un noyau monolithique pendant un certain temps.

Dans ce contexte, le terme "monolithique" ne fait pas référence à l’exécution d’un seul grand fichier exécutable et, comme vous le dites, Linux prend en charge le chargement dynamique des modules du noyau au moment de l’exécution. Quand on parle de noyaux, "monolithique" signifie que tout le système d'exploitation fonctionne en mode "privilégié" ou "superviseur", par opposition aux autres types de systèmes d'exploitation qui utilisent un type de noyau tel qu'un "microkernel", dans lequel un minimum ensemble de fonctionnalités s'exécute en mode privilégié et la plupart des systèmes d'exploitation s'exécutent dans l'espace utilisateur.

Les partisans des micro-noyaux estiment que cette solution est préférable, car un code plus petit signifie moins de bogues et que des bogues s'exécutant en mode superviseur peuvent causer des problèmes beaucoup plus graves que ceux du code de l'espace utilisateur forme de «panique du noyau»). Certains micro-noyaux sont suffisamment minimes pour pouvoir être «vérifiés formellement», ce qui signifie que vous pouvez prouver mathématiquement que le noyau est «correct» conformément à une spécification. L4 en est un bon exemple.

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

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top