Avec le développement des ordinateurs, la complexité et le volume de données des applications logicielles augmentent, et les exigences en matière de mémoire système sont également de plus en plus élevées. En tant qu'administrateur système Linux, il est essentiel de comprendre comment gérer et allouer correctement les ressources mémoire. Cet article vous présentera les connaissances de base de la gestion de la mémoire du système Linux.
Les premiers programmes étaient exécutés directement sur l'adresse physique, ce qui signifie que l'espace requis par le programme ne dépasse pas la mémoire physique de la machine et qu'il n'y aura aucun problème. Cependant, dans les scénarios réels, ils sont tous multitâches et. multi-processus. Il n’est pas fiable que des adresses physiques soient réservées pour chaque processus.
Par exemple : s'il y a trois programmes a, b, c, a a besoin de 10 M, b a besoin de 100 M et c a besoin de 20 M, la mémoire totale sera de 120 M. Selon la méthode d'allocation précédente, les premiers 10 M seront attribués à a. , et 10M-110M seront donnés à b. Il reste 10M au système, mais c a besoin de 20M. Évidemment, la mémoire restante n'est pas suffisante pour c. ce qu'il faut faire?
Pourquoi la gestion de la mémoire est nécessaire :
1. Problèmes d'efficacité
Vous pouvez penser à écrire les données du programme b sur le disque lorsque le programme c est en cours d'exécution, puis à réécrire les données à partir du disque lorsque le programme b est exécuté. Sans oublier qu'il ne peut pas répondre aux besoins d'exécution parallèle du programme b. et c, même si c'est souvent le cas, les problèmes fastidieux causés par les opérations io sont également inacceptables.
2. Le processus résout le problème d'isolement
En plus des problèmes d'efficacité, l'espace réservé au processus plantera s'il doit être accessible par d'autres processus. Par exemple, l'espace auquel accède le processus a correspond aux 10 premiers Mo, mais s'il y a un morceau de code dans le programme a qui accède à 10-110 Mo, cela peut provoquer le crash du programme b, donc les espaces d'adressage des processus doivent être isolés de l'un l'autre.
3.Problème de déménagement
Dans les scénarios du monde réel, il est impossible qu'une seule tâche s'exécute dans la mémoire allouée. Lorsque plusieurs tâches s'exécutent en parallèle, il est possible de demander des adresses dans d'autres processus lors d'une application dynamique pour libérer de la mémoire. doit être transféré à une nouvelle adresse.
La gestion de la mémoire n'est rien d'autre que trouver des moyens de résoudre les trois problèmes ci-dessus. Comment améliorer l'efficacité de l'utilisation de la mémoire ? Comment isoler l’espace d’adressage d’un processus ? Comment résoudre le problème de relocalisation lorsque le programme est en cours d'exécution ?
Comment la gestion de la mémoire mappe les adresses virtuelles aux adresses physiques :
Le processus de mappage de gestion de la mémoire des adresses virtuelles aux adresses physiques est également le processus de résolution des trois problèmes ci-dessus. La gestion de la mémoire utilise un mécanisme de segmentation et un mécanisme de pagination pour résoudre respectivement les trois problèmes ci-dessus. Le processus approximatif est le suivant :
Mécanisme de segmentation :
Tant que le programme est divisé en segments et que le segment entier est déplacé vers n'importe quelle position, l'adresse dans le segment reste inchangée par rapport à l'adresse de base du segment, quelle que soit l'adresse de base du segment, tant que l'adresse de décalage du segment. est donné, le CPU peut y accéder. Par conséquent, lors du chargement d'un programme utilisateur, copiez simplement le contenu du segment entier vers un nouvel emplacement, puis remplacez l'adresse dans le registre d'adresses de base du segment par cette adresse. Le programme peut s'exécuter avec précision car l'adresse de décalage intra-segment est utilisée. dans le programme, par rapport à la nouvelle adresse de base du segment, le contenu à l'adresse de décalage est toujours le même.
On constate que le mécanisme de segmentation résout les problèmes d'isolement et de relocalisation entre les processus. Cette action est effectuée au niveau matériel, mais certains matériels ne disposent pas de mécanisme de segmentation. En tant que multiplateforme, Linux utilise un mécanisme de pagination plus polyvalent pour résoudre la conversion d'une adresse linéaire en une adresse virtuelle en une adresse physique.
Mécanisme de pagination :
Vous pouvez vous référer à « Comment le processeur accède-t-il à la mémoire ? » 》Comprenez le concept de table de pages à un niveau. Afin d'être compatible avec les versions 32 bits et 64 bits, Linux utilise généralement une table de pages à quatre niveaux, un répertoire global de pages, un répertoire supérieur de pages, un répertoire intermédiaire de pages, une table de pages :
Ceci n'est pas une explication détaillée de la façon dont Linux utilise des tables de pages à quatre niveaux pour convertir des adresses linéaires (adresses virtuelles) en adresses physiques.
Lorsque le processus change, il trouve le champ pgd dans le mm_struct selon la task_struct, obtient le répertoire global de page du nouveau processus, puis le remplit dans le registre CR3 pour terminer le changement de page.
Jetons un coup d'œil pratique au processus de pagination et d'adressage mmu :
Télécharger le code :
On constate que l'adresse physique correspondant à l'adresse virtuelle ffff99b488d48000 est 80000000c8d48000. Ce processus est également le processus de mmu.
Grâce à l'introduction de cet article, nous avons acquis les connaissances de base de la gestion de la mémoire du système Linux, notamment les partitions de mémoire, la mémoire virtuelle, l'espace d'échange, etc. Dans le travail réel, une gestion correcte de la mémoire peut améliorer la stabilité et les performances du système et éviter des pannes inattendues dues à des problèmes de mémoire. J'espère que l'introduction de cet article pourra vous aider à mieux comprendre les principes et les méthodes de gestion de la mémoire du système Linux, vous permettant de résoudre facilement divers problèmes de gestion de la mémoire.
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!