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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.