Speicherverwaltung, die keine interne Fragmentierung erzeugt, ist: segmentierte Speicherverwaltung. Bei der segmentierten Speicherverwaltungsmethode wird der Adressraum des Jobs in mehrere Segmente unterteilt, und jedes Segment definiert einen Satz logischer Informationen. Jedes Segment wird beginnend bei 0 adressiert und verwendet einen kontinuierlichen Adressraum. Der Adressraum des gesamten Jobs ist zweidimensional, da er in mehrere Segmente unterteilt ist.
Speicherverwaltung, die keine interne Fragmentierung erzeugt, ist: segmentierte Speicherverwaltung. Nur die ausgelagerte Speicherverwaltung weist eine interne Fragmentierung auf, während die segmentierte Speicherverwaltung eine externe Fragmentierung aufweist.
Paging-Speicherverwaltung
Paging-Speicherverwaltung besteht darin, den logischen Adressraum eines Prozesses in mehrere gleich große Teile, sogenannte Seiten oder Seiten, zu unterteilen und jede Seite beginnend bei 0 zu nummerieren, z. B. Seite 0 , Seite 1 usw.
Entsprechend ist der Speicherplatz auch in mehrere Speicherblöcke mit der gleichen Größe wie die Seite unterteilt, die als (physikalische) Blöcke oder Seitenrahmen bezeichnet werden, und sie sind auch nummeriert, z. B. 0 # Block, 1 # Block usw. . Wenn einem Prozess Speicher zugewiesen wird, werden mehrere Seiten im Prozess in Blockeinheiten in mehrere physische Blöcke geladen, die möglicherweise nicht zusammenhängend sind. Da die letzte Seite des Prozesses oft nicht in ein Ganzes passt, entsteht eine unbrauchbare Fragmentierung, die als „In-Page-Fragmentierung“ bezeichnet wird.
Segmentierte Speicherverwaltung
Der Zweck der Einführung einer segmentierten Speicherverwaltung besteht hauptsächlich darin, den unterschiedlichen Anforderungen von Benutzern (Programmierern) bei der Programmierung und Verwendung gerecht zu werden, von denen einige andere Arten von Speicherverwaltungsmethoden erfordern und nur schwer zu erfüllen sind. Dadurch ist dieser Speicherverwaltungsansatz heute zur Grundlage aller Speicherverwaltungsansätze geworden.
Bei der segmentierten Speicherverwaltungsmethode wird der Adressraum des Jobs in mehrere Segmente unterteilt, und jedes Segment definiert einen Satz logischer Informationen. Beispielsweise gibt es das Hauptprogrammsegment MAIN, das Unterprogrammsegment X, das Datensegment D, das Stapelsegment S usw. Jedes Segment hat seinen eigenen Namen. Der Einfachheit halber kann anstelle des Segmentnamens normalerweise eine Segmentnummer verwendet werden. Jedes Segment wird beginnend bei 0 adressiert und verwendet einen fortlaufenden Adressraum. Die Länge des Segments wird durch die Länge der entsprechenden logischen Informationsgruppe bestimmt, sodass die Länge jedes Segments unterschiedlich ist. Da der Adressraum des gesamten Jobs in mehrere Segmente unterteilt ist, ist er zweidimensional. Das heißt, seine logische Adresse besteht aus der Segmentnummer (Segmentname) und der Adresse innerhalb des Segments.
Die Adresse in der segmentierten Adresse hat die folgende Struktur:
In dieser Adressstruktur darf ein Job bis zu 64 K-Segmente haben und die maximale Länge jedes Segments beträgt 64 KB. Die Segmentierungsmethode wurde von vielen Compilern unterstützt und der Compiler kann automatisch mehrere Segmente basierend auf dem Quellprogramm generieren. Beispielsweise kann der Pascal-Compiler separate Abschnitte für globale Variablen, den Prozeduraufrufstapel, der zum Speichern der entsprechenden Parameter und Rückgabeadressen verwendet wird, den Codeteil jeder Prozedur oder Funktion, die lokalen Variablen jeder Prozedur oder Funktion usw. erstellen. Ebenso kann der Fortran-Compiler separate Abschnitte für gemeinsame Blöcke erstellen und einen separaten Abschnitt für Arrays zuweisen. Der Loader lädt alle diese Segmente und weist jedem Segment eine Segmentnummer zu.
Die segmentierte Speicherverwaltungsmethode wird hauptsächlich eingeführt, um die folgenden Anforderungen von Benutzern und Programmierern zu erfüllen:
1) Bequeme Programmierung
Normalerweise unterteilen Benutzer ihre Aufgaben in mehrere Segmente entsprechend logischen Beziehungen. Jedes Segment wird angesprochen beginnt bei 0 und hat einen eigenen Namen und eine eigene Länge. Daher wird die logische Adresse, auf die Sie zugreifen möchten, durch den Segmentnamen (Segmentnummer) und den Intra-Segment-Offset (Intra-Segment-Adresse) bestimmt. Beispielsweise verwenden die folgenden beiden Anweisungen den Segmentnamen und die Adresse innerhalb des Segments:
LOAD 1, [A] |〈D〉;
STORE 1, [B] |〈C〉; Die Bedeutung der Anweisung besteht darin, den Wert in Einheit D in Segment A in Register 1 einzulesen. Die Bedeutung der letztgenannten Anweisung besteht darin, den Inhalt von Register 1 in Einheit C in Segment B zu speichern.
2) Informationsaustausch
Der Austausch von Programmen und Daten basiert auf der logischen Informationseinheit. Teilen Sie beispielsweise bestimmte Routinen und Funktionen. Die „Seite“ im Paging-System ist nur eine physische Einheit (Block) zum Speichern von Informationen, die keine vollständige Bedeutung hat und nicht zum Teilen geeignet ist. Ein Segment ist jedoch eine logische Informationseinheit. Daraus ist ersichtlich, dass zur Erreichung der Segmentfreigabe gehofft wird, dass die Speicherverwaltung an die Organisationsmethode der Benutzerprogrammsegmente angepasst werden kann.
3) Informationsschutz
Der Informationsschutz schützt auch die logischen Informationseinheiten. Daher kann die segmentierte Verwaltungsmethode die Informationsschutzfunktion effektiver und bequemer realisieren.
4) Dynamisches Wachstum
In praktischen Anwendungen werden einige Segmente, insbesondere Datensegmente, während der Nutzung weiter wachsen, und es ist unmöglich, im Voraus genau zu wissen, wie groß die Datensegmente werden. Die anderen oben genannten Speicherverwaltungsmethoden sind dieser dynamischen Wachstumssituation nur schwer gewachsen, die segmentierte Speicherverwaltungsmethode kann dieses Problem jedoch besser lösen.
5) Dynamischer Link
Dynamische Verknüpfung bedeutet, dass mehrere Zielprogrammsegmente vor der Ausführung des Jobs nicht miteinander verknüpft werden. Laden Sie zum Ausführen zunächst das dem Hauptprogramm entsprechende Zielprogramm in den Speicher und starten Sie die Ausführung. Wenn während des laufenden Prozesses ein bestimmtes Segment aufgerufen werden muss, wird das Segment (Zielprogramm) in den Speicher geladen und verknüpft. Es ist ersichtlich, dass dynamische Links auch Segmente als Verwaltungseinheit erfordern.
Weitere Informationen zu diesem Thema finden Sie auf:Chinesische PHP-Website!
Das obige ist der detaillierte Inhalt vonWas ist Speicherverwaltung, die keine interne Fragmentierung erzeugt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!