Vous êtes sur la page 1sur 3

Le 22 octobre 2023

UNIVERSITE Mohamed Khider BISKRA


Département d’Informatique
Systèmes d’exploitation II
Année Universitaire 2023/2024

Série d'exercice n°2 : Synchronisation des processus

Exercice n°1 :
1. Soient les 3 processus suivants :

P1 P2 P3
Cycle Cycle Cycle
Afficher("A") ; Afficher("B") ; Afficher("C") ;
Fin Cycle Fin Cycle Fin Cycle
Utiliser les sémaphores pour synchroniser les processus P1, P2, et P3 pour les cas suivants :
– La chaine de caractères affichée soit : ACACACAC….
– Le nombre de “C” affichés soit toujours supérieur ou égal au nombre de “B” affichés.
– Chaque cycle du processus P1 précède un cycle du processus P2 et un cycle du processus P3.
2. Soit l’ensemble de processus suivant, où les contraintes de précédence sont données par le graphe ci-
dessous :

Donner une solution utilisant les sémaphores pour synchroniser ces processus de manière à respecter les
contraintes de précédence, vous préciserez combien de sémaphores vous sont nécessaires et à combien de
ressources chacun est initialisé.
Exercice n°2 :
Soit un programme composé de 8 processus "mathématiciens" qui font tous la même chose : ils choisissent
deux nombres de manière aléatoire et calculent la somme. Pour afficher les résultats, on dispose de 5
mémoires tampons.
Chaque mémoire tampon est un tableau de 4 éléments, où la première position contiendra l'identificateur du
processus qui a fait le calcul, suivi des deux opérandes puis, finalement, du résultat.
Lorsqu'un mathématicien a terminé son calcul, il choisit aléatoirement un tampon. Quand il en a obtenu un,
il le remplit et recommence avec un autre calcul. Chaque tampon a un lecteur qui affiche le résultat.
Ecrire une solution pour ce problème, qui prend en charge les mécanismes de synchronisation qui assurent
le bon fonctionnement. Définir les sémaphores nécessaires et leur valeur initial. Justifier votre réponse.

Exercice n°3 :
Le modèle des lecteurs et des rédacteurs schématise une situation rencontrée dans la gestion des fichiers
partageables, Dans ce modèle, on considère des processus parallèles (n au plus) divisés en deux classes les
lecteurs et les rédacteurs. Ces processus peuvent se partager une ressource unique, le fichier. Ce fichier peut
être lu simultanément par plusieurs lecteurs, tandis que les rédacteurs doivent y avoir un accès exclusif (un
seul rédacteur peut y écrire et aucun lecteur ne peut lire pendant ce temps). On note comme suit le
programme des lecteurs et des rédacteurs :
LECTEURS REDACTEURS
demande de lecture ; demande d'écriture ;
lecture ; écriture ;
fin de lecture ; fin d’écriture ;

Les procédures demande d'écriture et fin d'écriture devront assurer l'exclusion mutuelle entre deux
rédacteurs. Avec les procédures demande de lecture et fin de lecture, elles doivent assurer les règles de
coopération entre la classe des lecteurs et la classe des rédacteurs.
Ecrire, avec des sémaphores, des opérations P et V, et des variables d'état le programme des lecteurs et des
rédacteurs le cas où les lecteurs ont toujours priorité sur les rédacteurs sans réquisition ; le seul cas ou un
lecteur doive attendre est celui où un rédacteur occupe le fichier. Un rédacteur ne peut donc accéder au
fichier que si aucun lecteur n'est en attente ou en cours de lecture. On autorise toute coalition de lecteurs
pour occuper indéfiniment le fichier et en interdire l'accès aux rédacteurs.
Exercice n°4 :
Le but de cet exercice est la gestion du trafic aérien. On ne dispose que d’une seule piste à la fois
d’atterrissage et de décollage. En plus, cette piste ne peut accepter qu’un seul avion quel que soit la
manœuvre (atterrissage ou décollage). Pour cela, on dispose de deux files d’attente :
1. en l’air de taille N pour les avions souhaitant atterrir
2. et au sol de taille M pour les avions souhaitant décoller.
La gestion de ce trafic d’avions nécessite, alors, quatre fonctions :
1. une fonction SortirAvions ( ) qui fait sortir les avions du hangar (dépôt) et les place dans la file
d’attente de décollage,
2. une fonction Decollage ( ) qui prend un avion cloué en sol dans la file d’attente de décollage et le fait
décoller en utilisant la piste,
3. une fonction AmenerAvions ( ) qui fait entrer, dans la file d’attente d’atterrissage, des avions en vol,
4. et une fonction Atterrissage ( ) qui prend un avion de la file d’attente d’atterrissage et le fait atterrir
en utilisant la piste.
Synchronisez au moyen de sémaphores l’enchaînement des fonctions de gestion du trafic (Donner les
déclarations ainsi que les initialisations des sémaphores utilisés).

Exercice n°5 :
On désire simuler le problème de l'infirmier dormant, soit un cabinet médical avec une salle d'attente et une
salle de consultation représentées par la figure suivante :
Les malades entrent en salle d'attente un à la fois, de la salle d'attente ils peuvent pénétrer dans la salle de
consultation. Les entrées aux deux salles sont adjacentes et possèdent une porte commune glissante qui
ferme une entrée pour garder l'autre ouverte. Lorsque le médecin termine avec un malade ce dernier quitte la
salle de consultation par une autre sortie l'infirmier ouvre l'entrée à la salle de consultation, si la salle
d'attente n'est pas vide, il invite le malade suivant si non il profite pour dormir dans la salle d'attente.
Lorsqu'un malade entre en salle d'attente et trouve l'infirmier donnant il le réveille sinon il attend son tour.

Consultation

Sortie

Attente

Définir les données nécessaires à la simulation du problème.


Ecrire l'algorithme de la procédure entrer en salle d'attente et le processus associé à l'infirmier.
Exercice n°6 :
On dispose de processus a, b, c, et init qui sont lancés au même instant. On désire contrôler
l'ordonnancement des actions des processus a, b, c. Pour cela on dispose d'un langage de spécification
comportant les opérations de concaténation séquentielle * et ., de choix exclusif + et de mise en parallèle Il.
Les processus a, b, c exécutent le code suivant :

Processus x() /* les trois codes sont différent pour x= a, b ou c*/


Boucle (avantx ; actionx ; apresx ;)
Fin ; /* actionx n'est pas forcément atomique*/
On note que si avantx et apresx sont vides pour un processus x donné, alors celui ci exécute indéfiniment
actionx, de façon séquentielle mais parallèlement aux autres processus. Donner, pour les spécifications
suivantes : (a.b)*, (a.(b Il c))*, (a.(b+c))*, (a Il b)* le code (qui est toujours une séquence de P et/ou V) de
init, avantx, et apresx pour chaque processus a, b. c.
Exercice n°7
Partie (1) : Soit s un sémaphore, on note :
i(s) : valeur initiale du sémaphore s (par définition nf(s) : nombre de processus qui ont franchi la primitive
i(s)≥ 0). P(s).

np(s) : nombre d’opérations P(s) exécutées sur s. Question : Vérifier que la relation suivante est
correcte : nf(s) = min(np(s),i(s)+nv(s)).
nv(s) : nombre d’opérations V(s) exécutées sur s.

Partie (2) : On dispose d’une carte électronique à base de microcontrôleurs pour contrôler un ensemble de
robots. La carte est livrée avec un logiciel sous Linux, qui permet de créer son propre programme pour
commander et coordonner un ensemble de robots, et de le charger ensuite dans la mémoire non volatile (sur
la carte) par un port série. On vous sollicite pour écrire un pseudocode qui contrôle le déplacement de
plusieurs robots sur les chemins suivants :

1. Les robots peuvent partir de A vers C ou de D vers


A.
2. Pour éviter tout risque de collision, il faut s’assurer
que chaque segment du chemin (segments AB, BC et
DB) est utilisé par un robot au plus.

Question : proposez une solution assurant la synchronisation des deux robots en utilisant les sémaphores.
Vérifiez la validité de votre solution.

Vous aimerez peut-être aussi