0% ont trouvé ce document utile (0 vote)
33 vues3 pages

Synchronisation

Transféré par

marammliki14
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
33 vues3 pages

Synchronisation

Transféré par

marammliki14
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Faculté des Sciences de Monastir

Département d’Informatique

Systèmes d’Exploitation II – LSI 1


Exercices : Synchronisation des processus

Exercice 1
On considère la gestion d’un compte client par trois processus P1, P2 et P3 exécutant le
programme suivant :

void Pi (int somme) {


P(compte);
solde = lire_solde();
écrire_solde(somme+solde);
V (compte);
}
avec :
• solde une variable partagée qui contient le solde courant du compte client déterminé par la
fonction lire_solde().
• compte un sémaphore.

1. Quel est l’intérêt de l’utilisation du sémaphore compte ?


2. Que doit être la valeur initiale du sémaphore compte ? Pourquoi ?
3. Dresser un tableau qui récapitule le déroulement simultané des trois processus P1(100), P2(200)
et P3(300) sachant que le solde initiale est 1000DT. La file d'attente du sémaphore compte est
implémentée par une file FIFO.

Utilisation de la ressource partagée


Processus Instruction Solde compte.E compte.F
(oui/non)

Exercice 2
1. Expliquer le concept des sémaphores et comment ils assurent le mécanisme de l’exclusion
mutuelle.
2. Soit deux processus P1 et P2 qui se partagent deux sémaphores S1 et S2 initialisés à 0.

void P1() { void P2() {


A1(); A2();
V(S2); V(S1);
P(S1); P(S2);
B1(); B2();
} }

Quelle synchronisation a-t-on imposée sur les exécutions des fonctions A1(), A2(), B1() et B2(). Dresser
le diagramme de précédence.

Exercice 3
Soient deux processus P1 et P2. Le processus P1 effectue deux traitements A et B. Le processus
P2 effectue un seul traitement C.

void P1() { void P2() {


A(); C();
B(); }
}
1/3
Systèmes d’Exploitation II – LSI 1 Synchronisation des processus

1. Une contrainte impose que le traitement B doit être fait après la fin des traitements A et C.
Modifier le code des deux processus P1 et P2 pour respecter cette contrainte moyennant des
sémaphores.
2. Même question si la contrainte impose l’ordre d’exécution suivant : A puis C puis B.
3. Même question si la contrainte impose l’ordre d’exécution suivant : B puis C puis A.

Exercice 4
Étant donné N processus indépendant P1, P2, …, PN. On souhaite exécuter les processus dans
cet ordre, c’est-à-dire chaque processus Pi doit être exécuté avant le processus Pi+1.
1. Comment on peut respecter cette contrainte avec les sémaphores
2. Comment on doit transformer chaque processus Pi ?

Exercice 5
Il s’agit de synchroniser les deux processus P1 et P2 avec des sémaphores S1, S2 et S3.

void P1() { void P2() {


P(S1); P(S3);
if(NB < N) { OK2();
NB ++; P(S1);
V(S1); NB --;
OK1(); V(S1);
V(S3); traitement2();
P(S2); V(S2);
traitement1(); }
}
else {
V(S1);
traitement3();
}
}
1. Quels sont les types et les rôles de chacun des sémaphores S1, S2 et S3 ?
2. Donner leurs valeurs initiales.

Exercice 6
1. Écrire le code des deux processus P1 et P2 : Le processus P1 demande 2 entiers et les renvoie,
via une boite aux lettres, vers le processus P2. Le processus P2 calcul la somme des deux entiers
et la renvoie, via une boite aux lettres, vers le processus P1 qui affiche le résultat.
2. Même question mais avec une communication directe.

Exercice 7
Écrire le code des deux processus P1 et P2. Le processus P1 affiche les nombres pairs dans
l’intervalle 1 à 10 et le processus P2 affiche les nombres impairs dans le même intervalle. L’affichage
doit être dans l’ordre croissant de 1 à 10.
1. Utiliser l’envoi de messages pour assurer la synchronisation entre les deux processus.

Exercice 8
Dans une pâtisserie familiale le pâtissier et sa femme, la pâtissière, se partagent la tâche de
préparation des gâteaux :
• Le pâtissier prépare les gâteaux et les dépose sur une table.
• La pâtissière retire les gâteaux de la table et les place dans la vitrine.
La table utilisée ne peut contenir que 12 gâteaux au maximum. Nous supposons que la vitrine peut
contenir tous les gâteaux produits.
Ce partage des tâches cause les conflits suivants :
• Le pâtissier veut déposer des gâteaux dans la table alors que la table est déjà pleine.
• La pâtissière veut retirer un gâteau de la table alors que la table est vide.

2/3
Systèmes d’Exploitation II – LSI 1 Synchronisation des processus
• Le pâtissier et la pâtissière ne doivent pas utiliser la table en même temps.
On vous demande de proposer une solution qui permet de représenter le travail effectué dans cette
pâtisserie tout en évitant les conflits cités ci-dessus. Notons que le pâtissier et la pâtissière peuvent être
considérés comme deux processus représentés chacun par une fonction :
• void pâtissier () /*Fonction représentant le travail du pâtissier.*/
• void pâtissière () /*Fonction représentant le travail de la pâtissière.*/
1. Proposer une solution à ce problème en utilisant les primitives sleep() et wakeup(processus)
vues dans le cours.
2. Proposer une solution à notre problème en utilisant uniquement des sémaphores tel-que
étudiés dans le cours.

Exercice 9
Considérons un ensemble de processus qui se partagent l’accès à une base de données (par
exemple, un système de réservation de billets d’avion). Ces processus se répartissent en deux
catégories :
• Les lecteurs, qui se contentent de lire les informations contenues dans la base de données ;
• Les rédacteurs, qui effectuent les opérations de mise à jour.
Afin de garantir la cohérence des données, on impose les contraintes suivantes :
1. Si un processus rédacteur est en train d’actualiser la base, aucun autre processus n’est autorisé à
y accéder (même en lecture).
2. L’accès simultané de plusieurs lecteurs est autorisé.
3. Aucune mise à jour ne peut avoir lieu tant qu’une consultation est en cours.
Notons que les lecteurs et les rédacteurs peuvent être considérés comme deux processus représentés
chacun par une fonction :
• void lecteur() /*Fonction représentant le travail d’un lecteur.*/
• void rédacteur() /*Fonction représentant le travail d’un rédacteur.*/
Proposer une solution à notre problème en utilisant uniquement des sémaphores.

3/3

Vous aimerez peut-être aussi