GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Linux-Speicherverwaltung – Virtueller Speicher und Demand Paging

Die Speicherverwaltung ist eine der komplexesten Aktivitäten des Linux-Kernels. Es sind verschiedene Konzepte/Probleme damit verbunden.

Dieser Artikel ist Teil unserer laufenden UNIX-Kernel-Übersichtsreihe.

Im vorherigen Artikel der Kernel-Serie haben wir über die UNIX-Prozessübersicht und Reentrant-Kernel gesprochen.

In diesem Artikel werden wir versuchen, den virtuellen Speicher anzusprechen und Paging zu verlangen, da dies einige der wichtigen Konzepte im Zusammenhang mit der Speicherverwaltung sind.

Virtueller Speicher

Das Konzept des virtuellen Speichers ist einer der sehr mächtigen Aspekte der Speicherverwaltung. Seit der Anfangszeit von Computern ist der Bedarf an Speicher größer als der vorhandene physische Speicher. Im Laufe der Jahre wurden viele Lösungen verwendet, um dieses Problem zu lösen, und die erfolgreichste davon war das Konzept des virtuellen Speichers.

Virtueller Speicher lässt Ihr System so erscheinen, als hätte es mehr Speicher, als es tatsächlich hat. Das mag interessant klingen und einen dazu veranlassen, zu fragen, wie das möglich ist. Lassen Sie uns also das Konzept verstehen.

  • Zunächst müssen wir verstehen, dass virtueller Speicher eine Schicht von Speicheradressen ist, die physischen Adressen zugeordnet sind.
  • Im virtuellen Speichermodell liest ein Prozessor, wenn er eine Programmanweisung ausführt, die Anweisung aus dem virtuellen Speicher und führt sie aus.
  • Aber bevor die Anweisung ausgeführt wird, wandelt sie zuerst die virtuelle Speicheradresse in eine physikalische Adresse um.
  • Diese Konvertierung erfolgt auf der Grundlage der Zuordnung von virtuellen zu physischen Adressen, die auf der Grundlage der Zuordnungsinformationen erfolgt, die in den Seitentabellen (die vom Betriebssystem verwaltet werden) enthalten sind.

Der virtuelle und physische Speicher ist in Abschnitte mit fester Länge unterteilt, die als Seiten bezeichnet werden. In diesem Seitenmodell kann eine virtuelle Adresse in zwei Teile geteilt werden:

  • Ein Offset (niedrigste 12 Bit)
  • Eine virtuelle Seitenrahmennummer (Rest der Bits)

Wann immer der Prozessor auf eine virtuelle Adresse trifft, extrahiert er daraus die Nummer des virtuellen Seitenrahmens. Dann übersetzt er diese virtuelle Seitenrahmennummer in eine physische Seitenrahmennummer und die versetzten Teile helfen ihm, zu der genauen Adresse in der physischen Seite zu gehen. Diese Übersetzung von Adressen erfolgt über die Seitentabellen.

Theoretisch können wir uns vorstellen, dass eine Seitentabelle die folgenden Informationen enthält:

  • Ein Flag, das beschreibt, ob der Eintrag gültig ist oder nicht
  • Die physische Seitenrahmennummer, wie durch diesen Eintrag beschrieben
  • Zugriff auf Informationen bezüglich der Seite (wie schreibgeschützt, schreibgeschützt usw.)

Auf eine Seitentabelle wird über eine virtuelle Seitenrahmennummer zugegriffen, wobei sie als Offset für Einträge in der Seitentabelle verwendet wird. Beispielsweise zeigt eine virtuelle Seitenrahmennummer von „2“ auf den Eintrag „1“ in der Seitentabelle (die Eintragsnummern beginnen mit „0“).

In der Abbildung unten steht VPFN für die Nummer des virtuellen Seitenrahmens und PFN gibt die Nummer des physischen Seitenrahmens an.

Es kann vorkommen, dass ein Prozessor zu einem Verarbeitungsseitentabelleneintrag mit einer virtuellen Seitenrahmennummer geht und den Eintrag als ungültig findet. In diesem Fall liegt es in der Verantwortung des Prozessors, die Kontrolle an den Kernel zu übergeben und ihn zu bitten, das Problem zu beheben. Verschiedene Prozessoren geben die Kontrolle auf unterschiedliche Weise weiter, aber dieses Phänomen wird als „Seitenfehler“ bezeichnet. Aber wenn der Eintrag gültig war, nimmt der Prozessor die Nummer des physikalischen Seitenrahmens, multipliziert mit der Größe der Seite, um die Basisadresse der physikalischen Seite zu erhalten, und addiert dann den Offset, um die genaue physikalische Adresse zu erhalten.

Jetzt verstehen wir also, dass durch das Konzept des virtuellen Speichers jeder Prozess denkt, dass ihm der gesamte Bereich an virtuellen Adressen zur Verfügung steht, und daher lässt dieses Konzept das System so erscheinen, als ob es mehr physischen Speicher hat, als tatsächlich verfügbar ist.

Paging nach Bedarf

Im vorherigen Abschnitt haben wir gelernt, dass, wenn der Prozessor mit einer virtuellen Seitenrahmennummer, für die kein Eintrag in der Tabelle vorhanden war, zur Seitentabelle der Prozesse geht, zwei Fälle auftreten.

  1. Entweder hat der Prozess versucht, auf eine ungültige Speicheradresse zuzugreifen
  2. Die der virtuellen Adresse entsprechende physische Seite wurde nicht in den physischen Speicher geladen

Von den beiden obigen Fällen ist der Fall 1 der Fall, in dem der Prozess versucht, eine Speicheradresse zu finden, die ihm nicht erlaubt ist. In diesem Fall wird ein Seitenfehler generiert und der Kernel beendet den Prozess.

Während im Fall „2“, wie bereits erläutert, die der virtuellen Adresse entsprechende physikalische Seite noch nicht in den physikalischen Speicher geladen ist. Auch in diesem Fall wird ein Seitenfehler generiert und der Kernel versucht dann, die benötigte Speicherseite von der Festplatte in den physikalischen Speicher zu bringen.

Da dieser Vorgang, eine Seite von der Festplatte in den physikalischen Speicher zu bringen, zeitaufwändig ist, findet zu diesem Zeitpunkt ein Kontextwechsel zwischen Prozessen statt und ein anderer Prozess wird zur Ausführung gebracht. In der Zwischenzeit wird die Seite des früheren Prozesses in den physischen Speicher gebracht und die Seitentabellen werden aktualisiert, und dann wird dieser Prozess von derselben Anweisung, die den „Seitenfehler“ verursacht hat, wieder zur Ausführung gebracht.

Dies ist als Bedarfs-Paging bekannt, bei dem nicht alle Speicherseiten, die einem Prozess entsprechen, zu einem bestimmten Zeitpunkt im physischen Speicher vorhanden sind. Dadurch wird verhindert, dass der physische Speicher mit nicht benötigten Speicherseiten verstopft wird, während diese Seiten bei Bedarf durch Seitenfehler (wie oben erläutert) in den physischen Speicher gebracht werden können.


Linux
  1. Linux-Befehle:Durchsuchen des virtuellen Speichers mit vmstat

  2. Quickemu – Führen Sie virtuelle Windows-, macOS- und Linux-Maschinen aus

  3. Speicherüberwachung und -verwaltung

  4. Linux Memory Management – ​​Swapping, Caches und Shared VM

  5. 5 kostenlose und Open-Source-Schulverwaltungssoftware für Linux

Plesk CPU- und Speicherüberwachung

Linux-Speichernutzung

Linux-vmstat-Befehl – ​​Tool zum Berichten von Statistiken zum virtuellen Speicher

Erstellen Sie virtuelle CD- und DVD-Laufwerke mit CDEmu unter Linux

Linux-Paketverwaltung mit YUM und RPM

Inaktiver Linux-Speicher