MPU

Wechseln zu: Navigation, Suche

Mit dieser Abkürzung ist nicht der "Idiotentest", die sogenannte Medizinisch-Psychologische Untersuchung gemeint, sondern ein Hardwareteil in einem Prozessor: die Memory Protection Unit. Diese dient dazu, wie der Name schon sagt, den Hauptspeicher vor unerlaubten Zugriffen zu schützen.

Um ihren Zweck zu erfüllen, teilt die MPU den Speicher in mehrere Regionen, die alle definierte Eigenschaften haben:

  • einen festen Ort und feste Größe
  • Speicher-Attribute (Read, Write, Execute)
  • Zugriffsrechte

Die MPU löst beim Verletzen der Zugriffsrechte einen sogenannten Fault aus, ähnlich einem Interrupt: ein Handler wird angesprungen und man kann auf den Fehler reagieren, zum Beispiel eine Fehlermeldung, Eintrag in ein Log, Memory-Dump, Breakpoint beim Debuggen, etc.

Gerade beim Stack kann es helfen, diesen zu schützen, damit es bei einer Kollision mit dem Heap oder globalen Variablen (bzw. beim Verlassen seiner Memory Region) einen kontrollierten Absturz gibt, der dann auch abgefangen und geloggt werden kann.

Eine MPU kann genutzt werden für

  • erhöhte Sicherheit bei der Code-Ausführung
  • verschiedene Privilegien-Level in einer Anwendung
  • strikte Trennung von Code, Daten und Stack (auch zwischen verschiedenen Tasks)

Implementierungen[Bearbeiten]

Kleine 8-Bit-Controller, wie z.B. die AVRs, haben meist keine MPU, da Anwendungen auf diesen Controllern meist ohne Betriebssystem oder mehrere Tasks ausgeführt werden.

Auf größeren Controllern macht eine MPU mehr Sinn, weswegen die Hersteller den zusätzlichen Aufwand in Kauf nehmen und diese implementieren. ARM Cortex-M (außer dem Cortex-M0/M1) haben eine optionale MPU. Der Hersteller kann auswählen, ob eine MPU mitintegriert werden soll. Auch FRAM-basierte MSP430-Controller haben eine MPU, um ein Überschreiben des Codes verhindern zu können.

Größere Mikrocontroller, wie die Cortex-A, haben meist keine MPU, sondern eine komplette MMU (Memory Management Unit), mit dem "richtige" Betriebssysteme möglich sind.