Maison > Article > Tutoriel système > Regard sur la hiérarchie du noyau Linux : une vue du sommet de la montagne
Vous savez tous que de nombreux articles de Yuanlijun portent sur les fonctions du noyau Linux. Basés sur le principe des comptes publics, nous ne parlons que de principes et convertissons des codes complexes en texte et en images faciles à comprendre. Enfin présenté à vous. On peut dire que M. Yuanli n'a jamais systématiquement trié pour vous l'architecture du noyau Linux à partir d'un grand framework. Le but de cet article est alors de se tenir au sommet de la montagne et de lever les yeux.
Cadre hiérarchique du système Linux
D'après la photo, nous pouvons le diviser en deux niveaux :
Espace noyau de l'espace utilisateur
Au niveau inférieur se trouve l'espace utilisateur, où l'application est exécutée. La couche supérieure de l'espace utilisateur est la bibliothèque gblic couramment utilisée pour la gestion de la mémoire Linux. Sa fonction est d'encapsuler le socket d'appel système. C'est un choix très imprudent d'utiliser directement un grand nombre de sockets d'appel système sans utiliser la bibliothèque gblic. Les processus exécutés dans l'espace utilisateur ont chacun leur propre espace d'adressage virtuel, tandis que le noyau dispose d'un espace d'adressage distinct.
La couche supérieure est l'espace du noyau. L'espace du noyau Linux est divisé en trois couches :
Couche d'appel système ; elle appartient à la couche la plus basse et fournit une forme de communication entre l'espace utilisateur et l'espace noyau. Noyau Linux : Il faudrait dire plus précisément que c'est le code du noyau qui est indépendant de l'architecture. Ce code universel est applicable à n'importe quelle architecture. Code dépendant de l'architecture : Cette partie est généralement appelée BSP. Ce type de code est principalement introduit pour être compatible avec différentes plateformes ou processeurs.
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. La première fournira certains services de base, tels que la communication, les E/S, la mémoire et la gestion des processus, et des services plus spécifiques sont insérés dans la couche du micro-noyau. Chaque noyau a ses propres avantages, mais cela ne sera pas abordé 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.
Architecture du noyau Linux
Les principaux composants du noyau Linux sont :
Gestion des processus de socket d'appel système, gestion de la mémoire vidéo, système de fichiers virtuel, pile réseau, pilote de périphérique et codes liés à l'architecture matérielle.
(1) Prise d'appel système
La couche d'appel système fournit des mécanismes individuels pour effectuer des appels de fonction depuis l'espace utilisateur vers le noyau. Cela dépend de l’architecture. Des services de multiplexage et de démultiplexage sont fournis au niveau de cette couche.
(2) Gestion des processus
Le cœur de la gestion des processus est la planification des processus. Dans le noyau Linux, l'unité de planification des processus est le processus, et les threads sont équivalents au concept de processus de planification. Le noyau fournit des sockets de programmation d'application via des appels système. Tels que : créer de nouveaux processus (fork, exec), terminer des processus (kill, exit) et fournir des processus de contrôleétapes de transplantation du noyau Linux, des sockets pour la synchronisation des processus et la communication inter-processus.
La gestion des processus inclut également la gestion de la nécessité de partager le processeur entre les processus actifs. Le noyau utilise le planificateur CFS complètement équitable, qui est expliqué en détail dans mon article précédent "Linux Completely Fair Scheduler CFS".
(3) Gestion de la mémoire vidéo
Une autre ressource importante gérée par le noyau est la mémoire vidéo. Un autre article de Yuanlijun, « Comprendre la gestion de la mémoire vidéo Linux, cet article uniquement » explique en détail la gestion de la mémoire vidéo Linux. Afin d'améliorer l'efficacité, le concept de mémoire vidéo virtuelle est introduit. La mémoire vidéo est gérée selon ce que l'on appelle la forme de page de mémoire vidéo (généralement, la taille d'une page de mémoire vidéo est de 4 Ko et 8 Ko, dont la plupart sont de 4 Ko). En plus des méthodes Linux de gestion de la mémoire vidéo disponible, il existe des mécanismes matériels utilisés pour les mathématiques et le mappage virtuel. 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 assurent le suivi de 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, 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 un bouclier entre les appels système et les systèmes de fichiers pris en charge par le noyau. Comme le montre l'image de droite :
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 de contrats réseau
La pile de contrats réseau est conçue pour suivre l'architecture en couches du contrat simulé lui-même. Rappelez-vous les étapes de transplantation du noyau Linux, InternetProtocol (IP) est le contrat de couche réseau central dans le cadre du contrat de transmission (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 la couche d'appel système. 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.
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.
Référence
Genri-kun a fait référence à cet article
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!