correction de l'exo 2
TD 2, Corrigé exercice 2 .... En fait, P et V sont souvent des codes faisant partie
du système d'exploitation, et s'exécutent donc en mode CPU privilégié. Ainsi, le ...
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