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.
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.
la source
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,
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
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.
la source
De Wikipédia :
Les versions récentes de Windows utilisent en revanche un noyau hybride .
la source
«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.
la source
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
la source