Il permet de s'assurer qu'un seul processus accède
à une ressource à un instant donné (fichier, base de données,
...).
Le cas le plus simple, le simple verrou (verrouillage pessimiste)
Le verrou est un outil d'exclusion
mutuelle très utilisé dans le cas des bases de données. On
peut voir un verrou comme un type abstrait avec deux opérations
mises en œuvre dans le noyau : verrouiller et
déverrouiller.
class Verrou {
public Verrou() { ...} ;
public void verrouiller () { ...} ;
public void deverrouiller () { ...} ;
protected ....
} ;
Exemple 3.13 : Le type abstrait verrou
Un verrou peut être dans deux états: ouvert et fermé. Il est
toujours possible de déverrouiller un verrou, même si celui-ci
est ouvert. L'appel du service de verrouillage sur un verrou
fermé entraîne le blocage du processus.
L'état d'un verrou est donc caractérisé par le nombre de processus qui
y sont bloqués. On peut représenter un verrou par l'automate de
la figure 3.9 ou par l'automate d'état fini étendu de la figure
3.10.
La protection d'une section
critique se fait alors de la façon suivante :
// Mettre le processus
appelant à l'état
bloqué.
// Il est chaîné dans la liste associée au verrou.
// L'allocateur prend la main pour rendre actif
// un processus à
l'état prêt
}
public void deverrouiller () {
if (!liste.estVide())
// Le premier processus de
la liste le_verrou.liste
// est retiré. Ce processus de
l'état
bloqué passe
// à l'état
actif/prêt.
// L'allocateur prend la main pour rendre actif un
// processus.
L'allocateur peut décider de laisser
// actif le processus
appelant, ou de donner la main
// à un autre processus.
else
lEtat = ouvert ;
}
Exemple 3.16 : Représentation interne d'un verrou
Pour mettre en oeuvre les services sur verrou dans le noyau, il
est nécessaire de disposer d'un mécanisme d'exclusion
mutuelle de plus bas niveau (masquage des interruptions et/ou
instructions spéciales). Le noyau n'assure qu'un seul service à
la fois.
Le verrou détruit le parallélisme et constitue un goulot
d'étranglement. Dans le cas des systèmes transactionnels, on
utilise des techniques plus élaborées.