Maison  >  Article  >  Opération et maintenance  >  Le système a évidemment beaucoup de mémoire, mais il ne peut pas allouer une grande quantité de mémoire ?

Le système a évidemment beaucoup de mémoire, mais il ne peut pas allouer une grande quantité de mémoire ?

嵌入式Linux充电站
嵌入式Linux充电站avant
2023-08-01 15:37:081209parcourir

Question du jour : le système a évidemment beaucoup de mémoire, mais il ne peut pas allouer une grande partie de la mémoire ?

Pourquoi est-ce ?

Cette question implique un aspect de la gestion de la mémoire : la fragmentation de la mémoire

Qu'est-ce que la fragmentation de la mémoire ?

La fragmentation de la mémoire est apparue très tôt sous Linux Comprendre l'histoire de la fragmentation de la mémoire nous aidera à la comprendre.

Supposons qu'il y ait un morceau de mémoire de 32 Mo. Au début, le système d'exploitation utilise le plus petit morceau de mémoire - 4 Mo, et la mémoire restante est réservée à 4 processus, comme le montre la figure (a).

Le système a évidemment beaucoup de mémoire, mais il ne peut pas allouer une grande quantité de mémoire ?

Le processus A utilise 10 Mo de mémoire au-dessus du système d'exploitation, le processus B utilise 6 Mo de mémoire au-dessus du processus A et le processus C utilise 8 Mo de mémoire au-dessus du processus B, comme le montre la figure (b) :

Le système a évidemment beaucoup de mémoire, mais il ne peut pas allouer une grande quantité de mémoire ?

Le processus D nécessite 5 Mo de mémoire, donc la mémoire restante n'est pas suffisante pour charger le processus D. Ce dernier morceau de mémoire forme le premier trou (fragmentation de la mémoire). Supposons qu'à un certain moment, le système d'exploitation doive exécuter le processus D car il n'y a pas assez de mémoire dans le système, il doit donc sélectionner un processus à échanger afin de libérer suffisamment d'espace pour le processus D. Supposons que le système d'exploitation sélectionne le processus B à échanger, de sorte que le processus D soit chargé dans l'espace d'adressage du processus B d'origine, créant ainsi un deuxième trou, comme le montre la figure (c) :

Le système a évidemment beaucoup de mémoire, mais il ne peut pas allouer une grande quantité de mémoire ?

Supposons que le système d'exploitation À un certain moment, le processus B doit être exécuté et un processus doit être sélectionné pour être remplacé. En supposant que le processus A soit remplacé, un troisième trou apparaîtra dans le système d'exploitation, comme indiqué. dans la figure (d) :

Le système a évidemment beaucoup de mémoire, mais il ne peut pas allouer une grande quantité de mémoire ?

Au fil du temps, il y aura de plus en plus de trous de mémoire, et l'utilisation de la mémoire diminuera également. Ces trous de mémoire sont ce que nous appelons souvent la fragmentation de la mémoire.

Le système a évidemment beaucoup de mémoire, mais il ne peut pas allouer une grande quantité de mémoire ?

En voyant cela, vous savez déjà ce qu'est la fragmentation de la mémoire et vous comprenez également une méthode de partitionnement dynamique de mécanisme de gestion de la mémoire. L'exemple ci-dessus est en fait la Méthode de partitionnement dynamique Dans les premiers jours du système d'exploitation, la méthode de partitionnement dynamique était utilisée pour gérer la mémoire.

Comment résoudre le problème de fragmentation de la mémoire ?

L'idée est en fait très simple : Combinez plusieurs petits blocs de mémoire en un seul grand bloc de mémoire.

Les premiers systèmes d'exploitation qui utilisaient la méthode de partitionnement dynamique, afin de résoudre le problème de fragmentation, déplaçaient dynamiquement le processus de sorte que l'espace occupé par le processus soit continu et que tout l'espace libre soit également continu, de sorte que plusieurs petites mémoires blocs Assemblez-le. Mais les inconvénients sont également très évidents La migration du processus prend beaucoup de temps.

Fragmentation interne et fragmentation externe

Il existe deux types de fragmentation de la mémoire :

fragmentation interne et fragmentation externe

fragmentation interne : la partie de la mémoire allouée au programme mais non used

Fragmentation externe : petits blocs de mémoire qui ne peuvent pas être utilisés par le système (comme la fragmentation générée par la méthode de partitionnement dynamique mentionnée ci-dessus)

De nos jours, les systèmes d'exploitation utilisent des mécanismes de pagination ou de segmentation pour gérer la mémoire, mais certains une fragmentation de la mémoire se produira inévitablement.

Afin de résoudre le problème de la fragmentation interne et de la fragmentation externe, Linux a introduit deux choses :

Buddy System et slab.

Le système partenaire est utilisé pour résoudre le problème de fragmentation externe, et la dalle est utilisée pour résoudre le problème de fragmentation interne.

Le système partenaire et la dalle sont également des contenus essentiels dans la gestion de la mémoire. Si vous êtes intéressé, vous pouvez l'étudier.

Résumé

Ainsi, lorsque le système a beaucoup de mémoire mais ne peut pas allouer une grande partie de mémoire, c'est parce que de nombreux fragments de mémoire sont générés, ce qui entraîne de nombreux petits morceaux de mémoire discontinus dans Il semble que le système dispose de beaucoup de mémoire libre, mais en fait il ne s'agit que de mémoire dispersée.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer