Table des matières
Conflits d'accès aux ressources
Certains processus ont besoin d'accéder à des ressources – fichiers, ports, lecteurs… Le système d'exploitation doit donner accès aux ressources.
Mais deux processus ne peuvent pas modifier en même temps un même fichier ou écrire sur un même port.
Le système d'exploitation a pour rôle de gérer ces accès multiples par exemple en bloquant temporairement un processus en attendant que la ressource dont il a besoin soit libérée.
Le risque d'interblocage, deadlock
Deux personnes veulent manger mais il n'y a que deux baguettes. Chacun a pris une baguette et chacun attend que la 2e baguette soit libre. Alors ils meurent de faim ! Cet exemple classique est connu comme le problème du dîner des philosophes.
Dans un cas informatique, on aurait par exemple :
- Plusieurs processus ont besoin d'utiliser un même fichier.
- S'ils ne font que le lire, cela ne pose pas de difficulté. Ils peuvent lire en même temps.
- S'ils doivent modifier le fichier, des difficultés apparaissent : deux processus ne peuvent pas écrire en même temps dans le même fichier.
Premier cas sans blocage
Les processus P1 et P2 souhaitent modifier la ressource R.
P1 a pris la main en premier, l'OS bloque la ressource pour lui, P2 attend son tour.
Deuxième cas avec blocage
- Les processus P1 et P2 souhaitent modifier les ressources R1 et R2.
- P1 a déjà pris la main sur R1, P2 a déjà pris la main sur R2.
- P1 souhaite modifier R2 mais P2 le bloque, il faut attendre que P2 ait fini.
- P2 souhaite modifier R1 mais P1 le bloque, il faut attendre que P1 ait fini.
Il y a interblocage – deadlock.
Résoudre le problème des interblocages
Prévoir les interblocages est possible (cf. algorithme du banquier) mais difficile voire irréaliste.
On peut essayer de les éviter en programmant d'une façon plus sûre, par exemple faisant en sorte que les verrous soient toujours posés dans le même ordre : Dans l'exemple, l'interblocage vient du fait que P1 veut bloquer R1 puis R2 alors que P2 bloque R2 puis R1. S'ils avaient procédé dans le même ordre, il n'y aurait pas eu interblocage.
Mais en général l'OS ne cherche pas à empêcher les interblocages. Il réagit si ils arrivent : en observant le déroulement des processus, il détecte la survenue d'un interblocage, tue un processus pour débloquer la situation et relance le processus tué ensuite.
