Pourquoi Linux est-il appelé un kernel monolithique?

J’ai lu que Linux est un kernel monolithique. Le kernel monolithique signifie-t-il comstackr et lier le code complet du kernel dans 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 kernel n’a pas besoin de charger tous les modules initialement et pourrait maintenir un index des fonctions dans le module et les charger si nécessaire.

Un kernel monolithique est un kernel 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. Cela s’oppose directement à un microkernel .

Un micro-kernel préfère une approche où la fonctionnalité principale est isolée des services système et des pilotes de périphérique (qui sont essentiellement des services système). Par exemple, les systèmes de fichiers VFS (virtual file system) et block device (c.-à-d. Minixfs) sont des processus distincts exécutés en dehors de l’espace du kernel, utilisant IPC pour communiquer avec le kernel, d’autres services et processus utilisateur. En bref, si c’est un module sous Linux, c’est un service dans un micro-kernel, indiquant un processus isolé.

Ne confondez pas le terme kernel modulaire pour être tout sauf monolithique. Certains kernelx monolithiques peuvent être compilés pour être modulaires (par exemple, Linux). Ce qui compte, c’est que le module soit inséré et exécuté à partir du même espace qui gère les fonctionnalités principales (espace kernel).

L’avantage d’un micro-kernel est que tout service défaillant peut être facilement redémarré, par exemple, il n’y a pas d’arrêt du kernel si le système de fichiers racine lance un abandon. Cela peut également être considéré comme un inconvénient, car il peut masquer des bogues très critiques (ou les rendre moins critiques, car le problème semble se résoudre en permanence). Il est considéré comme un grand avantage dans les scénarios où vous ne pouvez tout simplement pas réparer quelque chose après son déploiement.

L’inconvénient d’un micro-kernel est que la messagerie IPC asynchrone peut devenir très difficile à déboguer, surtout si des fibrilles sont implémentées. En outre, le simple suivi d’un problème FS / write implique l’examen du processus d’espace utilisateur, du service de périphérique de bloc, du service VFS, du service de système de fichiers et (éventuellement) du service PCI. Si vous obtenez un blanc à ce sujet, il est temps de regarder le service IPC. C’est souvent plus facile dans un kernel 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-kernelx ne sont pas pour les faibles de cœur.

Le chemin le plus court vers un kernel stable et fonctionnel est l’approche monolithique. L’une ou l’autre approche peut offrir une interface POSIX, où la conception du kernel ne présente plus d’intérêt pour quelqu’un souhaitant simplement écrire du code à exécuter sur une conception donnée.

J’utilise Linux (monolithique) en production. Cependant, la plupart de mes apprentissages, du piratage ou du bricolage avec le développement du kernel vont dans un micro-kernel, en particulier HelenOS .

modifier

Si vous parvenez aussi loin dans ma réponse très longue, vous vous amuserez probablement en lisant le « Grand débat sur Torvalds-Tanenbaum sur la conception du kernel ». C’est encore plus drôle à lire en 2013, plus de 20 ans après sa publication. 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 

Evidemment, 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, lorsque je parle de HURD, je fais référence (principalement) au micro-kernel Mach. Je n’ai pas l’intention de dénigrer le travail récent des autres.

Voici ma réponse courte … Trouvez l’image ci-dessous. Vous aurez une idée claire des deux types de kernel

entrer la description de l'image ici

Le kernel monolithique signifie que tout le système d’exploitation fonctionne en mode kernel (c’est-à-dire hautement privilégié par le matériel). C’est-à-dire qu’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 non monolithiques du kernel, tels que Windows, une grande partie du système d’exploitation est exécutée en mode utilisateur.

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

De wikipedia

Un kernel monolithique est une architecture de kernel où l’ensemble du système d’exploitation travaille dans l’espace kernel et seul en mode superviseur. Contrairement aux autres architectures 1, le kernel 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 implémenter tous les services du système d’exploitation tels que la gestion des processus, plus de pilotes de périphériques en tant que modules.

Les versions récentes de Windows utilisent quant à elles un kernel Hybric .

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

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 microkernel par rapport au kernel monolithique . Un micro-kernel traditionnel ne possède que ces fonctionnalités,

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

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


Les prévisions de Tanenbaum

  1. Les micro-kernelx sont l’avenir
  2. x86 disparaîtra et les architectures RISC domineront le marché
  3. (À partir de 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 cellulaires existants. Tanenbaum aurait raison sur tous les comptes si BlackBerry QNX était un succès.

De plus, de nombreux hyperviseurs L1 ont un micro-kernel en dessous. Cela est dû au fait qu’un hyper-viseur ne fait généralement pas grand chose à côté du changement de contexte .

Apparemment, trois prédisent le succès de Linux. 😉


Un argument pour les microkernelx 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 microkernelx entraînent beaucoup de messages IPC.

Un développement majeur est l’utilisation de la programmation sans locking pour éviter les conflits dans un kernel monolithique. Cela évite le locking dans un kernel 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 locking . Donc, Linux restra probablement un kernel monolithique pendant un certain temps.

“Monolithique” dans ce contexte ne fait pas référence à un seul grand exécutable, et comme vous le dites, Linux prend en charge le chargement dynamic des modules du kernel à l’exécution. Lorsque l’on parle de kernelx, «monolithique» signifie que tout le système d’exploitation fonctionne en mode «privilégié» ou «superviseur», contrairement aux autres types de systèmes d’exploitation qui utilisent un type de kernel tel qu’un «micro-kernel». l’ensemble des 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-kernelx affirment que cela est mieux car un code plus petit signifie moins de bogues et les bogues en mode superviseur peuvent causer des problèmes beaucoup plus importants que dans le code de l’espace utilisateur (risque accru de vulnérabilités de sécurité ou ‘panique du kernel’). Certains micro-kernelx sont suffisamment minimes pour pouvoir être «vérifiés formellement», ce qui signifie que vous pouvez mathématiquement prouver que le kernel est «correct» selon une spécification. L4 en est un bon exemple.

Le kernel monolithique est un grand processus unique fonctionnant entièrement dans un seul espace adresse. C’est un fichier binary statique unique. Tous les services du kernel existent et s’exécutent dans l’espace d’adressage du kernel. Le kernel peut invoquer des fonctions directement. Les exemples d’OS basés sur un kernel monolithique sont Linux, Unix.

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

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