Von Virtuellen zu physischen Speicher
Typisches Adressraum Layout
Stack (Thread 0) Stack (Thread 1)
Dynamisch Allokierte Daten (Heap)
- Aufruf von malloc oder new
Statisch allokierte Daten
- Shared Libraries
- Instruktionenen / Code
- Globale Variablen
Heap und Stack sind beides dynamisch allokierte Größen : Bestimmt bei Laufzeit
Stack : Daten von Funktionsaufrufen : Parameter, lokale Variablen, Rücksprungadressen Heap : Dynamische Daten
Warum sind Adressraum Layouts wertvolle Informationen für Hacker ?
- Weil Sie verraten, wo im Speicher sich was befindet
- Hacker können zum Beispiel die Rücksprungadressen rauslesen
Ein Adressraum layout verrät wo sich im Speicher welche Bereiche befinden
- Code-Segment (z. B. Funktionen)
- Stack (z. B. Rücksprungadressen, lokale Variablen)
- Heap (z. B. dynamisch allokierter Speicher)
- Shared Libraries (z. B. libc.so)
- Umgebungsvariablen
Der Hacker kann somit gezielt einen Speicherbereich manipulieren
Adress Space Layout Randomisation
Durch ASLR werden wichtige Speicherbereiche eines Prozesses bei jedem Start zufällig neu angeordnet.
- Der Stack (wo Rücksprungadressen liegen)
- Der Heap (für dynamische Speicherallokationen)
- Das Textsegment (der Programmcode)
- Shared Libraries (z. B. libc)
Die Adressen ändert sich somit jeded mal
Der Speicher, zwei Prozesse
Hands on Erfahrung
Relocation Problem
Ziel : Separate Adressräume
Variante 2 : Hardware + OS kümmern sich um Umrechnung im Hintegrund
Memory Management Unit - MMU
- Verantwortlich für das Mapping von virtuellen auf physische Adressen
- Page-basiertes oder Segment-basiertes Mapping
- Anzahl der Level
- Größe der Pages
Page-Based Virtual Adressing
-
speicher eingeteilt in pages - 4KB
-
MMU liegt in CPU
- innerhalb einer page des OS liegen die Page Tables. MMU muss die BasisAdresse dieser PageTable wissen
-
ersten 20 Bits : Entscheiden welcher eintrag der Page Table der Relevante ist
-
Für jede Anwendung gibt es ihre eigene PageTable, und eine eigene Übersertzung
-
Jeder einzelner Prozess hat ie Illusion dasss es nur diesen gibt
-
Eine Übersetzung : Single Level
- Es gibt mehrere Stufen
[NEXT TIME] : Page Tables, etc.
Page-Based Virtual Adressing
- basierend auf einer Single-Level Page Table
Relocation Problem
Speicher für single-level Page Table
Page Größe : 2^22 ?
Aufteilung in 4MB Stücke
Ziel : Unbenutzte Page Tables nicht im Arbeitsspeicher zu referenzieren
Einführung eines Page Directory
[…]
Virtual Address Translation
Ziel : Anstatt einer 4MB Page Table : 4KB Page Table
Page Directory Entry (vereinfacht)
Jede Adresse : 32 Bit Entscheidung mit dem Present-Bit ob der Eintrag valide oder nicht ist
Base Adresse von Page Table ist in Page Directory Base Adresse von Page Frame ist in Page Table
Folie 99 : Zusammenfassender Vergleich
Wiederholung
MMU zeigt auf die Basis adresse der Page Table
Was ? 4MB für jeden Prozess ?
Man zeigt auf Page Bereich Was ist 4 KB Groß ? → Die Pages selbst
Wie von 4KB auf 4MB ? →
Page Frame ist ein Verweis Displacement ist 12
`
2^20 = 1.048.576 Einträge
Page Table Eintrag = 4 Bytes
1.048.576 * 4 = 4.194.304
Wie können wir vom 4MB runterkommen ?
Woe können wir sparen ? → Wir reduzieren die Größe einer Page Table Diese kleineren Page Tables werden durch eine Page Directory verwaltet
Page Directory ist ähnlich wie eine Page mit 1024 Einträgen
Auslegung der Bits : 10, 10, 12
Anstatt einer Großer Page Table haben wir viele Kleine Page Tables
Anstatt einer Million Einträge haben wir 1024 Einträge
Bei jedem Prozess können wir einfach die Page Directory laden
Page Table Entry (vereinfacht)
Zeit ist Geld
TLB Translation Lookaside Buffer
Warum ist Hashing Sinnvoll ?
Was cachen wir in diesem Konstrukt ?
MMU müsste eine iDee haben, welche tables zuletzt accessed wurden
TLB = Cache für Page Table Einträge
Nur wenn es im Cache nicht vorhanden ist, wird die Page Table übersetzt
Segment basierter Ansatz
Paging : Keine Addition, es reicht eine Konkatenation
Hinteren 12 Bits (Displacemen)t) sind immer null
Hier : Wir müssen eine Addition durchführen um zu der richtigen Zeile zu kommen
Nachteil Segmentierung : Addition ist teuer
Nachteil Paging : Mindestens 4KB, auch nur bei einem Bit
Bei Paging ist es egal wo in der Page die Adresse ist
Segmentierung
Kann sein dass wie keinen Platz mehr für einen Prozess haben, danach muss fragmentiert und neu verteilt werden
Hybrid Paging und Segmentierung
Intel 64 (EM64T) Mode Paging
linearer Adressraum wird übersetzt zu Page Tables