c++ kernel tutorial



  • MrBig schrieb:

    Würde es gehen den Kernel in c und den Rest in c++ zu schreiben

    Was ist der Rest? Wenn du Anwendungsprogramme meinst, kann man das natürlich machen, ist doch unter jedem handelsüblichen Betriebssystem so.



  • Also meiner Erfahrung nach funktioniert C++ im Kernel wunderbar, auch wenn man auf Exceptions, RTTI etc. der Einfachheit halber verzichtet. Imo wär es jedenfalls verrückt, nicht C++ zu verwenden, wenn C++ eine Option ist...



  • Geh so früh wie möglich auf C++. Dazu musst Du in den Sources von GCC ein wenig puhlen. Klar. Zum Beispiel wirst Du aus im Kernel auf einen pure virtual function call zunächst nicht einen hilfreichen Text ausgeben, sondern direkt panic auslösen.
    Das wird sich millionenfach auszahlen. Der Weg der Hasen und Häsinnen, den Kernel auf C zu belassen, ist ausgereizt, und alle Probleme, die wir in Linux/BSD noch haben, sind ausschließlich Probleme, die es mit C++ nicht im Ansatz gegeben hätte.



  • volkard schrieb:

    Der Weg der Hasen und Häsinnen, den Kernel auf C zu belassen, ist ausgereizt, und alle Probleme, die wir in Linux/BSD noch haben, sind ausschließlich Probleme, die es mit C++ nicht im Ansatz gegeben hätte.

    Was zum Bsp.?



  • Mit Rest meine ich zB die Oberfläche (Input/Output) visualisieren (natürlich keine grafiken aber mit text etc) oder auch Programme die halt mit dem Kernel arbeiten müssen.



  • Das wichtige ist das C++ eine Sprache ist die eine Laufzeitumgebung vorraussetzt, während C das nicht braucht.
    Meine Empfehlung: schreibe deine (unvollständige) Laufzeitumgebung in C,
    was du mindestens implementieren must und welche compiler flags du brauchst findest du hier aufgelistet http://www.lowlevel.eu/wiki/C%2B%2B

    Ohne große arbeit kannst du simple Klassen benutzten, du brauchst allerdings eine funktionierende speicherverwaltung (new,delete).
    Das ganze hört sich sehr einfach an, aber du wirst ohne aufwändigere laufzeitumgebung viele sprachfeatures die du gewohnt bist nicht benutzen können.


  • Mod

    Kannst ja mal hier schauen: http://www.c-plusplus.net/forum/273023
    http://www.pedigree-project.org/ ist in C++, soweit ich weiß.



  • In erster Linie danke für eure Antworten.
    Ich werde mir mal ein paar os angucken.
    Das mit der Laufzeitumgebung in c ist eine gute Idee, aber ich will halt nicht "zu viel c verwenden".
    Warum ist es eigentlich so schwer an OS Source mit Erklärung etc in c++ zu bekommen?
    Ich habe jetzt schon viele OS durch und die meisten sind halt in c was ja klar ist, aber dann noch in Assembler und glaub Basic habe ich noch eins gesehen.
    Kaum c++ warum?



  • MrBig schrieb:

    Kaum c++ warum?

    Weil die meisten OS-Frickler halt einfach C bevorzugen. 😉 Abgesehen davon verstehe ich aber nicht so ganz was du suchst. Für dich dürfte das doch kaum einen Unterschied machen. Kompilierst halt mit -fno-rtti und -fno-exceptions und nutzt C++. Was soll da groß erklärt werden? 😕



  • Na zB die Erklärungen was geht in c was in c++ nicht geht und anders herum oder ob man bestimmte Dinge beachten muss...
    Außerdem finde ich das die Umstellung auch wenn sie noch so klein ist eine Erklärung benötigt (damit man es versteht und nicht bild macht)



  • Es gibt prinzipiell nix, was man in C machen könnte, was man nicht auch in C++ machen könnte. C war eben zuerst da und ist in erster Näherung eine Untermenge von C++. C++ hat gegenüber purem C viele Vorteile. Es gibt imo keinen rationalen Grund, heutzutage noch C zu benutzen, wenn C++ ebenfalls eine Option wäre...



  • MrBig schrieb:

    oder ob man bestimmte Dinge beachten muss...

    Grundsätzlich solltest du C++ schon halbwegs drauf haben. Ein OSDev Tutorial kann dir nicht nebenbei noch eine Sprache beibringen. OSDev eignet sich auch wirklich nicht besonders zum lernen einer Sprache. Insofern sollten dir die eventuellen Unterschiede schon bewusst sein. (z.B. dass der Compiler dich früher oder später nach einer Funktion fragen wird die pure virtual calls handelt. Wenn du jetzt nicht weist was das ist: Erst C++ lernen, dann eigenes OS schreiben. ;))


  • Mod

    Du solltest das Thema C/C++ im Bereich OSDev mit den Entwicklern von pedigree oder mit Linux-Entwicklern diskutieren. Ich persönlich habe C++ im Kernel wenig vermisst.



  • ich kann c++ zum größten teil (alles kann so gut wie keiner).
    Mir geht es auch nicht darum die sprache zu lernen sondern wie man sie anwenden kann (in diesem fall Betriebssystem), weil ich auch was neues lernen will und nicht dieses ständige Programme schreiben. Nein, ich möchte mal was anderes, komplizierteres, wo aber jede Veränderung zum "normalen" Programme programmieren erklärt wird -> neues lernen.
    Mein Problem ist nur, es gibt (also ich habe keine gefunden) keine guten erklärungen.



  • Weil es nicht relevant ist. Wenn du C++ kannst, sollten dir die Unterschiede zu C sofort klar sein. Und an die "Tutorial"-Grenze stößt man bei OSDev eh sofort, danach gibt's nur noch Refs. Beschwerst du dich dann auch dass da zu wenig C++ drin ist? 😃



  • Wie oft noch...?!
    Mir geht es nicht um die Unterschiede zwischen den Sprachen an sich sondern um den Unterschied in der Anwendung. Ich glaube wir reden bzw schreiben aneinander vorbei. Du meinst anscheinend was anderes als ich.



  • Und was genau verstehst du unter solchen "Unterschieden in der Anwendung"?



  • Es gibt keinen Unterschied in der Anwendung. Darum kann man ihn auch nicht erklären. C im Kernel verhält sich zu C++ im Kernel wie C in Anwendungsprogrammen zu C++ in Anwendungsprogrammen, unter den Einschränkungen, die hier längst genannt wurden (Exceptions, RTTI, ... gehen nicht out-of-the-box).

    Also nimm den C-Code, den Du findest, und bau daraus Klassen, wenn Du willst/wo es Sinn macht. C ist (wie auch schon geschrieben wurde), mehr oder weniger eine Untermenge von C++ (auch wieder mit ein paar Einschränkungen, vor allem im Fall von C99), sodass der meiste C code auch einfach läuft, wenn Du ihn als C++ kompilierst.

    Einzige Sache (die aber im Grunde auch nicht spezifisch fürs Schreiben von Kerneln ist), die man beachten muss: Wo Funktionen von Außen, also z.B. von Assembler-Code aufgerufen werden, ist es ratsam, diese Funktionen als extern "C" zu deklarieren, sonst muss man sich mit dem name-mangling des verwendeten Compilers auseinandersetzen.



  • Mit Anwendung meine ich zB wo es sinnvoll ist c++ zu verwenden (das will ich ja hauptsächlich) und wo man c verwenden sollte weil c++ dafür zu kompliziert oder ungeeignet ist. Ich möchte halt einfach anfangen und dann besser werden



  • Es ist überall angebracht C++ zu verwenden. So, jetzt bist du gut informiert.


Anmelden zum Antworten