Telechargé par magicpotion

TD-synchronisation des processus

publicité
Systèmes d’exploitation
TD : Synchronisation de processus
Exercice 1) On suppose que sur Unix on peut définir des variables x et y communes à deux processus
comme suit :
shared long x = 0 ;
shared long y = 0 ;
Deux processus exécutent les codes suivants :
Processus P1
Processus P2
***
***
x = x + 1;
x = x * 2;
y = y + 1;
y = y * 2;
printf("x=%d,y=%d\n", x, y);
printf("x=%d,y=%d\n", x, y);
***
***
A- En utilisant des sémaphores, modifier le code pour assurer que les printf affichent toujours la valeur
x=2 pour les 2 processus et y quelconque.
B- En utilisant des sémaphores, modifier le code pour assurer que les printf affichent toujours la valeur
x=2 pour les 2 processus et y ne prendra jamais la valeur 2 , c-à-d on a : y#2 pour les 2 processus.
C- En utilisant des sémaphores, modifier le code pour assurer que les printf affichent toujours la
valeur x=2, y=1 pour les 2 processus.
D- En utilisant des sémaphores, modifier le code pour assurer que les printf affichent toujours la
valeur x=2, y=2 pour les 2 processus.
E) En utilisant des sémaphores, modifier le code pour assurer que le processus P1 affiche x=2 et y=1
et le processus P2 affiche x=2 et y=2.
Exercice 2 : On dispose d'un mécanisme d'enregistrement à un ensemble de cours, tel que tout élève
ne peut être enregistré qu'a au plus trois cours, et que chaque cours a un nombre limité de places
offertes.
Un élève qui a déjà choisi ses trois cours souhaite en abandonner un, pour en choisir un autre qu'il
préfère plus. Le service de la scolarité souhaite donc mettre en place un système de permutation de
cours, permettant à un élève de changer de cours sans perdre le bénéfice des cours auxquels il est déjà
inscrit.
On suppose qu'on a N cours: cours1,..., coursN et q'on dispose des deux fonctions suivantes:
Inscrit(user, coursk) : Permet d'inscrire l'utilisateur user au coursk.
desinscrit(user, coursk) : Permet de désinscrire l'utilisateur user du coursk.
En utilisant les sémaphores et les fonctions Inscrit() et desinscrit(), complétez la procédure
coursEchange (user, coursi, coursj)
{
......
}
pour permettre à l'utilisateur user de se désinscrire du coursi, auquel il est inscrit, pour s'inscrire au
coursj.
NB: Si le cours coursj est plein, l'étudiant doit garder son inscription au coursi.
1
Exercice 3) Soient 2 gares communicant par une voie unique
a) Gérer l’utilisation de cette voie unique pour qu’il n’y a qu’un seul train à tout instant sur la voie.
b) Gérer l’utilisation de la voie pour que plusieurs trains peuvent l’emprunter dans le même sens l’un
derrière l’autre.
c) On souhaite maintenant borner le nombre de trains circulant sur la voie par une constante MAX (i.e. au plus
MAX trains peuvent être sur la voie au même temps).
Indiquez ce qu’il faut modifier dans le code précédent pour respecter cette contrainte supplémentaire.
2
Téléchargement