Un cap pour ce chapitre
Ce que vous saurez faire
- Construire une situation d’interblocage.
- Distinguer attente temporaire, famine et blocage mutuel.
- Justifier une prévention par ordre commun d’acquisition.
Les bases utiles pour commencer
Des ressources parfois exclusives
Une ressource exclusive ne peut être utilisée simultanément par plusieurs processus. Il peut s’agir d’un verrou protégeant une donnée ou d’un équipement réservé. Un processus demande une ressource, l’utilise puis la libère. S’il la demande alors qu’un autre la possède, il attend selon le mécanisme prévu.
Supposons P1 et P2, ainsi que deux ressources A et B. Chaque processus a besoin des deux ressources pour réaliser son opération finale. P1 demande A puis B. P2 demande B puis A. Le résultat dépend de l’entrelacement des demandes : cette dépendance temporelle explique pourquoi un défaut peut sembler intermittent.
Construire le cercle qui bloque
Faisons avancer P1 : il obtient A. Faisons ensuite avancer P2 : il obtient B. P1 demande maintenant B, détenue par P2, et attend sans rendre A. P2 demande A, détenue par P1, et attend sans rendre B. Chacun attend donc une action que seul l’autre pourrait accomplir après avoir reçu la ressource manquante.
Le graphe d’attente porte les flèches P1 vers P2 et P2 vers P1. Dans ce modèle avec une instance par ressource et aucun retrait forcé, le cycle manifeste l’interblocage. Ajouter des unités de processeur ne suffit pas : les instructions utiles ne peuvent pas s’exécuter tant que leurs demandes restent insatisfaites.
Une flèche du graphe d’attente part du processus demandeur vers le détenteur de la ressource. Elle ne représente ni un transfert de données ni l’ordre choisi par l’ordonnanceur. Notez la ressource sur la flèche pour pouvoir expliquer exactement ce qui manque.
Reconnaître les conditions et les limites
Le scénario réunit une utilisation exclusive, la conservation d’une ressource pendant une autre attente, l’absence de retrait forcé et une attente circulaire. Empêcher l’une de ces conditions peut empêcher ce scénario. Ce vocabulaire aide à expliquer les mécanismes ; le programme demande avant tout de mettre en évidence le risque d’interblocage.
Une attente ordinaire a une issue possible : un processus en cours d’exécution peut bientôt libérer la ressource. La famine désigne un processus continuellement défavorisé, même si d’autres avancent. Dans l’interblocage de notre exemple, les deux processus concernés ne peuvent plus progresser. Une application qui paraît figée n’est donc pas automatiquement victime d’un interblocage.
Imposer un ordre commun
Demandons aux deux processus d’acquérir A avant B. Si P1 possède A, P2 attend A sans posséder B. P1 peut alors obtenir B, terminer et rendre ses ressources ; P2 les recevra ensuite. L’ordre commun empêche la configuration dans laquelle chacun détient la ressource dont l’autre a besoin.
Ce raisonnement s’étend à un ordre strict global sur plusieurs ressources : une chaîne de demandes ne peut revenir à son point de départ en montant toujours dans cet ordre. D’autres stratégies existent, comme demander toutes les ressources ensemble ou abandonner une tentative, mais elles comportent leurs propres coûts. Un délai d’expiration doit réellement provoquer une libération ou une reprise organisée pour débloquer la situation.
Exemple suivi : trois processus, un même cercle
Considérons trois ressources exclusives A, B et C. P1 conserve A et demande B ; P2 conserve B et demande C ; P3 conserve C et demande A. Le tableau de diagnostic se lit ligne par ligne : P1 attend P2, P2 attend P3, P3 attend P1. Les flèches forment P1 → P2 → P3 → P1. Aucun processus du cercle ne peut atteindre son instruction de libération puisqu’il lui manque une acquisition préalable. Un quatrième processus indépendant pourrait pourtant continuer : le blocage d’un groupe n’implique pas celui de toute la machine.
Retirons maintenant la dernière demande et supposons que P3 peut terminer avec C. Il peut libérer C, P2 avance puis libère B, et P1 avance. Une chaîne d’attentes n’est donc pas suffisante pour conclure à un interblocage. La question déterminante est l’existence d’une action possible qui ouvre cette chaîne, selon les règles précises du modèle.
Exemple suivi : réparer sans perdre la cohérence
Un délai d’expiration peut être utile si le processus qui abandonne rend ce qu’il possède. Si P2 abandonne après avoir pris B, libère B puis recommence sa transaction, P1 peut obtenir B et terminer. Si P2 attend seulement une seconde de plus en gardant B, aucune dépendance ne disparaît. La stratégie doit préciser la libération, la remise en état des données partiellement modifiées et les conditions d’un nouvel essai.
Pour prévenir le cercle, numérotons A=1, B=2, C=3 et imposons des acquisitions croissantes à tous les processus. Celui qui possède C ne peut pas demander A ensuite. Un cycle exigerait de revenir à une ressource de numéro plus petit, ce qui contredit la règle. Cette preuve exige une convention globale : si une seule fonction utilitaire inverse l’ordre, le raisonnement ne s’applique plus. L’ordre traite le risque de cycle ; l’équité de l’ordonnancement et la durée des opérations restent d’autres questions.
À vous de faire varier les choses
Composez un entrelacement
Écrivez une suite de 1 et de 2 : chaque chiffre fait tenter une action à P1 ou P2. Essayez 1212 puis imposez le même ordre aux deux processus.
Lire le résultat de l’expérience initiale
Attente circulaire : interblocage possible ou atteint.
Chacun conserve une ressource et sa prochaine demande vise celle de l’autre. Les actions suivantes ne peuvent pas obtenir la seconde ressource.
| Processus | Action | A | B |
|---|---|---|---|
| P1 | Obtient A | P1 | Libre |
| P2 | Obtient B | P1 | P2 |
| P1 | Attend B | P1 | P2 |
| P2 | Attend A | P1 | P2 |
Le risque vient de l’ordre de possession des ressources. Comparez plusieurs entrelacements avant de conclure.
De la compréhension à l’autonomie
À vous de résoudre
Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.
Faire apparaître le défaut
P1 demande A puis B, P2 demande B puis A. Donnez quatre demandes successives qui conduisent à un interblocage.
Indice 1
Chaque processus doit d’abord posséder une ressource différente.
Indice 2
Faites ensuite demander à chacun la ressource de l’autre.
Comprendre la correction
P1 obtient A ; P2 obtient B ; P1 attend B ; P2 attend A. Les deux premières demandes sont satisfaites, les deux suivantes sont bloquées. P1 conserve A et P2 conserve B : aucune libération normale n’est possible dans ce scénario.
Un déroulement qui termine
Avec les mêmes ordres de demande, un interblocage est-il certain ? Construisez un déroulement sans blocage mutuel.
Indice 1
L’ordonnanceur peut laisser avancer un processus plusieurs fois.
Indice 2
Distinguez risque et occurrence effective.
Comprendre la correction
P1 obtient A puis B, réalise son travail et libère les deux. P2 obtient ensuite B puis A et termine. Le programme présente un risque d’interblocage, mais tous ses entrelacements ne le déclenchent pas. Des tests réussis ne prouvent donc pas à eux seuls l’absence du risque.
Corriger un remède trompeur
On propose d’augmenter le quantum des deux processus déjà interbloqués. Pourquoi cela ne résout-il pas leur problème ?
Indice 1
Quelle action attend chacun ?
Indice 2
Un processus bloqué peut-il utiliser sa tranche pour obtenir une ressource encore détenue ?
Comprendre la correction
Le problème concerne la possession de A et B, pas une pénurie de temps de calcul. Les demandes ne seront pas satisfaites par un quantum plus grand. Il faut rompre le cycle, par exemple via une récupération qui libère des ressources, ou empêcher sa formation lors d’une prochaine exécution.
Justifier une prévention
Les deux processus demandent désormais A puis B. Expliquez pourquoi ils ne peuvent plus se bloquer mutuellement dans ce modèle.
Indice 1
Qui peut posséder B sans avoir déjà obtenu A ?
Indice 2
Examinez l’état du processus qui attend A.
Comprendre la correction
Le processus qui attend A ne possède pas encore B. Celui qui possède A peut donc obtenir B, terminer et libérer ses ressources. Les rôles s’échangent ensuite. Le cycle P1 attend P2 attend P1 ne peut pas se former ; cela suppose bien que tous respectent le même ordre et libèrent normalement les ressources.
Problème : lire un graphe de dépendances
P1 possède A et attend B ; P2 possède B et attend C ; P3 possède C et attend A ; P4 calcule sans ces ressources. Dessinez les attentes. Identifiez le groupe bloqué puis dites si le processeur doit être inactif. Combien de processus appartiennent au cycle ?
Indice 1
Construisez une flèche vers le détenteur de chaque ressource demandée.
Indice 2
P4 ne demande rien au groupe.
Comprendre la correction
Le cycle est P1 → P2 → P3 → P1 et contient trois processus. P4 n’y appartient pas et peut encore utiliser le processeur. Le système peut donc continuer à consommer du calcul tout en ayant un groupe interbloqué. Les symptômes externes ne remplacent pas l’analyse des demandes et des possessions.
Problème : un délai ne suffit pas
P1 prend A ; P2 prend B ; chacun demande l’autre ressource. Le programme propose deux solutions : S1 attend dix secondes puis refait la même demande en gardant sa ressource ; S2 abandonne P2, annule son travail partiel et libère B. Analysez les deux. Construisez la suite d’actions possible après S2.
Indice 1
La durée n’est pas une ressource manquante.
Indice 2
Après S2, identifiez la demande qui peut enfin être satisfaite.
Comprendre la correction
S1 conserve les deux dépendances et ne rompt pas le cercle. Avec S2, P1 peut obtenir B, terminer puis libérer A et B. P2 pourra recommencer une opération cohérente selon le protocole de reprise. Annuler seulement l’attente sans traiter les modifications partielles pourrait laisser des données incorrectes ; libération et restauration sont des responsabilités distinctes.
Problème : auditer un ordre global
Trois fonctions demandent respectivement A puis C, B puis C et C puis A. On propose l’ordre A avant B avant C. Repérez la fonction incompatible ; corrigez son ordre. Un test de cent exécutions sans blocage prouve-t-il que la version initiale est sûre ? Justifiez par un entrelacement.
Indice 1
Cherchez une acquisition qui descend dans l’ordre.
Indice 2
Les fonctions A-C et C-A suffisent à construire un cercle.
Comprendre la correction
C puis A viole l’ordre ; elle doit demander A puis C. Dans la version initiale, une exécution peut laisser la première fonction conserver A et la troisième conserver C, puis chacune attend l’autre. Cent essais peuvent manquer cet entrelacement. La preuve de prévention repose sur le respect de l’ordre pour toutes les acquisitions, et pas sur le nombre d’exécutions réussies.
Les erreurs qui méritent un détour
- Croire qu’un interblocage arrive à chaque exécution.
- Il dépend souvent d’un entrelacement particulier ; raisonner sur les dépendances complète les essais.
- Confondre ordre commun et exécution strictement séquentielle.
- L’ordre porte sur les ressources ; les processus peuvent toujours alterner leur exécution.
La fiche à garder
L’essentiel à retenir
- Un interblocage est une attente mutuelle sans issue normale dans le modèle considéré.
- Le temps de processeur ne remplace pas une ressource manquante.
- Un ordre strict commun d’acquisition empêche l’attente circulaire correspondante.
Cette notion au bac
Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.
Le prochain pas
Retrouver le catalogue de Terminale
Ce chapitre s’appuie sur le programme officiel de Terminale (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.
