Ein eigenes Betriebssystem programmieren?

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.

JonasMoser 
Fragesteller
 30.07.2016, 10:22

Danke für den Link, zu dem dass man Assembler sehr gut beherrschen sollte hab ich folgendes gefunden:

Ein weit verbreitetes Vorurteil ist, dass man ein Betriebssystem komplett in Assembler schreiben muss, oder sogar erst einen Compiler entwickeln müsste. Quatsch. Man kann, wenn man es möchte, aber man muss nicht. Wahr ist, dass man um einige wenige Zeilen Assembler nicht herumkommen wird, aber es hält sich in Grenzen.


Zitat -  www.lowlevel.eu

Dennoch habe ich geplant wenigstens die Grundlagen von Assembler zu lernen

0
martin7812  30.07.2016, 17:17
@JonasMoser

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.

0
JonasMoser 
Fragesteller
 30.07.2016, 09:53

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.

0
procoder42  30.07.2016, 18:06
@JonasMoser

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

0

Ja genau so etwas wollte ich auch schon immer gerne machen. Überschreitet aber glaube ich meine kompetenz