Maison > Article > Tutoriel système > Comprendre le travail préparatoire du noyau Linux : comprendre le langage C et un peu sur le système d'exploitation
Préface : Le système d'exploitation (anglais : Operating System, abréviation : OS) est le logiciel système qui gère les ressources matérielles et logicielles de l'ordinateur. Il est également le cœur et la pierre angulaire du système informatique. Le système d'exploitation doit gérer des tâches de base telles que la gestion et la configuration de la mémoire vidéo, la détermination de la priorité de l'offre et de la demande de ressources système, le contrôle des périphériques d'entrée et de sortie, l'exploitation des réseaux et la gestion des systèmes de fichiers. Le système d'exploitation fournit également une interface d'exploitation permettant aux utilisateurs d'interagir avec le système.
1. Préparation du noyau Linux
Les meilleurs points de connaissances pour se préparer à la compréhension du noyau Linux :
Comprendre le langage C
Connaître un peu les systèmes d'exploitation
Familier avec un petit nombre d'algorithmes associés
Comprendre l'architecture informatique
Caractéristiques du noyau Linux :
Tâches du noyau Linux :
1. D'un point de vue technique, le noyau est une couche intermédiaire entre le matériel et le logiciel. Sa fonction est de transmettre les requêtes de séquence de la couche application au matériel et d'agir comme un pilote de niveau inférieur pour interroger divers périphériques et composants du système.
2. Au niveau de l'application, l'application n'a aucun lien avec le matériel, uniquement avec le noyau. Le noyau est le niveau le plus bas de la hiérarchie que l'application connaît. Dans le travail réel, le noyau incarne les détails pertinents.
3. Le noyau est un programme de gestion de ressources. Responsable de l'allocation des ressources partagées disponibles (temps CPU, espace disque, connexions réseau, etc.) à divers processus système.
4. Le noyau est comme une bibliothèque, fournissant un ensemble de commandes orientées système. Pour l'application, les appels système sont comme appeler des fonctions ordinaires.
Stratégie de mise en œuvre du noyau :
1.Micro-noyau. Les fonctions les plus basiques sont implémentées par le noyau central (micro-noyau). Toutes les autres fonctions sont déléguées à des processus indépendants qui communiquent avec le noyau central via des sockets de communication bien définis.
2. Noyau de macro. Tout le code du noyau, y compris les sous-systèmes (tels que la gestion de la mémoire vidéo, la gestion des fichiers, les pilotes de périphériques) sont regroupés dans un fichier. Chaque fonction du noyau a accès à toutes les autres parties du noyau. Prend actuellement en charge le chargement et le déchargement (coupe) dynamiques des modules. Le noyau Linux est implémenté sur la base de cette stratégie.
Où le mécanisme du noyau est-il utilisé ?
1. La communication entre les processus (l'espace d'adressage est alloué dans la mémoire virtuelle du CPU, et l'espace d'adressage de chaque processus est complètement indépendant ; le nombre de processus exécutés en même temps ne dépasse pas le nombre de CPU) nécessite le utilisation d'un mécanisme de noyau spécifique.
2. La commutation entre les processus (le nombre de processus exécutés en même temps ne dépasse pas le nombre de CPU) nécessite également l'utilisation du mécanisme du noyau.
La commutation de processus doit également enregistrer l'état comme la commutation de tâches FreeRTOS et mettre le processus en état d'inactivité/reprise.
3. Planification des processus. Déterminez depuis combien de temps ce processus est en cours d’exécution.
Processus Linux :
1. En utilisant une structure hiérarchique, chaque processus dépend d'un processus parent. Le noyau démarre le programme init comme premier processus. Ce processus est responsable des opérations ultérieures d'initialisation du système. Le processus init est la racine de l'arborescence des processus et tous les processus proviennent directement ou indirectement de ce processus.
2. Requête via la commande pstree. En fait, le premier processus du système est systemd, pas init (c'est aussi un point de confusion)
3. Chaque processus du système possède un identifiant (ID) unique, et les utilisateurs (ou d'autres processus) peuvent utiliser l'ID pour accéder au processus.
2. Structure du répertoire du code source du noyau Linux
Le code source du noyau Linux se compose de trois parties principales :
1. Code de base du noyau, comprenant divers sous-systèmes et sous-modules décrits au chapitre 3, ainsi que d'autres sous-systèmes de support, tels que la gestion de l'alimentation, l'initialisation Linux, etc.
2. Autres codes non essentiels, tels que les fichiers de bibliothèque (car le noyau Linux est un noyau autonome, c'est-à-dire que le noyau ne dépend d'aucun autre logiciel et peut être compilé par lui-même), les collections de micrologiciels, KVM ( technologie des machines virtuelles), etc.
3. Compilez les scripts, les fichiers de configuration, les documents d'aide, les déclarations de droits d'auteur et autres fichiers auxiliaires
Utilisez la commande ls pour entendre la structure des répertoires de premier étage du code source du noyau. La description spécifique est la suivante :
include/----Les fichiers d'en-tête du noyau doivent être fournis aux modules externes (tels que le code de l'espace utilisateur). kernel/----Le code de base du noyau Linux, y compris le sous-système de planification des processus décrit dans la section 3.2, et les modules liés à la planification des processus. mm/----Sous-système de gestion de la mémoire vidéo (section 3.3). fs/----Sous-système VFS (section 3.4). net/----Le sous-système réseau qui n'inclut pas les pilotes de périphériques réseau (section 3.5). ipc/----Sous-système IPC (communication inter-processus). arch//----Code lié à l'architecture, tel que arm, x86, etc. arch//mach-----code spécifique à la machine/carte. arch//include/asm----fichiers d'en-tête liés à l'architecture. arch//boot/dts----Fichier DeviceTree. init/----Code lié à l'initialisation du démarrage du système Linux. block/----Fournit la hiérarchie des périphériques de bloc. son/----Les pilotes et sous-systèmes liés à l'audio peuvent être considérés comme des « sous-systèmes audio ». drivers/----pilote de périphérique (dans Linuxkernel3.10, le pilote de périphérique représente 49,4% du code). lib/----implémente les fonctions de bibliothèque qui doivent être utilisées dans le noyau, telles que CRC, FIFO, list, MD5, etc. crypto/-----Fonctions de bibliothèque liées au cryptage et au déchiffrement. security/----Fournit des fonctionnalités de sécurité (SELinux). virt/----Fournit la prise en charge de la technologie des machines virtuelles (KVM, etc.). usr/----Code utilisé pour générer initramfs. firmware/----enregistrer le firmware utilisé pour piloter les appareils tiers. samples/----Quelques exemples de code. outils/----Quelques outils courants, tels que l'analyse des performances, les autotests, etc. Kconfig, Kbuild, Makefile, scripts/----fichiers de configuration, scripts, etc. utilisés pour la compilation du noyau. COPIE ---- Déclaration de droits d'auteur. MAINTENANTS----Liste des mainteneurs. CRÉDITS----Liste des principaux contributeurs à Linux. RAPPORTS-BUGS ---- Manuel de rapport de bugs. Documentation, README----aide, documentation.
[Avantages de l'article] L'éditeur recommande son propre groupe d'échange de technologie du noyau Linux : [865977150] a compilé des livres d'apprentissage et du matériel vidéo que je pense personnellement être meilleurs et les a partagés dans le fichier du groupe. Si nécessaire, vous pouvez les ajouter vous-même ! ! ! Les 100 premières personnes qui rejoindront le groupe recevront un package d'informations de base supplémentaire d'une valeur de 699 (comprenant des didacticiels vidéo, des livres électroniques, des projets pratiques et des codes)
3. Brève analyse de l'architecture du noyau Linux
Figure 1 Hiérarchie du système Linux
La façade est l'espace utilisateur (ou application). C'est là que les applications utilisateur s'exécutent. Sous l'espace utilisateur se trouve l'espace noyau, et le noyau Linux se trouve ici. GNUUCLibrary (glibc) est également ici. Il fournit un socket d'appel système pour se connecter au noyau, ainsi qu'un mécanisme de traduction entre les applications de l'espace utilisateur et le noyau. Ceci est important car les applications du noyau et de l'espace utilisateur utilisent des espaces d'adressage protégés différents. Chaque processus de l'espace utilisateur utilise son propre espace d'adressage virtuel, tandis que le noyau occupe un espace d'adressage distinct.
Le noyau Linux peut être défini en 3 couches. La face avant est le socket d'appel système, qui implémente certaines fonctions de base, telles que la lecture et l'écriture. Sous le socket d'appel système se trouve le code du noyau, qui peut être défini plus précisément comme un code du noyau indépendant de l'architecture. Ce code est commun à toutes les architectures de processeur supportées par Linux. Sous ce code se trouve du code dépendant de l'architecture, formant ce que l'on appelle généralement le BSP (BoardSupportPackage). Ce code sert de code spécifique au processeur et à la plate-forme pour une architecture donnée.
Le noyau Linux implémente de nombreuses propriétés architecturales importantes. À un niveau supérieur ou inférieur, le noyau est défini en sous-systèmes. Linux peut également être considéré dans son ensemble, puisqu'il intègre tous ces services de base dans le noyau. Ceci est différent de l'architecture du micro-noyau. Le premier fournira certains services de base, tels que la communication, les E/S, la mémoire et la gestion des processus. Des services plus spécifiques sont insérés dans la couche du micro-noyau. Chaque noyau a ses propres avantages, mais ceux-ci ne sont pas abordés ici. Au fil du temps, le noyau Linux est devenu plus efficace en termes de mémoire vidéo et d'utilisation du processeur, et est très stable. Et la chose la plus intéressante à propos de Linux est qu'il a toujours une bonne portabilité malgré sa taille et sa complexité. Linux est compilé pour fonctionner sur un grand nombre de processeurs et de plates-formes avec des contraintes et exigences architecturales différentes. Un contre-exemple est que Linux peut fonctionner sur un processeur doté d'une unité de gestion de la mémoire graphique (MMU), ou sur des processeurs qui ne fournissent pas d'unité de gestion de la mémoire graphique (MMU).
Le port uClinux du noyau Linux prend en charge les non-MMU.
Figure 2 Architecture du noyau Linux
Les principaux composants du noyau Linux sont : le socket d'appel système, la gestion des processus, la gestion de la mémoire, le système de fichiers virtuel, la pile réseau, le pilote de périphérique et le code lié à l'architecture matérielle.
(1) Prise d'appel système
La couche SCI fournit des mécanismes individuels pour effectuer des appels de fonction depuis l'espace utilisateur vers le noyau. Comme indiqué ci-dessus, ce socket dépend de l'architecture, même au sein de la même famille de processeurs. SCI est en fait un service de multiplexage et de démultiplexage d’appels de fonctions très utile. Vous pouvez trouver l'implémentation de SCI dans ./linux/kernel et les parties dépendantes de l'architecture dans ./linux/arch.
(2) Gestion des processus
L'objectif de la gestion des processus est l'exécution du processus. Dans le noyau, ces processus sont appelés threads et représentent des virtualisations de processeurs individuels (code de thread, données, pile et registres CPU). Dans l'espace utilisateur, le terme processus est généralement utilisé, mais l'implémentation Linux ne fait pas de distinction entre ces deux concepts (processus et thread). Le noyau fournit une interface de programmation d'application (API) via SCI pour créer un nouveau processus (fonction fork, exec ou PortableOperatingSystemInterface[POSIX]), arrêter le processus (kill, exit), et communiquer et synchroniser entre eux (signal ou mécanisme Then POSIX ).
La gestion des processus inclut également la gestion de la nécessité de partager le processeur entre les processus actifs. Le noyau implémente un nouveau type d'algorithme de planification qui fonctionne dans un laps de temps fixe, quel que soit le nombre de threads en compétition pour le processeur. Ces algorithmes sont appelés planificateurs O(1). Le nom signifie que le temps nécessaire pour planifier plusieurs threads est le même que le temps nécessaire pour planifier un thread. Le planificateur O(1) peut également prendre en charge plusieurs processeurs (appelés multiprocesseurs symétriques ou SMP). Vous pouvez trouver le code source pour la gestion des processus dans ./linux/kernel et le code source dépendant de l'architecture dans ./linux/arch.
(3) Gestion de la mémoire vidéo
Une autre ressource importante gérée par le noyau est la mémoire vidéo. Afin d'améliorer l'efficacité, si la mémoire vidéo virtuelle est gérée par le matériel, la mémoire vidéo est gérée selon le format dit de page de mémoire vidéo (4 Ko pour la plupart des architectures). Linux inclut des méthodes de gestion de la mémoire vidéo disponible, ainsi que des mécanismes matériels utilisés pour la cartographie chimique et virtuelle. Cependant, la gestion de la mémoire vidéo ne doit pas se limiter à la mémoire tampon de 4 Ko. Linux fournit une représentation concrète du tampon de 4 Ko, comme l'allocateur de dalle. Ces modes de gestion de la mémoire utilisent un tampon de 4 Ko comme base, puis allouent des structures à partir de celui-ci et suivent l'utilisation des pages mémoire, par exemple quelles pages mémoire sont pleines, quelles pages ne sont pas entièrement utilisées et quelles pages sont vides. Cela permet au mode d'ajuster dynamiquement l'utilisation de la mémoire vidéo en fonction des besoins du système. Afin de prendre en charge l'utilisation de la mémoire vidéo par plusieurs utilisateurs, la mémoire vidéo disponible est parfois consommée. Pour cette raison, dans le noyau Linux, les pages peuvent être déplacées hors de la mémoire vidéo et placées dans le lecteur c. Ce processus est appelé échange car les pages sont échangées de la mémoire vidéo vers le disque dur. Le code source pour la gestion de la mémoire vidéo se trouve dans ./linux/mm.
(4)Système de fichiers virtuel
Le système de fichiers virtuel (VFS) est un aspect très utile du noyau Linux car il fournit une représentation d'interface universelle pour le système de fichiers. VFS fournit une couche d'échange entre SCI et les systèmes de fichiers pris en charge par le noyau (voir Figure 4).
Figure 3 Hiérarchie du système de fichiers Linux
Dans VFS, il s'agit d'une représentation API courante de fonctions telles que l'ouverture, la fermeture, la lecture et l'écriture. Sous VFS se trouve la représentation du système de fichiers, qui définit la méthode d'implémentation des fonctions de niveau inférieur. Ce sont des plugins pour un système de fichiers donné (plus de 50). Le code source du système de fichiers se trouve dans ./linux/fs. Sous la couche du système de fichiers se trouve le cache tampon, qui fournit un ensemble commun de fonctions pour la couche du système de fichiers (indépendant du système de fichiers spécifique). Cette couche de mise en cache optimise l'accès aux équipements chimiques en conservant les données pendant un certain temps (ou en pré-récupérant les données ultérieurement pour les rendre disponibles en cas de besoin). Sous le cache tampon se trouvent des pilotes de périphériques qui implémentent des sockets pour des périphériques chimiques spécifiques.
(5) Pile réseau
La pile réseau est conçue pour suivre l'architecture en couches du contrat simulé lui-même. Rappelons que le protocole Internet (IP) est le contrat de couche cœur de réseau qui sous-tend le contrat de transport (communément appelé contrat de contrôle de transmission ou TCP). À l'intérieur de TCP se trouve la couche socket, qui est appelée via SCI. La couche socket est l'API standard du sous-système réseau, qui fournit un socket utilisateur pour divers contrats réseau. De l'accès aux trames brutes aux unités de données contractuelles IP (PDU) en passant par TCP et UDP (User Datagram Protocol), la couche socket fournit un moyen standardisé de gérer les connexions et de communiquer des données entre différents points de terminaison. Le code source du réseau dans le noyau peut être trouvé dans ./linux/net.
(6) Pilotes de périphérique
Une grande quantité de code dans le noyau Linux se trouve dans les pilotes de périphériques, qui peuvent exécuter des périphériques matériels spécifiques. L'arborescence des sources Linux fournit un sous-répertoire de pilotes, qui est défini en outre comme divers périphériques pris en charge, tels que Bluetooth, I2C, série, etc. Le code du pilote de périphérique se trouve dans ./linux/drivers.
(7) Code dépendant de l'architecture
Bien que Linux soit largement indépendant de l'architecture sur laquelle il fonctionne, certains éléments doivent être pris en compte pour que l'architecture fonctionne correctement et atteigne une plus grande efficacité. Le sous-répertoire ./linux/arch définit les parties dépendantes de l'architecture du code source du noyau, qui contiennent divers sous-répertoires spécifiques à l'architecture (constituant ensemble le BSP). Pour un système de bureau typique, le répertoire x86 est utilisé. Chaque sous-répertoire d'architecture contient de nombreux autres sous-répertoires, et chaque sous-répertoire se concentre sur un aspect spécifique du noyau, tel que le démarrage, le noyau, la gestion de la mémoire, etc. Ce code dépendant de l'architecture peut être trouvé dans ./linux/arch.
Si la portabilité et l'efficacité du noyau Linux ne sont pas suffisantes, Linux fournit également d'autres fonctionnalités difficiles à classer en son sein. En tant que système d'exploitation de production et logiciel open source, Linux est une excellente plateforme pour tester de nouveaux contrats et leurs améliorations. Linux prend en charge un large éventail de protocoles réseau, y compris le TCP/IP classique, ainsi que des extensions aux réseaux à haut débit (moins de 1 Gigabit Ethernet [GbE] et 10 GbE). Linux peut également prendre en charge des contrats tels que le Stream Control Transmission Contract (SCTP), qui fournit beaucoup plus de fonctionnalités intermédiaires que TCP (et est le successeur du contrat de couche transport). Linux est également un noyau dynamique, prenant en charge l'ajout ou la suppression dynamique de composants logiciels. Connus sous le nom de modules de noyau chargeables dynamiquement, ils peuvent être insérés à la demande au moment du démarrage (le module est actuellement requis pour un périphérique spécifique) ou par l'utilisateur à tout moment.
L'une des dernières améliorations apportées à Linux est sa capacité à être utilisé comme système d'exploitation (appelé hyperviseur) pour d'autres systèmes d'exploitation. Récemment, des modifications ont été apportées au noyau appelé Kernel-based Virtual Machines (KVM). Ce changement active un nouveau socket pour l'espace utilisateur, qui permet à d'autres systèmes d'exploitation de s'exécuter sur le noyau compatible KVM. En plus d'exécuter d'autres instances de Linux, Microsoft Windows peut également être virtualisé. La seule restriction est que le processeur sous-jacent doit prendre en charge les nouvelles instructions de virtualisation.
Quatrièmement, la différence entre l'architecture Linux et la structure du noyau
1. Lorsqu'on nous interroge sur l'architecture Linux (c'est-à-dire comment le système Linux est structuré), nous pouvons répondre à cette question en nous référant à l'image de droite : D'un point de vue général, l'architecture Linux peut être divisée en deux parties :
2. La raison pour laquelle l'architecture Linux est divisée en espace utilisateur et espace noyau :
1) Les processeurs modernes implémentent généralement différents modes de fonctionnement,
Prenons ARM comme exemple : ARM implémente 7 modes de fonctionnement. Dans différents modes, les instructions que le CPU peut exécuter ou les registres auxquels il accède sont différents :
Prenons (2) X86 comme exemple : X86 implémente 4 niveaux d'autorisations différents, Ring0-Ring3 ; Ring0 peut exécuter des instructions privilégiées et accéder aux périphériques IO. Ring3 a de nombreuses restrictions ;
2) Par conséquent, du point de vue du CPU, Linux divise le système en deux parties afin de protéger la sécurité du noyau;
3. L'espace utilisateur et l'espace noyau sont deux états différents d'exécution du programme. Nous pouvons effectuer le transfert de l'espace utilisateur vers l'espace noyau via des "appels système" et des "interruptions matérielles".
4. Structure du noyau Linux (notez la distinction entre l'architecture LInux et la structure du noyau Linux)
5. Mécanisme de plate-forme basé sur Linux
Par rapport au mécanisme traditionnel device_driver de ces mécanismes de pilote de plate-forme de Linux, un avantage très important est que le mécanisme de plate-forme enregistre ses propres ressources dans le noyau et est géré par le noyau. Lors de l'utilisation de ces ressources dans le pilote, les normes fournies par platform_device. sont utilisés. Appliquer et utiliser la prise. Cela améliore l'indépendance des conducteurs et la gestion des ressources, mais offre une meilleure portabilité et sécurité. Ce qui suit est un diagramme schématique de la hiérarchie des pilotes SPI. Le bus SPI sous Linux peut être compris comme le bus tiré du contrôleur SPI :
Comme les chauffeurs traditionnels, le mécanisme de la plateforme est également divisé en trois étapes :
1. Étape d'enregistrement des bus :
Kernel_init()→do_basic_setup()→driver_init()→platform_bus_init()→bus_register(&platform_bus_type) dans le fichier main.c lors de l'initialisation du démarrage du noyau enregistre un bus de plate-forme (bus virtuel, platform_bus).
2. Ajouter une étape d'équipement :
Lorsque l'appareil est enregistré, Platform_device_register()→platform_device_add()→(pdev→dev.bus=&platform_bus_type)→device_add(), attachant ainsi l'appareil au bus virtuel.
3. Étape d'inscription du conducteur :
Platform_driver_register()→driver_register()→bus_add_driver()→driver_attach()→bus_for_each_dev(), faites __driver_attach()→driver_probe_device() pour chaque périphérique suspendu au bus de plateforme virtuel et déterminez drv→bus→match() si l'exécution réussit, à ce moment, exécutez platform_match→strncmp(pdev→name,drv→name,BUS_ID_SIZE) via le pointeur de surveillance, s'il correspond, appelez Really_probe (exécutez réellement platform_driver→probe(platform_device) du périphérique correspondant.) pour démarrer. la détection réelle. Si la sonde réussit, l'appareil est lié au pilote.
On peut voir de l'intérieur que le mécanisme de la plateforme appelle finalement les trois fonctions clés bus_register(), device_add() et driver_register().
La structure Platform_device décrit un périphérique de structure de plate-forme, qui contient la structure de périphérique habituelle structdevicedev ; la structure de ressources de périphérique structresource*resource et le nom de périphérique constchar*name ; (Notez que ce nom doit être le même que le précédent nom platform_driver.driveràname, la raison sera expliquée plus tôt.)
La chose la plus importante dans cette structure est la structure des ressources, c'est pourquoi le mécanisme de plateforme est introduit.
La raison pour laquelle les noms devraient être les mêmes :
Le pilote qui y est mentionné appellera la fonction bus_for_each_dev() lors de l'enregistrement et fera __driver_attach()→driver_probe_device() pour chaque périphérique suspendu au bus de plateforme virtuel. Dans cette fonction, dev et drv seront préliminaires pour la correspondance, la fonction pointée. à par drv->bus->match est appelé. Dans la fonction platform_driver_register, drv->driver.bus=&platform_bus_type, donc drv->bus->match est platform_bus_type→match, qui est la fonction platform_match.
consiste à comparer les noms de dev et drv. S'ils sont identiques, ils entreront dans la fonction Really_probe(), ils entreront donc dans la fonction de sonde écrite par eux-mêmes pour une correspondance plus approfondie. Par conséquent, dev→name et driver→drv→name doivent être renseignés de la même manière lors de l'initialisation.
Différents types de pilotes ont des fonctions de correspondance différentes. Le pilote de cette plate-forme compare les noms de dev et drv. Vous souvenez-vous de la correspondance dans le pilote USB ? Il compare ProductID et VendorID.
Résumé personnel des avantages du mécanisme Platform :
1. Fournissez un bus platform_bus_type et ajoutez ces périphériques SOC non de type bus à ce bus virtuel. En conséquence, le modèle bus-périphérique-pilote peut être popularisé.
2. Fournissez des structures de données de type platform_device et platform_driver, en y intégrant les structures de données traditionnelles des périphériques et des pilotes, mais en ajoutant des membres de ressources pour s'intégrer facilement aux nouveaux chargeurs de démarrage et noyaux tels qu'OpenFirmware qui transfèrent dynamiquement les ressources du périphérique.
Six, architecture du noyau Linux
Le noyau Linux étant monolithique, il occupe le plus grand espace et présente la plus grande complexité que les autres types de noyaux. Il s'agit d'une fonctionnalité de conception qui a suscité de nombreuses controverses au début de Linux, mais qui comporte toujours certains des défauts de conception inhérents à un seul noyau.
Pour remédier à cette faille, les développeurs du noyau Linux ont fait en sorte que les modules du noyau soient chargeables et déchargeables au moment de l'exécution, ce qui signifie que vous pouvez ajouter ou supprimer dynamiquement des fonctionnalités du noyau. En plus d'ajouter des fonctionnalités matérielles au noyau, cela peut inclure des modules pour exécuter des processus serveur, tels que la virtualisation de bas niveau, mais cela peut également remplacer l'intégralité du noyau sans nécessiter un redémarrage de l'ordinateur dans des cas individuels.
Imaginez si vous pouviez passer à un service pack Windows sans avoir à redémarrer...
Seven, module noyau
Que se passe-t-il si Windows a déjà installé tous les pilotes disponibles et qu'il vous suffit d'activer ceux dont vous avez besoin ? C'est essentiellement ce que font les modules du noyau pour Linux ? Les modules de noyau, également appelés modules de noyau chargeables (LKM), sont nécessaires pour que le noyau continue de fonctionner avec tout le matériel sans consommer toute la mémoire vidéo disponible.
Les modules ajoutent généralement des fonctions telles que des périphériques, des systèmes de fichiers et des appels système au noyau de base. L'extension de fichier de lkm est .ko et est généralement stockée dans le répertoire /lib/modules. En raison des caractéristiques du module, vous pouvez facilement personnaliser le noyau en configurant le module pour qu'il soit chargé ou non à l'aide de la commande menuconfig au démarrage, en éditant le fichier /boot/config ou en chargeant et déchargeant dynamiquement le module à l'aide de la commande modprobe.
Des modules tiers et fermés sont disponibles dans certaines distributions, comme Ubuntu, qui peuvent être difficiles à installer par défaut puisque le code source de ces modules n'est pas disponible. Les développeurs du logiciel (c'est-à-dire nVidia, ATI, etc.) ne fournissent pas de code source, mais construisent plutôt leurs propres modules et compilent les fichiers .ko requis pour la distribution. En fait, de tels modules sont gratuits comme la bière, mais ils ne le sont pas comme la parole et ne sont donc pas inclus dans certaines distributions car les responsables estiment que cela « pollue » le noyau en fournissant des logiciels non libres.
Le noyau n'est pas magique, mais il est essentiel au bon fonctionnement de tout ordinateur. Le noyau Linux est différent d'OSX et de Windows dans le sens où il contient des pilotes au niveau du noyau et permet à de nombreuses choses de fonctionner « prêt à l'emploi ». J'espère que vous en apprendrez davantage sur la façon dont les logiciels et le matériel fonctionnent ensemble ainsi que sur les fichiers nécessaires au démarrage de votre ordinateur.
Conclusion : Le pouvoir de l’intérêt est infini. L'intérêt peut apporter la passion. Si le travail peut être combiné avec l'intérêt, il y aura de l'enthousiasme pour le travail. De cette façon, le travail n'est pas seulement un travail, mais aussi une sorte de plaisir.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!