correction de l'exo 2
TD 2, Corrigé exercice 2. 1/ Implémentation des primitives P et V .... Cela peut
faire une jolie question d'examen ! Le code de V(s) devient: Prev=TAS(s.Verrou).
Part of the document
TD 2, Corrigé exercice 2 1/ Implémentation des primitives P et V
a/ Reprenons la définition de P (s): ( ( Si (s.val on est donc sûr que si un V(s) démarre, il
verra que s.file contient bien un élément. Et on évite ainsi le problème du
1/b1
mettre le processus dans l'état bloqué (on doit faire cela après avoir
démasqué, car, cette ligne correspond à passer la main à l'ordonnanceur en
lui disant de bloquer le processus et élire un nouveau processus : si on
inverse cette ligne avec la précédente, cela veut dire qu'on passe la main
à l'ordonnanceur, si tant est qu'on y parvient, en laissant le CPU en mode
interruption masquées, ce qui est étrange) Remarque 1: on voit bien que l'utilisation de cet outil bas niveau
(masquer/démasquer) peut être utile, mais ce, pour des sections de code
critiques courtes (ce qui est bien le cas ici)
Remarque 2 : on peut envisager de simplifier l'exercice 2-2. Au lieu
d'utiliser TAS, utiliser directement « Masquer/ Demasquer les
interruptions ».... Cela peut faire une jolie question d'examen ! Le code de V(s) devient: Prev=TAS(s.Verrou)
Tant que Prev = 1 // il y a déjà un processus dans P(s) ou V(s)
Faire
sleep(delai);
prev=TAS(s.Verrou) ; Si (s.file non vide)
Alors
retirer le contexte d'un processus de s.File
mettre le processus dans l'état prêt
Sinon
s.val = s.val + 1 ;
FinSi
//SORTIE SCritique
s.Verrou = 0 -----------------------
3