Speicherverwaltung
Speicherverwaltung
Programme müssen im Hauptspeicher liegen, um ausgeführt zu werden. Gleichzeitig dürfen Prozesse nicht beliebig auf Speicherbereiche anderer Prozesse zugreifen.
Die Speicherverwaltung sorgt dafür, dass Speicher verteilt, geschützt und effizient genutzt wird.
Logische und physische Adressen
Programme arbeiten mit logischen Adressen. Der echte RAM verwendet physische Adressen.
Die Übersetzung übernimmt die Memory Management Unit.
| Begriff | Bedeutung |
|---|---|
| Logische Adresse | Adresse aus Sicht des Programms. |
| Physische Adresse | Tatsächliche Adresse im Hauptspeicher. |
| MMU | Hardwareeinheit zur Adressübersetzung. |
Diese Übersetzung ist zentral für Speicherschutz und virtuelle Speicherverwaltung.
Kernel Land und User Land
| Bereich | Bedeutung |
|---|---|
| Kernel Land | Privilegierter Bereich für Betriebssystemkern und Treiber. |
| User Land | Bereich für normale Anwendungen. |
Normale Programme laufen im User Land. Für kritische Aktionen müssen sie über System Calls kontrolliert in den Kernel wechseln.
Statische Partitionierung
Bei statischer Partitionierung wird Speicher in feste Bereiche aufgeteilt.
Vorteile:
- einfach
- vorhersehbar
- leicht zu verwalten
Nachteile:
- interne Fragmentierung
- begrenzte Anzahl Prozesse
- unflexible Speicherverteilung
Interne Fragmentierung entsteht, wenn ein Prozess weniger Speicher braucht als seine zugewiesene Partition.
Dynamische Partitionierung
Bei dynamischer Partitionierung wird Speicher passend zur Prozessgröße vergeben.
Vorteile:
- keine feste Partitionsgröße
- bessere Ausnutzung bei passenden Prozessen
Nachteile:
- externe Fragmentierung
- freie Speicherbereiche können ungünstig verteilt sein
Externe Fragmentierung bedeutet, dass genug freier Speicher vorhanden wäre, aber nicht in einem zusammenhängenden Block.
Verwaltung freier Speicherbereiche
Freier Speicher kann mit Listen verwaltet werden.
Eine bekannte Methode ist das Buddy-System. Dabei wird Speicher in Blöcke aufgeteilt, die bei Bedarf geteilt und später wieder zusammengeführt werden können.
Zuweisungsstrategien
| Strategie | Idee |
|---|---|
| First Fit | Nimmt den ersten passenden freien Block. |
| Next Fit | Sucht ab der letzten Fundstelle weiter. |
| Best Fit | Nimmt den kleinsten passenden freien Block. |
Jede Strategie hat andere Auswirkungen auf Geschwindigkeit und Fragmentierung.
Swapping
Beim Swapping werden Prozesse oder Speicherbereiche aus dem Hauptspeicher auf sekundären Speicher ausgelagert.
Dadurch kann mehr Speicher genutzt werden, als physisch vorhanden ist. Der Preis ist Geschwindigkeit, weil Massenspeicher viel langsamer als RAM ist.
Zusätzliche Zustände können entstehen:
- Ready Suspended
- Blocked Suspended
Paging
Beim Paging wird virtueller Speicher in Seiten und physischer Speicher in Frames geteilt.
Eine logische Adresse besteht aus:
- Seitennummer
- Offset innerhalb der Seite
Die Seitentabelle ordnet virtuelle Seiten physischen Frames zu.
Klassische Seitengröße: 4 KB.
TLB
Der Translation Lookaside Buffer speichert häufig verwendete Seitentabelleneinträge.
Ohne TLB müsste die CPU sehr oft langsamere Tabellen im Speicher nachschlagen. Der TLB beschleunigt die Adressübersetzung erheblich.
Mehrstufige Seitentabellen
Große virtuelle Adressräume würden riesige Seitentabellen erzeugen. Mehrstufige Seitentabellen lösen dieses Problem, indem nur benötigte Teile der Tabelle tatsächlich angelegt werden.
Segmentierung
Bei Segmentierung wird Speicher logisch in Bereiche gegliedert.
Typische Segmente:
- Code
- Daten
- Stack
Ein Segment wird durch Startadresse, Größe und Eigenschaften beschrieben. Im Gegensatz zu Paging ist Segmentierung stärker aus Programmsicht sichtbar.
CPU-Modi
CPUs unterstützen unterschiedliche Betriebsmodi.
Beispiele:
- Real Mode
- Protected Mode
- User Mode
- Kernel Mode
Im Protected Mode können moderne Schutzmechanismen wie Speicherschutz und privilegierte Ausführung sauber umgesetzt werden.
Merksatz
Speicherverwaltung ist die Grundlage für Isolation. Ohne Adressübersetzung und Schutz könnte jeder Prozess fremden Speicher lesen oder verändern.
Zuletzt aktualisiert: 6. Juni 2026