Maison  >  Article  >  Opération et maintenance  >  Principes de base du système d'exploitation Linux

Principes de base du système d'exploitation Linux

小云云
小云云original
2018-01-13 13:17:512281parcourir

Cet article vous parle principalement des principes du système d'exploitation Linux. Il s'agit d'un très bon tutoriel de base sur le système Linux. Nous avons résumé tous les contenus pertinents sélectionnés pour que vous puissiez apprendre ensemble. J'espère que cela aide tout le monde.

Version texte des principes du système d'exploitation Linux

1. Quatre époques d'ordinateurs

1. La première génération :

Ordinateurs à tube à vide, entrée et sortie. : Les cartes perforées sont très peu pratiques à utiliser sur des ordinateurs. Faire une chose peut nécessiter plus d'une douzaine de personnes pour la réaliser ensemble. L'année est probablement : 1945-1955. Et cela consomme beaucoup d'énergie. Si vous aviez un ordinateur à la maison à cette époque, la luminosité de vos ampoules pourrait diminuer dès que vous allumerez l'ordinateur, haha~

2. 🎜>

Des ordinateurs à transistors et des systèmes de traitement par lots (fonctionnant en mode série) ont vu le jour. Il permet d'économiser beaucoup plus d'énergie que le premier. Le représentant typique est Mainframe. Année approximative : 1955-1965. A cette époque : le langage Fortran était né, un langage informatique très ancien.

3. La troisième génération :

L'émergence des circuits intégrés et la conception de programmes de traitement multicanaux (fonctionnant en mode parallèle). Les représentants les plus typiques sont : les systèmes en temps partagé (). divisant le fonctionnement du CPU en pièce d'horlogerie). L'année est probablement : vers 1965-1980.

4. La quatrième génération :

Le PC est apparu, probablement vers 1980. Je crois aux représentants typiques de cette époque : Bill Gates, Steve Jobs.

2. Système de travail informatique

Bien que les ordinateurs aient évolué à travers quatre époques, à ce jour, le système de travail informatique est encore relativement simple. De manière générale, notre ordinateur comporte cinq parties de base.

1.MMU (unité de contrôle de la mémoire, implémente la pagination de la mémoire [page mémoire])

Le mécanisme informatique est indépendant du CPU (unité de contrôle informatique). Il y a une puce unique dans le CPU). appelé MMU. Il permet de calculer la correspondance entre l'adresse du thread et l'adresse physique du processus. Il est également utilisé pour la protection d'accès, c'est-à-dire que si un processus accède d'abord à une adresse mémoire qui n'est pas la sienne, il sera rejeté !

2. Mémoire (mémoire)

3. Périphérique d'affichage (interface VGA, moniteur, etc.) [appartient au périphérique IO]

4. périphérique clavier) [Appartient aux périphériques IO]

5. Périphérique de disque dur (contrôle de la parabole dure, contrôleur de disque dur ou adaptateur) [Appartient aux périphériques IO]

Connaissances approfondies :

       

Ces périphériques matériels sont reliés sur un bus et échangent des données via cette ligne. Le leader est le CPU, qui a la plus haute autorité de commande. Alors comment ça marche ?

A. Unité de récupération (obtenir des instructions de la mémoire)

B. Unité de décodage (décodage complet [convertir les données extraites de la mémoire en instructions que le processeur peut réellement exécuter]) ;

C. Unité d'exécution (commence à exécuter les instructions et appelle différents matériels pour fonctionner selon les exigences des instructions.);

Nous savons de ce qui précède que la MMU fait partie du CPU, mais le CPU Y a-t-il d'autres pièces nécessaires ? Bien sûr, il existe des puces de registre d'instructions, des puces de compteur d'instructions et des pointeurs de pile.

Puce de registre d'instructions : c'est là que le processeur extrait et stocke les données dans la mémoire ;

Puce de compteur d'instructions : c'est là que le processeur enregistre le dernier emplacement où les données ont été extraites du mémoire, ce qui est pratique Valeur suivante ;

Pointeur de pile : chaque fois que le processeur récupère une instruction, il pointe le pointeur de pile vers l'emplacement de l'instruction suivante en mémoire.

Leur cycle de travail est aussi rapide que le CPU, et la fréquence de travail du CPU est au même cycle d'horloge, donc ses performances sont très bonnes et la communication des données est terminée sur le bus interne du CPU. Puce de registre d'instructions, puce de compteur d'instructions, pointeur de pile. Ces appareils sont généralement appelés registres CPU.

Le registre sert en fait à sauvegarder la scène. Ceci est particulièrement évident dans le multiplexage temporel. Par exemple, lorsque le processeur doit être partagé par plusieurs programmes, le processeur met souvent fin ou suspend un processus, et le système d'exploitation doit enregistrer son état d'exécution actuel (afin que le processeur puisse continuer à le traiter à son retour ultérieur). . ) puis continuez à exécuter d’autres processus (c’est ce qu’on appelle un changement de contexte de l’ordinateur).

3. Système de stockage informatique.

1. SMP multiprocesseur symétrique

En plus du MMU et des registres (proches du cycle de travail du CPU), etc., le CPU dispose également d'un cœur de CPU, spécialement conçu pour traiter les données. Un processeur possède plusieurs cœurs qui peuvent être utilisés pour exécuter votre code en parallèle. De nombreuses entreprises du secteur utilisent plusieurs processeurs. Cette structure est appelée multiprocesseur symétrique.

2. Principe de localité du programme

Localité spatiale :

Un programme est composé d'instructions et de données. La localité spatiale signifie qu'après l'accès à une donnée, d'autres données proches des données peuvent également être consultées ultérieurement.

Localité temporelle :

De manière générale, lorsqu'un programme termine son exécution, il est possible d'y accéder rapidement. Le même principe s’applique aux données. Une fois qu’une donnée est consultée, elle est susceptible d’être consultée à nouveau.

C'est précisément en raison de l'existence de la localité du programme que nous avons généralement besoin de mettre en cache les données, que ce soit du point de vue de la localité spatiale ou de la localité temporelle.

Connaissances étendues :

Étant donné que l'espace de stockage des registres à l'intérieur du CPU est limité, la mémoire est utilisée pour stocker les données. Cependant, puisque la vitesse du CPU et la vitesse de la mémoire ne sont pas au même niveau. du tout, donc dans le traitement La plupart d'entre eux attendent lorsque les données sont renvoyées (le CPU doit récupérer une donnée de la mémoire, et elle peut être traitée en une seule rotation du CPU, tandis que la mémoire peut avoir besoin de tourner 20 fois). Afin d'améliorer l'efficacité, le concept de mise en cache a émergé.

Maintenant que nous connaissons le principe de localité du programme, nous savons également que pour obtenir plus d'espace, le CPU utilise en fait du temps pour échanger de l'espace, mais le cache peut directement laisser le CPU récupérer les données, ce qui permet de gagner du temps. , donc la mise en cache signifie échanger de l'espace contre du temps

3 Même s'il s'agit d'un système de stockage

    

Les amis qui travaillent pendant les heures de travail ont peut-être vu des lecteurs de bande, et maintenant, ils le sont pratiquement tous. De nombreuses entreprises utilisent des disques durs pour remplacer les lecteurs de bande, regardons donc la structure de l'ordinateur personnel que nous connaissons le mieux. Les données sont différentes de la dernière fois qu'elles ont été stockées. Nous pouvons donner un exemple simple. Il existe un grand écart entre leurs cycles de stockage hebdomadaires. Le disque dur mécanique et la mémoire sont particulièrement évidents. L'écart entre les deux est assez grand.

Connaissances élargies :

Par rapport à votre propre ordinateur de bureau ou ordinateur portable, vous l'avez peut-être démonté vous-même et parlé de disques durs mécaniques, de disques SSD ou de mémoire, etc. Mais peut-être n'avez-vous pas vu le périphérique physique du cache, mais il se trouve en fait sur le processeur. Il se peut donc qu’il y ait des angles morts dans notre compréhension.

Parlons d'abord du cache de premier niveau et du cache du casque. Lorsque leur processeur récupère les données ici, la période de temps n'est fondamentalement pas très longue, car le cache de premier niveau et le cache de deuxième niveau sont internes. ressources du cœur du processeur. (Dans les mêmes conditions matérielles, le prix du marché d'un cache L1 de 128 000 $ peut être d'environ 300 yuans, le prix du marché d'un cache L1 de 256 000 $ peut être d'environ 600 yuans et le prix du marché d'un cache L1 de 512 000 $ peut être supérieur à quatre chiffres. Vous pouvez vous référer à JD.com pour le prix spécifique. Cela suffit à montrer que le coût du cache est très élevé !) À ce stade, vous pouvez vous demander qu'en est-il du cache de troisième niveau ? En fait, le cache de troisième niveau est l'espace partagé par plusieurs processeurs. Bien entendu, plusieurs processeurs partagent également de la mémoire.

         

4. Accès à la mémoire non uniforme (NUMA)

Nous savons que lorsque plusieurs processeurs partagent le cache ou la mémoire L3, ils le feront. d’expropriation des ressources. Nous savons que les variables ou les chaînes ont des adresses mémoire lorsqu'elles sont enregistrées en mémoire. Comment obtiennent-ils l’adresse mémoire ? Nous pouvons nous référer à l'image ci-dessous :

Oui, ces experts en matériel divisent le cache à trois niveaux et laissent différents processeurs occuper différentes adresses mémoire. Il est compréhensible qu'ils aient tous leur propre zone de cache de niveau 3, et il n'y aura aucun problème d'accaparement de ressources, mais il convient de noter qu'il s'agit toujours du même cache de niveau 3. Tout comme Pékin a le district de Chaoyang, le district de Fengtai, le district de Daxing, le district de Haidian, etc., mais ils font tous partie de Pékin. On peut comprendre ici. Il s'agit de NUMA, et ses caractéristiques sont : un accès mémoire non uniforme, chacun a son propre espace mémoire.

Connaissances étendues :

Ensuite, le problème est que, en fonction du résultat du rechargement, si le processus exécuté sur cpu1 est suspendu, son adresse est enregistrée dans sa propre adresse de cache, mais comment est-il géré par CPU2 quand il exécute à nouveau le programme ?

Il n'y a pas d'autre choix que de copier une adresse de la zone de rugosité de troisième niveau du CPU1 ou de la déplacer vers le CPU2 pour le traitement. Cela prendra un certain temps. Par conséquent, le rééquilibrage entraînera une diminution des performances du processeur. À l'heure actuelle, nous pouvons utiliser la liaison de processus pour y parvenir, de sorte que lorsque le processus est à nouveau traité, le processeur utilisé pour le traiter sera toujours utilisé. C'est-à-dire l'affinité CPU du processus.

5. Mécanismes d'écriture directe et de réécriture dans le cache.

 

L'endroit où le CPU traite les données est de les modifier dans le registre. Lorsque le registre n'a pas les données qu'il recherche, il ira au premier-. cache de niveau pour les trouver. S'il n'y a pas de données dans le cache de premier niveau, les données seront trouvées dans le cache de deuxième niveau, recherchées séquentiellement jusqu'à ce qu'elles soient trouvées sur le disque, puis chargées dans le registre. Lorsque le cache de troisième niveau récupère les données de la mémoire et constate que le cache de troisième niveau est insuffisant, il libère automatiquement l'espace dans le cache de troisième niveau.

Nous savons que l'emplacement final où les données sont stockées est le disque dur, et ce processus d'accès est complété par le système d'exploitation. Lorsque notre processeur traite des données, il écrit les données à différents endroits via deux méthodes d'écriture, à savoir l'écriture directe (écriture dans la mémoire) et la réécriture (écriture dans le cache de premier niveau). Évidemment, les performances de réécriture sont bonnes, mais ce sera embarrassant si l'alimentation est coupée et les données seront perdues, car elles sont écrites directement dans le cache de premier niveau, mais les autres processeurs ne peuvent pas accéder au cache de premier niveau. , donc du point de vue de la fiabilité Du point de vue de l'écriture, la méthode générale d'écriture sera plus fiable. La méthode spécifique à utiliser dépend de vos propres besoins.

4. Périphérique IO

1. Le périphérique IO se compose du contrôleur de périphérique et de l'appareil lui-même.

Contrôleur de périphérique : une puce ou un ensemble de puces intégrées à la carte mère. Responsable de la réception des commandes du système d’exploitation et de l’achèvement de l’exécution des commandes. Par exemple, il est responsable de la lecture des données du système d'exploitation.

L'appareil lui-même : Il possède sa propre interface, mais l'interface de l'appareil lui-même n'est pas disponible, c'est juste une interface physique. Tel que l'interface IDE.

Connaissances étendues :

Chaque contrôleur dispose d'un petit nombre de registres pour la communication (allant de quelques à des dizaines). Ce registre est intégré directement dans le contrôleur de l'appareil. Par exemple, un contrôleur de disque minimal sera également utilisé pour spécifier des registres pour les adresses de disque, le nombre de secteurs, les directions de lecture et d'écriture et d'autres demandes d'opérations associées. Ainsi, chaque fois que vous souhaitez activer le contrôleur, le pilote de périphérique reçoit l'instruction d'opération du système d'exploitation, puis la convertit en opération de base du périphérique correspondant et place la demande d'opération dans le registre pour terminer l'opération. Chaque registre se comporte comme un port IO. Toutes les combinaisons de registres sont appelées espace d'adressage d'E/S de l'appareil, également appelé espace de port d'E/S,

2. Pilote

L'opération matérielle réelle est complétée par l'opération du pilote. Les pilotes doivent généralement être complétés par le fabricant du périphérique. Généralement, le pilote est situé dans le noyau. Bien que le pilote puisse s'exécuter en dehors du noyau, peu de gens le font car c'est trop inefficace !

3. Implémenter l'entrée et la sortie

Les ports d'E/S de l'appareil ne peuvent pas être attribués à l'avance car les modèles de chaque carte mère sont incohérents, nous devons donc les attribuer dynamiquement. Lorsque l'ordinateur est allumé, chaque périphérique IO doit s'enregistrer pour utiliser le port E/S dans l'espace du port E/S du bus. Ce port dynamique est composé de tous les registres combinés dans l'espace d'adressage E/S de l'appareil. Il y a 2 ^ 16 ports, soit 65 535 ports.

Comme le montre l'image ci-dessus, si notre processeur veut gérer le périphérique spécifié, il doit transmettre la commande au pilote, puis le pilote convertira le Commande CPU en quelque chose que l'appareil peut comprendre. Le signal est placé dans un registre (également appelé socket). Ainsi, le registre (port E/S) est l'adresse (port E/S) par laquelle le CPU interagit avec l'appareil. l'autobus.

Connaissances étendues :

Trois façons d'implémenter l'entrée et la sortie des périphériques d'E/S :

A.. Interrogation :

Se réfère généralement à l'utilisateur Le programme lance un appel système et le noyau le traduit en un appel de procédure pour le pilote correspondant du noyau. Ensuite, le pilote de périphérique démarre les E/S et vérifie le périphérique en boucle continue pour voir s'il a terminé son travail. Ceci est quelque peu similaire à une attente occupée (c'est-à-dire que le processeur utilisera une période fixe pour vérifier en permanence chaque périphérique d'E/S via une traversée pour voir s'il y a des données. Évidemment, cette efficacité n'est pas idéale.),

B. .Interruption :

Interrompre le programme en cours de traitement par le CPU et interrompre l'opération en cours d'exécution par le CPU, informant ainsi le noyau d'obtenir une demande d'interruption. Il existe généralement un périphérique unique sur notre carte mère appelé contrôleur d'interruption programmable. Ce contrôleur d'interruption peut communiquer directement avec le CPU via une certaine broche et peut déclencher la déviation du CPU à une certaine position, permettant ainsi au CPU de savoir qu'un certain signal est arrivé. Il y aura un vecteur d'interruption sur le contrôleur d'interruption (lorsque chacun de nos périphériques d'E/S démarre, nous voulons que le contrôleur d'interruption enregistre un numéro d'interruption. Ce numéro est généralement unique. Habituellement, chaque broche du vecteur d'interruption peut identifier plusieurs interruptions. numéro), qui peut également être appelé numéro d’interruption.

Ainsi, lorsqu'une interruption se produit réellement sur cet appareil, cet appareil ne mettra pas de données directement sur le bus. Cet appareil enverra immédiatement une demande d'interruption au contrôleur d'interruption. Le contrôleur d'interruption identifie la requête par laquelle cette demande transite. le vecteur d'interruption envoyé par le périphérique, il est ensuite notifié au CPU d'une manière ou d'une autre, permettant au CPU de savoir quel périphérique a atteint la demande d'interruption. À ce stade, le processeur peut utiliser le numéro de port E/S en fonction de l'enregistrement du périphérique, afin que les données du périphérique puissent être obtenues. (Notez que le processeur ne peut pas récupérer directement les données, car il ne reçoit que le signal d'interruption. Il peut uniquement avertir le noyau, laisser le noyau s'exécuter sur le processeur lui-même et le noyau obtient la demande d'interruption.) Par exemple, une carte réseau reçoit Pour les requêtes IP externes, la carte réseau dispose également de sa propre zone de cache. Le processeur prend le cache de la carte réseau dans la mémoire et le lit d'abord s'il s'agit de sa propre adresse IP. Si c'est le cas, il commence à décompresser l'adresse IP. paquet, et obtient finalement un numéro de port. Ensuite, le CPIU trouve ce port dans son propre contrôleur d'interruption et le gère en conséquence.

Le traitement de l'interruption du noyau est divisé en deux étapes : la première moitié de l'interruption (traitée immédiatement) et la seconde moitié de l'interruption (pas nécessairement). Prenons l'exemple de la réception de données de la carte réseau. Lorsque la demande de l'utilisateur atteint la carte réseau, le CPU commande que les données dans la zone de cache de la carte réseau soient directement récupérées dans la mémoire. traitée immédiatement après sa réception (le traitement consiste ici à transférer les données de la carte réseau vers la mémoire). Elle est simplement lue dans la mémoire sans autre traitement pour faciliter le traitement ultérieur. C'est ce qu'on appelle la partie supérieure de l'interruption, et). la partie suivante qui gère réellement la requête est appelée la seconde moitié

C.DMA :

L'accès direct à la mémoire Tout le monde sait que la transmission des données est implémentée sur le bus. contrôle le bus. Quels périphériques d'E/S utilisent le bus à un moment donné ? Cela est déterminé par le contrôleur de la CPU. Le bus a trois fonctions : bus d'adresse (pour compléter la fonction d'adressage de l'appareil), bus de contrôle (pour contrôler la fonction de chaque adresse d'appareil à l'aide du bus) et bus de données (pour réaliser la transmission de données).

Habituellement, il s'agit d'une puce de contrôle intelligente fournie avec le périphérique d'E/S (nous l'appelons le contrôleur d'accès direct à la mémoire). Lorsque la première moitié de l'interruption doit être traitée, le CPU en informe le DMA. périphérique pour accepter l'interruption. Le bus est utilisé par le périphérique DMA et il est informé de l'espace mémoire qui peut être utilisé pour lire les données du périphérique d'E/S dans l'espace mémoire. Lorsque le périphérique d'E/S DMA termine la lecture des données, il enverra un message pour indiquer au CPU que l'opération de lecture est terminée. À ce moment, le CPU informera le noyau que les données ont été chargées. la seconde moitié de l'interruption sera transmise au noyau. La plupart des appareils utilisent désormais des contrôleurs DMA, tels que des cartes réseau, des disques durs, etc.

5. Concepts du système d'exploitation

Grâce à l'étude ci-dessus, nous savons qu'un ordinateur comporte cinq composants de base. Le système d'exploitation résume principalement ces cinq composants dans une interface relativement intuitive, directement utilisée par les programmeurs ou les utilisateurs de niveau supérieur. Alors, quelles sont les choses qui sont réellement abstraites dans le système d’exploitation ?

1.CPU (tranche de temps)

Dans le système d'exploitation, le CPU est résumé en tranches de temps, puis le programme est résumé en processus, et le programme est exécuté en allouant des tranches de temps . La CPU dispose d'une unité d'adressage qui identifie l'adresse de mémoire collective où la variable est stockée en mémoire.

   

Le bus interne de notre hôte dépend de la largeur de bits (également appelée longueur de mot) du CPU. Par exemple, le bus d'adresse 32 bits peut représenter 2 pour le. 32ème puissance. L'adresse mémoire, convertie en décimale, est un espace mémoire 4G. À ce stade, vous devriez comprendre pourquoi le système d'exploitation 32 bits ne peut reconnaître que la mémoire 4G, n'est-ce pas ? Même si votre mémoire physique est de 16 Go, la mémoire disponible est toujours de 4 Go. Par conséquent, si vous constatez que votre système d'exploitation peut reconnaître les adresses mémoire supérieures à 4 Go, alors votre système d'exploitation ne doit pas être en 32 bits !

2. Mémoire

Dans le système d'exploitation, la mémoire est implémentée via l'espace d'adressage virtuel.

3. Périphérique d'E/S

Dans le système d'exploitation, le périphérique d'E/S principal est le disque. Tout le monde sait que le disque fournit de l'espace de stockage dans le noyau. déposer.

4. Processus

Pour parler franchement, le but principal de l’existence d’un ordinateur n’est-il pas simplement d’exécuter des programmes ? Lorsque le programme s'exécute, nous l'appelons un processus (nous n'avons pas à nous soucier des threads pour le moment). Si plusieurs processus s'exécutent en même temps, cela signifie que ces ressources abstraites limitées (processeur, mémoire, etc.) sont allouées à plusieurs processus. Nous appelons collectivement ces ressources abstraites des ensembles de ressources.

L'ensemble de ressources comprend :

1>.cpu time ;

2>. Adresse mémoire : extraite dans l'espace d'adressage virtuel (tel qu'un système d'exploitation 32 bits, prend en charge). Espace 4G, le noyau occupe 1G d'espace et le processus utilisera par défaut 3G d'espace disponible. En fait, il se peut qu'il n'y ait pas 3G d'espace, car votre ordinateur peut avoir moins de 4G de mémoire)

3>. ;.I/O : tout est un fichier. Pour ouvrir plusieurs fichiers, ouvrez le fichier spécifié via fd (descripteur de fichier). Nous divisons les fichiers en trois catégories : les fichiers normaux, les fichiers de périphérique et les fichiers de pipeline.

Chaque processus a sa propre structure d'adresse de tâche, à savoir : task struct. Il s'agit d'une structure de données maintenue par le noyau pour chaque processus (une structure de données est utilisée pour sauvegarder les données. Pour parler franchement, c'est l'espace mémoire, qui enregistre l'ensemble de ressources appartenant au processus, et bien sûr son processus parent, qui enregistre la scène [Utilisé pour la commutation de processus], attente de mappage de mémoire). La structure de tâche simule les adresses linéaires et permet au processus d'utiliser ces adresses linéaires, mais elle enregistre la relation de mappage entre les adresses linéaires et les adresses de mémoire physique.

5. Mappage mémoire - cadre de page

Tant qu'il ne s'agit pas de l'espace mémoire physique utilisé par le noyau, nous l'appelons espace utilisateur. Le noyau découpera la mémoire physique de l'espace utilisateur en un cadre de page de taille fixe (c'est-à-dire un cadre de page, en termes Huanju, il s'agit d'une unité de stockage de taille fixe, qui est plus petite que l'unité de stockage unique par défaut (la valeur par défaut est). un octet, soit 8 bits) doit être volumineux. Généralement, une unité de stockage par 4 Ko. Chaque cadre de page est attribué vers l'extérieur en tant qu'unité indépendante, et chaque cadre de page est également numéroté. [Par exemple : supposons qu'un espace 4G soit disponible, que chaque cadre de page est de 4K et qu'il y a 1 million de cadres de page au total. 】Ces cadres de page sont alloués à différents processus.

Nous supposons que vous disposez de 4 Go de mémoire, que le système d'exploitation occupe 1 Go et que les 3 Go de mémoire physique restants sont alloués à l'espace utilisateur. Après le démarrage de chaque processus, il pensera qu'il dispose d'un espace 3G disponible, mais en fait, il ne peut pas du tout utiliser la 3G. La mémoire écrite par le processus est stockée discrètement. Partout où il y a de la mémoire libre, accédez-y. Ne me posez pas de questions sur l'algorithme d'accès spécifique, je ne l'ai pas étudié non plus.

Structure de l'espace de traitement :

1>. Espace réservé

2>. Pile (emplacement de stockage variable)

3>.

4>.Heap (ouvre un fichier dans lequel le flux de données du fichier est stocké)

5>.Segment de données (stockage global de variables statiques)

6>.Code Le La relation de stockage entre le segment

processus et la mémoire est la suivante :

Chaque espace de processus a un espace réservé Lorsqu'un processus constate que les données qu'il a ouvertes ont. Cela ne suffit pas, il faut ouvrir un nouveau fichier (l'ouverture d'un nouveau fichier nécessite de stocker des données dans l'espace d'adressage du processus. Évidemment, l'espace d'adressage du processus dans l'image ci-dessus est linéaire et pas dans le vrai sens du terme). Lorsqu'un processus demande réellement une mémoire, il doit lancer un appel système au noyau. Celui-ci trouve un espace physique dans la mémoire physique et indique au processus l'adresse mémoire qui peut être utilisée. Par exemple, si un processus souhaite ouvrir un fichier sur le tas, il doit demander de l'espace mémoire au système d'exploitation (noyau) et dans la plage autorisée par la mémoire physique (c'est-à-dire que la mémoire demandée doit être inférieure à la mémoire physique libre), le noyau l'allouera à l'adresse mémoire du processus.

Chaque processus possède sa propre adresse linéaire. Cette adresse est virtualisée par le système d'exploitation et n'existe pas réellement. Il doit mapper cette adresse virtuelle à la mémoire physique réelle, comme le montre la figure "Processus" Stockage. relation avec la mémoire", l'emplacement de stockage final des données de processus est toujours mappé sur la mémoire. Cela signifie que lorsqu'un processus s'exécute sur le CPU pour exécution, il indique au CPU sa propre adresse linéaire. À ce stade, le CPU ne trouvera pas directement l'adresse linéaire (car l'adresse linéaire est virtuelle et n'existe pas vraiment. L'adresse. Le processus stocke l'adresse de la mémoire physique. ), il trouvera d'abord la "structure de tâche" du processus et chargera la table des pages (en enregistrant la relation de mappage entre les adresses linéaires et la mémoire physique, chaque relation correspondante est appelée une entrée de table de pages. ] pour lire l'adresse mémoire physique réelle correspondant à l'adresse linéaire possédée par le processus.

Connaissances étendues :

Lorsque le processeur accède à l'adresse d'un processus, la première chose qu'il obtient est l'adresse linéaire du processus. Il transmet cette adresse linéaire à sa propre puce MMU pour le calcul. pour obtenir la véritable adresse de la mémoire physique afin d'atteindre l'objectif d'accéder à l'adresse de la mémoire du processus. En d'autres termes, tant qu'il souhaite accéder à l'adresse mémoire d'un processus, il doit passer par une opération MMU, ce qui entraîne une très faible efficacité. Par conséquent, ils ont introduit un cache pour stocker les données fréquemment consultées, afin que l'efficacité puisse être améliorée. être amélioré. La MMU effectue des calculs et récupère les données directement pour le traitement. Nous appelons ce tampon : TLB : tampon de sauvegarde de conversion (résultats de requête de table de page de cache)

Remarque : Dans un système d'exploitation 32 bits, il s'agit du mappage des adresses filaires sur la mémoire physique. Dans les systèmes d’exploitation 64 bits, c’est exactement le contraire !

6. Mode utilisateur et mode noyau

Afin d'obtenir un multitâche coordonné lorsque le système d'exploitation est en cours d'exécution, le système d'exploitation est divisé en deux segments, dont l'un est proche du matériel et dispose d'autorisations privilégiées dans l'espace noyau, tandis que le processus s'exécute dans l'espace utilisateur. Par conséquent, des appels système sont requis lorsque les applications doivent utiliser des instructions privilégiées ou accéder à des ressources matérielles.

Tant qu'il est développé en tant que programme d'application et qu'il n'existe pas dans le cadre du système d'exploitation lui-même, nous l'appelons un programme d'espace utilisateur. Leur état de fonctionnement est appelé mode utilisateur.

Les programmes qui doivent s'exécuter dans l'espace du noyau (nous pouvons le considérer comme le système d'exploitation), nous les appelons s'exécutant dans l'espace du noyau, et l'état dans lequel ils s'exécutent est le mode utilisateur, également appelé mode noyau . Remarque : Le noyau n'est pas responsable de l'exécution du travail spécifique. Disponible dans l'espace noyau pour effectuer toutes les opérations privilégiées.

Pour que chaque programme puisse réellement s'exécuter, il doit finalement lancer un appel système au noyau, ou certains programmes ne nécessitent pas la participation du noyau et peuvent être complétés avec notre application. Par exemple, si vous souhaitez calculer le résultat de 2 élevé à la puissance 32, devez-vous l'exécuter dans l'état du noyau ? La réponse est non. Nous savons que le noyau n'est pas responsable de l'exécution d'un travail spécifique. Nous voulons simplement calculer le résultat d'une opération et n'avons pas besoin d'appeler un mode privilégié. Par conséquent, si vous écrivez du code sur le calcul des valeurs, vous n'en avez besoin que. à Ce code peut être transmis au CPU pour être exécuté.

Si une application doit appeler la fonction du noyau au lieu de la fonction du programme utilisateur, l'application constatera qu'elle doit effectuer une opération privilégiée, et l'application elle-même n'a pas cette capacité. une application au noyau et laissez le noyau vous aider à effectuer des opérations privilégiées. Le noyau constate que l'application est autorisée à utiliser des instructions privilégiées. Le noyau exécutera ces instructions privilégiées et renverra les résultats de l'exécution à l'application. Ensuite, l'application poursuivra le code suivant après avoir obtenu les résultats d'exécution des instructions privilégiées. Il s’agit d’un changement de paradigme.

Par conséquent, si un programmeur souhaite rendre votre programme productif, il doit essayer de faire exécuter votre code dans l'espace utilisateur. Si la plupart de votre code s'exécute dans l'espace du noyau, on estime que votre application ne gagnera pas. cela ne vous apporte pas beaucoup de productivité. Parce que nous savons que l'espace noyau n'est pas responsable de la productivité.

Connaissances élargies :

Nous savons que le fonctionnement de l'ordinateur consiste à exécuter l'opération spécifiée. Les instructions sont également divisées en niveaux d'instruction privilégiés et en niveaux d'instruction non privilégiés. Les amis qui connaissent les ordinateurs savent peut-être que l'architecture du processeur du X86 est grossièrement divisée en quatre niveaux. Il y a quatre anneaux de l'intérieur vers l'extérieur, appelés anneau 0, anneau 1, anneau 2 et anneau 3. Nous savons que les instructions de l’anneau 0 sont des instructions privilégiées et que les instructions de l’anneau 3 sont des instructions utilisateur. De manière générale, le niveau d'instruction privilégié concerne l'exploitation du matériel, le contrôle du bus, etc.

L'exécution d'un programme nécessite la coordination du noyau, et il est possible de basculer entre le mode utilisateur et le mode noyau. Par conséquent, l'exécution d'un programme doit être planifiée par le noyau vers le CPU pour son exécution. Certaines applications sont exécutées pendant le fonctionnement du système d'exploitation pour exécuter des fonctions de base. Nous les laissons s'exécuter automatiquement en arrière-plan. C'est ce qu'on appelle un processus démon. Mais certains programmes ne sont exécutés que lorsque l'utilisateur en a besoin. Alors, comment pouvons-nous demander au noyau d'exécuter les applications dont nous avons besoin ? À ce stade, vous avez besoin d’un interprète capable de gérer le système d’exploitation et de lancer l’exécution des instructions. Pour parler franchement, cela signifie que la requête en cours d'exécution de l'utilisateur peut être soumise au noyau, et que le noyau peut alors ouvrir les conditions de base requises pour son fonctionnement. Le programme est ensuite exécuté.

Recommandations associées :

Compréhension des threads dans la connaissance du système d'exploitation

Interruptions CPU sous le système d'exploitation Linux

Un exemple de tutoriel sur le renforcement de la sécurité du système d'exploitation 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn