Betriebssysteme

Einblicke in die Speicherverwaltung unter Windows Embedded CE 6.0

11.05.2009 | Redakteur: Martina Hafner

Unser Experte: Diplom-Informatiker Rudi Swiontek ist Spezialist für Windows-Betriebssysteme und in Schulung und Entwicklung tätig. Kontakt: Rudi.Swiontek@hilf.de

Die MMU (Memory Management Unit) ist ein zentraler Bestandteil von WinCE, wenn es um die Themen Speicherverwaltung und Schutzmaßnahmen geht. Die Anwendungen werden gegeneinander geschützt und die MMU ist dafür verantwortlich, dass schnellstmöglich die virtuelle Adresse in eine physikalische umgesetzt wird. Die Zusammenhänge zur Speicherverwaltung erklärt dieser Beitrag.

WinCE lässt sich nur auf eine Mikroprozessor-CPU portieren, in der eine MMU vorhanden ist. Derzeit werden vier Prozessorfamilien (x86, ARM, MIPS und SH4) vom WinCE unterstützt. Durch die jeweiligen BSPs (Board Support Packed) erfolgt die Anpassung an die dazugehörige Hardware.

Bild 1: Die Hauptaufgabe der MMU besteht darin, die max. 32.000 Anwender-Prozesse vom virtuellen auf einen physikalischen Adressbereich umzusetzten.
Bild 1: Die Hauptaufgabe der MMU besteht darin, die max. 32.000 Anwender-Prozesse vom virtuellen auf einen physikalischen Adressbereich umzusetzten.

Die Hauptaufgabe der MMU besteht darin, die max. 32000 Anwender-Prozesse mit jeweils max. 2 GByte virtuellen Adressbereich auf einen physikalischen Adressbereich umzusetzen. Bei dem physikalischen Adressbereich kann es sich um einen Flash- und/oder um einen RAM-Bereich handeln.

Bild 2. Bei der virtuellen Adresse wird die CPU als 32-Bit-Adresse dargestellt, die in zwei Bereiche aufgeteilt wird. Die unteren 12 Bit beinahlten den Offset innerhalb einer Page, die anderen 20 Bit den Index in die Page-Tabellen.
Bild 2. Bei der virtuellen Adresse wird die CPU als 32-Bit-Adresse dargestellt, die in zwei Bereiche aufgeteilt wird. Die unteren 12 Bit beinahlten den Offset innerhalb einer Page, die anderen 20 Bit den Index in die Page-Tabellen.

Wie in Bild 2 gut zu erkennen ist, reden wir bei WinCE immer von einer virtuellen Adresse, in der die CPU als 32-Bit- Adresse dargestellt wird. Diese Adresse wird in zwei Bereiche, abhängig von der Page-Größe von 4K, aufgeteilt. Die unteren 12 Bits beinhalten immer den Offset innerhalb einer Page und die anderen 20 Bits enthalten den Index in die Page-Tabellen (hier nur vereinfacht dargestellt). Die Page-Tabellen werden ähnlich aufgeteilt. Die unteren 12 Bits enthalten die Zugriffsrechte für die einzelnen Pages, z.B. Read Only, Read Write, Execute Only usw. Für die Anfangsadresse werden diese 12 Bits nicht benötigt, da die Page-Adresse immer ein Vielfaches von 1000Hex ist.

Ein Anwendungs-Beispiel: Eine Anwendung enthält die Funktion test() mit einer virtuellen Adresse der Funktion von 30400. Somit ergibt sich für den Offset-Anteil 400 und für den Index ergibt sich ein Wert von 30. Das heißt, der 30te Index der Page Tabelle enthält die physikalische Adresse mit den Zugriffsrechten. Der Offset-Anteil zeigt direkt auf die Funktion test() innerhalb einer Page (Bild 2). So erfolgt die virtuelle Adressumsetzung von 30400 zu einer physikalischen Adresse von 4400.

Besonderheiten beim Einsatz von DMA-Controllern

Für den Einsatz eines DMA-(Direct-Memory-Access)-Controllers gibt es folgendes zu beachten: Ein DMA-Controller hat die gleichen Schnittstellen wie die CPU, einen Adress-, Daten- und einen Steuer-Bus. Aber der DMA-Controller besitzt keine MMU und kann somit nichts mit einer virtuellen Adresse anfangen. Er wird zum kopieren von physikalischen Adressbereichen benötigt. Z.B. sollen die Bilder der Videokamera über den PCI-Bus in den RAM-Bereich kopiert werden.

Bild 2. Bei der virtuellen Adresse wird die CPU als 32-Bit-Adresse dargestellt, die in zwei Bereiche aufgeteilt wird. Die unteren 12 Bit beinahlten den Offset innerhalb einer Page, die anderen 20 Bit den Index in die Page-Tabellen.
Bild 2. Bei der virtuellen Adresse wird die CPU als 32-Bit-Adresse dargestellt, die in zwei Bereiche aufgeteilt wird. Die unteren 12 Bit beinahlten den Offset innerhalb einer Page, die anderen 20 Bit den Index in die Page-Tabellen.

Wie in Bild 2 zu erkennen ist, muss man für einen zusammenhängenden virtuellen Adressbereich einen zusammenhängenden physikalischen Adressbereich verwenden. Virtueller Adress-Bereich (20000 und 21000) wird auf einen physikalischen Bereich von (1000 und 2000) abgebildet. Der DMA-Controller kennt auch nicht die Zugriffsrechte der MMU. Fehlerhafte Adressangaben beim Programmieren des DMA-Controllers haben fatale folgen, da geschützte Bereiche, die durch die MMU verwaltet werden, werden einfach überschrieben.

Wird ein neuer Thread mit CreateThread erzeugt, so muss man nicht die maximale Stackgröße des Thread ausrechnen. Die MMU kann einem Thread, je nach Bedarf, zu einer zusammenhängenden virtuellen Adresse beliebige physikalische Speicher bereitstellen. Es wird kein physikalisch zusammenhängender Speicher benötig. Die MMU bildet die Adresse optimal ab (z.B. die virt. Adr. 40000 wird auf eine physikalische Adr. von 6000 abgebildet und die 41000 wird auf 0 abgebildet).

Inhalt des Artikels:

  • Seite 1: Einblicke in die Speicherverwaltung unter Windows Embedded CE 6.0
  • Seite 2: Hit und Miss
Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Kommentar abschicken

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 298667 / Software-Implementierung)

Embedded Software Engineering Report abonnieren

4 mal jährlich: Die kostenlose Pflichtlektüre für Embedded­-Software- und Systems-Entwickler, von Analyse bis Wartung und Betrieb

* Ich bin mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung und AGB einverstanden.
Spamschutz:
Bitte geben Sie das Ergebnis der Rechenaufgabe (Addition) ein.