Betriebsysteme mit C++



  • Betriebssysteme werden nicht in C++ sondern nur in C geschrieben. Über die Gründe kann man sich via Google informieren.
    Höchstens in ganz bestimmten sehr hohen Ebenen kann C++ zum EInsatz kommen. Bei Windows ist dieser Bereich aber sehr eingeschränkt. 95% is in C geschrieben.

    Wenn Du Dir das Entwickeln eines OS mal anschauen willst, dann schau mal hier rein:
    http://www.c-plusplus.net/forum/f62



  • Es gibt durchaus auch Betriebssysteme die in C++ geschrieben sind, auch wenn es nicht so viele sind. Allerdings benötigt man etwas mehr an Initialisierungscode und gewisse Features benötigen Laufzeitunterstützung, weswegen man diese zum Teil meist weglässt. Weitere Informationen dazu gibt es z.B. unter http://www.lowlevel.eu/wiki/C++ oder http://www.lowlevel.eu/wiki/C++. Aber dabei gilt fast noch mehr als bei C das man sich mit der Sprache auskennen sollte und genau wissen sollte was sie tut.



  • Jochen Kalmbach schrieb:

    Betriebssysteme werden nicht in C++ sondern nur in C geschrieben. Über die Gründe kann man sich via Google informieren.

    Naja, absolute KO Gründe gibt es eigentlich keine wirklichen, oder?

    Das grösste Hindernis das ich kenne, ist, dass Teile der Runtime-Library Dinge verwenden wollen die im Kernel-Mode nicht verfügbar bzw. nicht erlaubt sind.
    Das allerdings nur, weil es einfach nicht vorgesehen war C++ im Kernel laufen zu lassen - nicht weil es nicht möglich wäre.

    Unsere (Kernel-Mode) Windows Treiber sind auf jeden Fall allesamt in C++ geschrieben.



  • Wenn du mich fragst ist der einzige rationale Grund heute für irgendetwas C zu verwenden dass es für eine Zielplattform keinen C++ Compiler gibt. Betriebssysteme sind da keine Ausnahme. Wie gesagt erfordern bestimmte Sprachfeatures wie z.B. Exceptions Laufzeitunterstützung die eben implementiert werden muss. Für alles außer Exceptions ist das aber trivial (operator new/delete für dein Speichermanagement definieren und den compilerspezifischen stub für pure virtual function calls machen und es lauft schonmal praktisch alles, d.h. der notwendige Support für 95% aller Sprachfeatures ist mit ca. 10 Zeilen C++ Code erledigt) und auf die kann man auch einfach verzichten...

    Wenn man C++ verwenden kann bietet es einem gegenüber C jedenfalls nur Vorteile. Allein Overloading und Templates sind imo ein Grund warum ich nie freiwillig pures C verwenden würde wenn ich die Wahl habe. Ich bin zwar kein Experte was OS dev angeht aber ich hab schonmal auf der uni ein gazes Semester lang an einem Kernel rein in C++ (und natürlich das notwendige Minimum an asm) gebastelt ohne auch nur über das geringste Problem zu stolpern welches man in C nicht auch hätte. Natürlich setzt das voraus dass man nicht nur C++ beherrscht sondern auch solide Kenntnisse über die Mechanismen hinter der Sprache hat. Aber das ist bei OS dev (ganz egal mit welchen Sprachen) sowieso klar. Warum so viele Betriebssysteme großteils in C geschrieben sind hat jedenfalls wohl hauptsächlich historische Gründe und vereinzelt liegts wohl daran dass es für manche Plattformen keinen gescheiten C++ Compiler gibt. Es hat jedenfalls sicherlich nichts mit irgendwelchen inherenten Einschränkungen von C++ zu tun.



  • Danke für die Antworten!!

    Hat mir sehr geholfen!!

    MfG Dennis1995



  • dot schrieb:

    d.h. der notwendige Support für 95% aller Sprachfeatures ist mit ca. 10 Zeilen C++ Code erledigt

    ROFL



  • Hi leutz,

    Sry aber es gibt platformspezifische C++ Compiler (ARM/8058/AVR)...
    Worüber ihr euch hier streitet ist die RTL...

    Es ist klar das man da noch die Perepherie mit ins boot holen muss...



  • hustbaer schrieb:

    dot schrieb:

    d.h. der notwendige Support für 95% aller Sprachfeatures ist mit ca. 10 Zeilen C++ Code erledigt

    ROFL

    Eigentlich war das ganz und gar nicht als Scherz gedacht. Die Problemkinder sind Exceptions, RTTI, Konstruktoren globaler Variablen, (lokale statische Variablen), new/delete, rein virtuelle Funktionen. Für die letzen 3 sind 10 Zeilen nicht wirklich untertrieben (habs grad mal abgezählt, sind bei mir 22 Zeilen netto für g++ auf x86). Konstruktoren globaler Variablen sind normal über Features des Binary Formats implementiert die man so oder so implementieren muss. Einzig Exceptions und RTTI sind wirklich etwas Aufwand. Natürlich hat man mit den 22 Zeilen noch lange keine Standardbibliothek, Memory Management oder einen Loader, aber darum gehts ja nicht, das muss man so oder so selbst schreiben. Der Punkt ist dass man für den wirklich vernachlässigbaren Aufwand von 22 Zeilen all das dann in C++ unter Verwendung aller Sprachfeatures bis auf Exceptions und RTTI schreiben kann 😉

    zeusosc schrieb:

    Sry aber es gibt platformspezifische C++ Compiler (ARM/8058/AVR)...

    Eben, dann gibt es auf diesen Plattformen auch keinen Grund C zu verwenden, außer die Compiler sind unbrauchbar.



  • "Mit was für einer Programmiersprache wurde Windows oder Linux geschrieben?"
    Kernel Programmierung wird mit C betrieben damit man im Notfall per Assambler selbst Optimieren kann. Ebenso hat man bis jetzt auf dieser Ebene keine OOP nötig.

    Da ich den Link im Troll Thread verschwendet habe bringe ich ihn hier nochmal.
    http://www.amazon.de/Echtzeit-Multitasking-Parallele-Systemprogrammierung-Protected-Architektur/dp/3826594878
    "Echtzeit-Multitasking - Der Kernel - Parallele Systemprogrammierung im Protected Mode der Pentium Architektur"
    Darin wird in C ein (Echtzeit)Kernel entwickelt.

    "Ich weiß das ich noch nicht sehr viel kann aber meine andere Frage ist,
    kann man mit C++ ein Betriebsystem programmieren?"
    Wieso nicht?

    http://de.wikipedia.org/wiki/Singularity
    "Das Betriebssystem ist als Microkernel-System konzipiert. Kernel und Gerätetreiber sind in Managed Code geschrieben, wobei Sing#, eine Variante des C#-Derivats Spec#, zum Einsatz kommt."

    Microsoft hat es bereits mit "C#" hinbekommen also sollte es auch mit C++ klappen. Man müsste nur einen Passenen Compiler finden damit es auch auf der CPU läuft und viel, viel Zeit haben.

    Für die Linux Fraktion: Linux From Scratch
    http://de.wikipedia.org/wiki/Linux_From_Scratch
    wenn ich mich recht erinnere wird darin auch der Kernel irgendwie erklärt.

    Ein Kernel ist nicht viel Code (behauptet mein Betriebssysteme Prof immer), aber jede Zeile hat es Faust dick hinter den Ohren (also im Vergleich zu anderen Projekten "viel Code für nichts"). Wenn man aber die Grundlagen des Prozessors und des Betriebssystemaufbaus verstanden hat sollte es für jeden schaffbar sein einen Kernel zu entwickeln.



  • @Dot: Das mit dem ROLF hat der Bär bestimmt nicht ernst gemeint. Wenn doch ist er halt in der Richtung etwas inkompetent.


Anmelden zum Antworten