Ordonnancement Unix en langage C
Bonjour à tous, :D
Avant tout j'espère être dans la bonne catégorie.
J'ai un problème que je n'arrive pas à résoudre. Le but est de se mettre dans un mode d'ordonnancement (dans mon cas le FIFO) et de prouver que je suis bien dans ce mode.
Si je suis en FIFO et que je crée 2 processus par exemple, celui qui prendra la main en premier s'exécutera et le deuxième ne pourra s'exécuter si seulement si le premier a fini de s'exécuter. J'ai donc réaliser le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| #include <stdio.h>
#include <stdlib.h>
#include <sched.h>
#include <sys/types.h>
#include <unistd.h>
void main (void)
{
int valeur;
struct sched_param p1;
sched_setscheduler(getpid(),SCHED_FIFO,&p1);
valeur = fork();
if(valeur==0){ //fils
printf("Je suis le fils\n");
getchar();
exit(1);
}
else{ //pere
printf("Je suis le pere\n");
getchar();
}
} |
En gros, le deuxième processus doit s'exécuter si j'appuie sur une touche (getchar()) car c'est à cette condition que le premier se termine. Si le fils s'exécute en premier et que je suis bien en FIFO, je dois avoir ceci:
je suis le fils
(appui sur une touche)
je suis le pere
Or ce n'est pas le cas , les deux process effectuent leurs printf sans que j'appuie sur une touche (je ne suis donc pas en FIFO).
Quelqu'un sait-il pourquoi ?
Je devais effectuer la même chose en Round Robin et cela fonctionne mais en FIFO je ne sais pas pourquoi cela ne fonctionne pas.
Par avance merci.