Speicherverwaltung: Paging und Segmentierung

Eingeordnet in Informatik

Geschrieben am in Deutsch mit einer Größe von 4,55 KB

Seitenfehlerbehandlung

Der Prozess zur Behandlung eines Seitenfehlers (Page Fault) läuft wie folgt ab:

  1. Die Hardware löst einen Trap aus und sichert den Programmzähler (PC).
  2. Der Trap-Handler (Interrupt-Routine) sichert die Prozessorregister.
  3. Das Betriebssystem erkennt, dass ein Seitenfehler aufgetreten ist.
  4. Das Betriebssystem sucht nach einem freien Seitenrahmen im Hauptspeicher. Wenn keiner verfügbar ist, wird ein „Opferrahmen“ ausgewählt und dessen Inhalt bei Bedarf auf die Festplatte ausgelagert.
  5. Ein E/A-Vorgang wird gestartet, um die benötigte Seite von der Festplatte in den freien Seitenrahmen zu laden.
  6. Nach Abschluss des Ladevorgangs signalisiert ein Festplatten-Interrupt die Verfügbarkeit der Seite. Der Prozess, der den Fehler verursacht hat, wird wieder in die Warteschlange der ausführbereiten Prozesse eingereiht.

Seitentabellen

Bei jedem Kontextwechsel muss die Seitentabelle des alten Prozesses gesichert und die des neuen Prozesses geladen werden. Die Seitentabelle kann an verschiedenen Orten gespeichert werden:

Speicherung in Registern

  • Vorteil: Sehr schneller Zugriff.
  • Nachteil: Bei großem Arbeitsspeicher wird die Seitentabelle sehr groß und passt möglicherweise nicht in die verfügbaren Register.
  • Nachteil: Bei einem Kontextwechsel müssen die Werte aller Register ausgetauscht werden, was aufwendig ist.

Speicherung im Hauptspeicher

  • Vorteil: Keine Platzprobleme, da der Hauptspeicher groß genug ist.
  • Vorteil: Bei einem Kontextwechsel muss nur ein einziges Register (der Zeiger auf die aktuelle Seitentabelle) geändert werden.
  • Nachteil: Langsamerer Zugriff, da pro Speicherzugriff zwei Zugriffe erforderlich sind (einer auf die Seitentabelle, einer auf die eigentlichen Daten).

Zusätzliche Informationen in der Seitentabelle

Ein Seitentabelleneintrag enthält neben der Rahmennummer weitere von der Hardware genutzte Kontrollbits:

  • Present-Bit: Gibt an, ob sich die Seite im Hauptspeicher (RAM) oder im Swap-Bereich auf der Festplatte befindet.
  • User/Supervisor-Bit: Legt fest, ob auf die Seite im Benutzermodus zugegriffen werden darf.
  • Read/Write/Execute-Bits: Definieren die erlaubten Zugriffsarten (Lesen, Schreiben, Ausführen).
  • Weitere Bits für das Betriebssystem: Zähler für Referenzen, Zugriffs-Flags (Accessed/Dirty Bits) etc.

Die CPU arbeitet mit logischen Adressen, nicht mit physischen. Die Umwandlung erfolgt durch die Memory Management Unit (MMU).

Translation Lookaside Buffer (TLB)

Um die Adressübersetzung zu beschleunigen, insbesondere wenn Seitentabellen im langsamen Hauptspeicher liegen, wird ein TLB verwendet. Dies ist ein schneller, assoziativer Cache, der die zuletzt verwendeten Übersetzungen von logischen zu physischen Adressen speichert. Ein typischer TLB hat zwischen 64 und 2048 Einträge.

Gemeinsamer Speicher durch Paging

Paging ermöglicht es, physischen Speicher effizient zwischen mehreren Prozessen zu teilen. Dabei können die Seitentabellen verschiedener Prozesse auf dieselben physischen Seitenrahmen verweisen. Dies verbessert die Speicherauslastung und die Systemgeschwindigkeit, da gemeinsam genutzte Programmbibliotheken nur einmal in den Speicher geladen werden müssen.

Paging vs. Segmentierung

  • Beim Paging muss der Compiler nichts über die Speicheraufteilung wissen; er erzeugt einen kontinuierlichen logischen Adressraum. Bei der Segmentierung hingegen muss der Compiler Adressen für logisch zusammengehörige, unterschiedlich große Segmente generieren.
  • Ähnlich der Seitentabelle kann auch die Segmenttabelle in Registern oder im Hauptspeicher liegen. Im letzteren Fall zeigt ein spezielles Register auf den Beginn der Tabelle.
  • Die Segmentierung spiegelt die logische Struktur eines Programms wider (z. B. Code, Daten, Stack). Dies vereinfacht das Teilen von ganzen Segmenten (z. B. Code-Bibliotheken) zwischen Prozessen. Beim reinen Paging ist dies konzeptionell aufwendiger.
  • Im Gegensatz zu Seiten fester Größe beim Paging sind Segmente bei der Segmentierung von variabler Länge. Jedes Segment muss als Ganzes in einem zusammenhängenden Bereich des physischen Speichers untergebracht werden.

Verwandte Einträge: