Ein eigenes Betriebssystem programmieren?
"Betriebssystem" ist vermutlich der falsche Ausdruck es soll keinenfalls auch nur im Geringsten an das DOS System rankommen. Was ich mir vorstelle (und Ja ich weiß es wird Ewigkeiten dauern) ist folgendes:
Ich würde mir eine Raspberry PI anlegen und das "Betriebssystem" dann dafür programmieren, dabei wäre ich schon mehr als zufrieden wenn es einfach selbst starten könnte, einen Text anzeigen würde und Daten über eine angeschlossene Tastatur sammeln könnte auf die es dann "reagieren" kann.
Ich weiß die Ziele sind hoch und es wird keinesfalls ohne einer großen Menge Frustration und Enttäuschung passieren.
Frage: Dennoch bitte ich euch um Hilfe, denn ich kann zwar schon etwas programmieren (Java, C#, C++) aber mir fehlt eine ToDo-Liste an sachen die ich lernen/verstehen/beherschen muss um mit meinem Vorhaben zu beginnen. Ich würde euch deshalb darum bitten mir Thematiken, Sprachen, Algorythmen oder was auch immer zu diesem Thema passt und was ich wissen sollte mir zu schreiben.
zB. Pointer und Pointerarithmetik
Gerne könnt ihr mir auch privat schreiben: jonas.moser.os@gmail.com
5 Antworten
Ich würde mir eine Raspberry PI anlegen und das "Betriebssystem" dann dafür programmieren
Keine gute Idee, zum technischen Teil komm ich später.
dabei wäre ich schon mehr als zufrieden wenn es einfach selbst starten könnte, einen Text anzeigen würde und Daten über eine angeschlossene Tastatur sammeln könnte auf die es dann "reagieren" kann.
Du unterschätzt die OS Programmierung grade gewaltig ..
Wenn du nicht wirklich verstehst wie so ein Computer aufgebaut ist, dürfte das sehr frustrierend werden.
Grade am Anfang wirst du viel nachlesen müssen und wahrscheinlich den ein oder anderen Codeschnipsel bei anderen abschreiben.
Und der RasPi ist da denkbar ungünstig :
Der mag zwar auf den ersten Blick klein und damit leichter zu programmieren aussehen, aber das täuscht.
Das Ding basiert auf einer ARM Architektur und es gibt nicht besonders viele Assembler (oder spezifische RasPI OS Tutorials). Dazu kommt, dass es meines Wissens nach keinen einheitlichen Interrupt für die Bildschirmausgabe gibt.
Außerdem wirst du grade am Anfang auf einen fertigen Bootloader zurückgreifen (GRUB zB). Für den RasPi sind die Dinger auch eher Mangelware.
Deine Vorstellungen hören sich jetzt erst mal sehr trivial an, aber das trügt. Aber wenn du auf irgendwelche Eingaben reagieren willst, wirst du früher oder später irgend was abspeichern müssen. Daraus resultierend wirst du dir eine Speicherverwaltung programmieren müssen.
Irgendwann willst du dann eine "einfache GUI". Hört sich einfach an, dafür brauchst du dann a) Multi threading und b) Einen Algorithmus um die Schaltflächen zu zeichnen.
Frage: Dennoch bitte ich euch um Hilfe, denn ich kann zwar schon etwas programmieren (Java, C#, C++) aber mir fehlt eine ToDo-Liste an sachen die ich lernen/verstehen/beherschen muss um mit meinem Vorhaben zu beginnen. Ich würde euch deshalb darum bitten mir Thematiken, Sprachen, Algorythmen oder was auch immer zu diesem Thema passt und was ich wissen sollte mir zu schreiben.
Die Phrase zeigt mir deutlich, dass du das Projekt nach hinten stellen solltest.
Du machst -sorry aber das ist so- keinen besonders qualifizierten Eindruck. Du nennst wild irgendwelche Programmiersprachen (Die du bis auf C++ vergessen kannst), du schreibst Algorithmen falsch (Das Wort hast du wohl noch nicht all zu oft benutzt) und bittest um eine To Do Liste.
Ich weiß die Ziele sind hoch und es wird keinesfalls ohne einer großen Menge Frustration und Enttäuschung passieren
Ich könnte dir jetzt natürlich empfehlen, dass du dir "Moderne Betriebssysteme" von Tanenbaum und "Einführung in die Mikrocomputertechnik" von Osborne kaufst. Aber dir wird nach einem Tag der Kopf rauchen, weil du das Themengebiet fachlich nicht verstehst.
Also programmier lieber noch ein bisschen vor dich hin, bist du dir die Frage vom Wissen eher eh selber beantworten kannst.
Du musst Dich dafür zumindest auf C++ beschränken, denn C# setzt .NET voraus und auch Java braucht eine fertige Systemumgebung.
Selbst bei C++ musst Du auf praktisch alle Bibliotheken verzichten, die eine Laufzeitumgebung voraussetzen: kein print, keine Dateien und vor Allem keinen Memory-Manager. Stattdessen musst Du Dir Bibliotheken besorgen (oder selbst erstellen), die die Aufrufe an BIOS und Gerätefirmware auf Anforderung durch das Betriebssystem weitergeben.
Um überhaupt etwas weiter zu kommen, solltest Du mit einem 32-Bit-Rechner beginnen, der von einem Medium (idealerweise eine Diskette) booten kann. Dieser Start erfolgt im 16-Bit-Modus, in dem Du wohlbekannte BIOS-Aufrufe auch unter DOS ausprobieren kannst.
http://www.brotcrunsher.de/index.php?topic=1149.msg6853#msg6853
Ich vermute stark das du auch mit Assembler sehr sicher sein solltest.
Tatsächlich sind OS-Kernel hautpsächlich in C geschrieben.
Für den Start-Up-Code kommt man um Assembler aber in der Regel nicht drum herum!
Der Einsatz von C++ in einem Systemkern ist extrem kompliziert, so dass ich dringend davon abraten würde.
Auf diese Seite bin ich bereits gestoßen, aber ich bin eben noch nicht so weit.
Versuche nicht direkt zu Beginn deiner Programmierlaufbahn die Entwicklung eines Betriebssystems in Angriff zu nehmen. Falls du nicht bereits C, C++, Pascal oder eine ähnlich geeignete Programmiersprache im Schlaf beherrschst, einschließlich Pointer-Manipulation, maschinennahe Bitmanipulation, Bit-Shifting, Inline-Assemblercode, usw. bist du nicht bereit für die Entwicklung eines Betriebssystems.
Ich suche momentan solche Themen wie hier aufgelistet sodass ich mich darauf vorbereiten kann irgendwann später sobald ich so weit bin mein Projekt in Angriff zu nehmen.
Vielleicht solltest du erstmal lernen ein Spiel zu programmieren. Ist zwar auch nicht der Anfang, aber ich denke wenn man das erstmal kann, sollte es möglich sein auch ein BS zu entwickeln.
https://www.spieleprogrammierer.de/wiki/Spiele_programmieren_lernen
Aber genaueres kann ich dir auch nicht sagen. Programmieren ist nicht mein Fall.
Hier mal ein Forumsbeitrag dazu.
Ich suche momentan solche Themen wie hier aufgelistet sodass ich mich darauf vorbereiten kann irgendwann später sobald ich so weit bin mein Projekt in Angriff zu nehmen
Das macht absolut keinen Sinn. Schaff dir erst mal die Programmier Grundlagen drauf.
Bit Shifting und Pointer sind meiner Ansicht nach absolute Grundlagen was C++ anbelangt.
Sich zusammenhangslos in irgendwelche möglicherweise relevante Themengebiete einzulesen bringt dich nicht wirklich weiter
Ja genau so etwas wollte ich auch schon immer gerne machen. Überschreitet aber glaube ich meine kompetenz
Danke für den Link, zu dem dass man Assembler sehr gut beherrschen sollte hab ich folgendes gefunden:
Dennoch habe ich geplant wenigstens die Grundlagen von Assembler zu lernen