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.