Objectif : Identifier une ressource critique, expliquer ce qu’est un interblocage (deadlock), citer les quatre conditions d’apparition et donner des exemples de stratégies pour les gérer.

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 :

  1. Exclusion mutuelle : la ressource ne peut être allouée qu’à un seul processus à la fois.
  2. Possession et attente : un processus possède déjà au moins une ressource et en attend une autre.
  3. Non-préemption : une ressource ne peut pas être retirée de force à un processus qui la détient.
  4. 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 :