Grundlagen der Speicherverwaltung und virtueller Speicher

Eingeordnet in Informatik

Geschrieben am in Deutsch mit einer Größe von 7,01 KB

Hardware-Strukturen und Kontrolle

  • Alle Verweise auf Speicher in einem Prozess werden während der Ausführung von logischen Adressen in physikalische Adressen übersetzt.
  • Ein Prozess kann in mehrere Teile (Seiten oder Segmente) aufgeteilt werden, die während der Durchführung nicht zusammenhängend sein müssen.
    • Dies wird durch die Kombination von dynamischer Adressübersetzung und der Verwendung von Seitentabellen oder Segmenten ermöglicht.

Ausführen eines Programms

  • Das Betriebssystem lädt nur wenige Fragmente des Programms in den Hauptspeicher, einschließlich des Fragments mit dem Programmstart.
  • Der Resident Set ist der Teil des Prozesses, der sich tatsächlich im Hauptspeicher befindet.
  • Wenn der Prozessor auf eine Adresse stößt, die nicht im Hauptspeicher liegt, wird ein Interrupt erzeugt.
  • Das Betriebssystem versetzt den Prozess in einen blockierten Zustand.
  • Das fehlende Fragment wird in den Hauptspeicher geladen, wofür das Betriebssystem folgende Schritte einleitet:
    • Eine E/A-Leseanforderung an die Festplatte.
    • Ausführung eines anderen Prozesses, während die E/A-Operation läuft.
    • Nach Abschluss der E/A-Operation wird ein Interrupt ausgelöst und das Betriebssystem ändert den Status des Prozesses auf „Bereit“.

Vorteile des Ansatzes

  • Mehr Prozesse können gleichzeitig im Hauptspeicher gehalten werden, da nur Fragmente geladen werden.
  • Dies führt zu einer effizienteren Nutzung des Prozessors.
  • Mindestens ein Prozess, der sich im Hauptspeicher befindet, wird den Status „Bereit“ haben.
  • Es ist möglich, dass ein Prozess größer als der gesamte Hauptspeicher ist. Dank virtuellem Speicher (Paging oder Segmentierung) muss sich der Programmierer keine Sorgen um die Programmgröße machen.

Arten von Speicher

  • Real-Speicher: Hauptspeicher (Main Memory).
  • Virtueller Speicher: Ermöglicht effektives Multiprogramming und entfernt die Beschränkungen des physischen Hauptspeichers.

Thrashing

  • Wenn ein Fragment unmittelbar vor Gebrauch verdrängt wird, muss es sofort zurückgeholt werden.
  • Ständiges Auslagern führt zu Thrashing.
  • Der Prozessor verbraucht mehr Zeit mit dem Austausch von Fragmenten als mit der eigentlichen Ausführung.

Grundsatz der Lokalität

  • Verweise auf Daten und Programmcode innerhalb eines Prozesses neigen dazu, zu clustern.
  • Für kurze Zeit werden nur wenige Fragmente des Prozesses benötigt.
  • Dies ermöglicht intelligente Vorhersagen darüber, welche Teile eines Prozesses in naher Zukunft benötigt werden.

Notwendige Unterstützung für virtuellen Speicher

  • Hardware: Muss Paging und Segmentierung unterstützen.
  • Betriebssystem: Muss Software enthalten, die das Verschieben von Seiten oder Segmenten zwischen Hauptspeicher und sekundärem Speicher verwaltet.

Paging

  • Jeder Prozess hat seine eigene Seitentabelle.
  • Jeder Eintrag in der Seitentabelle enthält die Framenummer der entsprechenden Seite im Hauptspeicher.
  • Ein Bit ist erforderlich, um anzuzeigen, ob die Seite im Hauptspeicher vorhanden ist.
  • Ein weiteres Bit gibt an, ob der Inhalt der Seite geändert wurde (Dirty-Bit), um unnötige Schreibvorgänge beim Ersetzen zu vermeiden.

Seitentabellen

  • Es gibt eine Seitentabelle pro Prozess.
  • Einige Tabellen können große Mengen des Hauptspeichers belegen.
  • Die Seitentabellen liegen im virtuellen Speicher.
  • Wenn ein Prozess läuft, muss zumindest ein Teil der Seitentabelle im Hauptspeicher sein.

Translation Lookaside Buffer (TLB)

  • Jeder Speicherzugriff könnte zwei Zugriffe erfordern: einen für die Seitentabelle und einen für die Daten.
  • Um dies zu lösen, nutzen die meisten virtuellen Speichersysteme einen speziellen Cache namens TLB.
  • Der Prozessor prüft bei einem Speicherzugriff zuerst den TLB.
  • Ist der Eintrag vorhanden, kann die physikalische Adresse direkt berechnet werden.
  • Wird er nicht gefunden, sucht der Prozessor in der Seitentabelle des Prozesses.
  • Nach erfolgreicher Suche wird der TLB aktualisiert.
  • Ist das Präsenz-Bit nicht aktiv, liegt ein Page Fault vor.

Seitengröße

  • Kleinere Seitengrößen reduzieren die interne Fragmentierung, erhöhen aber die Anzahl der benötigten Seiten und Seitentabellen.
  • Größere Seiten sind oft besser für sekundäre Speichermedien geeignet.
  • Die Wahl der Seitengröße beeinflusst die Effizienz des TLB und die Häufigkeit von Page Faults.

Segmentierung

  • Ermöglicht dem Entwickler, den Speicher als mehrere logische Adressräume zu betrachten.
  • Segmente können unterschiedlich groß und dynamisch sein.
  • Speicheradressen bestehen aus Segmentnummer und Offset.
  • Vereinfacht die Verwaltung wachsender Datenstrukturen, das unabhängige Kompilieren und den Datenaustausch zwischen Prozessen.

Segmenttabelle

  • Enthält die Startadresse des Segments im Hauptspeicher, die Länge sowie Bits für Präsenz, Änderung, Schutz und gemeinsame Nutzung.

Kombination von Paging und Segmentierung

  • Jedes Segment kann in Seiten fester Größe unterteilt werden.
  • Für jeden Prozess gibt es eine Segmenttabelle und mehrere Seitentabellen.

Schutz und Austausch

  • Verwendung eines Schutzring-Modells (Ringschutz).
  • Programme können nur auf Daten zugreifen, die im gleichen oder einem weniger privilegierten Ring liegen.

Algorithmen zur Speicherverwaltung

  • Performance: Ziel ist die Minimierung des Speicher-Overheads bei Page Faults.
  • Lesepolitik: Entscheidung, wann eine Seite geladen wird (z. B. Demand Paging oder Prepaging).
  • Platzierungspolitik: Bestimmt, wo ein Teil des Prozesses im Hauptspeicher abgelegt wird.
  • Ersetzungspolitik: Wählt die Seite aus, die bei einem neuen Ladevorgang ersetzt werden soll (z. B. Optimal, LRU, FIFO, Clock).
  • Frame Lock: Verhindert, dass bestimmte Seiten (z. B. Kernel-Strukturen) aus dem Hauptspeicher verdrängt werden.

Resident Set-Verwaltung

  • Das Betriebssystem entscheidet über die Zuteilung der Frames (feste oder variable Zuweisung).
  • Umfang des Ersatzes: Global (alle Seiten als Kandidaten) oder Lokal (nur Seiten des eigenen Prozesses).
  • Load Control: Steuert den Grad des Multiprogramming, um Thrashing zu vermeiden.
  • Prozess-Suspendierung: Wenn der Grad des Multiprogramming reduziert werden muss, werden Prozesse basierend auf Priorität, Status oder Größe gestoppt.

Verwandte Einträge: