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

Linux Discussion :

Dans quel ordre les instructions sont exécutées ?


Sujet :

Linux

  1. #1
    Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2015
    Messages
    224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2015
    Messages : 224
    Points : 62
    Points
    62
    Par défaut Dans quel ordre les instructions sont exécutées ?
    Bonjour,

    Pourriez-vous me dire dans quel(s) ordre(s) les instructions suivantes peuvent-elles être exécutées ? Car, d'après ce que j'ai compris, on ne sait pas trop comment l'ordonnanceur linux va réagir, et il peut y avoir plusieurs comportements, y compris certains qui font que notre programme ne fonctionne pas comme il devrait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
    int pfd01[2], pfd10[2], pid;
     
    void deroute(int signal)
    {
        printf("Père %d : signal : %d recu \n", getpid(), sig);
    }
     
    void Pere()
    {
        char message[BUFSIZ] = "hello";
        int pidP=getpid();
     
        if(signal(SIGUSR1,deroute)==SIGERR) erreur("signal"); // P1
        if(write(pfd01[1],&pidP,sizeof(int))==1) erreur("write"); //P2
        pause();//P3
        if(write(pfd01[1], message, 5)==-1) erreur("write");//P4
     
        exit(0);
    }
     
    void Fils()
    {
        char message[BUFSIZ] ; int pidP;
     
        if(read(pfd01[0],&pidP,sizeof(int))==-1) erreur("read"); //F1
        if(kill(pidP,SIGUSR1)==-1) erreur("kill"); //F2
        if(read(pfd01[0], message) == -1 ) erreur("read"); //F3
     
        exit(0);
    }
     
    int main()
    {
        if(pipe(pfd01)==-1) erreur("pipe");
        if(pipe(pfd10)==-1) erreur("pipe");
        switch(pid=fork())
        {
            case -1 : erreur("fork");
            case 0 : Fils();
        }
        Pere();
    }
    Par exemple, j'ai pensé à ceux-ci, est-ce qu'ils peuvent se produire ? :
    F1 - P1 - P2 - P3 - F2 - F3 - P4

    P1 - F1 - P2 - P3 - F3 - P4


    Merci d'avance pour votre réponse.
    Bonne soirée.

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 121
    Points
    28 121
    Par défaut
    Bonjour,

    Ton programme commence, toujours, par le main.
    Ensuite, il se continue de manière séquentielle, jusqu'au fork(). Cette fonction créée un fils, qui va exécuter le même code que le père, à partir du fork() -- enfin juste après celui-ci.

    Maintenant, supposons que tu aies 1 processeur, et uniquement ces 2 processus : ton processeur va offrir du temps de calcul (un quantum de temps, de l'ordre d'une dizaine de millisecondes) à un premier processus, puis mettre celui-ci au bout de la file d'attente, et offrir ce même temps au 2nd, et ainsi de suite.
    Mais il se peut que ton processus n'ait pas besoin de tout ce temps ; par exemple, au bout de 3ms, il indique qu'il attend une donnée du disque. Le processeur va lui donner un priorité plus haute car il n'a pas tout utilisé, puis le met en file d'attente et prends le suivant.
    Et ainsi de suite. Bien sûr, j'ai un peu simplifié.

    est-ce qu'ils peuvent se produire ? :
    F1 - P1 - P2 - P3 - F2 - F3 - P4

    P1 - F1 - P2 - P3 - F3 - P4
    Tout peut se produire, ou presque. Dans ton premier cas, on peut imaginer que le père a le temps de s'exécuter 3 fois en un quantum de temps, puis 2 fois le fils, et ainsi de suite
    Dans le second cas, il manque F2 entre F1 et F3, mais à part ça, oui.

    Par contre, avec le programme que tu as mis là, je ne vois pas comment tu vas passer 4 fois dans le code du père.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 28
    Points
    28
    Par défaut le pipeline du processeur
    linux control quel processus s'execute a quel moment.
    mais il ne controlle pas la maniere d'executer les instructions.
    ca c'est le pipeline de ton processeur qui vas l'ordenancer et c'est entierement transparent pour linux.

    https://fr.wikipedia.org/wiki/Pipeli...s_processeurs)

    Je te conseil la lecture de la faille spectre pour mieux comprendre ce que l'on appelle l'execution speculative.

    https://beta.hackndo.com/construction-poc-spectre/

Discussions similaires

  1. Dans quels pays les développeurs sont-ils les mieux payés ?
    Par Hinault Romaric dans le forum Actualités
    Réponses: 45
    Dernier message: 23/09/2014, 11h55
  2. Réponses: 3
    Dernier message: 12/05/2011, 20h32
  3. Dans quel ordre ranger les vertices ?
    Par legend666 dans le forum OpenGL
    Réponses: 5
    Dernier message: 10/10/2005, 10h01
  4. dans quels cas les pointeur sont plus rapides ?
    Par 180degrés dans le forum C++
    Réponses: 12
    Dernier message: 20/08/2005, 23h12

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