Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Das System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?

Das System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?

嵌入式Linux充电站
嵌入式Linux充电站nach vorne
2023-08-01 15:37:081404Durchsuche

Die heutige Frage: Das System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?

Warum ist das so?

Diese Frage betrifft einen Aspekt der Speicherverwaltung – Speicherfragmentierung

Was ist Speicherfragmentierung?

Speicherfragmentierung trat schon sehr früh in Linux auf. Wenn wir die Geschichte der frühen Speicherfragmentierung verstehen, können wir sie besser verstehen.

Angenommen, es gibt einen Speicherbereich von 32 MB. Das Betriebssystem verwendet zunächst den kleinsten Speicherbereich – 4 MB, und der verbleibende Speicher ist für 4 Prozesse reserviert, wie in Abbildung (a) dargestellt.

Das System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?

Prozess A verwendet 10 MB Speicher über dem Betriebssystem, Prozess B verwendet 6 MB Speicher über Prozess A und Prozess C verwendet 8 MB Speicher über Prozess B, wie in Abbildung (b) dargestellt:

Das System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?

Prozess D benötigt 5 MB Speicher, daher reicht der verbleibende Speicher nicht aus, um Prozess D zu laden. Dieses letzte Bit Speicher bildet die erste Lücke (Speicherfragmentierung). Angenommen, das Betriebssystem muss zu einem bestimmten Zeitpunkt Prozess D ausführen, da nicht genügend Speicher im System vorhanden ist. Daher muss es einen Prozess zum Auslagern auswählen, um genügend Platz für Prozess D zu schaffen. Nehmen Sie an, dass das Betriebssystem Prozess B zum Auslagern auswählt, sodass Prozess D in den Adressraum des ursprünglichen Prozesses B geladen wird und so ein zweites Loch entsteht, wie in Abbildung (c) dargestellt:

Das System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?

Angenommen dass das Betriebssystem Zu einem bestimmten Zeitpunkt muss Prozess B ausgeführt werden und ein Prozess muss zum Auslagern ausgewählt werden. Unter der Annahme, dass Prozess A ausgelagert wird, erscheint ein „drittes Loch“ im Betriebssystem, wie gezeigt in Abbildung (d):

Das System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?Mit der Zeit wird es immer mehr Speicherlücken geben, und auch die Speichernutzung wird abnehmen. Diese Speicherlücken werden oft als
Speicherfragmentierung

bezeichnet.

Das System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?

Wenn Sie das sehen, wissen Sie bereits, was Speicherfragmentierung ist, und Sie verstehen auch einen Speicherverwaltungsmechanismus – eine dynamische Partitionierungsmethode. Das obige Beispiel ist eigentlich die „Dynamische Partitionierungsmethode“ In den frühen Tagen des Betriebssystems wurde die dynamische Partitionierungsmethode zur Speicherverwaltung verwendet.

Wie kann das Problem der Speicherfragmentierung gelöst werden?

Die Idee ist eigentlich ganz einfach:

Mehrere kleine Speicherblöcke zu einem großen Speicherblock zusammenfassen

. Frühe Betriebssysteme, die dynamische Partitionierungsmethoden verwendeten, um das Problem der Fragmentierung zu lösen,

haben den Prozess dynamisch verschoben, sodass der vom Prozess belegte Speicherplatz kontinuierlich ist und der gesamte freie Speicherplatz ebenfalls kontinuierlich ist

, so dass mehrere klein sind Speicherblöcke Füge es zusammen. Aber auch die Nachteile liegen auf der Hand: Die Prozessmigration nimmt viel Zeit in Anspruch.

Innere Fragmentierung und äußere Fragmentierung Es gibt zwei Arten der Speicherfragmentierung:

innere Fragmentierung

und äußere Fragmentierung

innere Fragmentierung

: der Teil des Speichers, der dem Programm zugewiesen ist, aber nicht verwendet

Externe Fragmentierung

: Kleine Speicherblöcke, die vom System nicht genutzt werden können (z. B. die durch die oben genannte dynamische Partitionierungsmethode erzeugte Fragmentierung)Heutzutage verwenden Betriebssysteme Paging- oder Segmentierungsmechanismen, um den Speicher zu verwalten, aber einige Es werden immer noch zwangsläufig Speicherfragmente erzeugt.

Um das Problem der internen und externen Fragmentierung zu lösen, hat Linux zwei Dinge eingeführt:

Buddy System

und slab.

Das Partnersystem wird zur Lösung des externen Fragmentierungsproblems und die Platte zur Lösung des internen Fragmentierungsproblems verwendet.

Das Partnersystem und die Platte sind auch Kerninhalte im Speichermanagement. Wenn Sie interessiert sind, können Sie es studieren.

Zusammenfassung Wenn das System also über viel Speicher verfügt, aber keinen großen Speicherabschnitt zuweisen kann, liegt das daran, dass viele Speicherfragmente generiert werden, was zu vielen diskontinuierlichen kleinen Speicherabschnitten führt Das System scheint über viel freien Speicher zu verfügen, aber in Wirklichkeit handelt es sich nur um verstreuten Speicher.

Das obige ist der detaillierte Inhalt vonDas System verfügt offensichtlich über viel Speicher, kann aber keinen großen Speicher zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:嵌入式Linux充电站. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen