Address Translation (Adressübersetzung & Virtual Memory)¶
📚 1️⃣ Warum brauchen wir Adressübersetzung?¶
Betriebssysteme nutzen virtuelle Speicheradressen, die zur physischen Speicheradresse umgerechnet werden.
Das sorgt für mehr Sicherheit & Flexibilität:
- 🔹 Schutz: Prozesse können nicht auf andere Speicherbereiche zugreifen.
- 🔹 Speichereffizienz: Speicher kann dynamisch verwaltet werden.
🔍 2️⃣ Adressübersetzung: Virtuell → Physisch¶
📌 Direkte Adressübersetzung durch Hardware
Die CPU übersetzt virtuelle Adressen in physische Adressen mithilfe von Page Tables oder TLBs (Translation Lookaside Buffers).
✅ Beispiel für eine einfache Adressübersetzung:
movl 0x0(%ebx), %eax ; Lade Wert aus Speicheradresse in Register
addl $0x03, %eax ; Addiere 3
movl %eax, 0x0(%ebx) ; Speicher den neuen Wert
🔹 Die Adresse im Register %ebx
wird von der Page Table in die physische Adresse übersetzt.
⚙️ 3️⃣ Dynamische Speicherverwaltung: Base & Bounds Register¶
📌 Base Register
- Speichert die Startadresse eines Prozesses im physischen Speicher.
- Die virtuelle Adresse wird einfach um diesen Wert verschoben.
📌 Bounds Register
- Speichert die maximale erlaubte Adresse.
- Falls ein Prozess außerhalb seines erlaubten Bereichs liest/schreibt, wird er gestoppt.
✅ Beispiel:
movl 0x0(%ebx), %eax ; Virtuelle Adresse → Physische Adresse
addl $0x03, %eax ; 3 addieren
movl %eax, 0x0(%ebx) ; Speichern
➡ Die Hardware übersetzt %ebx + Base Register
→ Physische Adresse
🔥 4️⃣ Speicherorganisation & Segmentierung¶
In modernen Systemen gibt es verschiedene Methoden, den Speicher zu verwalten:
✅ Paging (Seitenbasiertes Speicherlayout)
- Speicher wird in gleich große Seiten unterteilt (z. B. 4KB pro Seite).
- Der Page Table verwaltet die Zuordnung zwischen virtuellen Seiten und physischem Speicher.
✅ Segmentation (Segmentbasiertes Speicherlayout)
- Speicher ist in variable große Segmente unterteilt (Code, Heap, Stack).
- Segmente können sich dynamisch vergrößern/verkleinern.
✅ Swapping
- Falls der physische Speicher voll ist, kann das OS Speicherbereiche auf die Festplatte auslagern.
- Das sorgt für virtuellen Speicher, verlangsamt aber Programme.
🚀 5️⃣ Fazit: Warum ist Adressübersetzung wichtig?¶
- 🛡️ Schutz: Kein unautorisierter Zugriff auf Speicher.
- ⚡ Effizienz: Betriebssystem kann Speicher intelligent verwalten.
- 🔄 Flexibilität: Prozesse können im Speicher verschoben werden, ohne ihre Adresse ändern zu müssen.