Login
Newsletter
Werbung

Mo, 1. November 2004, 13:29

Software::Kernel

C++ im Linux-Kernel

Eine Forschungsgruppe von der Universität Reykjavik hat C++-Unterstützung für den Linux-Kernel entwickelt.

Der Linux-Kernel ist fast vollständig in C geschrieben, wobei kurze zeitkritische Abschnitte, für die der C-Compiler keinen optimalen Code erzeugen konnte, direkt in Assembler implementiert wurden. Obwohl C++ auf den ersten Blick eine Erweiterung von C ist, wurde bisher keine Unterstützung für C++ im Kernel geschaffen. Einer der Gründe dafür ist, daß C++ eher eine neue Sprache denn eine Weiterentwicklung von C darstellt. Features wie Konstruktoren und Destruktoren, Exceptions und dynamische Typprüfungen erfordern Unterstützung durch zusätzlichen Code zur Laufzeit, der im Kernel nicht vorhanden ist. Es ist nicht möglich, diese Unterstützung, die in Bibliotheken wie libstdc++ vorhanden ist, einfach zum Kernel zu linken, da diese nur für den Ablauf außerhalb des Kernels konzipiert ist.

Diese Lücke hat nun ein isländisches Forschungsteam geschlossen und Patches für Kernel 2.6.6 bzw. 2.6.9 zur Verfügung gestellt. Diese ermöglichen es, beliebige Teile des Kernels in C++ zu schreiben. Exceptions werden unterstützt und laufen im Kernel sogar besonders schnell ab. Nach Angaben der Entwickler werden Exceptions im Kernel sechsmal schneller behandelt als im Userspace mit g++, und sind mindestens neunmal schneller als ein Aufruf von printk im Kernel (das zur Ausgabe von Meldungen auf die Konsole dient). Auch die Geschwindigkeit von dynamischen Typprüfungen wurde verbessert. Der Patch ermöglicht auch globale Konstruktoren und Destruktoren.

Die Arbeiten und die Probleme, die zu lösen waren, wurden im Einzelnen in einem Papier dokumentiert.

Besonders interessant dürfte der Patch für Entwickler sein, die Treibermodule in C++ implementieren wollen, vielleicht weil schon Code in C++ vorhanden ist. Ob der Patch allerdings in den offiziellen Kernel aufgenommen wird, ist offen. Während früher vor allem die Unzulänglichkeit des Compilers g++ gegen die C++-Unterstützung sprach, dürfte dem heute hauptsächlich die Einschätzung entgegen stehen, daß die C++-Unterstützung mehr Code und mehr Komplexität in den Kernel bringt. Die Verwendung von Exceptions führt außerdem zu Einbußen in der Performance von einigen Prozent. Sofern sich dies auf die in C++ geschriebenen Teile beschränkt, wäre dies wohl für einige Entwickler akzeptabel.

Werbung
Kommentare (Insgesamt: 39 || Alle anzeigen )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung