Hallo!
Ich frage mich seit einiger Zeit, wie die MMU von größeren
Mikrocontrollern genutzt werden kann, ohne ein entsprechendes
Betriebssystem zu nutzen.
Da ich nichts wirklich sinnvolles zu diesem Thema im Netz finde, hoffe
ich hier auf einige Beiträge.
Genauer gesagt möchte ich den Speicherschutz der MMU nutzen, um bei
komplexer Software Fehler durch Pointer etc zu vermeiden.
Rein theoretisch dachte ich mir, dass (sofern genügend Speicher zur
Verfügung steht) es doch möglich sein müsste, alle nötigen Variablen
statisch zu allokieren (wodurch man den nötigen Speicher schon mal
wüsste) und den einzelnen "Prozessen" oder Tasks damit einen
Speicherbereich fest zuordnen zu können. Diese wären dank der MMU dann
auch noch voreinander geschützt.
Mit händischer Nutzung der MMU habe ich persönlich leider garkeine
Erfahrung - geschweige denn, ob das überhaupt so einfach möglich ist.
Über Anregungen, Pro's und Kontra's würde ich mich sehr freuen.
(Bitte - keine Gegenfragen zu Sinn und Unsinn meiner Frage ;) )
MfG hm
Wenn von Prozessen oder Tasks die Rede ist, und von einer
Speicherverwaltung die den Speicher dieser Prozesse trennt, dann baust
du dir so ein eigenes Betriebssystem. Kein grosses wie Windows oder
Linux, aber trotzdem.
Hallo,
also prinzipiell kannst Du die MMU natürlich auch 'händisch' nutzen.
Dazu mußt Du
- Dir erst einmal im klaren sein was gegeneinander geschützt werden soll
- ein Linker-CMD File schreiben, das die Symbole entsprechend im
Speicher anordnet
- die entsprechenden MMU Regionen / TLBs festlegen
- einen MMU Treiber bauen, der immer zwischen den "Tasks/Prozessen"
aufgerufen wird und die MMU entsprechend der nächsten Task konfiguriert.
Das könnte man auch am Anfang bzw. Ende einer jeden C-Funktion machen.
- ein ordentliches Fehlerhandling bzw. Debugmöglichkeiten einbauen,
ansonsten sucht man sich im Fehlerfall tot!
Ich habe so etwas schon gemacht. Allerdings ging es darum, genau eine
'Kundensoftware' gegen unsere eigene SW zu schützen. Bevor die
Hauptfunktion der Kundensoftware aufgerufen wurde, habe ich die MMU
entsprechend konfiguriert (Speicherschutz eingeschaltet). Nachdem die
Kundensoftware abgelaufen war, wurde wieder auf eine weniger restriktive
MMU Konfiguration umgeschaltet. Damit das überhaupt geht, gilt die
Devise Lesen darf jeder, Schreiben darf nur der gerade aktive
Prozess/Task/Funktion.
Noch ein Tipp:
Bei vielen CPUs muß man in einem priviligierten (System-) Modus sein um
die MMU-Register verändern zu dürfen. Das kann man z.B. über
(Software-)Interrupts machen.
Gruß Bernd
Uffa, das hört sich nach endlos viel Arbeit an...
@ Bernd: Wie lange hast du denn dafür gebraucht, bis es einwandfrei
gelaufen ist?
Ich glaube ich überlege mir mal andere Möglichkeiten, Speicher
verschiedener Prozesse zu schützen.
Gruß hm
ist es nicht sinnvoller "sauber" mit Pointer zu programmieren als den
Aufwand mit der MMU zu treiber.
Auch mit einer MMU hast du das Problem das jeder Process seine eigene
Daten zerlegen kann.
Wenn der Prozess das selber tut, dann soll er das :) Aber er solls
gefälligst nur bei sich machen und nicht alles in den Sumpf reiten...
Zum Thema "sauber" Programmieren mit Pointern reicht folgender link
denke ich (entsprechend umfangreiche Software vorausgesetzt):
http://de.wikipedia.org/wiki/Programmfehler
Grüße
> Wenn der Prozess das selber tut, dann soll er das :) Aber er solls> gefälligst nur bei sich machen und nicht alles in den Sumpf reiten...
und was hilft das dem anwender? Wenn das gerät nicht mehr macht was es
soll, dann ist es ziemlich egal ob nur ein Prozess sich selber zerlegt
hat oder ein Prozess den anderen abgeschossen hat.
Wenn jetzt noch die MMU programmierung dazukommt, dann erhöht es
eventuell sogar die fehleranfälligkeit weil ja mehr Programmcode
vorhanden ist, welcher fehler enthalten kann.
Ich kann nicht genauer drauf eingehen, aber es gibt Fälle, in denen es
dem Anwender etwas bringt ;)
Zum Thema MMU-Programmierung habe ich ja oben bereits geschrieben, dass
es sich nach viel Arbeit anhört und ich mir wohl besser was anderes
überlegen sollte. Die Fehler steigen durch händische Nutzung leider mit
an wie du schon sagst. In dem Fall würde wohl nur eine umfangreiche
Codeanalyse zumindest des Teils für die Nutzung der MMU helfen.
Peter schrieb:
> und was hilft das dem anwender? Wenn das gerät nicht mehr macht was es> soll, dann ist es ziemlich egal ob nur ein Prozess sich selber zerlegt> hat oder ein Prozess den anderen abgeschossen hat.
Ist doch besser wenn z.B. bei einem Handy nur der Browser neu gestartet
werden muss, als wenn sich das ganze Ding aufhängt.
@Andreas Schwarz
wenn es ein browser gibt, gibt es auch ein Betriebssystem. Das ist hier
aber nicht der fall.
Wenn es kein BS gibt, gibt es da überhaupt verschienden Prozesse? Ich
würde sagen das es nur ein Prozess gibt mit mehren Threads. Und wenn ein
Thread sich mit seinem Pointern vertan hat, sollte man lieber das ganze
programm resetten als versuchen den Thread wiederzubeleben.
Peter schrieb:
> Wenn es kein BS gibt, gibt es da überhaupt verschienden Prozesse? Ich> würde sagen das es nur ein Prozess gibt mit mehren Threads.
Wie oben schon skizziert bin ich der Ansicht, dass man sich mit der
Verwaltung von Threads, zumal solchen mit getrennten Adressräumen,
automatisch ein mindestens rudimentäres Betriebssystem einhandelt, es
also Threads ohne Betriebssystem per Definition nicht gibt.
Ob man die Dinger allerdings "Prozesse" oder "Threads" nennt... Diese
Unterscheidung ist manchmal einfach, manchmal schwierig. In Windows ist
es einfach: Prozesse sind hinsichtlich Speicher getrennt, Threads teilen
sich Speicher und andere Resourcen. In Linux ist der Übergang dagegen
fast fliessend, weil sich beim klonen eines Prozesses fein aufdröseln
lässt, was genau kopiert und was geteilt werden soll.
Aber vereinfacht würde ich sagen, dass ein eigenständiger Adressraum
(ebd. MMU) für den Begriff "Prozess" spricht, ein gemeinsamer Adressraum
für alle eher für "Thread".
Peter schrieb:
> wenn es ein browser gibt, gibt es auch ein Betriebssystem. Das ist hier> aber nicht der fall.
Du hast eine sehr merkwürdige Definition von Betriebssystem. Windows
beispielsweise, aber auch die Linux-Distros, sind längst nicht nur
Betriebssystem, auch wenn man sie landläufig so nennt, sondern enthalten
einen Rattenschwanz an mitgelieferten Anwendungen. Ein Browser, egal ob
für Filesysteme oder für's Internet, ist eine Anwendung, kein Teil eines
Betriebssystems, auch wenn er auf der CD/DVD mit drauf ist.
Richtig ist wohl, dass man für einen brauchbaren Browser ein
Betriebssystem braucht, aber umgekehrt gilt das nicht.
Also wer schießt schon mit einer MMU Kanone auf einen solchen Spatz?
Es gibt uC, die nur eine MPU (Memory Protection Unit) haben. Mit der
lassen sich die Bereiche (System<->User) trennen. Und wenn es eine
Zugriffsverletzung gibt, wird eine "Exception" ausgelöst (z.B. bei einem
ARM
Cortex-M3 System).
Dafür wurde die MMU zur MPU gestutzt. Wenn man eine MMU hat, empfehle
ich ein
kleines OS, dass die auch nutzt. Vorzugsweise eines, dass nix kostet
(nicht zwingend bei einem kommerziellen Projekt) und von vielen
eingesetzt wird. Dann ist die Gefahr eines Fehlers in diesem System
nicht mehr so groß.
Matthias schrieb:
> Also wer schießt schon mit einer MMU Kanone auf einen solchen Spatz?
Zumindest im ARM Bereich gibt es eine erheblich größere Auswahl an MCU
mit MMU (z.B. ARM926) als mit MPU (einige Cortex-M3). Man kann sich das
manchmal nicht einfach aussuchen.
Auch wenn eine MPU tatsächlich keine abgespeckte MMU ist, kann man (z.B.
für ein RTOS) eine MPU "emulieren", in dem man den page table so anlegt,
dass jede virtuelle Adresse auf die physikalische Adresse gleichen
Wertes (VA==PA) verweist und man selbst nur noch Zugriffsrechte
verwaltet. Bei ARM9 (v5TE) MMUs kann man das recht komfortabel und
schnell über Domains lösen.
Gruß
Marcus
http://www.doulos.com/arm/
> > wenn es ein browser gibt, gibt es auch ein Betriebssystem. Das ist hier> > aber nicht der fall.> Du hast eine sehr merkwürdige Definition von Betriebssystem.> Richtig ist wohl, dass man für einen brauchbaren Browser ein> Betriebssystem braucht, aber umgekehrt gilt das nicht.
genau so habe ich es doch geschrieben, wenn es einen brauchbaren browser
gibt, existiert auch ein Betriebssystem darunter. Ich habe nicht gesagt
das der Browser zum Betriebssystem gehört.