ESI-1CS Janvier 2023
Contrôle Final de SYC1
Durée : 2h
Exercice 1 (4 points) :
A l'instant t, une banque dispose dans ses comptes réservés au financement des projets de 10000
unités de dinars algériens (DZD, DA), 5000 unités de dollars américains (USD, $), 6000 unités de
Euros (EUR , €) et de 3000 unités francs suisses (SFR). Cette banque finance 3 trois projets P1, P2,
et P3. Le financement des projets s’effectue en deux étapes. Les remboursements se font à la fin
des projets. L’état de financement de la première étape et les besoins de la deuxième étape des
projets sont les suivants :
projets DZD USD EUR SFR
projets DZD USD EUR SFR
P1 2000 1000 8000 4000
P1 1000 3000 5000 0
0 P2 8000 6000 5000
P2 2000 6000
P3 9000 X Y 1000
0
P3 1200 4000 3000
0
Financement de la 1ère étape Besoins de la 2ième étape
1) Quelles sont les valeurs maximales de X et Y pour lesquelles la banque parviendra à financer
tous les projets ? Donner l'ordre de financement des projets ? Justifier vos réponses.
2) Quelles sont les ressources de financement totales de la banque ?
3) Si on suppose que X=0 et Y=0, à l’instant t+1 les propriétaires du projet P1 font la requête
suivante (10000 DZD, 500 USD, 2000 EUR, 3000 SFR). Est-ce que cette requête peut être
satisfaite ? Justifiez votre réponse.
Exercice 2 (5,5 points) : (répondez à cet exercice sur la feuille de réponse A)
On souhaite implémenter au moyen des moniteurs le problème de producteur/consommateur
partageant un tampon TP à n cases. Le producteur produit puis dépose un objet 'MP' dans le
Tampon TP et le consommateur y retire un objet 'MC' puis le consomme. On propose donc la
solution décrite sur la feuille de réponse A (à compléter).
1) Compléter le code du moniteur (décrit sur la feuille de réponse A) qui permet de
synchroniser les deux opérations de dépôt et de retrait d'objets dans et depuis le tampon
TP, ainsi que les programmes des processus producteur et consommateur utilisant ce
moniteur.
1
2) On suppose maintenant qu'on dispose d'un producteur et deux types de consommateurs
Cons1 et Cons2, tel que Cons1 retire 1 objet et Cons2 retire à la fois 2 objets du tampon TP
avec priorité de retrait au consommateur de type Cons2.
Implémenter à l'aide d'un moniteur la solution de ce problème (servez-vous du modèle du
moniteur Prod_Cons en rajoutant au plus une variable condition et une variable d'état).
Exercice3: (5,5 points)
Partie1:
Cinq processus concurrents P1, P2, P3, P4 et P5 exécutent chacun le programme suivant :
Pi () // i = 1,2,3,4,5
{
int m=0;
while(true) { printf(“cycle %d du processus %d“, m++, i);} /***<inst_print>***/
}
On voudrait synchroniser les cycles des processus à l’aide de sémaphores de manière à ce que :
- Chaque cycle de P1 s’exécute en concurrence avec un cycle de P2 et P5 (aucune contrainte
entre ces cycles)
- Le processus P3 exécute un cycle, lorsque P1 et P2 terminent tous les deux l’exécution d’un
cycle.
- P4 commence un cycle lorsque P3 et P5 auront terminé un cycle
- Lorsque P4 termine un cycle, les processus P1, P2 et P5 entament chacun un nouveau cycle
et ainsi de suite.
a) Montrer les points de synchronisation dans le programme Pi
b) Compléter le programme de chaque processus (P1(), P2(), P3(), P4(), P5()) réalisant la
synchronisation demandée en utilisant au maximum 5 sémaphores et aucune variable d'état.
Indications :
- un cycle représente une itération de la boucle
- vous pouvez faire référence à l'instruction de la boucle while en écrivant juste <inst_print>
- Servez-vous d'un graphe de précédence pour représenter la synchronisation décrite (non
noté).
Partie2:
On suppose maintenant qu'on dispose de N processus Pi (i=1…N).
- P1, P2, P3, P4, P5 gardent le même comportement.
- Les processus P6, P7, ….PN auront le même comportement que P5, et P4 commencera donc
un cycle lorsque P5, P6,…..PN auront tous terminé un cycle.
- Les processus P1, P2, Pi (i=5…N) entament un nouveau cycle lorsque P4 termine un cycle
- Réécrire le programme de P4 et Pi (i=5..N) en ajoutant un seul sémaphore et une variable d'état
seulement.
2
Feuille de réponse A Nom & Prénom: ------ Groupe: ----
Exercice 2:
Question1:
Prod_Cons: Moniteur ;
Plein entier;
Procédure in, out : entier;
dépôt(MP) TP : tableau[0..n-1] de message;
Procédure retrait(MC)
Nvide, Nplein: Condition;
Externe
Début dépôt, retrait; Début
Procédure Déposer(message), procédure Retirer(message)
Si ---------------------------------alors [Link]; Si ---------------------------------alors [Link];
------------------------------------; ------------------------------------;
------------------------------------; Plein := plein -1;
[Link]; ------------------------------------;
Fin; Fin;
Procédure Déposer(Mp) Procédure Retirer(Mc)
Début Début
TP[in] := Mp; Mc := TP[out];
In := (in+1) mod n; out := (out+1) mod n;
Fin; Fin;
Debut
Plein:=0; in:=0; out:=0;
Fin
Producteur Consommateur
Répéter Répéter
Jusqu'à faux Jusqu'à faux
3
Feuille de réponse A Nom & Prénom: ------ Groupe: ----
Question2: (En cas de besoin, utiliser un intercalaire pour la suite de la question 2)