Basic-Speicherverwaltung¶
Segmentierung (Memory Segmentation)¶
📚 1️⃣ Was ist Segmentierung?¶
Segmentierung ist eine Speicherverwaltungsstrategie, die Adressräume in logische Segmente unterteilt, z. B.:
- Code-Segment
- Daten-Segment
- Heap-Segment
- Stack-Segment
Jedes dieser Segmente kann unabhängig an verschiedenen Stellen im physischen Speicher platziert werden.
📌 Wie funktioniert Segmentierung?¶
- Jeder Prozess hat eine Segmenttabelle, die Basisadressen und Längen speichert.
- Virtuelle Adresse (Segment, Offset) → Physische Adresse (Basis + Offset).
- Falls
Offset > Länge des Segments
→ Fehler (Segmentation Fault).
✅ Vorteile:
- Programme können logisch strukturiert werden (kein zusammenhängender Speicher nötig).
- Schutzmechanismen durch Lesen/Schreiben-Ausführungsrechte für Segmente.
🚨 Probleme:
- Externe Fragmentierung: Speicher kann zwischen Segmenten fragmentieren.
- Lösung: Speicherkonsolidierung (Compaction), jedoch kostenintensiv
- Aufwendige Speicherverwaltung: OS muss Segmentgrößen dynamisch anpassen.
🔍 Beispiel: Adressübersetzung in Segmentierung¶
Segment | Basisadresse | Länge |
---|---|---|
0 | 1000 | 400 |
1 | 1400 | 600 |
2 | 2000 | 500 |
Wenn die virtuelle Adresse (1, 50)
gegeben ist:
- Physische Adresse = Basisadresse[1] + Offset = 1400 + 50 = 1450. ✅
Freispeicherverwaltung (Free Space Management)¶
Wenn Prozesse Speicher freigeben, entstehen Lücken im Speicher → Fragmentierung!
📌 1️⃣ Methoden zur Verwaltung von freiem Speicher¶
-
Splitting & Coalescing:
- Falls ein Block zu groß ist → aufteilen (Splitting).
- Falls benachbarte Blöcke frei werden → zusammenführen (Coalescing).
-
Dynamische Speicherverwaltung mit
malloc()
undfree()
-
malloc(size_t size)
: Fordert Speicher an. free(void *ptr)
: Gibt Speicher zurück, ohne eine Größe zu benötigen.
🛠 2️⃣ Strategien zur Speicherallokation¶
- Best-Fit: Wählt den kleinsten geeigneten freien Block.
- Worst-Fit: Wählt den größten verfügbaren Block.
- First-Fit: Wählt den ersten passenden Block.
- Next-Fit: Ähnlich wie First-Fit, beginnt aber die Suche an der letzten Allokationsstelle