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 :

Changement de contexte d'exécution


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    etudiant info
    Inscrit en
    Mars 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : etudiant info

    Informations forums :
    Inscription : Mars 2016
    Messages : 32
    Points : 30
    Points
    30
    Par défaut Changement de contexte d'exécution
    Bonjour,

    Je cherche à comprendre le concept de la pile d’exécution à travers des programmes C et la manipulation des registres esp et ebp. J'aimerais pour cela résoudre la situation suivante :
    - La fonction main démarre et lance une fonction f
    - La fonction f contient une boucle infinie
    - Comment faire en sorte que le programme revienne dans le main avant d'entrer dans cette boucle infinie, en manipulant les registres esp et ebp ?

    Je pensais au départ qu'il s'agissait d'enregistrer les registres esp et ebp dans le main, puis de les restaurer avant l'instruction de boucle infinie pour quitter la fonction, mais ma solution ne fonctionne pas et je ne comprends pas vraiment pourquoi ...

    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 1 821
    Points : 979
    Points
    979
    Par défaut
    Salut,

    Il faut aussi sauvegarder/restaurer l'état des registres du CPU car il peut y avoir des calculs en cours lors de l'interruption faite par le scheduler.
    Tu as bien créé une pile dédiée pour ton processus qui lance ta fonction ?
    => le changement de contexte se fait forcément en assembleur

  3. #3
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 064
    Points
    43 064
    Par défaut
    Tu laisses ça au système.

    Si tu veux appeler ta fonction f depuis main sans qu'elle soit bloquante, il faut que tu créer un thread, la fonction s’exécutera alors en parallèle et tu pourras la contrôler depuis les fonctions dédiées à la gestion des threads.


    Si tu veux comprendre le fonctionnement, le compilateur créée un prologue et un épilogue pour chaque fonction. Au niveau assembleur, ce prologue va créer ce qui s’appelle un cadre de pile : il copie la valeur de ESP dans EBP (après l'avoir sauvegardé sur la pile), diminue l'adresse de ESP avec le nombre d'octets que la fonction réserve sur la pile (pour les variables locales notamment). L'épilogue va recopier l'adresse stockée dans EBP dans ESP pour restaurer la valeur de la pile en début de fonction.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ta proposition, c'est le genre de chose fait par le couple de fonctions setjmp() et longjmp().
    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.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    etudiant info
    Inscrit en
    Mars 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : etudiant info

    Informations forums :
    Inscription : Mars 2016
    Messages : 32
    Points : 30
    Points
    30
    Par défaut
    Bonjour Médinoc,

    En fait notre prof nous a d'abord illustré le fonctionnement de setjmp et longjmp. Mais il s'agit maintenant de le faire nous même avec les registres esp et ebp.

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Alors pose la question à ton professeur, il est sensé t'avoir expliqué le principe de ce qu'il veut.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 434
    Points : 43 064
    Points
    43 064
    Par défaut
    Tu as les explications ici.

    Désolé pas d'équivalent sur le wikipedia français.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

Discussions similaires

  1. Déterminer / détecter le contexte d'exécution d'une application
    Par hapalemur dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 05/10/2009, 13h55
  2. pb avec le compteur Changements de contexte
    Par yanis97 dans le forum IIS
    Réponses: 0
    Dernier message: 09/05/2009, 16h57
  3. [VxiR2] Operateur changement de contexte
    Par ymo90 dans le forum Webi
    Réponses: 2
    Dernier message: 03/04/2009, 17h07
  4. [JSP][Tomcat]Changement de context -> JSP fonctionne plus
    Par mathieu dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 01/03/2004, 08h01

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