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 ...
Oui je suis sure. La console n'était qu'un exemple !!!
Bonjour,
pour avoir déjà tenté l'expérience, je peux t'assurer que c'est possible. Toutefois il y a déjà quelques inconvénient par rapport au C:
- le C n'est déjà pas très standard lorsqu'il s'agit de créer un OS mais en C++ c'est bien pire, il faut implémenter quelques routines très obscures spécifiques au compilateur qu'on utiliser. Autant les recopier texto des quelques sites où on peut les trouver.
- il faut toujours avoir en tête le problème de la mémoire, notamment au début. En C, le problème ne se pose pas car tu fais un {k,m}alloc donc cela se voit mais en C++ cela peut être beaucoup plus fourbe pour peu que tu manipules des chaînes de caractères, des vecteurs, ... Prudence donc !
Par contre, on a aussi les avantages du C++ donc je pense que cela vaut le coup.
Quant à ce que dit Obsidian, je ne suis pas convaincu que la place prise en mémoire soit vraiment un problème si on n'utilise pas des classes à toutes les sauces et là où on ne devrait pas.
Enfin, je pense que l'intérêt d'utiliser le C++ juste pour avoir des classes en lieu et place des variables globale est assea faible. Dans ce cas, autant utiliser toute la puissance du C++.
On préfère l'assembleur (pour son accès total à toutes les ressources de la machine) et le C (pour ses capacités très proches de l'assembleur plus sa légèrté, son caractère "haut niveau" et sa portabilité). Le C++ est plus strict que le C sur les types (donc déjà moins proche de la machine) et trop complexe (les compilateurs C++ qui ont déjà été utilisés pour développer des systèmes sont très très loin du C++ standard. De nombreuses fonctionnalités pourtant normalisées ne sont généralement pas implémentées. On n'utilise donc pas vraiment "le langage C++" mais un sous-ensemble du langage C++) pour rivaliser avec le C pour l'écriture de noyaux. Si tu veux un exemple de système écrit en C++ : Symbian OS, le noyau des plateformes S60, S80, etc. (Nokia) et UIQ (Sony Ericsson).Envoyé par spiner900
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).Envoyé par amaury pouly
BeOS était écrit en C++. En fait, BeOS est la preuve qu'on peut faire un très bon système en C++ (meilleur que ses concurrents de l'époque).Si tu veux un exemple de système écrit en C++ : Symbian OS, le noyau des plateformes S60, S80, etc. (Nokia) et UIQ (Sony Ericsson).
Hum...
À ma connaissance, il est impossible d'écrire entièrement un noyau en C ou en C++, car ces langages n'ont rien pour gérer les interruptions...
Dans tous les cas, il faut à bas niveau des fonctions écrites directement en assembleur.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je pense aussi que les premières instruction du démarrage (installation de la pile initiale, création de la table d'interruptions initiales, ...) doivent être écrites en assembleur.
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
http://www.opensource.apple.com/darwinsource/
l'inscription est gratuite…
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++
Merci pour la précision. J'ai eu que peu de cours mac, ^^.
É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.
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.
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++
Partager