c++ kernel tutorial



  • 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.



  • ich glaube du hast meine frage nicht richtig verstanden.
    Egal, sonst werden hier noch mehr Posts ohne Inhalt erstellt.
    (wenn nicht von euch, dann von mir 😉 )
    Aber danke für die Links.



  • Was genau ist an "Es gibt nix, was man in C machen kann, das man nicht auch in C++ machen könnte" unklar?



  • Hier ist ein ziemlich realistischer Abriss warum Dinge nunmal so sind wie sie sind.
    http://www.yosefk.com/blog/oo-c-is-passable.html

    Da gibts für mich nicht viel hinzuzufügen,
    nur wer mal wirklich mit Flaschenhälsen kämpfen musste
    zb
    beim upload auf exotische Chips über exotische oder minimale Schnittstellen,
    beim kompilieren von mehr als 1 Target 1 Plattform 1 Konfiguration..

    Wird wirklich verstehen warum man manchmal mit mehr kämpfen muss
    als mit der Frage
    "Kann ich den OOP-Knüppel auch noch in die letzte Nische prüggeln in die sie nicht hingehört ?"



  • Die einzige Kritik an C++ im ganzen Artikel war "Compile-Time", und da muss ich ihm auch zustimmen, insbesondere g++ auf Windows ist einfach schrecklich. Aber: Was er da beschreibt (350MB RAM für ein File?) konnte ich noch nie beobachten. Ich hatte noch nie das Gefühl, dass man damit nicht mehr arbeiten könnte. Ansonsten würden mir doch wesentlich mehr Features an C++ fehlen, virtual halte ich gegenüber Templates und RAII schon fast für irrelevant.


Anmelden zum Antworten