IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques C++ Discussion :

Peut-on écrire un kernel en C++ ?


Sujet :

Bibliothèques C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut Peut-on écrire un kernel 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++ ??

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    Par défaut
    Citation Envoyé par spiner900 Voir le message
    Bonjour, on voie sauvant sur le web des tutoriel qui explique comment écrire un kernel en asm/c mais peut-on le faire un 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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    D'accord mais, si j'utilise seulement les class pour ne pas avoir de variable global ....

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    Par défaut
    Citation Envoyé par spiner900 Voir le message
    D'accord mais, si j'utilise seulement les class pour ne pas avoir de variable global ....
    Tu confonds deux choses qui n'ont rien à voir. Tu peux très bien instancier une classe en tant que variable globale. Et tu n'es pas obligé non plus d'utiliser les globales, ni en C, ni en assembleur.

    Qu'est-ce que tu cherches à faire, exactement ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    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 ...

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 461
    Par défaut
    Citation Envoyé par spiner900 Voir le message
    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 ...
    • Une nouvelle fois, ce sont deux choses complètement indépendantes ;
    • Quel rapport avec l'écriture d'un noyau ? Es-tu sûr de savoir ce que c'est ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    Oui je suis sure. La console n'était qu'un exemple !!!

  8. #8
    Membre éprouvé Avatar de amaury pouly
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 157
    Par défaut
    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++.

  9. #9
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par spiner900
    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++ ??
    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).

    Citation Envoyé par amaury pouly
    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.
    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).

  10. #10
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par défaut
    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).
    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).

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    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.

  12. #12
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    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

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  13. #13
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par spiner900 Voir le message
    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++ ??
    http://www.opensource.apple.com/darwinsource/

    l'inscription est gratuite…

  14. #14
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    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.
    Tout à fait. Il faut écrire un "micro-kernel" en ASM qui ira demander d'exécuter, une fois que le nécessaire aura été chargé et qu'il aura changé le mode, un code C, C++ ou autre.

  15. #15
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    http://www.opensource.apple.com/darwinsource/

    l'inscription est gratuite…
    Darwin est écrit en C il me semble. Orienté objet certes mais C quand même.

  16. #16
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par Goten Voir le message
    Darwin est écrit en C il me semble. Orienté objet certes mais C quand même.
    assembleur, C et C++ (avec restrictions) (et pas d'Objective-C…)

  17. #17
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Merci pour la précision. J'ai eu que peu de cours mac, ^^.

  18. #18
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    É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.

  19. #19
    Membre éprouvé Avatar de amaury pouly
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    157
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 157
    Par défaut
    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).
    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),...
    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.

  20. #20
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par loufoque Voir le message
    É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.
    Ca aurait un petit coût de mettre des pointeurs intelligents & compagnie, mais c'est vrai que ça pourrait être intéressant de voir le résultat

Discussions similaires

  1. Peut-on écrire en arabe dans Latex ?!
    Par bnadem35 dans le forum Débuter
    Réponses: 5
    Dernier message: 16/07/2009, 10h43
  2. Peut-on écrire dans une map ?
    Par JackBeauregard dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 18/12/2006, 18h26
  3. [VBa-E] Peut-on écrire dans un fichier txt?
    Par gootsu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/07/2006, 12h34
  4. [HTML]Peut-on écrire un texte sur une image ?
    Par flogreg dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/02/2005, 17h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo