Betriebsysteme mit C++



  • Hallo,

    ich hätte da zwei Frage und zwar!

    Mit was für einer Programmiersprache wurde Windows oder Linux geschrieben?

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

    Ich danke euch schon mal für die Antworten!

    MfG

    Dennis1995



  • Der Kernel von sowohl Windows als auch sämtlichen Unixen wurde steht wohl meines Wissens nach in C/C++.

    Aber um ein OS zu programmieren braucht es mehr.
    Man kommt um Assembler nicht herum, nicht nur das, man braucht sehr viel Asm.

    Denn, dir steht ja überhaupt keine Standartlib zur Verfügung, also kein #include<stdio.h> oder iostream.
    Aber theoretisch hättest du schon ein OS wenn du einen Bootloade, eine paar einfache In/Out Funktionen für die Tastatur & Bildschirm sowie natürlich einen Kernel geschrieben hättest, aber schon das ist schwieriger als es sich anhört.

    Von Oberflächen ala Windows oder Linux ist da noch lange nicht die Rede, da brauchst du erstmal vernünftige APIs, Treiber etc. pp. ...

    Und weil sowas einfach nur unglaublich komplex ist, brauchen auch große Teams an hochqualifizierten Programmieren und Codedesigner (sowie Projectmanager etc.), wie Microsoft sie hat Jahre um neue, vernünftige OSe auf den Markt zu bringen.

    Und glaub mir, du kannst dir als Anfänger nicht annähernd vorstellen WIE komplex das ist, da musst du erstmal überhaupt ein Projekt mit mehr als 4000 Zeilen geschrieben habn, dann kannst du dir vlt. eine Vorstellung davon machen.

    Höre auf meinen Rat: Wenn du nicht komplett desmotiviert werden willst weiter zu machen, denke gar nicht an sowas, du würdest beim Versuch so unglaublich auf die Nase fallen, dass du gar keine Lust mehr hättest.
    Lerne Konsolenprogramme zu schreiben (vernünftig! nicht aufhören wenn du weisst was Vererbung ist) und lern dann irgendwann etwas über die WinAPI (apropo, das gehörd eigentlich nicht in die Topic hier oder?), und wenn dir das alles zu lange dauert, lenre VB und sei damit eines von millionen Skript-Kiddies, die niemals richtig programmieren können werden.

    mfG AstvomBaum



  • 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