Skip to content

Advanced Speicherverwaltung


Einführung in Paging

🎯 Paging löst das Segmentierungsproblem!

  • Speicher wird in gleich große Seiten (z. B. 4 KB) unterteilt.
  • Jede virtuelle Seite (Page) wird auf eine physische Seite (Frame) gemappt.
  • Kein Problem mit externer Fragmentierungkleinere Einheiten helfen!

🔍 Wie funktioniert Paging?

  1. Die virtuelle Adresse besteht aus:
    • Page Number (Seitenindex) → Welche Seite?
    • Offset → Welcher Teil der Seite?
  2. Übersetzung durch Page Table:
    • Virtuelle Adresse → Physische Adresse (Page Table Lookup).
    • Falls Seite nicht im Speicher ist → Page Fault → Swapping.

Paging.svg

🖥 Beispiel: Adressübersetzung in Paging

Gegeben:

  • Virtuelle Adresse = 0x09F3
  • Seitengröße = 0x400 (1024 Bytes)

Berechnung:

  1. Page Number = 0x09F3 ÷ 0x400 = 2
  2. Offset innerhalb der Seite = 0x09F3 % 0x400 = 0x3F3
  3. Seitenübersetzung:
    • Page Table sagt: Virtuelle Seite 2 → Physische Seite 5
    • Physische Adresse = 5 * 1024 + 0x3F3 = 0x14F3.

Vorteile von Paging:

  • Kein externes Fragmentierungsproblem.
  • Erlaubt Speicherverteilung auf nicht zusammenhängende Frames.

🚨 Problem: Große Page Tables → Hoher Speicherverbrauch!
Lösung: TLBs & Mehrstufige Page Tables (Kapitel 19-20).

Paging - Schnellere Übersetzungen mit TLBs

🔥 Warum sind Page Tables langsam?

  • Jeder Speicherzugriff benötigt 2 Speicheroperationen:
    1. Suche in der Page Table.
    2. Zugriff auf den eigentlichen Speicher.

Lösung: Translation Lookaside Buffer (TLB)

  • Ein Cache für Page Table Einträge.
  • Speichert die zuletzt verwendeten Übersetzungen.
  • Falls TLB-Hit: Direkte Adressübersetzung (ohne Page Table Zugriff).
  • Falls TLB-Miss: Normaler Zugriff auf Page Table.
// Translation Lookaside Buffer (TLB) Lookup Algorithmus
VPN = (VirtualAddress & VPN_MASK) >> SHIFT

(Success, TlbEntry) = TLB_Lookup(VPN)

if (Success == True)  // TLB Hit
{
    if (CanAccess(TlbEntry.ProtectBits) == True)
    {
        Offset = VirtualAddress & OFFSET_MASK
        PhysAddr = (TlbEntry.PFN << SHIFT) | Offset
        Register = AccessMemory(PhysAddr)
    }
    else
    {
        RaiseException(PROTECTION_FAULT)  // Zugriffsverletzung
    }
}
else  // TLB Miss
{
    RaiseException(TLB_MISS)  // Seitenfehler oder TLB-Eintrag nicht gefunden
}

📊 TLB-Hit/Miss Performance Beispiel

  • Ohne TLB: 200 ns pro Speicherzugriff.
  • Mit TLB (95% Hit-Rate):
    0.95 × 100 ns + 0.05 × 200 ns = 105 ns (fast doppelt so schnell).

Vorteil: Reduziert den Overhead von Paging erheblich.


Mehrstufige Page Tables

🚀 Problem: Einfache Page Tables sind zu groß!
Ein 64-Bit System mit 4 KB Seiten bräuchte gigantische Page Tables.

Lösung: Mehrstufige Page Tables

  • Hierarchische Struktur:
    • Erste Stufe zeigt auf zweite Stufe, zweite auf dritte usw.
    • Nur benötigte Teile der Page Table werden im Speicher gehalten.

Beispiel: 3-stufige Page Table für 64-Bit Speicherverwaltung

  1. Level 1 TableLevel 2 TableLevel 3 TableFrame.
  2. Erspart Speicherplatz, weil nur genutzte Tabellen geladen werden.

Vorteil: Verbraucht deutlich weniger Speicher für Page Tables.


Swapping - Speicher auf Festplatte auslagern

🎯 Was ist Swapping?

  • Falls der physische RAM voll ist, werden Speicherbereiche auf die Festplatte ausgelagert.

🔥 Wann wird Swapping genutzt?

  • Wenn ein neuer Prozess Speicher benötigt, aber der RAM voll ist.
  • Das OS wählt eine nicht benutzte Seite und speichert sie auf der Festplatte.

🚨 Problem: Swapping auf HDDs ist extrem langsam (Millisekunden!).
Moderne Betriebssysteme nutzen SSDs oder versuchen Swapping zu vermeiden.

Lösung: Page Replacement Policies

  • FIFO: Älteste Seite rauswerfen.
  • LRU (Least Recently Used): Am längsten nicht genutzte Seite rauswerfen.
  • Clock Algorithmus: Verbessert LRU, indem er Seiten prüft, ob sie noch genutzt werden.

Swapping-Strategien & Page Replacement

🔍 Problem: Wann & wie wird ausgelagert?

  • Zu viel Swapping führt zu Thrashing (System ist nur noch mit Swapping beschäftigt).

Lösungen:

  • Page Replacement Algorithmen:
    1. FIFO: Älteste Seite rauswerfen.
    2. LRU: Seite, die am längsten nicht benutzt wurde.
    3. Clock Algorithmus: Effizientere Version von LRU.

Moderne Betriebssysteme:

  • Nutzen hybride Algorithmen und Machine Learning, um das beste Swapping-Verhalten zu finden.

🚀 Fazit

Paging & Swapping sind essentiell für moderne Betriebssysteme.

  • Paging löst Fragmentierungsprobleme.
  • TLBs machen Paging schneller.
  • Swapping ermöglicht mehr Prozesse, kostet aber Leistung.