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 Fragmentierung → kleinere Einheiten helfen!
🔍 Wie funktioniert Paging?¶
- Die virtuelle Adresse besteht aus:
- Page Number (Seitenindex) → Welche Seite?
- Offset → Welcher Teil der Seite?
- Übersetzung durch Page Table:
Virtuelle Adresse → Physische Adresse (Page Table Lookup).
- Falls Seite nicht im Speicher ist → Page Fault → Swapping.
🖥 Beispiel: Adressübersetzung in Paging¶
Gegeben:
- Virtuelle Adresse =
0x09F3
- Seitengröße =
0x400
(1024 Bytes)
Berechnung:
- Page Number =
0x09F3 ÷ 0x400
=2
- Offset innerhalb der Seite =
0x09F3 % 0x400
=0x3F3
- Seitenübersetzung:
- Page Table sagt:
Virtuelle Seite 2 → Physische Seite 5
- Physische Adresse = 5 * 1024 + 0x3F3 = 0x14F3. ✅
- Page Table sagt:
✅ 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:
- Suche in der Page Table.
- 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
- Level 1 Table → Level 2 Table → Level 3 Table → Frame.
- 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:
- FIFO: Älteste Seite rauswerfen.
- LRU: Seite, die am längsten nicht benutzt wurde.
- 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.