Betriebssystem in C geschrieben: Wie kann das funktionieren?
-
Hallo!
Ich habe im Internet einmal nach dem Sourcecode eines sehr einfachen "Betriebssystems" gesucht (war eigentlich kein OS, sondern einfach nur ein Programm, das selbstständig vom Master-Boot-Record aus starten kann). Ich wollte einfach einmal wissen wie so ein Bestriebssystem intern ungefähr ausschaut.
Habe das Programm heruntergeladen, mit einem speziellen Tool in den Master-Boot-Record einer Diskette geschrieben und es hat wirklich funktioniert.So, nun zur eigentlichen Frage: Auf der Seite, wo ich das Programm runtergeladen habe hat der Autor geschrieben, dass er das Programm eigentlich in C++ schreiben wollte, dann aber doch Assembler nehmen musste, da C(++)-Programme immer an ein Betriebssystem gebunden sind und ohne dieses nicht funktionieren.
Andererseits ist aber angeblich auch Windows selbst in C++ geschrieben. Wenn C-Programme an ein Betriebssystem gebunden sind, wie kann Windows dann funktionieren? Während Windows startet ist ja noch kein Betriebbsystem vorhanden.Kann mir das mal jemand genauer erklären?
mfg
-
..
-
Müßte es nicht auch möglich sein mit einer Hochsprache (jetzt nicht unbedingt C) ein startfähiges OS zu schreiben, wenn der Compiler das entsprechend übersetzt?!? Schließlcih wird sowohl Assembler, als auch eine Hochsprache im Endeffekt in Maschinencode umgewandelt (bei Assembler hat man halt mehr "Kontrolle" darüber, was die Maschine am Ende wirklich für Befehle ausführt).
Oder wäre sowas zu viel Aufwand? Gibt's sowas vielleicht schon... ein OS Loader Compiler?
-
Ich habe bisher noch kein Beispiel gefunden, das ohne Assembler startet. Ob das theoretisch möglich ist, weiß ich nicht. Praktisch ist der Assemblerstart aber kein Problem. Es gibt genügend freie Vorlagen, die man einfach einsetzen kann.
-
Gibt's sowas vielleicht schon... ein OS Loader Compiler?
Jeder Compiler, der 16Bit Code compilieren kann, ist (auch) ein "OS Loader Compiler" :p
Vorausgesetzt die Sprache unterstützt entsprechende Mittel, auf bestimmte Speicherstellen zu zugreifen.... In C/C++ zB. Pointer.Achja: Falls nicht bekannt:
32Bit Code können x86 CPUs anfangs nicht ausführen - man muss erst manuell in den Protected Mode gehen.P.S.: Hat diesbezüglich schon jemand Erfahrungen mit anderen Prozessor Architekturen gesammelt?
-
Platon schrieb:
Achja: Falls nicht bekannt:
32Bit Code können x86 CPUs anfangs nicht ausführen - man muss erst manuell in den Protected Mode gehen.Ganz genau, und dafür braucht man Befehle, die in C einfach kein Äquivalent haben und damit nicht einfach aus nem C-Quelltext kompiliert werden können. Ebenso das für lowlevel-Routinen nötige Aufrufen von Interrupts etc. Man kann den größten teil machen, aber für vieles braucht man (nicht nur beim Start) inline-Assembler
P.S.: Hat diesbezüglich schon jemand Erfahrungen mit anderen Prozessor Architekturen gesammelt?
Ich kenne ansonsten nur die Sparc, wo man im Prinzip keinen Modus mehr schalten muss. Dennoch muss man auch da als OS viel auf die Kontrollregister der CPU zugreifen und auch das sind teile, die in C kein Äquivalent ahben, deswegen würd eich sagen, da ists dasselbe Dilemma.