Hallo Leute,
also ich würde gerne zu Lehrzwecken mein eigenes Betriebssystem
schreiben. Dabei hatte ich zunächst an ein Betriebssystem für die
ARM-Architektur gedacht. Sollte dies schwieriger oder unnötig
komplizierter sein, als x86-Architektur lasse ich mich gerne eines
besseren belehren.
Damit ich loslegen kann, wollte ich fragen, ob hier jemand ein gutes
Buch oder ebook/Website empfehlen kann, mithilfe dessen man loslegen
kann und die Grundlagen sowie ersten Gehversuche Schritt-für-Schritt
erläutert bekommt.
WICHTIG: Ich möchte im Folgenden nicht solche Kommentare hören, wie
"Bist du verrückt, das ist viel zu viel!" oder "Starte doch mit dem
fertigen Linuxkernel". Ich bin mir durchaus bewusst, wieviel Arbeit in
einem halbwegs funktionsfähigen Betriebssystem steckt. Ich möchte auch
garkein komplexes oder gar nützliches Betriebssystem schreiben. Ich
möchte lediglich meine bisher erlernten Theoriekenntnisse gerne ein
bisschen anwenden können - wie oben bereits zu beschrieben einfach zu
"Lehrzwecken".
Über Antworten freue ich mich...
Prinzipiell wird die Programmierung für ARM oder x86 wohl nicht so
unterschiedlich sein, falls du nicht gerade in Assembler programmierst.
Wichtiger ist eher wie die zugrundeliegende Hardware funktioniert und
wie kompliziert es ist ein paar einfache Grafikausgaben zu erzeugen. Bei
x86 ist es zumindest nicht so kompliziert, da du erstmal BIOS interrupt
calls benutzten kannst. Beim Raspberry Pi ist auch die Frage ob diese
ganzen lowlevel Sachen überhaupt vernünftig dokumentiert sind. Außerdem
ist es empfehlenswert für ein System zu programmieren, welches du auf
deinem PC emulieren kannst. Ständig die SD-Karte beim Raspberry Pi neu
zu programmieren ist auf Dauer auch nervig. Eine Möglichkeit zum
Debuggen wäre auch nicht verkehrt.
Jaques Richard schrieb:> ich würde gerne zu Lehrzwecken mein eigenes Betriebssystem> schreiben.
Vergiss es. Warum möchtest du das Rad neu erfinden.
Nimm ein Linux Kernel her !!!
Bevor du einen OS schreibst (und "Modern Operating Systems" wurde ja als
Standardwerk schon erwähnt), solltest du erstmal einen Bootloader
schreiben, um ein C-Environment zu haben. Von da aus kannst du dann in
C++ wechseln.
Dazu solltest du das "ARM Architecture Reference Manual" (für deine
Architektur) quasi auswendig lernen.
Dann kannst du die Memory Isolation, IPC und Scheduling implementieren.
Dann darfst du dir überlegen ob du ein monolithisches OS oder einen
Mikrokern haben willst und welches System Interface du haben willst
(Bspw POSIX oder L4). Diese darfst du dir dann auch noch zu Gemüte
führen.
Bei einem monolithischen OS fehlt jetzt noch eine Geräteabstraktion und
alle Treiber. Für das Mikrokernsystem wird dies überlicherweise als
Userspace-Services implementiert.
Prinzipiell ist das Vorgehen von der Prozessorarchitektur unabhängig.
Jaques Richard schrieb:> WICHTIG: Ich möchte im Folgenden nicht solche Kommentare hören, wie> "Bist du verrückt, das ist viel zu viel!" oder "Starte doch mit dem> fertigen Linuxkernel".
Ich finde es eine sehr gute Idee. Trozdem ist zu beachten, das dass
schreiben eines OS ein Tiefes verständniss der zugrundeligenden Hardware
erfordert. Das grösste Problem werden die Treiber sein. Du wirst sie
möglicherweise selber schreiben, oder bestehende anderer OSe portieren
müssen. Das wird viel zeit kosten und nicht besonders lustig sein.
Ich empfehle zuerst ein Konzept zu machen, was das OS können soll. Mit
einem klaren Konzept und Ziel wird es einfacher, und man pfuscht
weniger.
Viel Erfolg!
Daniel A. schrieb:> Trozdem ist zu beachten, das dass> schreiben eines OS ein Tiefes verständniss der zugrundeligenden Hardware> erfordert. Das grösste Problem werden die Treiber sein.
das sehe ich genau anders rum. >90% eines Betriebssystems sind
Hardware-unabhängig. Interprozesskommunikation, Speicherverwaltung,
Dateisysteme etc. sind so ein fetter Batzen von Wissen, da ist die
Hardware erst mal komplett nebensächlich. Entweder nimmst du etwas
bestehendes, oder du erfindest das Rad komplett neu, oder orientierst
dich an verschiedenen bestehenden Implementationen und backst dir daraus
was neues, eigenständiges was besser als das vorhandene läuft.
Das alles läßt sich auf bestehenden Umgebungen (existierenden OS)
wunderbar entwickeln und austesten. Hat auch den Vorteil, daß du da
ebenfalls keine Hardware-Level benötigst, sondern auf bestehende
Bibliotheksfuntionen deinens bestehenden OS zurück greifen kannst.
In deinem neuen OS hast du ja eh einen Hardware-Abstraktionslevel
eingezogen, und schon ist auch die zugrunde liegende Hardware soweit
nahezu vollständig gekapselt.
Wenn alles zuvor gesagte einwandfrei läuft, dann fummelst du dir noch
einen Treiber für eine "real existierende" Hardware zurecht, übersetzt
alles nochmal zusammen, und - schwupps - ist dein neues OS auf deiner
neuen Hardware betriebsbereit.
Jaques Richard schrieb:> Hallo Leute,>> also ich würde gerne zu Lehrzwecken mein eigenes Betriebssystem> schreiben.
Gratuliere!
> Ich möchte auch> garkein komplexes oder gar nützliches Betriebssystem schreiben. Ich> möchte lediglich meine bisher erlernten Theoriekenntnisse gerne ein> bisschen anwenden können - wie oben bereits zu beschrieben einfach zu> "Lehrzwecken".
Dann schau mal nach FreeRTOS. Nicht als Alternative für dein Vorhaben,
sondern als Beispiel und um Einsicht zu bekommen wie die Theorie in der
Praxis umgesetzt werden kann. Der ganze Kernel besteht da aus lediglich
4 oder 5 Dateien, das ist überschaubar und wesentlich einfacher als z.B.
der Linux-Kernel. FreeRTOS ist gut dokumentiert und es existieren Ports
für die meist gängigen Prozessoren.
Wobei der Begriff "OS" bei diesen ganzen RTOS-Geschichten meist ein
wenig hoch gegriffen ist.
Eigentlich ist das ja nur immer ein Scheduler (also ein wichtiger, aber
kleiner Teil eines OS) und ein wenig Semaphore-Zeugs.
Probleme wie Speicherverwaltung, Hardwareabstraktion oder gar das Laden
von Programmen zur Laufzeit werden von FreeRTOS (und der ganzen
RTOS-Verwandschaft) in der Regel nicht gelöst.
Aber, ja, auch der Scheduler ist durchaus interessant und FreeRTOS
sollte man sich doch mal zu Gemüte führen um zu verstehen, wie ein
Kontextwechsel funktioniert.
Aber so ein kleiner RTOS wie FreeROTS ist mal ein guter Anfang. Alles
andere, wie Speicherverwaltung, Hardwareabstraktion oder gar das Laden
von Programmen zur Laufzeit kann zu 99% OS-unabhängig geschrieben
werden.
Wegstaben Verbuchsler schrieb:> Daniel A. schrieb:>> Trozdem ist zu beachten, das dass>> schreiben eines OS ein Tiefes verständniss der zugrundeligenden Hardware>> erfordert. Das grösste Problem werden die Treiber sein.>> das sehe ich genau anders rum. >90% eines Betriebssystems sind> Hardware-unabhängig. Interprozesskommunikation, Speicherverwaltung,> Dateisysteme etc. sind so ein fetter Batzen von Wissen, da ist die> Hardware erst mal komplett nebensächlich.
Um mit den von dir genannten Dingen überhaupt anfangen zu können, muß
man aber vorher schon viele Hardware-spezifische Dinge erledigt haben.
Aus meiner Sicht wäre auch ein Blick auf MP/M (oder auch CCP/M 86)
sinnvoll,
da diese Systeme sehr gut dokumentiert sind und überschaubar sind.
Gute Anlaufstelle dazu: www.cpm.z80.de
Viel Spass und Erfolg!