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 scinder 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 peut conserver un index des fonctions du module et les charger si nécessaire.
Un noyau monolithique est un noyau où 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 (minixfs) sont des processus distincts qui s'exécutent en dehors de l'espace du noyau, en utilisant IPC pour communiquer avec le noyau, d'autres services et les utilisateurs). En bref, si c’est un module sous Linux, c’est un service dans un micro-noyau, ce qui indique un processus isolé.
Ne confondez pas le terme modulaire le noyau est tout sauf 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 une fois celle-ci déployée.
L'inconvénient d'un micro-noyau est que la messagerie asynchrone IPC) peut devenir très difficile à déboguer, en particulier si fibrils sont implémentés. En outre, le suivi d'un problème de FS/écriture signifie 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, il est temps d'examiner le service IPC C'est souvent plus facile dans un noyau monolithique. GNU Hurd souffre de ces problèmes de débogage ( reference ). Je ne vais même pas me lancer dans des points de contrôle lorsqu'il s'agit de messages complexes Les microkernels ne sont pas pour les âmes sensibles.
L’approche monolithique est le chemin le plus court vers un noyau stable et opérationnel. 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, la plupart de mes apprentissages, le piratage informatique ou le bricolage du développement du noyau vont dans un micro-noyau, plus précisément HelenOS .
Modifier
Si ma réponse est très longue, vous aurez sûrement du plaisir à lire le ' Grand débat de Torvalds-Tanenbaum sur la conception du noya '. 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
De toute évidence, cela ne s'est pas réalisé, pas 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, 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.
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 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 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 du 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ériques sous forme de 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 d'architectures de noyau microkernel 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 modulaires dans un sens. Comme d'autres l'ont noté, monolithique représente généralement un noyau micro et monolithique . Un micro-noyau traditionnel ne possède que ces caractéristiques,
Il n'y a pas de pilotes matériels , de piles de protocoles , systèmes de fichiers , suspendre/reprendre , gestion de l'horloge , etc dans le noyau principal. Ces choses sont identiques à n'importe quelle tâche utilisateur (même si elles peuvent avoir des privilèges différents via le MMU/programmateur).
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.
En outre, de nombreux hyperviseurs L1 ont un micro-noya en dessous. En effet, un hyper-viseur ne fait généralement pas grand chose à côté du commutateur contextuel .
Apparemment, trois prédisent le succès de Linux. ;-)
Un argument pour 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 loi d'Amdahl lorsqu'ils seront étendus à des architectures parallèles. Le compteur est que les micro-noyaux génèrent beaucoup de 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 également la charge IPC. Récemment, tous les processeurs ont étendu leur ISA pour inclure de meilleures primitives pour algorithmes sans verrou , donc Linux restera probablement un noyau monolithique pendant un certain temps.
"Monolithique" dans ce contexte ne fait pas référence à l'existence d'un seul grand exécutable, et comme vous l'avez dit, 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", où seule une 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 affirment que cela est préférable, car un code plus petit signifie moins de bogues, et des bogues fonctionnant en mode superviseur peuvent causer des problèmes bien plus importants que dans le code de l'espace utilisateur "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 seul grand processus s'exécutant entièrement dans un seul espace d'adressage. 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 ce post vous aidera plus à comprendre le concept.
http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html