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

Administration système Discussion :

petite précision concernant l'appel de fork()


Sujet :

Administration système

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut petite précision concernant l'appel de fork()
    Bonjour,

    lors de l'appel de fork(), les processus père et fils disposent de leur propre espace de données.
    En revanche, ils partagent le même code. Je désirerais un complément d'information sur ce point:
    quand on dit le même code, çà signifie que chacun possède en mémoire son propre espace de code et que ce code est identique ou bien que chaque processus exécute le code au même endroit auquel cas ce code doit être réentrant .

    Merci pour vos lumières.

  2. #2
    Membre Expert

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2004
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 060
    Par défaut
    Salut,

    En général, quand tu utilises fork, cette commande est suivi de deux blocs de code : le bloc du processus père (qui se terminera après le processus fils, pour éviter de créer un processus zombie), et un bloc de code pour le processus fils.
    La structure (simple) ressemble à celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       pid_fils=fork();
     
       if (pid_fils == 0)
       {
          /* Processus fils */
          return 0;
       }
       else
       {
          /* Processus père */
          wait(NULL);
          return 0;
       }
    wait(NULL) permet d'attendre que le fils se termine avant de terminer le processus père

    En espérant t'avoir un peu aidé....

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut
    merci pour ta réponse.

    mais je voudrais précisément savoir si le code correspondant est unique et exécuté par les 2 processus ou dupliqué.

    Ou d'une autre façon, après l'appel de fork, le compteur ordinal du processeur est-il identique pour les 2 processus ou bien différent.

  4. #4
    Membre Expert

    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2004
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 060
    Par défaut
    j'avais mal compris.
    si ma mémoire est bonne, le code et l'environnement du processus sont dupliqués

  5. #5
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2004
    Messages
    539
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2004
    Messages : 539
    Par défaut
    si ma mémoire est bonne, le code et l'environnement du processus sont dupliqués
    J'aimerais assez trouver un article de référence sur ce sujet. Je possède l'excellent "Programmation en C sous linux" et j'ai (mal?) cherché sur le net, mais je n'ai pas trouvé ce que je voulais.

    A+

  6. #6
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    En fait, c'est un peu les deux à la fois...
    Tu peux considérer que tout est dupliqué. Cependant, Linux est assez intelligent pour partager les pages mémoire si elle ne sont pas écrites par un des deux processus. Ce mécanisme, c'est ce qu'on appel le Copy-On-Write.

    Pour ce qui est du compteur ordinal, oui, il a la même valeur dans les deux processus après le fork. Même si le code exécutable est dupliqué, les deux copies d'une même fonction doivent se trouver à la même adresse mémoire.
    Imagine que tu possède un pointeur de fonction dans tes données. Il faut qu'après fork ce pointeur soit toujours valide pour les deux processus.


    Mais attention. Le fait que tu demandes si les deux compteurs ordinaux ont la même valeur pour savoir si le code exécutable est partagé me laisse penser que tu n'as pas tout à fait compris comment est géré la mémoire virtuelle.
    Chaque processus, de son point de vue, a accès à 4Go de mémoire. (4Go parce que 32 bits.)
    Si un processus A va lire le contenu de la mémoire à l'adresse 0x08050000, il ne va pas lire la même chose qu'un processus B qui lit le contenu de la mémoire à l'adresse 0x08050000.
    Et ce, parce que ce sont des adresses logiques. Ce ne sont pas des adresses physique de mémoire. Cette traduction entre les deux est faite via un mécanisme de table géré par la MMU.

    Je pense qu'avec ces quelques explications tu auras quelques mots-clé supplémentaires pour trouver de plus amples informations.

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

Discussions similaires

  1. Petite erreur concernant les parenthèses
    Par bugland dans le forum Langage
    Réponses: 14
    Dernier message: 04/01/2007, 10h21
  2. Petite précision sur les pointeurs
    Par Fonzy007 dans le forum C
    Réponses: 2
    Dernier message: 07/12/2006, 11h25
  3. Imports : petites précisions
    Par Faiche dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2006, 15h42
  4. [XPath] petite précision sur type de syntaxe
    Par Royd938 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 15/06/2006, 12h13
  5. Réponses: 11
    Dernier message: 21/06/2005, 10h16

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