1. Ressources et ressources critiques
Dans un système multi-programmé, les processus ont besoin de ressources pour s’exécuter : processeur, mémoire, fichiers, périphériques, etc.
Une ressource est donc toute entité dont un processus a besoin pour poursuivre son exécution.
Une ressource critique est une ressource qui ne peut être utilisée que par un seul processus à la fois, par exemple une imprimante ou un fichier ouvert en écriture.
La synchronisation de l’accès aux ressources partagées garantit que les données ne perdent pas leur cohérence lorsqu’elles sont mises à jour par plusieurs processus.
2. Définition de l’interblocage (deadlock)
Un interblocage (deadlock) est une situation où plusieurs processus restent bloqués indéfiniment, chacun attendant une ressource détenue par un autre, sans qu’aucun ne puisse avancer.
3. Quatre conditions nécessaires à un interblocage
Pour qu’un interblocage soit possible, les quatre conditions suivantes doivent être réunies :
- Exclusion mutuelle : la ressource ne peut être allouée qu’à un seul processus à la fois.
- Possession et attente : un processus possède déjà au moins une ressource et en attend une autre.
- Non-préemption : une ressource ne peut pas être retirée de force à un processus qui la détient.
- Attente circulaire : il existe un cycle dans lequel chaque processus attend une ressource détenue par un autre (P1 attend une ressource détenue par P2, P2 attend une ressource détenue par P3, …, Pn attend une ressource détenue par P1).
Si au moins une de ces conditions est empêchée, l’interblocage ne peut pas se produire.
4. Exemple d’interblocage avec deux ressources
On considère deux processus P1 et P2 et deux ressources critiques R1 et R2.
Code simplifié
Processus P1 :
P(SR1) // demande R1
P(SR2) // demande R2
... utilisation de R1 et R2 ...
V(SR2)
V(SR1)
Processus P2 :
P(SR2) // demande R2
P(SR1) // demande R1
... utilisation de R1 et R2 ...
V(SR1)
V(SR2)
Situation de blocage
Si P1 obtient R1 et P2 obtient R2 :
- P1 possède R1 et attend R2 : il est bloqué.
- P2 possède R2 et attend R1 : il est bloqué.
Chacun attend l’autre : aucun ne peut continuer. On est en situation d’interblocage.
5. Stratégies face à l’interblocage
Un système d’exploitation peut adopter différentes stratégies pour gérer les interblocages :
- Prévention : organiser l’allocation des ressources pour empêcher qu’une des quatre conditions soit réalisable (par exemple imposer un ordre global sur les ressources).
- Évitement : analyser les demandes de ressources pour ne pas entrer dans un état dangereux
- Détection et récupération : laisser se produire des interblocages, mais les détecter et intervenir (terminer un processus, libérer des ressources, etc.).