1 Brefs rappels --- Définitions
Un sémaphore est une structure de données composée
-
d'un compteur ;
- d'une liste de processus en attente.
Le compteur peut prendre des valeurs entières positives, négatives, ou
nulles. Lors de la création d'un sémaphore, le compteur est initialisé
à une valeur donnée positive ou nulle ; la file d'attente est vide.
Un sémaphore est manipulé par les deux actions atomiques
suivantes :
-
wait(s)
- (aussi nommée P(s) ou
down(s)) décrémente le compteur associé au sémaphore. Si
sa valeur est négative, le processus appelant se bloque dans la
file d'attente.
- signal(s)
- (aussi nommée V(s),
up(s), ou post(s)) incrémente le compteur. Si
le compteur est négatif ou nul, un processus est choisi dans la
file d'attente est devient actif.
Deux utilisations sont faites des sémaphores :
-
la protection d'une ressource partagée (par exemple l'accès à
une variable, une structure de donnée, une imprimante...). On
parle de sémaphore d'exclusion mutuelle ;
- la synchronisation de processus (un processus doit en attendre
un autre pour continuer ou commencer son exécution).
Bien souvent on peut assimiler la valeur positive du compteur au
nombre de processus pouvant acquérir librement la ressource ; et
assimiler la valeur négative du compteur au nombre de processus
bloqués en attente d'utilisation de la ressource.