Le noyau Linux comporte 5 sous-systèmes : 1. Process Scheduling Control System (SCHED) ; 2. Memory Management System (MM), dont la fonction principale est de contrôler plusieurs processus pour partager en toute sécurité la zone de mémoire principale ; VFS); 4. Interface réseau (NET); 5. Communication inter-processus (IPC).
L'environnement d'exploitation de ce tutoriel : système Ubuntu 16.04, ordinateur Dell G3.
Kernel :
En informatique, il s'agit d'un programme informatique utilisé pour gérer les exigences d'E/S (entrées et sorties) de données émises par un logiciel, traduire ces exigences en instructions de traitement de données et les transmettre au processeur central (CPU). ) et d'autres composants électroniques de l'ordinateur, il s'agit de l'élément le plus fondamental du système d'exploitation moderne. Il s'agit d'un logiciel qui fournit un accès sécurisé au matériel informatique pour de nombreuses applications. Cet accès est limité et le noyau détermine quand et combien de temps un programme peut fonctionner sur une certaine partie du matériel. Opérer directement sur le matériel est très complexe. Par conséquent, le noyau fournit généralement une méthode d’abstraction matérielle pour effectuer ces opérations. Grâce à des mécanismes de communication inter-processus et à des appels système, les processus d'application peuvent contrôler indirectement les ressources matérielles requises (en particulier les processeurs et les périphériques IO).
Quels sont les sous-systèmes du noyau Linux ?
Le noyau Linux se compose principalement de la planification des processus (SCHED), de la gestion de la mémoire (MM), du système de fichiers virtuel (VFS), de l'interface réseau (NET) et de l'inter- communication de processus (IPC) Il se compose de 5 sous-systèmes, comme le montre la figure ci-dessous.
1. Planification des processus
La planification des processus contrôle l'accès de plusieurs processus du système au CPU, de sorte que plusieurs processus puissent être exécutés en "micro série et macro parallèle" dans le CPU . La planification des processus est au centre du système et d'autres sous-systèmes du noyau en dépendent car chaque sous-système doit suspendre ou reprendre les processus.
Comme le montre la figure ci-dessous, le processus Linux bascule entre plusieurs états.
Transition de l'état du processus Linux
Dans la programmation du pilote de périphérique, lorsque la ressource demandée ne peut pas être satisfaite, le pilote planifiera généralement l'exécution d'autres processus et mettra ce processus en état de veille jusqu'à ce que la ressource demandée soit réveillée. et entrez dans l'état prêt. Le sommeil est divisé en sommeil interrompu et sommeil ininterrompu. La différence entre les deux est que le sommeil interrompu se réveille lorsqu'il reçoit un signal.
Un processus qui est complètement dans l'état TASK_UNINTERRUPTIBLE ne peut même pas être "tué", donc le noyau après Linux 2.6.26 a également un état TASK_KILLABLE, qui est égal à "TASK_WAKEKILL|TASK_UNINTERRUPTIBLE" et peut répondre aux signaux fatals.
Dans le noyau Linux, la structure task_struct (include/linux/sched.h) est utilisée pour décrire le processus. Cette structure contient des pointeurs qui décrivent les ressources mémoire, les ressources du système de fichiers, les ressources de fichiers, les ressources tty, le traitement du signal, etc. .du processus. Les threads Linux sont implémentés à l'aide d'un modèle de processus léger. Lorsqu'un thread est créé dans l'espace utilisateur via l'API pthread_create(), le noyau crée simplement une nouvelle task_struct et pointe tous les pointeurs de ressource de la nouvelle task_struct vers celle qui l'a créée. pointeur de task_struct.
La grande majorité des processus (et plusieurs threads dans le processus) sont créés par des applications de l'espace utilisateur Lorsqu'elles ont des exigences en matière de ressources sous-jacentes et d'accès matériel, elles entreront dans l'espace du noyau via des appels système. Parfois, dans la programmation du noyau, si plusieurs tâches doivent être exécutées simultanément, des threads du noyau peuvent être démarrés et ces threads ne disposent pas d'espace utilisateur. La fonction pour démarrer le thread du noyau est : pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
2. Gestion de la mémoire
La fonction principale de la gestion de la mémoire est de contrôler. la sécurité de plusieurs processus partagés dans la zone de mémoire principale. La gestion de la mémoire Linux termine la conversion de la mémoire virtuelle en mémoire physique pour chaque processus lorsque le CPU fournit une unité de gestion de mémoire (MMU). Linux 2.6 a introduit la prise en charge des processeurs sans MMU.
Comme le montre la figure, d'une manière générale, chaque processus de Linux sur un processeur 32 bits bénéficie de 4 Go d'espace mémoire, 0 à 3 Go appartiennent à l'espace utilisateur, 3 à 4 Go appartiennent à l'espace noyau et l'espace noyau a un certain impact. sur la mémoire conventionnelle et les E/S, la mémoire de l'appareil et la mémoire haut de gamme sont gérées différemment. Les limites spécifiques entre l'espace noyau et l'espace utilisateur peuvent être ajustées sous l'option de configuration du noyau Fonctionnalités du noyau → Répartition de la mémoire, la limite peut être définie sur 2 Go ou 3 Go.
Espace d'adressage du processus Linux
Comme le montre la figure ci-dessus, la gestion globale de la mémoire du noyau Linux est relativement importante, y compris l'algorithme Buddy sous-jacent, qui est utilisé pour gérer l'occupation de chaque page, l'allocateur de dalle du espace noyau et gestion secondaire des bibliothèques C dans l'espace utilisateur. De plus, le noyau fournit également une prise en charge du cache de pages, en utilisant la mémoire pour mettre en cache le disque, et le thread de vidage des informations de chaque périphérique de support est utilisé pour vider le cache des pages sales sur le disque. Kswapd (processus d'échange) est le thread du noyau utilisé pour le recyclage des pages (y compris les pages sauvegardées sur des fichiers et les pages anonymes) sous Linux. Il utilise l'algorithme le moins récemment utilisé (LRU) pour le recyclage de la mémoire.
3. Système de fichiers virtuel
Comme le montre la figure,
Système de fichiers virtuel Linux
Le système de fichiers virtuel Linux masque les détails spécifiques de divers matériels et fournit une interface unifiée pour tous les appareils . De plus, il est indépendant de chaque système de fichiers spécifique et constitue une abstraction de différents systèmes de fichiers. Il fournit vfs_read(), vfs_write() et d'autres interfaces unifiées pour les applications de couche supérieure, et appelle les fonctions membres de la structure file_operations implémentées dans le système de fichiers sous-jacent spécifique ou le pilote de périphérique.
4. Interface réseau
L'interface réseau permet d'accéder à diverses normes réseau et de prendre en charge divers matériels réseau. Comme le montre la figure 3.8, l'interface réseau sous Linux peut être divisée en protocoles réseau et pilotes réseau. La partie protocole réseau est responsable de la mise en œuvre de tous les protocoles de transmission réseau possibles. Le pilote de périphérique réseau est responsable de la communication avec tous les périphériques matériels. les périphériques ont des pilotes de périphérique correspondants.
Architecture réseau Linux
Le noyau Linux prend en charge de nombreux types de piles de protocoles, telles qu'Internet, UNIX, CAN, NFC, Bluetooth, WiMAX, IrDA, etc. Les applications de couche supérieure utilisent uniformément l'interface socket.
5. Communication inter-processus
La communication inter-processus prend en charge la communication entre les processus. Linux prend en charge une variété de mécanismes de communication entre les processus, notamment les sémaphores, la mémoire partagée, les files d'attente de messages, les canaux, les sockets de domaine UNIX, etc. assister plusieurs processus, un accès mutuellement exclusif à plusieurs ressources, une synchronisation inter-processus et une transmission de messages. Dans les applications Linux actuelles, les utilisateurs ont tendance à utiliser les sockets de domaine UNIX plutôt que les files d'attente de messages et autres mécanismes du System V IPC. Le noyau Android a ajouté une nouvelle méthode de communication inter-processus Binder.
Les dépendances entre les 5 composants du noyau Linux sont les suivantes :
La relation entre l'ordonnancement des processus et la gestion de la mémoire : Ces deux sous-systèmes sont dépendants l'un de l'autre. Dans un environnement multi-programmes, si un programme veut s'exécuter, un processus doit être créé pour celui-ci. La première chose à faire lors de la création d'un processus est de charger le programme et les données dans la mémoire.
La relation entre la communication inter-processus et la gestion de la mémoire : Le sous-système de communication inter-processus s'appuie sur la gestion de la mémoire pour prendre en charge le mécanisme de communication en mémoire partagée. Ce mécanisme permet à deux processus non seulement d'avoir leur propre espace privé, mais également d'y accéder. zone de mémoire commune.
La relation entre le système de fichiers virtuel et l'interface réseau : Le système de fichiers virtuel utilise l'interface réseau pour prendre en charge le système de fichiers réseau (NFS), et utilise également la gestion de la mémoire pour prendre en charge les périphériques RAMDISK.
La relation entre la gestion de la mémoire et le système de fichiers virtuel : la gestion de la mémoire utilise le système de fichiers virtuel pour prendre en charge l'échange, et le processus d'échange est régulièrement planifié par le planificateur, c'est pourquoi la gestion de la mémoire repose sur la planification des processus. Lorsque la carte mémoire à laquelle un processus accède est remplacée, la gestion de la mémoire envoie une requête au système de fichiers virtuel et, en même temps, suspend le processus en cours d'exécution.
En plus de ces dépendances, tous les sous-systèmes du noyau dépendent également de certaines ressources communes. Ces ressources incluent les API utilisées par tous les sous-systèmes, telles que les fonctions d'allocation et de libération d'espace mémoire, les fonctions d'émission de messages d'avertissement ou d'erreur et les interfaces de débogage fournies par le système.
Recommandations associées : "Tutoriel vidéo Linux"
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!