MMU: Unterschied zwischen den Versionen

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
KKeine Bearbeitungszusammenfassung
 
(3 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
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.
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.
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.
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 Speichertele auf bestimmte, privilegierte Code-Abschnitte (Betriebssystem-[[Kernel]]) beschränken.
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 ==
== Weblinks ==


* [http://de.wikipedia.org/wiki/MMU MMU bei Wikipedia].
* [http://de.wikipedia.org/wiki/MMU MMU bei Wikipedia].
[[Kategorie:Speicher und Dateisysteme]]
[[Kategorie:Mikrocontroller]]

Aktuelle Version vom 21. Oktober 2010, 23:13 Uhr

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