| Chapitre 4 : Synchronisation entre processus |
Section Critique et exclusion mutuelle
Définition :
Section critique = toute section de code (séquence d’instructions) manipulant de ressources communes (variables communes, …)
Les processus que nous allons considérer ont la forme suivante :
While(1)
{
< Section Restante > ;
< Section Critique > ;
}
L’idée est d’exécuter la section critique de manière indivisible c’est à dire, il faut voir de quelle manière de rendre atomiques les séquences d’instructions qui correspondent aux sections critiques.
En d’autres termes, Il faut que les processus parallèles composant l’application vérifient la propriété qu’à tout instant, au plus l’un d’entre eux soit en train d’exécuter une instruction de sa section critique. Les sections critiques sont exécutées en exclusion mutuelle.
Le nombre de processus, se trouvant à un moment donné dans l’une de leurs sections critiques, doit être toujours inférieur ou égal à 1.
Schéma général de solution :
Il est évident que l’accès aux différentes sections critiques doit être contrôlé de telle manière que la propriété d’exclusion mutuelle, reste vérifiée à tout instant. Donc, les processus n’ont plus le droit d’accéder librement à leurs sections critiques. L’accès aux sections critiques doit se faire selon des protocoles spécifiques. Ces protocoles se présentent sous la forme de deux sections d’instructions qui vont entourer de part et d’autre la section critique. Il s’agit de :
La section d’entrée (prologue) correspond à une demande d’autorisation d’accès. Quant à la section de sortie (épilogue) elle correspond à une signalisation de fin d’utilisation. Ainsi, le comportement de processus devient :
While(1)
{
< Section Restante > ;
< Section d’entrée >
< Section Critique > ;
< Section de sortie >
}
La section d’entrée doit pouvoir bloquer tout processus demandant d’accéder à sa section critique s’il existe une section critique occupée par un processus donné. L’exécution d’une section de sortie (épilogue) pourrait permettre le déblocage d’un processus en attente.
Les sections sont réservées au développement de différents protocoles pour résoudre le problème de l’exclusion mutuelle dans le contexte :
Les solutions doivent vérifier les propriétés suivantes :
Un grand nombre de solutions ont été proposées. Nous pouvons les classer dans 3 grandes catégories :