MMU - Memory Management Unit

Eine MMU ist in heutige Prozessor-Chips eingebaut und hilft dabei Prozesse zu isolieren. Sie bildet den physischen Adressraum in den logischen oder virtuellen Adressraum ab. Ein Adressraum stellt dabei die Menge aller gültigen Adressen für einen Prozess dar.

Der physische Adressraum zeigt auf echten Speicher, I/O-Geräte oder Co-Prozessoren. Das Betriebssystem kann mithilfe der MMU und so genannten Page Tables jedem Prozess eine eigene Sicht auf den physischen Adressraum geben, Speicherstellen verstecken, ausmaskieren oder ihm die Rechte nehmen zuzugreifen, zu schreiben oder auszuführen. Adressen werden meist in Pages oder Segmenten an Prozesse übergeben, hier wird weiter nur auf Pages (Seiten, Speicherkacheln) eingegangen.

Beispielsweise könnte folgendes eine Page Table sein. Alle weiteren Pages, auf die der Prozess keinen Zugriff haben soll, seien hier ausgelassen.

Virtuelle Adresse Physische Adresse Extra
0x8000 XXXX 0x0000 XXXX no-execute
0x8001 XXXX 0x0001 XXXX read
0xffff XXXX 0x0002 XXXX read, write

Das heißt der Prozess kann mittels Befehlen, die auf Adressen arbeiten, den Adressraum 0x8000 0000 bis 0x8001 ffff verwenden. Weiter könnte sich an Stelle 0xffff ffff der bottom of stack befinden, und nach oben wachsen. Verwendet der Prozess bspw. Befehle wie mov eax, 0x8000 0004, denkt der Prozess auf 0x8000 0004 zuzugreifen, in Wirklichkeit übersetzt allerdings die MMU diese virtuelle Adresse nach 0x0000 0004. Das heißt die MMU schaut in der Page Table für den Eintrag 0x8000 XXXX nach und findet die Abbildung auf den physischen Speicher (0x0000 XXXX). Nun wird noch das niedrigere 16-Bit Wort angehängt.

Die MMU ermöglicht es also dem Betriebssystem allen Prozessen eine einheitliche Sicht auf ihren Speicher zu geben und trotzdem verschiedene physische Speicherzellen zuzuweisen. Weiter kann so die Illusion gewonnen werden, dass unendlich viel Speicher zur Verfügung steht. Wächst beispielsweise der Stack über die Page hinaus, die wir ihm zugewiesen haben, wirft die MMU eine Page-Fault-Exception, das heißt die Ausführung des Prozesses wird unterbrochen und das Betriebssystem erhält Kontrolle über den Prozessor. Nun kann sich das Betriebssystem entscheiden den Prozess zu beenden, oder ihm weiteren Speicher für die Stackoperation zur Verfügung zu stellen. Will es weiteren Speicher zur Verfügung stellen, muss es entweder eine freie Page im physischen Speicher finden, und beispielsweise nach 0xfffe XXXX in den virtuellen Adressraum einblenden, oder es muss den Speicher durch Swapping freimachen.

Prozesse können durch eine MMU effektiv voneinander isoliert werden. Wenn ein Prozess auf dem Prozessor läuft, ist die Page Table so eingestellt, dass nur dieser Prozess sichtbar ist. Das hat zur Folge, dass er nicht auf Speicher von anderen Prozessen, oder dem Betriebssystem zugreifen kann. Versucht er auf virtuellen Speicher zuzugreifen, der ihm nicht gehört, wirft die MMU eine Page-Fault-Exception und das Betriebssystem beendet den Prozess.