MMU
Abkürzung für Memory Management Unit.
MMU: Hardware, das Adressen für sicheren Speicherzugriff übersetzt
Eine Memory Management Unit ist eine Hardwarekomponente, üblicherweise in den Prozessor integriert, die logische (oder virtuelle) Speicheradressen, die von einem laufenden Programm erzeugt werden, in physische Adressen im realen RAM übersetzt. Wenn Software Daten von Speicheradresse 0x1000 anfordert, fängt die MMU diese Anfrage ab, konsultiert ihre Übersetzungstabellen und leitet die Hardware an, Daten von der echten physischen Adresse zu lesen, die 0x5A000 oder überall sonst sein kann. Diese Übersetzung läuft in Nanosekunden ab und ist für die Anwendung transparent.
Die Hauptaufgabe der MMU ist Speicherschutz und Adressisolation. Jeder Prozess auf einem System erhält seinen eigenen virtuellen Adressraum, normalerweise beginnend bei Adresse Null. Die MMU stellt sicher, dass ein Programm nicht versehentlich oder böswillig auf Speicher eines anderen Programms oder des Kernels zugreifen kann. Das geschieht durch Page Tables, Nachschlagestrukturen, die virtuelle Pages auf physische Frames abbilden und mit Zugriffsberechtigung versehen sind. Wenn ein Programm versucht, in Speicher zu schreiben, auf den es keine Rechte hat, signalisiert die MMU einen Fehler und das Betriebssystem beendet den fehlerhaften Prozess.
Physisches Design und Betrieb
Eine MMU arbeitet typischerweise auf Page-Ebene, üblicherweise 4 KB auf x86- und ARM-Prozessoren, wobei einige Systeme variable oder größere Page-Größen unterstützen. Die Übersetzung erfolgt durch einen Page Walk: Der Prozessor präsentiert eine virtuelle Adresse, die MMU durchsucht die Page Tables (oft eine mehrstufige Baumstruktur zur Speicherersparnis) und ruft die entsprechende physische Adresse und Berechtigungsbits ab. Moderne MMUs enthalten einen Translation Lookaside Buffer (TLB), einen kleinen assoziativen Cache, der kürzlich verwendete Übersetzungen speichert; ein TLB Hit liefert eine physische Adresse in ein oder zwei Zyklen, während ein TLB Miss einen vollständigen Page Table Walk erfordert, was Dutzende oder Hunderte von Zyklen kostet.
MMUs sind essentiell für moderne Betriebssysteme. Ohne sie müsste jedes Programm an einer festen Stelle geladen werden und dürfte seine Grenzen nicht überschreiten; das macht Multitasking schwierig und Sicherheit nahezu unmöglich. Mit einer MMU kann das Betriebssystem Programme überall im physischen Speicher laden, inaktive Pages auf die Festplatte auslagern und verhindern, dass ein Prozess andere zum Absturz bringt. Eingebettete Systeme ohne MMU (wie Mikrocontroller mit Bare-Metal-Code oder einfache RTOS-Kernel) opfern diese Schutzmaßnahmen für niedrigere Latenzen und einfachere Hardware.
Wenn eine MMU ausfällt oder fehlkonfiguriert ist, wird der Speicherzugriff unzuverlässig. Ein fehlerhafter TLB oder eine beschädigte Page Table können bewirken, dass ein Prozess stillschweigend falsche Daten liest oder schreibt oder wiederholt bei gültigen Adressen fehlschlägt. Entwickler, die Speicherbeschädigungen oder Page Faults beheben, müssen verstehen, wie die MMU Adressen übersetzt; deshalb stellen Low-Level-Debugger und Kernel-Tools Befehle bereit, um Page Tables und TLB-Inhalte zu inspizieren.