Memory Management Flashcards
Wofür ist Memory Management verantwortlich
Abschottung: Prozesses und das OS müssen vor (un)beabsichtigten Lese- und Schreibzugriffen ihrer Bereiche geschützt werden.
Sharing: Es muss Prozessen möglich sein, denselben Speicher anzusprechen und zu teilen (z.B. zur Kommunikation).
Verwaltung: Aufteilung des physischen Speichers in kleinere Teile mit virtuellen Adressen.
Relocation: Echte Speicher-Virtualisierung ermöglicht es, Daten und Instruktionen im phyischen Speicher zur Laufzeit zu verschieben, ohne dass dies für den jeweiligen Prozess sichtbar ist.
Starre Aufteilungen
- Fixer Speicherbereich wird dem OS zugeordnet.
- Restlicher Speicher ist statisch aufgeteilt.
- Jeder Prozess kann einen solchen Teil belegen.
Dynamische Aufteilung
Aufteilung kann in Größe und Position dynamisch variieren.
Platzierungsstrategie für neu ankommende Prozesse:
- Best fit: Weist dem einkommenden Prozess den kleinsten verfügbaren Speicherblock zu, um Verschwendung zu minimieren. Kann zu Fragmentierung führen.
- First fit: Weist dem einkommenden Prozess den ersten verfügbaren Speicherblock zu. Schnell, aber kann Fragmentierung verursachen.
- Next fit: Ähnlich wie First Fit, beginnt jedoch die Suche nach dem zuletzt genutzten Punkt im Speicher. Reduziert Fragmentierung etwas.
Buddy-Allocation
Teilt den Speicher in Blöcke mit Größen von Zweierpotenzen
- Zuerst wird der gesamte Speicher als ein Block definiert.
- Bei jeder Speicheranfrage wird ein neuer freier Block gesucht.
- Um interne Fragmentierung zu minimieren, wird immer der kleinstmögliche Block gewählt.
- Wenn kein solcher Block existiert, werden größere wiederholt in jeweils zwei kleinere (“Buddies”) geteilt.
- Wenn Blöcke frei gegeben werden und der zugehörige Buddy frei ist, werden die beiden Blöcke wieder zusammengefasst.
Virtual Memory
- Um dem Betriebssystem mehr Freiräume in der Implementierung zu erlauben, müssen die physischen Adressen vor User-Prozessen versteckt werden.
- Stattdessen werden diesen virtuelle Adressen zur Verfügung gestellt.
Base and Bound
- Mit Hilfe von Hardware können relative (virtuelle) Adressen zur Laufzeit auf physische abgebildet werden.
Was ist ein Buffer-Overflow und wie kann er verhindert werden?
Wenn mehr Daten in den Speicher (Array) geschrieben werden, als Kapazität vorhanden ist.
Lösungen für ein Buffer-Overflow
Runtime Bounds Checking: Bevor neue Daten in das Array geschrieben werden, prüft ein Prozess ob genügend freie Speicherplätze vorhanden sind.
StackShield: Sichert in Linux-Programmen bei jedem Funktionsaufruf die Return-Adresse und korrigiert sie bei Bedarf vor dem Rücksprung.
StackGuard: Versucht, auf Unix-Systemen die Rücksprungadresse bei Funktionsaufrufen zu schützen. Platziert auf dem Stack ein Canary.
Was ist Paging?
Paging ist ein Speicherverwaltungsschema, das den physischen Speicher in gleich große Blöcke, sogenannte “Seiten”, unterteilt. Gleichzeitig wird der virtuelle Speicher in Blöcke gleicher Größe, sogenannte “Seitentabellen”, unterteilt. Der Hauptzweck von Paging ist es, den physischen Speicher effizienter zu nutzen und das Konzept des virtuellen Speichers zu ermöglichen.
Was ist ein TLB und was macht es?
Ein TLB (Translation Lookaside Buffer) ist ein Cache im Speicherverwaltungssystem eines Computers, der die Übersetzung von virtuellen Adressen in physische Adressen beschleunigt. Es speichert kürzlich durchgeführte Adressübersetzungen, um den Zugriff auf den Hauptspeicher oder die vollständige Seitentabelle zu vermeiden und so die Speicherzugriffszeiten zu verkürzen.