Ich habe darüber nachgedacht, ein Hobby-Betriebssystem für einige der ARM-Prozessoren zu schreiben. Es gibt viele beliebte Einplatinencomputer mit ARM MPU, daher wollte ich einfach einen davon kaufen (einen mit offenerer Dokumentation auswählen). Ich war überrascht, als ich herausfand, dass selbst Boards mit wirklich genügend Speicher keine MPUs mit Memory Management Unit haben.
Da ich immer mit i386 + -Prozessoren gearbeitet habe und nie etwas anderes (außer einigen Microchip-PICs), bin ich jetzt verwirrt und nicht sicher, ob man ein funktionierendes Betriebssystem schreiben kann, dessen Funktionalität im Vergleich zu geschriebenen Betriebssystemen nicht eingeschränkt wäre für MPUs mit MMU.
Ich könnte mir nur wenige Lösungen zum "Ersetzen" oder "Simulieren" von MMU vorstellen und habe einige Fragen:
- Auf Intel-Prozessoren im 16- und 32-Bit-Modus gibt es eine Möglichkeit, Segmente und Segmentselektoren zu verwenden, um unterschiedliche Speicherblöcke für unterschiedliche Aufgaben zu verwenden. Das bedeutet, dass ich den Speicherplatz ändern kann, indem ich den Inhalt der Segmentregister ändere, wenn ich unter x86 einen Taskwechsel durchführe. Gibt es allgemeine Konzepte für die Speichersegmentierung, die für die ARM-Architektur verwendet werden könnten?
- Durch Laden einer verknüpften Objektdatei anstelle einer ausführbaren Datei konnte ich Verschiebungen (Korrekturen) oder positionsunabhängigen Code verwenden, um Aufgaben auf Speicherelemente zu verweisen, so als ob ich den Speicher mithilfe von Paging-Strukturen zugeordnet hätte. Wäre das effektiv genug?
- Ich habe auch etwas über Speicherschutzeinheiten auf ARM-Prozessoren gelesen. Könnten diese hilfreich sein?
Gibt es "übliche" Möglichkeiten, Aufgaben auf Systemen ohne MMU zu verwalten?