MMU

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

Memory Management Unit

Die MMU hat prinzipiell die Aufgabe, virtuelle Adressbereiche in reale Adressen umzusetzen. Dies erlaubt Speicherbereiche untereinander zu isolieren und jedem Programm (Task) den scheinbar gleichen Adressraum zur Verfügung zu stellen, unabhängig davon wo dieser wirklich im Speicher liegt.

Eine sehr einfache MMU kann z. B. so aussehen: Die höchstwertigen 4 Adress-Leitungen eines 16 Bit Adressraum werden an ein 16x8 Bit RAM geführt, welches zu den 16 möglichen Kombinationen dieser 4 Adressbits jeweils 8 Bit ausgibt. Diese 8 Bit werden mit den unverändert beibehaltenen unteren 12 Bit der urpsprünglichen Adresse zu einer 20 Bit Adresse zusammengefasst, mit welcher der tatsächliche vorhandene Speicher (von bis zu 1 MByte) adressiert wird.

Voraussetzung ist nun lediglich, dass das 16x8-RAM schnell genug ist, so dass die Adressumsetzung (oberste 4 -> 8 Bit) kein Einschieben von Wartezyklen nötig macht, dann können mehrere einzelne, im Zeitscheibenverfahren ablaufende Programme völlig "transparent" jeweils ihren eigenen (physikalischen) Speicherbereich nutzen. Dazu muss nur der Scheduler beim Umschalten von einer Task zur nächsten das 16x8-RAM entsprechend umladen. Alle ablaufenden Programme sprechen scheinbar den selben (virtuellen) Adressraum von "0x0000 .. 0xFFFF" an.

Neben diesem grundlegenden Adress-Mapping bieten reale MMUs, wie man sie heute bei Rechnern von der PC-Klasse an aufwärts Standard sind, auch Funktionen wie Speicherschutz (read-only, execute, no-execute, usw). oder können den Zugriff auf bestimmte Speicherteile auf bestimmte, privilegierte Code-Abschnitte (Betriebssystem-Kernel) beschränken.

Weblinks