Information Technology Reference
In-Depth Information
Le programme Réservation peut être exécuté par plusieurs processus à la fois
(autrement dit, le programme est réentrant). La variable nbplace, qui représente le
nombre de places restantes dans l'avion par exemple, est ici une variable d'état du
système (de réservation).
On considère l'exécution de deux processus Client_1 et Client_2, alors que nbplace
est égale à 1. Client_1 s'exécute en premier, et entame une réservation. Maintenant,
l'exécution de Client_1 est commutée par l'ordonnanceur juste après le test de la
valeur de la variable nbplace (nbplace
1). Client_2 s'exécute à son tour, teste nbplace
qu'il trouve également égale à 1 et donc effectue une réservation en décrémentant
d'une unité la variable nbplace. nbplace devient égale à 0. Maintenant que le processus
Client_2 a terminé son exécution, Client_1 reprend la main. Comme Client_1 avait
trouvé la variable nbplace comme étant égale à 1 juste avant d'être commuté, il
continue son exécution en décrémentant à son tour nbplace. De ce fait, nbplace devient
égale à - 1 ce qui est incohérent ! Une même place a été allouée à deux clients
différents !
=
Ressource critique, section critique et exclusion mutuelle
La variable nbplace doit être accédée par un seul processus à la fois pour que sa
valeur reste cohérente : ici en l'occurrence le processus Client_1 qui a commencé la
réservation en premier doit terminer son opération avant que le processus Client_2
puisse commencer à s'exécuter. Ainsi, Client_2 trouvera la variable nbplace égale à 0
lors du test et n'effectuera pas de réservation. nbplace constitue donc une ressource
critique.
Le code d'utilisation d'une ressource critique est appelé section critique . La section
critique doit au moins offrir la propriété essentielle de l' exclusion mutuelle qui garantit
que la ressource critique manipulée durant la section critique ne peut effectivement
être utilisée que par un seul processus à la fois. Pour ce faire, la section critique est
précédée par un prélude et est suivie par un postlude qui assurent cette propriété
d'exclusion mutuelle.
Pour garantir l'exclusion mutuelle, il faut donc entourer l'utilisation de la variable
nbplace d'un prélude et d'un postlude. Le prélude prend la forme d'une protection
qui empêche un processus de manipuler la variable nbplace si un autre processus le
fait déjà. Ainsi le processus Client_2 est mis en attente dès qu'il cherche à accéder à
la variable nbplace déjà possédée par le processus Client_1. Le postlude prend la
forme d'une fin de protection qui libère la ressource nbplace et la rend accessible au
processus Client_2.
Réalisation d'une section critique à l'aide des interruptions matérielles
Nous rappelons que le mécanisme sous-jacent à l'ordonnancement des processus
peut être la survenue d'une interruption horloge. Aussi une solution pour réaliser
l'exclusion mutuelle est de masquer les interruptions dans le prélude et de les démas-
quer dans le postlude. Ainsi les interruptions sont masquées dès qu'un processus
accède à la ressource critique et aucun événement susceptible d'activer un autre
processus ne peut être pris en compte.
 
 
Search WWH ::




Custom Search