Was braucht man alles um ein Betriebssystem zu programmieren?

10 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Da ich selbst bereits ein Betriebssystem programmiert habe und seit längerem an meinem zweiten OS arbeite, weiß ich es. Es gibt übrigens mehr Hobbyprogrammierer als man denkt, die so etwas machen und es ist einfacher, als die meisten denken:

Ohne Assembler für den entsprechenden Prozessor kommst du auf gar keinen Fall aus. Gerade in der Initialisierungsphase des OS müssen Dinge gemacht werden, die man nur direkt in Assembler hinbekommt.

Es gibt ein Freeware-Betriebssystem mit grafischer Oberfläche, das komplett in Assembler geschrieben ist; da größere Programme in Assembler aber sehr unübersichtlich sind und es schwerer ist, Programme in Assembler zu schreiben als in einer Hochsprache, wird ein Großteil eines Betriebssystems in C geschrieben.

C ist diejenige Programmiersprache, die sich am einfachsten mit Assembler mischen lässt. Außerdem bietet C von sich aus die Möglichkeit, auf bestimmte Hardware-Adressen zuzugreifen, was bei einem Betriebssystem natürlich absolut wichtig ist.

C++ wird deswegen nicht verwendet, weil es sich nicht so gut mit Assembler mischen lässt; außerdem kann man einige C++-Features (z.B. das Schlüsselwort "new") in einem Betriebssystem an vielen Stellen nicht einsetzen. Außerdem verwenden C++-Compiler bestimmte Funktionen, die für bestehende Betriebssysteme bereits fertig programmiert sind. Diese muss man für das eigene Betriebssystem dann erst einmal selbst programmieren.

Sprachen wie Java oder C# kann man gar nicht verwenden, da diese Sprachen - sehr stark vereinfacht gesagt - völlig darauf ausgelegt sind, dass die Programme, die in diesen Sprachen geschrieben sind, von einem anderen Programm aus gestartet werden (z.B. der "Java Virtual Machine").

Fazit: Um ein Betriebssystem schreiben zu können, braucht man Assembler und C.

Übrigens: Bei Dev-Cpp sind prinzipiell alle Tools, die man zum Schreiben eines Betriebssystems braucht, dabei - wenn auch etwas versteckt (bei Visual Studio nicht).

Sk4t3r3223 
Fragesteller
 16.08.2015, 19:21

Also sollte ich lieber C lernen? Und wo bekommen ich Assembler her? Weil Dev-Cpp ist ja C++.

0
Sk4t3r3223 
Fragesteller
 16.08.2015, 19:32

Und danke für die Antwort! Ist es wirklich nicht so schwer? :D Ich möchte halt echt gerne ein eigenes OS programmieren aber dafür muss ich ja min. eine Programmiersprache können :P. Also welche wäre am Sinnvollsten zu lernen als erstes? Ist Assembler auch sowas wie eine Programmiersprache und muss ich dies dann auch lernen?

0
martin7812  16.08.2015, 20:19
@Sk4t3r3223

Ist es wirklich nicht so schwer?

Jein. In vielen Beiträgen hier auf GF lese ich Sachen wie "es ist für eine einzelne Person unmöglich, ein Betriebssystem zu programmieren".

Wenn man Windows oder aktuelle Linux-Versionen als Vorbild nimmt, stimmt das!! Allerdings gibt es ja auch wesentlich einfachere Betriebssysteme. Ein Betriebssystem in der Art von MS-DOS ist durchaus für einen guten Hobbyprogrammierer alleine machbar.

Allerdings rede ich von guten Hobbyprogrammierern mit mehreren Jahren Erfahrung.

Ich möchte halt echt gerne ein eigenes OS programmieren aber dafür muss ich ja min. eine Programmiersprache können

Wie gesagt: Bis du so weit bist, musst du wahrscheinlich noch SEHR viel üben...

Weil Dev-Cpp ist ja C++.

In der Dev-Cpp-Version, die ich habe, war der GNU-C/C++-Compiler dabei. Damit kann man sowohl C als auch C++ programmieren.

Im Gegensatz zum Visual Studio-Compiler wandelt der GNU-Compiler den Code erst in Assembler um und dann den Assembler-Code in "binären" Code. Daher ist das Programm, das man zum Schreiben von Programmen in Assembler benötigt, auch gleich mit dabei.

Also welche wäre am Sinnvollsten zu lernen als erstes?

Das ist etwas komplizierter:

Man kann Programmiersprachen ganz grob in drei Kategorien einteilen: "Prozedural", "imperativ-objektorientiert" und "deklarativ".

Da die Denkweise in diesen Programmiersprachen jeweils eine ganz andere ist, ist der Wechsel von einer Kategorie in eine andere Kategorie nicht so ganz einfach; der Wechsel innerhalb einer Kategorie ist jedoch leicht.

Für Betriebssysteme, Microcontroller, Steuergeräte im Auto usw. benötigt man in der Regel C und Assembler. Das ist prozedurale Programmierung, so dass man, wenn man sich dafür interessiert, mit einer prozeduralen Programmiersprache anfangen sollte. Früher hätte ich Pascal vorgeschlagen, aber da inzwischen wesentlich bessere Literatur zu C im Internet verfügbar ist, würde ich heute wohl dazu raten, direkt mit C anzufangen.

Assembler ist übrigens ein ganz anderes Kaliber: Viele Leute, auch hauptberufliche Programmierer, tun sich damit sehr, sehr schwer...

Wenn man sich hingegen für Handy- und Tablet-Apps, Computerspiele, Anwendungsprogramme usw. interessiert, ist wiederum imperativ-objektorientierte Programmierung angesagt.

1
Sk4t3r3223 
Fragesteller
 16.08.2015, 20:44
@martin7812

Also Hauptsächlich Interessiere ich mich für Spieleentwicklung und Anwendungsprogramme aber halt auch für Betriebsysteme :/

Und weiß halt nicht genau mit welcher Programmiersprache ich anfangen sollte.

0

Heutzutage ist ein IT-Studium nicht verkehrt, wenn man sich an solch eine Aufgabe setzen will. Das Erlernen einer Programmiersprache allein reicht nicht aus.

Wie Windoof geschrieben ist, kriegt man nicht raus. Das ist eines der bestgehüteten Geheimnisse auf diesem Planeten, vergleichbar mit der Rezeptur von Coca-Cola.

Aber Du kannst Dir mal einen Linux-Kernel (frei verfügbar) ansehen und analysieren, um ein Gefühl dafür zu erhalten, wie man ein BS aufzieht.

Viel Vergnügen

Davklid00  15.08.2015, 20:05

..oder die Krabbenburger Geheimformel :o

0

Boah, da hast Dir aber was vorgenommen. Moderne Betriebssysteme sind megakomplex, da bist Du als "Einzelkämpfer" mal für ein paar hundert Jahre beschäftigt ;-)

Aber um Deine Frage zu beantworten: Wenn Du ein komplett neues Betriebssystem programmieren willst, dann solltest (oder möchtest) Du ja unabhängig von existierenden Plattformen sein. Wenn Du auf der Basis von Microsoft Visual Studio arbeitest, bewegst Du Dich ja automatisch in der ".NET" - Welt, entwickelst also Programme, die auf der Basis der Microsoft-Plattform laufen. Wäre natürlich n bissel doof, wenn Du jetzt jedem Anwender Deines Betriebssystems sagen müsstest: "Hey, als Basis brauchst Microsoft Windows und '.NET'!" Das kann es also nicht sein.

Deshalb ist es am sinnigsten, mit einem plattformunabhängigen Compiler zu starten. C++ ist schon mal ne gute Wahl, weil Du damit auch richtig systemnah entwickeln kannst. Allerdings wirst Du jede Menge lernen müssen, wenn es darum geht, die einzelnen Komponenten einer Hardware miteinander zu verheiraten - denn zunächst musst Du die ja über Dein Betriebssystem ansprechen können.

Ich rate Dir, erstmal mit ein paar kleineren C++-Programmen zu starten und dann wird Dir schnell klar werden, dass die Entwicklung eines eigenen Betriebssystems eine echt herausfordernde Aufgabe darstellt.

Wenn Du immer noch magst: halt mich auf dem lfd, da bin ich (wirklich) neugierig.

viel Erfolg!

PS: ich arbeite übrigens selber in der Softwareentwicklung, allerdings im Bereich Applikationen

Sk4t3r3223 
Fragesteller
 15.08.2015, 21:21

Danke für die Antwort! Werde auch jetzt anfangen eine Programmiersprache zu lernen, wird auch höchstwahrscheinlich C++ sein da ich damit schon ein kleines Memory Game programmiert hab(nichts besonderes aber naja :P). Habe auch Informationstechnik in der Schule, wo ich das Programmieren auch lerne. Aber ich fange erstmal damit an kleine Programme zu programmieren und noch vieel mehr zu lernen. Aber die Interesse ein eigenes Betriebssystem zu programmieren bleibt und ich hoffe irgendwann wird das auch klappen (und ja ich weiß das wird nicht einfach und wird ne Zeit lang dauern :D)

0
martin7812  16.08.2015, 06:47

Moderne Betriebssysteme sind...

Wenn ich die Frage richtig gelesen habe, steht von einem "modernen" Betriebssystem nichts in der Frage.

Ein sehr primitives Betriebssystem kann ein guter Hobbyprogrammierer mit Erfahrung in bestimmten Bereichen innerhalb von einer Woche schreiben; ein halbwegs funktionierendes Betriebssystem in 2-4 Wochen.

0

Kauf Dir mal den Tanenbaum ("Modern Operating Systems").

Oder schau ganz tief in den Source Code von Linux rein.

Es gibt dabei nicht wirklich was besseres. Schau  mal was die Unterschiede sind und guck mal was eher für dein Programm benötigt wird.