Eigenes OS programmieren
Moin moin,
ich möchte mir ein eigenes OS programmieren! Bevor Bevor nun gleich irgendein Gemecker kommt will ich erstmal behaupten das es nicht viel können soll, fürs erste ein Kernel mit einer einfachen Textausgabefunktion. Ich habe Vorkenntnisse in C und C++ (ein paar Jahre), welche wahrscheinlich nicht schlecht sein werden. Nun will ich als Bootloader GRUB benutzen, zumindest fürs erste und der Kernel soll in Assembler geschrieben werden. Hab im Internet jede Menge darüber gefunden Kernel in C und so weiter aber ich denke in Assembler macht das ganze am meisten Sinn. Dazu muss ich wohl leider sagen das ich so gut wie gar keine Erfahrung mit Assembler habe und die meisten Tutorials die man dazu findet behandel gleich irgendwelche Windows Programmierungssachen welche mich ja nun nicht interessieren. Daher wäre meine ersten Frage ob mir jemand ein paar Assembler Tutorials zeigen die mir weiterhelfen... Die zweite Frage gilt allen anderen Tutorials, möglicherweise sogar ( ich weiß das klingt bescheuert ) einer Schriott für Schritt Erklärung über einen so einfachen Kernel. Ich kann mir nicht vorstellen das da so sonderlich viel Code hinter steckt.
Vielleicht gibt es ja auch noch andere Leute, die sich damit gerne mal ausseinander setzen wollen und genauso wenig Ahnung wie ich haben dann könnte man sich vllt mal über ICQ, Facebook oder sonstwas unterhalten ;)
Ich bin dankbar für jede Antwort!
MfG Inv151673 ;)
7 Antworten
Für ein "brauchbares" Betriebssystem brauchst du eine Speicherverwaltung (virtueller Speicher), ein Dateisystem, und einen CPU-Scheduler. Und die Treiber, die die darunterliegende Hardware ansteuern (MMU, Festplatte Tastatur, Monitor). Netzwerkanbindung wäre sicher auch nicht schlecht. Und wenn du nicht ein bestehendes Binärformat verwendest (z.B. ELF), dann brauchst du auch noch eine Compiler-Toolchain.
Und bestimmt habe ich noch irgendwas vergessen.
Ob du das alles in Assembler schreiben willst wage ich zu bezweifeln. Mach das nur wo es wirklich nötig ist (Hardwareansteuerung), dann hast du immer noch genug Assembler zu programmieren.
Ansonsten kann ich dir nur empfehlen, ein gutes Betriebssysteme-Buch zu lesen. Silberschatz - Operating System Concepts (englisch) oder Tanenbaum - Modern Operating Systems.
Der Silberschatz ist um Längen besser und verständlicher, aber den gibts wohl nicht auf deutsch. Allerdings hat Tanenbaum mit "Minix" auch ein eigenes Betriebssystem (zu Lehrzwecken) entwickelt, das könnte dich interessieren.
Ein OS würde ich in C++ & Assembler entwickeln. Manche Dinge gehen NUR in Assembler, aber der Großteil sollte in einer strukturierten CompilerSprache geschrieben werden, sonst ist man einfach zu langsam / ineffektiv - und verläuft sich u.U. im eigenen Code.
Um die Abläufe beim Booten zu verstehen könntest Du die Doku zum GRUB durchgehen - oder in "PC-Intern" (Buch von Tischer, DataBecker-Verlag) nachschlagen.
Einen Großteil der Tests kannst Du auch von DOS (zBsp. : FreeDOS) aus machen - ohne jedes mal den BootVorgang komplett durchlaufen zu lassen. Unter DOS kann man ganz easy das DAS komplett "entmachten", da die CPU da noch im RealMode läuft.
Für die Programmierung des ProtectedMode (für OS kaum zu umgehen) brauchst Du umfassende CPU-Doku, die bekommt man bei Intel als PDF (https://software.intel.com/en-us/articles/intel-sdm) oder auch in Buchform ("Die Intel Familie" von Robert Hummel, ZD-Press).
Tja, ich entwickle selbst ein Betriebssystem - und muss dir in einem Punkt widersprechen: Hinter einem Betriebssystem steckt viel Code. Denn während du in C aus die Standartbibliothek zugreifen kannst, musst du dir hier wirklich alles selbst schreiben (es sei denn, du entwickelst ein 16-Bit-Betriebssystem; Dann kannst du auf einige Funktionen des BIOS zurückgreifen).
Was Assembler betrifft: Du brauchst auf jeden Fall Assembler. Allerdings kannst du den Teil an Assembler - wenn du es richtig machst - ziemlich gering halten, und das was du brauchst kannst du dir mit "Learning by doing" mit dem unten angegebenen Tutorial aneignen. Ansonsten kannst du dir ja mal ein Buch zum Thema holen - Tutorials im Internet sind meiner Meinung nach nicht zu empfehlen, wenn du größere Programme in Assembler schreibst, da du insbesondere als Anfänger eine kleine Referenz im Buchformat gut gebrauchen kannst.
Hier nun der Link zum Tutorial:
http://www.lowlevel.eu/wiki/OS-Dev_f%C3%BCr_Einsteiger
Die Seite enthält neben dem Tutorial ein umfangreiches Wiki zum Thema.
Schließlich noch eine Seite, die viele nützliche Links enthält:
Hallo,
In den Büchern "PC Intern 4 von M. Tischer" und "PC Hardware von H.-P. Messmer" ist alles beschrieben... Ein Buch über Assembler solltest du dir auf jeden Fall zulegen..
Assembler 2. Auflage von Rhode/Roming und die Assembler Referenz von O. Müller solltest du dabei auf dem Tisch haben. Du musst wissen was AX, BX, CX, DX sowie CS,DS,ES,BP sind sonst läuft garnichts bei dir. Ebenso sollte dem Stack (SS:SP oder BP)und dessen Programmierung große Aufmerksamtkeit geschenkt werden.
Am besten schreibst du erstmal ein paar kleinere .com Programme für MS-DOS. Da lernst du den Umgang mit den Interrupts.
Fange mit dem OS im Real Mode an und nutze die BIOS Interruptfunktionen für dein OS, es nimmt dir viel Arbeit ab. Zur freien Verfügung hast du deine Grafikkarte, dein Diskettenlaufwerk und deine IDE Festplatte.
Im Internet kann ich dir noch Henkesoft empfehlen.
Einen Booloader mit Textausgabe zu erstellen ist ein Kinderspiel, alles andere jedoch bedarf sorgfältiger Planung und Programmierung.
Viel Erfolg,
Nicky
Für Microsoft Visual Studio gibt's "Cosmos". Damit kann man sein einziges OS programmieren. Tutorials? Einfach mal bei Youtube gucken oder googlen. Ich glaub mit mehrjährigen C/C++ Kenntnissen sollte das ja kein Problem sein :)
Das Wiki ist zwar im deutschsprachigen Raum das umfangreichste, allerdings kommst du im OS - Development nicht ohne Englisch - Kenntnisse aus. Daher hier der Link zur umfangreicheren englischen Version des Wikis:
http://wiki.osdev.org