Bonjour, on voit souvent sur le web des tutoriels qui expliquent comment écrire un kernel en Asm/C mais peut-on le faire en C++ ??
Bonjour, on voit souvent sur le web des tutoriels qui expliquent comment écrire un kernel en Asm/C mais peut-on le faire en C++ ??
Techniquement oui, mais ce n'est pas forcément une très bonne idée. Les avantages et les inconvénients du C sont démultipliés en C++ et dans ce contexte. Tu ne peux pas t'appuyer sur les bibliothèques habituelles dont on fait grand usage en C++, et il faut être très vigilant à la mémoire et autres ressources que ton programme consomme quand on écrit un noyau. Cela t'oblige à avoir un oeil circonspect sur l'usage de toutes les facilités du C++.
Exemple : l'héritage. Si tu en fais un usage massif, tes objets peuvent vite devenir très gros, et quand tu changes ou ajoutes un membre dans une classe de base, cela a un impact sur le projet entier.
D'accord mais, si j'utilise seulement les class pour ne pas avoir de variable global ....
je suis plusieurs tutoriel sur le web et il utilise tous des variables globale pour la position du curseur de la console .... alors je voudrai créer une class Console par exemple ...
http://www.opensource.apple.com/darwinsource/
l'inscription est gratuite…
Merci pour la précision. J'ai eu que peu de cours mac, ^^.
Je ne parlais pas de la bibliothèque standard mais bien du langage. Contrairement au C, le C++ laisse énormément de marge pour l'implémentation. Il n'y a qu'à voir les routines à implémenter avec VisualC++ et G++ pour pouvoir utiliser des classes pour s'en convaincre: cela va des appels à des méthode virtuelles pures aux allocations sur la pile, en passant par les constructeurs et destructeurs statiques, new et delete bien sûr, RTTI(certes c'est peu utile dans un noyau), les exceptions(idem),...Ah non ! Le C standard permet très bien d'écrire un noyau. C'est seulement la bibliothèque standard qu'on ne peut plus utiliser (plus précisément, certaines fonctions de la bibliothèque standard, comme printf, malloc, etc. bref toutes les fonctions qui s'appuient sur des appels systèmes ...). Il ne faut pas confondre ce que j'ai dit avec "Tous les compilateurs C peuvent être utilisés pour compiler un noyau", tout comme on n'utilise pas un compilateur Win32 pour générer un exécutable Linux. Il faut bien sûr les outils prévus pour ... (gcc + ld par exemple).
Mon commentaire est simplement là pour dire qu'avec le C++ on s'enfonce encore plus dans les arcanes des compilateurs qu'avec le C.
De plus, écrire un noyau en C standard relève de l'exploit. Quelques problèmes:
* Alignement des structures
* Assembleur "inline"(ça peut être utile)
Toutefois c'est vrai qu'une fois ces quelques désagréments passés, le reste c'est du C tout ce qu'il y a de plus standard.
Écrire un système d'exploitation ou un noyau en C++, en utilisant des idiomes comme le RAII, serait une très bonne chose et augmenterait la robustesse du système.
Personne n'en a encore créé, cependant.
Mon blog anglais - Mes articles et critiques de livres - FAQ C++0x, avec liste des nouveautés - Conseils sur le C++ - La meilleure FAQ du monde - Avant de créer des classes que vous réutiliserez, regardez si ça n'existe pas déjà - Le site du comité de normalisation du C++
Le guide pour bien débuter en C++ - Cours et tutoriels pour apprendre C++
Voilà. C'est bien ce que je voulais soutenir. Et je l'ai déjà d'ailleurs dit, le C utilisé pour écrire un noyau peut rester 100% standard, ce sont les outils à utiliser qu'il faut bien choisir. On ne compile pas un noyau avec n'importe quel compilateur. Il y a des outils spécialisés. J'ai déjà donné des exemples. L'assembleur en ligne n'est pas obligatoire, c'est juste une facilité qu'on aime utiliser (pariel pour la plupart des fonctionnalités non standard généralement utilisées ...). On peut très bien développer toutes les routines dont l'implémentation dépendent d'une plateforme particulière en assembleur et appeler ces routines depuis le C.Envoyé par amaury pouly
Bien sûr. Tout n'est pas écrit entièrement en C. C'est le noyau (et tout ce qui se trouve au-dessus) qui peut être entièrement écrit en C. Généralement, avant de coder le noyau, on développe la couche d'abstraction matérielle (HAL), une interface portable écrite dans le langage du processeur pour chaque processeur. Pour les interruptions, on les gère soit par "interruption" (avec des fonctions de rappel) soit par scrutation (boucles ...). Mais tout ça, c'est implémenté par le HAL. Le noyau peut toujours être entièrement écrit en C.Envoyé par Médinoc
hum.... comment peut-on écrire du C orienté objet ??? avec des structure et des pointeur de fonctions ??
Tiens au fait :
http://osdever.net/tutorials/pdf/cpp_kernel.pdf
C'est assez intéressant et y'a du code clair et bien commenté. (même le code asm)
Il manque un peu les exceptions et le RTTI...
C'est pas exhaustif loin de là comme t'a pu le remarquer... d'ailleurs ils précisent bien que les exceptions on ne peut pas les gérer.
Partager