Académique Documents
Professionnel Documents
Culture Documents
1
2. Indiquez dans le diagramme de Gantt ci-dessous le résultat d’un ordonnancement de
type plus court d’abord, en supposant toujours que le temps de commutation est
négligeable. Indiquez en dessous le temps d’attente moyen et les éléments d’explication
que vous jugez nécessaires. (1,5 points)
Correction :
date: 0 1 3 4 6 10 16
P1 P3 P5 P4 P2 P1
temps d’attente moyen = (9 + 5 + 0 + 2 + 0) / 5 = 16/5 = 3,2
Au temps t=1, P3 prend la main car c’est le plus court parmi P1 (reste 6), P2 (reste 4)
et P3 (reste 2). Au temps t=2, P4 est arrivé mais n’est pas plus court. Au temps 3, tous
les processus sont là sauf P3 qui est terminé : on les sert dans l’ordre : P5 (reste 1), P4
(reste 2), P2 (reste 4) puis P1 (reste 6).
3. Indiquez dans le diagramme de Gantt ci-dessous le résultat d’un ordonnancement de
type round-robin avec un quantum de 3, en supposant encore que le temps de com-
mutation est négligeable. Indiquez en dessous le temps d’attente moyen et les éléments
d’explication que vous jugez nécessaires. (1,5 points)
Correction :
date: 0 3 6 8 10 11 14 15 16
P1 P2 P3 P4 P5 P1 P2 P1
2
Exercice 3 – Processus (4 points)
On considère le code C suivant :
# include < stdio .h >
# include < stdlib .h >
# include < unistd .h >
# include < sys / types .h >
# include < sys / wait .h >
# define N 100
int k = 1;
int main () {
int t [ N ];
int i ;
for ( i =0; i < N ; i ++)
t [ i ] = rand ()% N ;
3
4. Les deux résultats sont affichés dans deux processus différents : le processus 1 ne peut pas
utiliser le résultat calculé par le processus 0 et réciproquement. Proposez une solution
pour résoudre ce problème. (1 point)
Correction : Il existe plein de possibilités :
— Passer par des threads et utiliser des variables partagées (variables globales dans le
tas) pour les résultats ;
— Créer deux variables partagées entre les processus à l’aide de shmget
— Utiliser une communication par TCP/IP entre les deux processus (mais on sort un
peu du cadre, là. . .)
fonction OPaccess :
mutexOP.verrouiller();
nbOP++;
si (nbOP == 1) route.acquerir();
mutexOP.relacher();
fonction OPexit :
mutexOP.acquerir();
nbOP--;
4
si (nbOP == 0) route.relacher();
mutexOP.relacher();
4. On ajoute un nouvel acteur : le camion de travaux. On ajoute alors une contrainte sup-
plémentaire : un camion ne peut accéder à un tronçon que s’il n’y a aucun autre camion,
et aucun autre automobiliste. Proposer une solution pour ajouter cette contrainte. (1
point)
Correction : Il suffit de rajouter deux fonctions entreeCamion et sortieCamion qui
prennent le sémaphore "route".
Sempahore route;
Sempahore mutexOP;
Sempahore mutexPO;
int nbOP nbPO;
fonction OPaccessCamion :
route.verrouiller();
fonction OPexitCamion :
route.relacher();
5. Y’a-t-il un quelconque risque de famine ? Justifiez votre réponse. (0,5 point)
Correction : Attention : la réponse dépend de la solution donnée par les étudiants. Telle
qu’elle est fournie dans le corrigé ci-dessus, il peut y avoir une famine puisqu’un groupe
de voiture en continu dans un sens ou dans l’autre peut maintenir la route verrouillée
avec des nbXX++. Mais les étudiants peuvent aussi avoir directement fourni la solution
avec un sémaphore de demande d’accès comme ci-dessous pour le cas du camion.
Sempahore entree mutexOP mutexPO demandeCamion;
int nbOP nbPO;
fonction OPaccess :
demandeCamion.verrouiller();
mutexOP.verrouiller();
nbOP++;
si (nbOP == 1) entree.verrouiller();
mutexOP.relacher();
demandeCamion.relacher();
...
fonction OPaccessCamion :
demandeCamion.verrouiller();
entree.verrouiller();
demandeCamion.relacher();
...