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. #21
    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 amaury pouly
    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.
    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.

    Citation Envoyé par Médinoc
    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.
    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.

  2. #22
    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
    Ca aurait un petit coût de mettre des pointeurs intelligents & compagnie
    Pourquoi tu voudrais utiliser des horreurs pareilles ?
    Les pointeurs c'est mal, et les pointeurs intelligents ne sont pas mieux...

  3. #23
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Pourquoi tu voudrais utiliser des horreurs pareilles ?
    Les pointeurs c'est mal, et les pointeurs intelligents ne sont pas mieux...
    lol
    Ils font parti du RAII il me semble non ?

  4. #24
    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
    Pourquoi tu voudrais utiliser des horreurs pareilles ?
    Les pointeurs c'est mal, et les pointeurs intelligents ne sont pas mieux...
    Tu peux penser ce que tu veux des pointeurs mais dans un noyau, les pointeurs ce sont tes meilleurs amis... Il n'y a que ça ! Les pointeurs intelligents apportent une sûreté non négligeable dans un gros projet. D'ailleurs il n'y a qu'à regarder du code en C pour voir qu'on passe son temps à gérer les allocations/libération de mémoire et les erreurs. En C++, on peut faire ça plus proprement et se concentrer sur ce que fait le code.

    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.
    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.
    En général, le HAL fait partie du noyau, c'est *juste* la partie "hardware-dependent" du noyau si l'on peut le dire. Toutefois avec une telle conception du HAL, la quantité de code à écrire n'est pas du tout négligeable et une bonne partie peut être écrite en C (pas très standard pour le coup). La partie à écrire en assembleur peut quand même être réduite au minimum.
    Je ne suis par contre pas d'accord avec toi sur le fait que les fonctionnalités listées sont des facilités des compilateurs dont on peut se passer. Pour l'assembleur en ligne je te l'accorde mais le problème de l'alignement n'est pas négligeable par exemple. Même dans le noyau on a besoin, ne serait-ce que pour communiquer avec le matériel.

  5. #25
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Pourquoi tu voudrais utiliser des horreurs pareilles ?
    Les pointeurs c'est mal, et les pointeurs intelligents ne sont pas mieux...
    En même temps, on ne peut pas tout mettre sur la pile.

  6. #26
    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
    Quel rapport ?
    Le problème des pointeurs, c'est l'aliasing. La possibilité de référencer la même variable depuis plusieurs parties du code, ce qui rend le programme difficile à comprendre et à analyser.
    Pour ces raisons, les pointeurs (ou tout objet se comportant comme eux), c'est à éviter.

    Programmer avec des valeurs (éventuellement non copiables), c'est bien mieux, c'est évident. Plus sûr, plus efficace (pas de partage, localité...), déterministe... Ce n'est plus à démontrer.

  7. #27
    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
    Mais même un conteneur de valeurs contient des pointeurs, tu sais...
    Un vector peut alors être assimilé à un pointeur intelligent sur un tableau, donc selon toi il ne devrait pas être utilisé?
    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.

  8. #28
    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
    Mais même un conteneur de valeurs contient des pointeurs, tu sais...
    En l'occurrence, certains langages fonctionnels n'ont absolument pas de pointeurs ni d'aliasing.

    Je pense notamment à coq, mais on ne fait rien de sérieux en coq. Pour oCaml (pour parler d'un langage avec lequel on fait des choses sérieuses), je ne sais pas.

    En fait, il suffit d'avoir des références (certes, une référence est un pointeur déguisé) pour que le problème d'aliasing existe... Et on a besoin de références pour être efficace (copier 100000 éléments, ce n'est pas envisageable).

    Le seul embryon d'approche que je vois, dans une approche oo, ce serait de n'avoir que la sémantique de move sur les références (ie la copie d'une référence invalide la référence copiée). Pas sûr que ça règle tous les problèmes, et à peu près sûr que ça en introduit d'autres...

  9. #29
    Membre éclairé Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Par défaut
    Citation Envoyé par loufoque Voir le message
    Pourquoi tu voudrais utiliser des horreurs pareilles ?
    Les pointeurs c'est mal, et les pointeurs intelligents ne sont pas mieux...
    Perso, ça me choque

    Il y a des moments oùon est obligé ou mieux de passer par des pointeurs. Je ne vois pas comment on pourrait se passer, surtout quand on travaille sur du très bas niveau ...

  10. #30
    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
    Ben ce passait des pointeurs pourquoi pas... se passait des smart pointers j'ai plus de mal déjà là...

    Enfin dans le cadre d'un noyau je ne saurais dire ..

  11. #31
    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
    @loufoque > dans un noyau, un truc très bas niveau, tu manipules des adresses, tu intéropères avec l'assembleur, tu ne peux pas te permettre de ne bosser que par copie.
    Un OS en Haskell ou OCaml ce serait sympa, mais bonjour pour à chaque opération avoir une nouvelle valeur pour le résultat, au lieu d'avoir modifié celle d'entrée. Après, la paresse peut jouer, mais bon pour un noyau je ne sais pas si ça serait indiqué

  12. #32
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par Alp Voir le message
    @loufoque > dans un noyau, un truc très bas niveau, tu manipules des adresses, tu intéropères avec l'assembleur, tu ne peux pas te permettre de ne bosser que par copie.
    Un OS en Haskell ou OCaml ce serait sympa, mais bonjour pour à chaque opération avoir une nouvelle valeur pour le résultat, au lieu d'avoir modifié celle d'entrée. Après, la paresse peut jouer, mais bon pour un noyau je ne sais pas si ça serait indiqué
    Je pense pas que loufoque voulait dire copier à tout va. Le copy on write, ça fait de la sémantique de valeur sans copie redondante par exemple.

    Pour Haskell et OCaml, il faudrait se demander dans quelle mesure leurs avantages de langage fonctionnel et de typage fort sont utiles. Le fait d'avoir une nouvelle valeur ça veut pas dire qu'en interne il n'y ait pas eu modification .

  13. #33
    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 HanLee Voir le message
    Je pense pas que loufoque voulait dire copier à tout va. Le copy on write, ça fait de la sémantique de valeur sans copie redondante par exemple.
    Dans ce cas, ça irait mieux effectivement.


    Citation Envoyé par HanLee Voir le message
    Pour Haskell et OCaml, il faudrait se demander dans quelle mesure leurs avantages de langage fonctionnel et de typage fort sont utiles. Le fait d'avoir une nouvelle valeur ça veut pas dire qu'en interne il n'y ait pas eu modification .
    D'un côté ça éviterait l'effet Windows (), d'un autre si on reste en purement fonctionnel, ça demanderait de la mémoire

  14. #34
    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
    Citation Envoyé par HanLee Voir le message
    Je pense pas que loufoque voulait dire copier à tout va. Le copy on write, ça fait de la sémantique de valeur sans copie redondante par exemple.
    Mais ça se manipule typiquement par référence (cachée), souvent comptée, donc pointeurs intelligents...
    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.

  15. #35
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Mais ça se manipule typiquement par référence (cachée), souvent comptée, donc pointeurs intelligents...
    Oui mais ce qui compte c'est la sémantique, donc le point de vue de l'utilisateur. L'objet final se comporte comme une valeur pure.

    Avec un pointeur intelligent, ça reste une sémantique de référence.

  16. #36
    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
    Le copy-on-write, c'est uniquement utile si tu copies beaucoup ta valeur sans en avoir réellement besoin.

    La meilleure solution, c'est que si bien entendu tu n'as pas besoin de copier ta valeur, de ne pas la copier.
    Les sémantiques de mouvement aident pas mal pour ça. Sans sémantique de mouvement, effectivement, mieux vaut opter pour du copy-on-write.

    Mais même un conteneur de valeurs contient des pointeurs, tu sais...
    Un vector peut alors être assimilé à un pointeur intelligent sur un tableau, donc selon toi il ne devrait pas être utilisé?
    Un vecteur ça a une sémantique de valeur, pas de référence.
    Que ça utilise des pointeurs on s'en fout.

    T a;
    T b = a;
    a.mutate(); // avec une opération de mutation à définir, qui dépend de ce que symbolise la valeur T

    => b non modifié, sémantique valeur
    => b modifié, sémantique référence

    On remarquera que si T est immutable, ça n'a pas de sens de parler de ces sémantiques-là. Le partage comme la copie sont équivalents dans ce cas.

  17. #37
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par loufoque Voir le message
    => b modifié, sémantique référence
    => pointeur intelligent, non ?

  18. #38
    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
    Tout ce qui se comporte comme un pointeur ou une réference, oui.

  19. #39
    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
    hum.... comment peut-on écrire du C orienté objet ??? avec des structure et des pointeur de fonctions ??

  20. #40
    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
    Ques tu veux dire Loufoque par ''idiomes comme le RAII'' ??
    et quesce que vous voulez dire par pointeur intelligent ??

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