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

C Discussion :

Simuler un noyau en mode user


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut Simuler un noyau en mode user
    Bonjour à tous !

    Je suis en train de me creuser la tête, et à force de creuser, je me dis que je ne vois plus que mon petit doigt, et que je dois certainement passer à côté de ma solution.
    Mon problème :

    Je souhaite "simuler" le comportement d'un noyau en mode user (je suis sous Linux, mais ce qui m'importe est vraiment lié au C). En gros, j'ai une application, qui va créer des threads, et ceux-ci doivent être connus par le "noyau" en question. Il va donc stocker les différents paramètres liés aux threads dans une liste chaînée, etc.

    Mon soucis tient à la communication entre les threads et ce noyau : je veux avoir une API qui soit visible par les threads, celle-ci ayant un comportement propre (boucle en permanence, etc.).

    Un schéma, si j'y arrive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    T1 ---> appel_fonction() ------> "noyau" ---> appels systèmes
    T2 ---> appel_fonction() __|
    T3 <--- retour ------------|
    Je voudrais donc simuler le comportement des appels systèmes faits par une application vers le noyau mais en mode user...

    J'espère que c'est suffisament clair ? Là où je coince, c'est API, librairie, etc. Je ne vois pas comment m'en sortir.

    Merci d'avance !

  2. #2
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    tu ne parlerai pas plutôt d'un ordonnanceur (scheduler) ?

  3. #3
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    En fait, oui, ce que je décris est le scheduler. Mais mon problème est plus large que cela.
    Le problème des librairies, c'est que c'est une copie par processus.
    Donc, je peux pas avoir plusieurs processus qui dialoguent à travers une seule instance de la librairie...
    Et là, je coince, car avoir de la mémoire partagée et des mutex pour gérer les structures communes, ça m'embête...

  4. #4
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    je ne comprend pas ta question, de quelles lib tu parle ?
    ou qu'entend tu par librairie ?
    la communication entre threads peut se faire de plusieurs façons (message box, sémaphores, mutex, évènements...)

  5. #5
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Je pensais que mon premier post précisait justement mon problème...

  6. #6
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    je comprend ce que tu souhaite faire, mais je ne comprend pas quel est ton problème...
    qu'entend tu par:
    Citation Envoyé par progfou Voir le message
    Là où je coince, c'est API, librairie, etc. Je ne vois pas comment m'en sortir.

  7. #7
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Je ne sais pas comment le faire. Offrir une API pour les processus ou threads qui vont en avoir besoin... Une librairie est chargée par chaque processus, et donc, c'est une copie de ce "noyau", pas un processus ayant sa vie...

    Finalement, ma seule question est : comment je peux faire ça ?

  8. #8
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    oui, pour simuler un noyau, effectivement il te faudra mettre en place une api disponible pour les processus (et certainement pas une lib)
    apres si tu compte ne t'occuper que des appels systèmes (pas des histoires de scheduler, user space/kernel space etc...)
    tu peut t'inspirer de ce qui se fait sous linux par exemple...
    pour rappel:

    un appel système va placer son numéro dans un registre (AX), le numero du majeur (driver correspondant) , le mineur (instance), puis lever une interruption pour signaler au noyau qu'un appel system est demandé.
    le noyau regarde alors le registre, et execute la fonction demandée...

    tu pourra t'en inspirer en utilisant une variable globale a la place du registre AX
    et les signaux a la place de l'interruption.

    j'espère que ça t'aide... mais je t'avoue ne pas comprendre exactement ton problème...

  9. #9
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Citation Envoyé par kamouminator Voir le message
    oui, pour simuler un noyau, effectivement il te faudra mettre en place une api disponible pour les processus (et certainement pas une lib)
    C'est cela que je ne comprends pas... Comment on fait ?

  10. #10
    Membre expérimenté
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Par défaut
    bah tu crée un fichier .c et un .h et tu y defni et déclare tes fonctions...c'est tout !

    ou alors j'ai toujours pas compris ton problème !
    ...qu'on soit bien d'accord, ce que tu souhaite c'est bien faire une simulation d'OS dans un même binaire ou ton noyau sera représenté par un thread et tes processus par d'autre threads ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Driver Atheros en mode user pour kernel 3.10.2
    Par iam_emin dans le forum Linux
    Réponses: 1
    Dernier message: 25/07/2013, 09h56
  2. OpenSCMManager en mode user
    Par sivaller dans le forum Windows
    Réponses: 8
    Dernier message: 05/03/2010, 10h34
  3. Simuler l'éxécution en mode console d'un fichier Python
    Par rambc dans le forum Général Python
    Réponses: 14
    Dernier message: 05/09/2009, 00h20
  4. installer QT en mode user
    Par Hisoka_Hunter dans le forum Qt
    Réponses: 1
    Dernier message: 09/08/2009, 01h45
  5. Intercepter le trafic socket en mode user ?
    Par Pizza Royale dans le forum Linux
    Réponses: 11
    Dernier message: 08/09/2008, 14h18

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