Pourquoi Linux est appelé un noyau monolithique?

j'ai lu que Linux est un noyau monolithique. Le noyau monolithique signifie-t-il compiler et lier le code complet du noyau dans un exécutable?

si Linux est capable de supporter des modules, pourquoi ne pas casser tous les sous-systèmes en modules et les charger quand c'est nécessaire? Dans ce cas, le noyau n'a pas à charger tous les modules au départ et peut maintenir un index des fonctions dans le module et les charger si nécessaire.

180
demandé sur Peter Mortensen 2009-11-27 06:16:22

7 réponses

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 (programmation, allocation de mémoire, etc.) sont serrées groupe partageant le même espace. Ceci s'oppose directement à un microkernel .

un microkernel préfère une approche où les fonctionnalités de base sont isolées des services système et des pilotes de périphériques (qui sont essentiellement de simples services système). Par exemple, VFS (virtual file les systèmes de fichiers périphériques (c'est-à-dire minixfs) sont des processus distincts qui fonctionnent en dehors de l'espace du noyau, utilisant la CIB 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 microkernel, indiquant un processus isolé.

ne confondez pas le terme modulaire noyau pour être tout sauf monolithique. Certains monolithique amandes être compilé de manière à être modulaire (c.-à-d. G Linux), ce qui importe, c'est que le module soit inséré et fonctionne à partir du même espace qui gère les fonctionnalités du noyau (espace du noyau).

l'avantage d'un microkernel est que tout service défectueux peut être redémarré facilement, par exemple, il n'y a pas d'arrêt du noyau si le système de fichiers racine annule. Cela peut aussi être considéré comme un inconvénient, bien que, parce qu'il peut cacher des bogues assez critiques (ou les faire sembler pas-si-critique, parce que le problème semble constamment fixer lui-même). Il est considéré comme un grand avantage dans les scénarios où vous ne pouvez tout simplement pas réparer quelque chose une fois qu'il a été déployé.

l'inconvénient d'un microkernel est que la messagerie asynchrone IPC peut devenir très difficile à déboguer, surtout si fibrilles sont mis en œuvre. En outre, tracking vers le bas D'un problème de FS / write signifie examiner le processus d'espace utilisateur, le service de périphérique de bloc, le service VFS, le système de fichiers service et (éventuellement) le service PCI. Si vous obtenez un blanc sur ce, 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 aller dans checkpointing quand je fais face à des files d'attente complexes. Les Microkernels ne sont pas pour les âmes sensibles.

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 de peu d'intérêt pour quelqu'un voulant simplement écrire du code à exécuter sur un design donné.

J'utilise Linux (monolithique) dans la production. Cependant, la plupart de mon apprentissage, hacking ou bricolage avec le développement du noyau va dans un microkernel, spécifiquement HelenOS .

Modifier

si vous êtes arrivé jusqu'ici grâce à 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 amusant de le lire en 2013, plus de 20 ans après qu'il ait transpiré. La partie la plus drôle a été 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é plus que la prédiction de Tanenbaum que x86 serait bientôt obsolète.

NB:

quand je dis "Minix", Je n'implique pas Minix 3. En outre, quand je mentionne le HURD, je me réfère (principalement) le microkernel de Mach. Je n'ai pas l'intention de dénigrer les travaux récents des autres.

256
répondu Tim Post 2015-12-25 14:43:49

voici ma réponse... Trouver l'image ci-dessous. Vous aurez une idée claire du type de Noyau

enter image description here

17
répondu Dhiral Pandya 2016-02-19 07:17:58

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). C'est, aucune partie du système d'exploitation s'exécute en mode utilisateur (inférieur droit). Seules les applications en haut du système d'exploitation fonctionnent en mode utilisateur.

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

dans les deux cas, L'OS peut être très modulaire.

13
répondu CesarGon 2009-11-27 03:19:34

à Partir de wikipedia

un noyau monolithique est une architecture du 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, 1 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 le processus gestion, gestion de la concurrence et de la mémoire elle-même et un ou plusieurs pilotes de périphériques en tant que modules.

les versions récentes de Windows, d'autre part, utilisent un noyau D'Hybric .

un noyau hybride est une architecture de noyau basée sur la combinaison d'aspects des architectures de noyau microkernel et monolithique utilisées dans les systèmes d'exploitation informatique. La catégorie est controversée en raison de la similitude de monolithique kernel; le terme a été rejeté par certains comme simple marketing. Les catégories de grains traditionnels sont les grains monolithiques et les microkernels (avec des nanokernels et des exokernels considérés comme des versions plus extrêmes des microkernels).

8
répondu Bob 2013-01-28 15:40:24

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

Linux modules peut signifier modulaire dans un certain sens. Comme d'autres l'ont noté, le monolithique représente habituellement un noyau microkernel versus monolithique . Un traditionnel microkernel a seulement ces caractéristiques,

  1. Planification de la
  2. gestion de la mémoire
  3. les communications Inter-processus

Il n'y a pas les pilotes de matériel , piles de protocole , systèmes de fichiers , suspendre/reprendre , horloge "gestion 151960920" , etc dans le principal noyau. Ces choses sont identique à n'importe quelle tâche de l'utilisateur (bien qu'ils puissent avoir différent privilèges via le MMU / scheduler).


les prédictions de Tanenbaum

  1. Microkernels sont l'avenir
  2. x86 s'éteindra et les architectures RISC domineront le marché
  3. (5 ans à partir de là) tout le monde fera tourner un GNU OS libre

PC et les programmeurs de serveur peuvent rire, mais deux et trois sont certainement vrai pour la majorité des téléphones cellulaires existants. Tanenbaum aurait raison sur tous les points si BlackBerry QNX était un succès.

aussi, beaucoup L1-hyperviseurs ont un micro-noyau en dessous. C'est parce qu'une visière hyper-ne fait généralement pas grand chose à côté du commutateur context .

apparemment trois prédit le succès de Linux. ;- )


un argument pour microkernels est que tous les sous-systèmes monolithiques doivent synchroniser des valeurs multiples à la fois. Pour ce faire, ils doivent utiliser des serrures et souffriront de la loi D'Amdahl lorsqu'elle sera étendue aux architectures parallèles. Le compteur est que microkernels résultat dans beaucoup de messages IPC.

un développement majeur est l'utilisation de sans serrure la programmation pour éviter la contention dans un noyau monolithique. Cela évite le verrouillage dans un noyau monolithique tout en réduisant les frais généraux de la CIB. Récemment, tous les CPU ont étendu leur ISA pour inclure de meilleures primitives pour les algorithmes sans verrouillage . Donc Linux restera probablement un noyau monolithique pour un certain temps.

7
répondu artless noise 2017-05-23 12:26:27

"monolithique" dans ce contexte ne signifie pas qu'il y ait un seul gros exécutable, et comme vous le dites, Linux supporte le chargement dynamique des modules du noyau à l'exécution. Lorsque l'on parle de noyaux, "monolithique" signifie que l'ensemble du système d'exploitation fonctionne 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 fonctionne en mode privilégié, et la plupart des système d'exploitation s'exécute dans l'espace utilisateur.

les partisans des microkernels disent que c'est mieux parce que le code plus petit signifie moins de bogues, et les bogues qui tournent en mode superviseur peuvent causer beaucoup plus de problèmes que dans le code d'espace utilisateur (comme une plus grande chance d'avoir des vulnérabilités de sécurité ou des plantages système total sous la forme d'une "panique du noyau"). Certains microkernels sont suffisamment minimes qu'ils peuvent être "formellement vérifiés", ce qui signifie que vous pouvez prouver mathématiquement que le le noyau est' correct ' selon une spécification. l4 en est un bon exemple.

5
répondu David Claridge 2011-09-20 06:22:15

noyau monolithique est un seul grand processus fonctionnant entièrement dans un espace d'adresse unique. Il s'agit d'un binaire statique fichier. Tous les services du noyau existent et s'exécutent dans l'espace d'adresse du noyau. Le noyau peut invoquer des fonctions directement. Les exemples de logiciels libres basés sur un noyau monolithique 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

2
répondu JIN007 2014-03-09 14:38:11