Heim > Artikel > Betrieb und Instandhaltung > Was verwendet Linux, um virtuellen Speicher zu implementieren?
Die Implementierung des virtuellen Speichers muss auf der diskreten Speicherverwaltungsmethode basieren. Es gibt drei Implementierungsmethoden: 1. Anforderungs-Paging-Speicherverwaltungsmethode; 3. Segmentierte Speicherverwaltungsmethode. Unabhängig davon, welche Methode verwendet wird, ist eine bestimmte Hardwareunterstützung erforderlich: 1. Eine bestimmte Speicherkapazität und ein externer Speicher. 2. Ein Seitentabellenmechanismus (oder Segmenttabellenmechanismus) als Hauptdatenstruktur Bedarf Wenn der Zugriffsteil noch nicht in den Speicher übertragen wurde, kommt es zu einem Interrupt. 4. Adresskonvertierungsmechanismus, Konvertierung von logischer Adresse in physikalische Adresse.
Die Betriebsumgebung dieses Tutorials: Linux7.3-System, Dell G3-Computer.
Traditionelle Speicherverwaltung speichert mehrere Prozesse gleichzeitig im Speicher, um eine Mehrfachprogrammierung zu ermöglichen. Sie alle haben folgende zwei Eigenschaften gemeinsam:
Daher belegen viele Programme (Daten), die während des Programmbetriebs nicht oder vorübergehend nicht verwendet werden, viel Speicherplatz, und einige auszuführende Jobs können nicht geladen und ausgeführt werden, was offensichtlich wertvolle Speicherressourcen verschwendet . 1.1 Definition und Eigenschaften des virtuellen Speichers . Programmausführung starten. Wenn sich während der Ausführung des Programms die abgerufenen Informationen nicht im Speicher befinden, überträgt das Betriebssystem
- Einmalig: Der Job muss sofort in den Speicher geladen werden , bevor er ausgeführt werden kann. Dies führt zu zwei Situationen: 1) Wenn der Job groß ist und nicht in den Speicher geladen werden kann, kann der Job nicht ausgeführt werden.
2) Wenn eine große Anzahl von Jobs ausgeführt werden muss, weil der Speicher nicht verfügbar ist Es reicht aus, nur alle Jobs aufzunehmen. Dies kann dazu führen, dass einige Jobs zuerst ausgeführt werden, was zu einer Verringerung der Mehrfachprogrammierung führt.
- Residency: Nachdem der Job in den Speicher geladen wurde, bleibt er immer im Speicher verbleiben und kein Teil davon wird ausgelagert, bis der Job abgeschlossen ist. Ein laufender Prozess wird beim Warten auf E/A blockiert und befindet sich möglicherweise über einen längeren Zeitraum in einem Wartezustand.
den erforderlichen Teil in den Speicher
und führt dann das Programm weiter aus. Andererseits lagert das Betriebssystem den vorübergehend ungenutzten Inhalt im Speicher auf einen externen Speicher aus und schafft so Platz für die Speicherung der Informationen, die in den Speicher übertragen werden.
Da das System auf diese Weise Teillade-, Ladeanforderungs- und Ersetzungsfunktionen bereitstellt (völlig transparent für den Benutzer), hat der Benutzer das Gefühl, dass es einen Speicher gibt, der viel größer ist als der tatsächliche physische Speicher, der aufgerufen wird Virtueller Speicher.
Die Größe des virtuellen Speichers wird durch die Adressstruktur des Computers bestimmt und ist keine einfache Summe aus Arbeitsspeicher und externem Speicher. Der virtuelle Speicher weist die folgenden drei Hauptmerkmale auf:
Mehrmals: Es ist nicht erforderlich, den Speicher während der Ausführung des Jobs auf einmal zu laden, es ist jedoch zulässig, ihn in mehrere Male aufzuteilen und zu laden in den Speicher zum Ausführen. Austauschbarkeit: Es ist nicht erforderlich, den Speicher während der Ausführung des Jobs resident zu halten, sondern ermöglicht das Ein- und Auslagern während der Ausführung des Jobs.
Virtualität: Erweitern Sie die Speicherkapazität logisch, sodass die vom Benutzer gesehene Speicherkapazität viel größer ist als die tatsächliche Speicherkapazität.
1.2 Implementierung der virtuellen Speichertechnologie
Paging anfordern Speicherverwaltung
Segmentierung anfordern Speicherverwaltung
Segment-Paging
SpeicherverwaltungEgal welche Methode, es sind bestimmte Anforderungen erforderlich Unterstützung . Der im Allgemeinen erforderliche Support umfasst folgende Aspekte:
bezieht sich auf die Zuweisung eines kontinuierlichen Speicherplatzes für ein Benutzerprogramm.
Diskrete Zuordnungsmethode: Laden Sie einen Prozess verteilt in viele nicht benachbarte Partitionen, sodass der Speicher vollständig genutzt werden kann.
Anforderungs-PagingDas Konzept der Seitenspeicherung:
2. Anforderungs-Paging-Verwaltung zur Implementierung des virtuellen Speichers
- Seiten, Seitenrahmen und Blöcke. Der Block im Prozess heißt Seite oder Seite (Seite), mit Seitennummer; der Block im Speicher heißt Seitenrahmen (Seitenrahmen, Seitenrahmen = Speicherblock = physischer Block = physisch). Seite ), mit Seitenrahmennummer. Externer Speicher ist ebenfalls in derselben Einheit unterteilt, die direkt Block genannt wird. Wenn ein Prozess ausgeführt wird, muss er Hauptspeicherplatz beantragen, was bedeutet, dass jeder Seite ein verfügbarer Seitenrahmen im Hauptspeicher zugewiesen werden muss, wodurch eine Eins-zu-Eins-Entsprechung zwischen Seiten und Seitenrahmen entsteht. Jede Seite muss nicht nacheinander gespeichert werden und kann in nicht benachbarten Seitenrahmen platziert werden.
- Adressstruktur: Der erste Teil ist Seitennummer P und der zweite Teil ist In-Page-Offset W. Die Adresslänge beträgt 32 Bit, wobei die Bits 0 bis 11 die Intra-Page-Adresse sind, d Seiten.
- Seitentabelle. Um das Auffinden des physischen Blocks zu erleichtern, der jeder Seite des Prozesses im Speicher entspricht, erstellt das System eine Seitentabelle für jeden Prozess, um die der Seite im Speicher entsprechende physische Blocknummer aufzuzeichnen Erinnerung. . Nachdem die Seitentabelle konfiguriert wurde und der Prozess ausgeführt wird, kann die physische Blocknummer jeder Seite im Speicher durch Nachschlagen in der Tabelle ermittelt werden. Es ist ersichtlich, dass die Rolle der Seitentabelle darin besteht, die Adresszuordnung von Seitennummern zu physischen Blocknummern zu implementieren.
. Um die Funktion des virtuellen Speichers zu unterstützen, wurden die Funktionen Paging anfordern und
Seitenersetzunghinzugefügt. Im Request-Paging-System muss nur ein Teil der aktuell benötigten Seiten in den Speicher geladen werden, bevor der Job gestartet werden kann. Wenn sich die Seite, auf die zugegriffen werden soll, während der Ausführung des Auftrags nicht im Speicher befindet, kann sie über die Paging-Funktion eingeholt werden. Gleichzeitig können die vorübergehend nicht verwendeten Seiten über die Ersetzungsfunktion auf einen externen Speicher ausgelagert werden um Speicherplatz freizugeben. Um Request Paging zu implementieren, muss das System bestimmte Hardwareunterstützung bereitstellen. Zusätzlich zu einem Computersystem, das
eine bestimmte Menge an Arbeitsspeicher und externem Speicher
benötigt, benötigt es auch einen
Seitentabellenmechanismus, einen Seitenfehler-Unterbrechungsmechanismus und einen Adresskonvertierungsmechanismus. 2.1 Seitentabellenmechanismus
Der Seitentabellenmechanismus des Anforderungs-Paging-Systems unterscheidet sich vom Basis-Paging-System. Beim Anforderungs-Paging-System müssen nicht alle Daten auf einmal in den Speicher geladen werden, bevor ein Auftrag ausgeführt wird wird ausgeführt. Daher kommt es während des laufenden Auftragsvorgangs zwangsläufig zu einer Situation, in der sich die Seite, auf die zugegriffen werden soll, nicht im Speicher befindet. Das Erkennen und Behandeln dieser Situation ist zwei grundlegende Probleme, die das Anforderungs-Paging-System lösen muss. Zu diesem Zweck werden vier Felder zum Eintrag in der Anforderungsseitentabelle hinzugefügt:
Seitentabelleneintrag im Anforderungs-Paging-SystemStatusbit P | Zugriff auf Feld A | Bit M ändern | Externe Speicheradresse |
Als Interrupt müssen seitenfehlende Interrupts auch mehrere Schritte durchlaufen, z. B. den Schutz der CPU-Umgebung, die Analyse der Ursache des Interrupts, die Übertragung an den Interrupt-Handler für fehlende Seiten und die Wiederherstellung der CPU-Umgebung. Im Vergleich zu allgemeinen Interrupts gibt es jedoch die folgenden zwei offensichtlichen Unterschiede: Interruptsignale werden während der Ausführung von Anweisungen generiert und verarbeitet und nicht erst nach der Ausführung einer Anweisung, bei der es sich um einen internen Interrupt handelt. Während der Ausführung einer Anweisung können mehrere Seitenfehler-Interrupts auftreten. 2.3 Adresstransformationsmechanismus Der Adresstransformationsmechanismus im Anforderungs-Paging-System basiert auf dem Adresstransformationsmechanismus des Paging-Systems und fügt bestimmte Funktionen hinzu, um den virtuellen Speicher zu realisieren.
Durchsuchen Sie bei der Adresskonvertierung zuerst die Schnelltabelle: Seitentabelle weist auf die Entsprechung zwischen der Seitennummer in der logischen Adresse und der physischen Blocknummer des belegten Hauptspeichers hin. Die Seitenspeicherverwaltung verwendet Seitentabellen, um die Adressübersetzung durchzuführen, wenn Vorgänge mithilfe der dynamischen Verschiebung geladen werden. Mit der schnellen Tabelle muss manchmal nur einmal auf den Cache-Speicher und den Hauptspeicher zugegriffen werden, was die Suche beschleunigen und die Befehlsausführungsgeschwindigkeit erhöhen kann. , wird eine Seite von Das Programm muss aus dem Speicher aufgerufen werden Oder Daten werden an den Auslagerungsbereich der Festplatte gesendet. Bester (Optimaler, OPT) Ersetzungsalgorithmus Die ausgewählte entfernte Seite wird in Zukunft nie mehr verwendet oder wird in der längsten besuchten Zeit nicht mehr verwendet Seiten, um die niedrigste Seitenfehlerrate zu gewährleisten. Aber weil die Menschen derzeit nicht vorhersagen können, auf welche der Tausenden von Seiten im Speicher des Prozesses in der Zukunft am längsten nicht mehr zugegriffen werden wird, kann , der beste Ersatzalgorithmus jedoch schon zur Bewertung anderer Algorithmen verwendet werden. Angenommen, das System weist einem Prozess drei physische Blöcke zu und berücksichtigt die folgende Seitenzahl-Referenzzeichenfolge: 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1 Es ist ersichtlich, dass die Anzahl der Seitenfehlerunterbrechungen 9 und die Anzahl der Seitenersetzungen 6 beträgt. 3.2 Der FIFO-Seitenersetzungsalgorithmus (First-In-First-Out) gibt der Eliminierung der Seite Priorität, die am frühesten in den Speicher gelangt, d. h. der Seite, die sich am längsten im Speicher befindet. Dieser Algorithmus ist einfach zu implementieren. Sie müssen lediglich die in den Speicher übertragenen Seiten entsprechend der Reihenfolge in eine Warteschlange verknüpfen und einen Zeiger festlegen, der immer auf die früheste Seite zeigt. Dieser Algorithmus eignet sich jedoch nicht für die tatsächlichen Ablaufregeln des Prozesses, da während des Prozesses häufig auf einige Seiten zugegriffen wird. Bei Verwendung des FIFO-Algorithmus werden 12 Seitenersetzungen durchgeführt, was genau doppelt so viele ist wie beim optimalen Ersetzungsalgorithmus. Der FIFO-Algorithmus erzeugt auch ein abnormales Phänomen, bei dem die Anzahl der Seitenfehler zunimmt, anstatt zu sinken. Dies wird 1969 von Belady entdeckt und wird daher als „Belady-Anomalie“ bezeichnet in der Tabelle unten dargestellt. Nur beim FIFO-Algorithmus können Belady-Anomalien auftreten, während bei den LRU- und OPT-Algorithmen niemals Belady-Anomalien auftreten. 3.3 LRU-Ersetzungsalgorithmus (Least Recent Used) Es wird davon ausgegangen, dass Seiten, die in der vergangenen Zeit nicht besucht wurden, in naher Zukunft möglicherweise nicht mehr besucht werden. Dieser Algorithmus legt für jede Seite ein fest, um die Zeit aufzuzeichnen, die seit dem letzten Zugriff auf die Seite vergangen ist. Wählen Sie beim Entfernen von Seiten diejenige mit dem größten Wert unter den vorhandenen Seiten aus, die entfernt werden sollen. LRU bietet eine bessere Leistung, erfordert jedoch Hardwareunterstützung für Register und Stapel und ist teurer. LRU ist ein Algorithmus der Stack-Klasse. Theoretisch kann bewiesen werden, dass in Stapelalgorithmen keine Belady-Ausnahme auftreten kann. Der FIFO-Algorithmus basiert auf einer Warteschlange und nicht auf einem Stapelalgorithmus. 3.4 Clock (CLOCK)-Ersetzungsalgorithmus Die Leistung des LRU-Algorithmus ähnelt der von OPT, ist jedoch schwierig zu implementieren und teuer. Der FIFO-Algorithmus ist einfach zu implementieren, weist jedoch eine schlechte Leistung auf. Daher haben Betriebssystementwickler viele Algorithmen ausprobiert und versucht, die Leistung von LRU mit relativ geringem Overhead zu erreichen. Bei diesen Algorithmen handelt es sich allesamt um Varianten des CLOCK-Algorithmus. Der einfache CLOCK-Algorithmus ordnet jedem Frame ein zusätzliches Bit zu, das als Nutzungsbit bezeichnet wird. Wenn eine Seite zum ersten Mal in den Hauptspeicher geladen und anschließend darauf zugegriffen wird, wird das Nutzungsbit auf 1 gesetzt. Für den Seitenersetzungsalgorithmus wird der Satz von Kandidatenrahmen für die Ersetzung als Kreispuffer betrachtet und mit einem Zeiger verknüpft. Wenn eine Seite ersetzt wird, wird der Zeiger so eingestellt, dass er auf den nächsten Frame im Puffer zeigt. Wenn es Zeit ist, eine Seite zu ersetzen, durchsucht das Betriebssystem den Puffer, um den ersten Frame mit einem Nutzungsbit von 0 zu finden. Immer wenn ein Frame mit einem Nutzungsbit von 1 auftritt, setzt das Betriebssystem das Bit auf 0 zurück. Wenn alle Frames ein Nutzungsbit von 1 haben, schließt der Zeiger einen Zyklus im Puffer ab, wodurch alle Nutzungsbits auf 0 gesetzt werden an der ursprünglichen Position und ersetzt die Seite im Rahmen. Da dieser Algorithmus den Status jeder Seite zyklisch überprüft, wird er CLOCK-Algorithmus genannt, auch bekannt als „Not Latest Used (NRU)“-Algorithmus. Die Leistung des CLOCK-Algorithmus kommt der von LRU relativ nahe, und durch Erhöhen der Anzahl der verwendeten Bits kann der CLOCK-Algorithmus effizienter gemacht werden. Durch Hinzufügen eines zum verwendeten Bit erhalten wir einen verbesserten CLOCK-Ersetzungsalgorithmus. Jeder Frame befindet sich in einer der folgenden vier Situationen: geänderte Seiten vor dem Ersetzen zurückgeschrieben werden müssen. 4. Seitenzuordnungsstrategie Daher muss das Betriebssystem entscheiden, wie viele Seiten gelesen werden sollen. Das heißt, wie viel Hauptspeicherplatz einem bestimmten Prozess zugewiesen werden soll, dabei müssen die folgenden Punkte berücksichtigt werden: Wenn ein Prozess zu wenige Seiten im Hauptspeicher hat, ist die Seitenfehlerrate Wenn Lokaler Ersatz mit fester Zuweisung
Variable Zuweisung lokaler Ersatz: Es wird jedem Prozess eine bestimmte Anzahl physischer Blöcke zugewiesen. Wenn in einem Prozess ein Seitenfehler auftritt, darf nur eine Seite aus den Speicherseiten des Prozesses ausgelagert werden Der Betrieb anderer Prozesse wird dadurch nicht beeinträchtigt. Wenn der Prozess häufig Seiten verpasst , während der Prozess ausgeführt wird, weist das System dem Prozess eine Reihe physischer Blöcke zu, bis die Seitenfehlschlagsrate des Prozesses auf ein angemessenes Niveau tendiert, umgekehrt, wenn der Prozess eine hat Besonders niedrige Page-Miss-Rate während der Ausführung. Dann können Sie die Anzahl der dem Prozess zugewiesenen physischen Blöcke entsprechend reduzieren. Um den Zeitpunkt des Systemladens von Seiten zu bestimmen, die bei laufendem Prozess fehlen, können die folgenden zwei Paging-Strategien angewendet werden: : Nach dem Lokalitätsprinzip kann das gleichzeitige Laden mehrerer benachbarter Seiten effizienter sein als das Laden einer Seite nach dem anderen. Wenn jedoch auf die meisten geladenen Seiten nicht zugegriffen wurde, ist dies ineffizient. Daher ist es notwendig, eine vorhersagebasierte Pre-Paging-Strategie zu verwenden, um Seiten, auf die voraussichtlich in naher Zukunft zugegriffen wird, vorab in den Speicher zu laden. Allerdings liegt die aktuelle Erfolgsquote vorab angepasster Seiten nur bei etwa 50 %. Daher wird diese Strategie hauptsächlich verwendet, wenn der Prozess zum ersten Mal geladen wird und der Programmierer angibt, welche Seiten zuerst geladen werden sollen. Paging anfordern gestellt und das System überträgt die erforderliche Seite in den Speicher. Auf die mit dieser Strategie übertragenen Seiten wird definitiv zugegriffen, und diese Strategie ist relativ einfach zu implementieren, sodass diese Strategie hauptsächlich in aktuellen virtuellen Speichern verwendet wird. Der Nachteil besteht darin, dass jeweils nur eine Seite geladen wird. Wenn viele Seiten geladen und geladen werden, wird zu viel E/A-Overhead verbraucht. 4.3 Von wo soll die Seite geladen werden? Swap-Bereich. Der Swap-Bereich verwendet normalerweise die kontinuierliche Zuordnungsmethode, während der Dateibereich die diskrete Zuordnungsmethode verwendet, sodass die Festplatten-E/A-Geschwindigkeit des Swap-Bereichs schneller ist als die des Dateibereichs. Es gibt drei Situationen, in denen Seiten übertragen werden können: Das System verfügt über genügend Swap-Bereichsplatz: Sie können alle erforderlichen Seiten aus dem Swap-Bereich übertragen, um die Seitenübertragungsgeschwindigkeit zu erhöhen. Aus diesem Grund müssen vor der Ausführung des Prozesses die mit dem Prozess verbundenen Dateien aus dem Dateibereich Dem System fehlt genügend Platz im Auslagerungsbereich: Alle Dateien, die nicht geändert werden, werden direkt aus dem Dateibereich übertragen (kein Zurückschreiben beim Auslagern erforderlich). Teile, die geändert werden können, müssen jedoch beim Austausch in den Austauschbereich übertragen und bei späterem Bedarf wieder aus dem Austauschbereich zurückübertragen werden. UNIX-Methode: Mit dem Prozess verbundene Dateien werden im Dateibereich abgelegt, daher sollten Seiten, die nicht ausgeführt wurden, aus dem Dateibereich geladen werden Seitenfehlerunterbrechungen (Jitter) treten häufig auf, weil die Anzahl der Seiten, auf die ein Prozess häufig zugreift, höher ist als die Anzahl der verfügbaren physischen Seitenrahmen. Durch die virtuelle Speichertechnologie können mehr Prozesse im Speicher gehalten werden, um die Systemeffizienz zu verbessern. Im eingeschwungenen Zustand ist fast der gesamte Hauptspeicher durch Prozessblöcke belegt und Prozessor und Betriebssystem haben direkten Zugriff auf möglichst viele Prozesse. Bei unsachgemäßer Verwaltung verbringt der Prozessor jedoch die meiste Zeit damit, Blöcke auszutauschen, also den Vorgang zum Laden von Seiten anzufordern, anstatt die Anweisungen des Prozesses auszuführen, was die Systemeffizienz erheblich verringert. 5.2 Arbeitsset (Resident-Set) Der Arbeitssatz (oder residente Satz) bezieht sich auf den Satz von Seiten , auf die ein Prozess innerhalb eines bestimmten Intervalls zugreifen muss. Seiten, die häufig verwendet werden, müssen im Arbeitssatz enthalten sein, während Seiten, die längere Zeit nicht verwendet wurden, aus dem Arbeitssatz verworfen werden. Um eine Überlastung des Systems zu verhindern, müssen Sie eine geeignete Arbeitssatzgröße auswählen. Paging und die Verwaltungsmethode Segmentierung sind an vielen Stellen ähnlich, z. B. ist der Speicher diskontinuierlich und es gibt Adressübersetzungsmechanismen für die Adresszuordnung usw. Es gibt jedoch viele Unterschiede zwischen den beiden. Tabelle 3-20 listet den Vergleich zwischen der Paging-Management-Methode und der Segmentierungs-Management-Methode in verschiedenen Aspekten auf. |
Das obige ist der detaillierte Inhalt vonWas verwendet Linux, um virtuellen Speicher zu implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!