
Gestionnaire du noyau Linux et moniteur d'activité 🐧💻
Gestionnaire de noyau Linux et moniteur d'activité 🐧💻
Le noyau est la partie du système d'exploitation qui facilite les interactions entre les composants matériels et logiciels. Sur la plupart des systèmes, il est chargé au démarrage après le chargeur d'amorçage et gère les demandes d'E/S ainsi que les périphériques tels que les claviers, les moniteurs, les adaptateurs réseau et les haut-parleurs. Généralement, le noyau est responsable de la gestion de la mémoire, de la gestion des processus, de la gestion des périphériques, des appels système et de la sécurité.
Les applications utilisent le mécanisme d'appel système pour demander un service au système d'exploitation et, la plupart du temps, cette requête est transmise au noyau via une bibliothèque fournie par le système d'exploitation pour invoquer la fonction noyau correspondante. Pendant que le noyau effectue ces tâches de bas niveau, il réside dans une partie séparée de la mémoire appelée espace noyau protégé, qui n'est pas accessible par les applications et les autres parties du système. En revanche, les applications comme les navigateurs, les éditeurs de texte, les gestionnaires de fenêtres ou les lecteurs audio/vidéo utilisent une zone distincte de la mémoire, l'espace utilisateur. Cette séparation empêche les données utilisateur et les données du noyau d'interférer entre elles, évitant ainsi l'instabilité et la lenteur, ainsi que la possibilité que des programmes applicatifs défaillants fassent planter l'ensemble du système d'exploitation.
Il existe différentes conceptions de noyau en raison des différentes manières de gérer les appels système et les ressources. Par exemple, alors que les noyaux monolithiques exécutent toutes les instructions du système d'exploitation dans le même espace d'adressage pour la vitesse, les micro-noyaux utilisent des espaces différents pour les services utilisateur et noyau pour la modularité. Outre ceux-ci, il existe des noyaux hybrides, des nanokernels et des exokernels. L'architecture du noyau hybride est basée sur la combinaison d'aspects des micro-noyaux et des noyaux monolithiques.
Le noyau Linux est le noyau open-source, monolithique et de type Unix utilisé dans les distributions Linux, divers systèmes embarqués comme les routeurs, ainsi que dans tous les systèmes basés sur Android. Linus Torvalds a conçu et créé le noyau Linux en 1991 et il est encore développé aujourd'hui par des milliers de développeurs. C'est un exemple marquant de logiciel libre et open source et il est utilisé dans d'autres projets de logiciels libres, notamment le système d'exploitation GNU. Bien que les systèmes d'exploitation basés sur Linux dominent la majeure partie de l'informatique, ils portent encore certains défauts de conception qui ont été assez débattus aux débuts de Linux. Par exemple, il a la plus grande empreinte et la plus grande complexité par rapport aux autres types de noyaux. Mais c'est une caractéristique de conception inhérente aux noyaux monolithiques. Ce genre de problèmes de conception a conduit les développeurs à ajouter de nouvelles fonctionnalités et mécanismes au noyau Linux que les autres noyaux ne possèdent pas.
Contrairement aux noyaux monolithiques standard, le noyau Linux est également modulaire, acceptant les modules noyau chargeables (LKM) qui sont généralement utilisés pour ajouter la prise en charge de nouveau matériel (en tant que pilotes de périphériques) et/ou de systèmes de fichiers, ou pour ajouter des appels système. Comme les LKM peuvent être chargés et déchargés dans le système à l'exécution, ils ont l'avantage d'étendre le noyau sans redémarrer ni recompiler. Ainsi, les fonctionnalités du noyau fournies par les modules ne résident pas en mémoire sans être utilisées, et le module correspondant peut être déchargé pour libérer de la mémoire et d'autres ressources.
Les modules noyau chargeables se trouvent dans /lib/modules avec l'extension .ko (kernel object) sous Linux. Alors que la commande lsmod peut être utilisée pour lister les modules noyau chargés, modprobe ou insmod/rmmod sont utilisés pour charger ou décharger un module noyau. insmod/rmmod sont utilisés pour les modules indépendants de modprobe et sans nécessiter une installation dans /lib/modules/$(uname -r).
Voici un exemple simple d'un module noyau Linux qui affiche un message lorsqu'il est chargé et déchargé. Les étapes de construction et d'installation du module à l'aide d'un Makefile sont présentées ci-dessous.``` make # build sudo make install # install sudo modprobe lkm_example # load sudo modprobe -r lkm_example # unload
La commande [dmesg](https://linux.die.net/man/8/dmesg) est utilisée ci-dessous pour récupérer le tampon de messages du noyau.```
[16994.295552] [+] Example kernel module loaded.
[16996.325674] [-] Example kernel module unloaded.
kmon fournit une interface utilisateur textuelle pour gérer les modules du noyau Linux et surveiller les activités du noyau. Gérer signifie charger, décharger, mettre sur liste noire et afficher les informations d'un module. Ces mises à jour des modules du noyau, les journaux concernant le matériel et autres messages du noyau peuvent être suivis grâce au moniteur d'activité en temps réel de kmon. Comme l'utilisation de différents outils comme dmesg et kmod est nécessaire pour ces tâches sous Linux, kmon vise à les rassembler dans une seule fenêtre de terminal et à faciliter au maximum l'utilisation tout en conservant les fonctionnalités.