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
Dynamische Aufteilung
Aufteilung kann in Größe und Position dynamisch variieren.
Platzierungsstrategie für neu ankommende Prozesse:
Buddy-Allocation
Teilt den Speicher in Blöcke mit Größen von Zweierpotenzen
Virtual Memory
Base and Bound
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.