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
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.
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:
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:
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):
Speicherfragmentierung bezeichnet. 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. Die Idee ist eigentlich ganz einfach: . Frühe Betriebssysteme, die dynamische Partitionierungsmethoden verwendeten, um das Problem der Fragmentierung zu lösen, , 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. und äußere Fragmentierung : der Teil des Speichers, der dem Programm zugewiesen ist, aber nicht verwendet : 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: und slab. Das Partnersystem und die Platte sind auch Kerninhalte im Speichermanagement. Wenn Sie interessiert sind, können Sie es studieren.
Es gibt zwei Arten der Speicherfragmentierung:
innere Fragmentierung
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!