Interblocage Généralités Les interblocages sont des situations assez courantes dans la vie quotidienne. Le meilleur exemple est celui du rond point avec priorité à droite. Si 4 routes arrivent à ce rond point et s'il y a quatre véhicules, aucun ne peut s'engager sur le rond point puisque chaque véhicule possède à sa droite un voisin. En informatique, ce problème survient également quand des processus convoitent les mêmes ressources. Le terme interblocage est quelquefois remplacé par les expressions poétiques "verrou mortel" (en anglais deadlock), "étreinte fatale",... exemple 1 : le spooling massif ; un processus P veut imprimer des données ; comme le système utilise un spool, le processus envoie ses données sur un disque (buffer) et le périphérique (imprimante) attend que toutes les donnée soient sur le disque pour imprimer. Mais si le buffer est plein avant que le processus ait envoyé toutes ses données, le processus va attendre et l'imprimante, de son côté, attend aussi. exemple 2 : Interblocage Solution des exercices Solution de l'exercice 1 L'état 1 est un état sain. On peut, en effet opérer de la manière suivante : ● ● ● ● a) on donne 1 unité R3 à P2 ce qui lui permet de terminer on exécution. On récupère alors les ressources de P2. b) on donne 2 unités R1, 2 unités R2, 2 unités R3 à P1 ce qui lui permet de terminer son exécution. On récupère alors les ressources de P1. c) on donne 1 unité R1 et 3 unités R3 à P3, ce qui lui permet de terminer son exécution. On récupère alors ses ressources. d) on donne 4 unités R1 et 2 unités R2 à P4 ce qui termine tous les traitements. L'état 2 est également un état sain : on peut donner à P2 les ressources qui lui manquent et ensuite les récupérer, ce qui permettra, comme dans le cas de l'état 1 d'aller au terme des exécutions. L'état 3 est un état non sain. En effet, on ne peut donner à un processus les ressources qui lui permettraient de se terminer. On a donc un interblocage. Solution de l'exercice 2 1) application de l'algorithme ● ● ● P4 n'a pas de ressources allouées ;il peut donc être marqué ; On pose W = DI = (0,0,0,0,1) La ligne P3 de B satisfait la condition : on marque P3 et W devient (0,0,0,1,1). On ne peut continuer à l'étape 3, donc l'algorithme est terminé. On remarque que seulement P4 et P3 sont marqués : il y a donc interblocage. 2) vérification avec les graphes Le graphe est indiqué ci-dessous : On voit que la seule ressource non affectée est une ressource de R5. Si on donne cette unité à P4, cela ne suffit pas pour qu'il ait toutes les ressources nécessaires ; si on la donne à P3, cela permet la terminaison de ce processus qui libère les ressources qu'il possède. Donner R5 à P2 ou P1 ne suffit pas à loes terminer. On reste donc avec une boucle P1 - R2- P2 - R3 - P1 qui est l'indication d'un interblocage. Solution de l'exercice 3 On peut utiliser l'algorithme de l'exercice précédent : ● ● ● ● W = (2, 1, 0, 0) P3 <= W donc P3 est marqué et W = (2,1,0,0) + (0,1,2,0) = (2,2,2,0) P2 <= W donc P2 est marqué et W = (2,2,2,0) + (2,0,0,1) = (4,2,2,1) P1 <= W donc P1 est marqué Tous les processus étant marqués, il n'y a pas d'interblocage. Interblocage Exercices Exercice 1 On considère 4 processus P1, P2, P3, P4 et 3 types de ressources R1, R2, R3. Les tableaux ci-dessous expriment les besoins en ressources des processus pour leur exécution complète ainsi que les disponibilités totales, en unités arbitraires, de ressources des trois types : besoins R1 R2 R3 P1 3 2 2 P2 6 1 3 P3 3 1 4 P4 4 2 2 disponibilités R1 R2 R3 9 3 6 A un instant donné, le système est dans l'un des états suivants . Indiquez si ces états sont sains ou non sains au sens de l'algorithme du banquier et dans l'affirmative, indiquer la suite d'états permettant d'exécuter complètement les processus. état 1 état 2 état 3 R1 R2 R3 R1 R2 R3 R1 R2 R3 P1 1 0 0 P1 1 0 0 P1 2 0 1 P2 6 1 2 P2 5 1 1 P2 5 1 1 P3 2 1 1 P3 2 1 1 P3 2 1 1 P4 0 0 2 P4 0 0 2 P4 0 0 2 Exercice 2 Coffman, Elphick et Shoshani ont donné en 1971 un algorithme pour détecter les interblocages : On utilise la matrice des besoins B, qui exprime les besoins instantanés en unités de ressources de chacun des processus, la matrice A des allocations de ressources (à un instant donné) , le vecteur DT des disponibilités totales de ressources et le vecteur DI des disponibilités instantanées. L'algorithme est le suivant : 1. On marque chaque processus qui possède une ligne de zéros dans la matrice A ; 2. On initialise un vecteur W avec la valeur initiale de DI ; 3. On recherche l'indice i par mi les processus Pi qui ne sont pas marqués de manière que la ième ligne de B a ses éléments plus petits ou égaux à ceux de W. S'il n'est pas possible de trouver un tel indice, l'algorithme est terminé. 4. Si on a trouvé un indice i répondant au critère ci-dessus, on marque le processus Pi et on ajoute la ligne i de A à W et on revient à l'étape 3). Si , à la fin de l'algorithme il existe des processus non marqués, il y a un interblocage. Appliquer cet algorithme à, l'exemple suivant : matrice B matrice A R1 R2 R3 R4 R5 vecteur DT vecteur DI R1 R2 R3 R4 R5 R1 R2 R3 R4 R5 2 0 R1 R2 R3 R4 R5 P1 0 1 0 0 1 P1 1 0 1 1 0 P2 0 0 1 0 1 P2 1 1 0 0 0 P3 0 0 0 0 1 P3 0 0 0 1 0 P4 1 0 1 0 1 P4 0 0 0 0 0 Examiner le même problème avec la méthode des graphes. Exercice 3 Détecter s'il existe un interblocage dans le système suivant : 1 1 2 1 0 0 0 1 besoins disponibilités instantanées allocation courante R1 R2 R3 R4 R1 R2 R3 R4 R1 R2 R3 R4 P1 2 0 0 1 P1 0 0 1 0 2 P2 1 0 1 0 P2 2 0 0 1 P3 2 1 0 0 P3 0 1 2 0 1 0 0 Un processus P1 utilise deux ressources A et B, il possède A et demande B ; un autre processus P2 utilise les mêmes ressources, il possède B et demande A. Il est clair que cette situation (qui est en fait une chaîne comme le montre le diagramme cicontre) est un interblocage. L'analyse des situations qui peuvent mener à un interblocage (Coffman, Elphick, Shoshani - 1971) conduit aux 4 conditions d'interblocage suivantes : ● ● ● ● C1 : Mutual Exclusion Condition ; Les processus demandent le contrôle exclusif des ressources qu'ils demandent C2 : Wait For Condition ; Des processus détiennent des ressources et attendent des ressources complémentaires C3 : No Préemption Condition ; Des ressources ne peuvent être enlevées à des processus qui les détiennent tant qu'elles ne sont pas complètement utilisées. C4 : Circular Wait Condition ; Il existe une chaîne circulaire de processus où chaque processus détient des ressources demandées par le processus suivant. Il y quatre façon principales d'aborder le problème de l'interblocage. Nous allons les explorer les unes après les autres. Prévention des interblocages (Havender - 1968). Plusieurs stratégies peuvent être envisagées. Nous en donnons ci-dessous trois exemples : Stratégie 1 : acquisition des ressources en "tout ou rien". Chaque processus doit demander toutes les ressources dont il a besoin en une seule fois et doit attendre s'il n'est pas possible de les obtenir. Cette stratégie est une solution à la condition C2. Toutefois elle possède plusieurs inconvénients. Un processus risque d'attendre longtemps avant d'obtenir ses ressources ; il peut y avoir un gâchis éventuel de ressources (quelques unes très utilisée, les autres peu utilisées mais mobilisées) ; on peut néanmoins améliorer cet inconvénient par découpage d'un processus en sous-processus. Stratégie 2 : Si un processus détient certaines ressources et si on lui refuse une ressource supplémentaire, il doit libérer toutes ses ressources. Cette stratégie est une solution à la condition C3. L'inconvénient de cette stratégie est le risque de faire attendre longtemps certains processus. Stratégie 3 : On impose une numérotation des types de ressources :si un processus détient des ressources d'un type donné, il ne peut demander que des ressources dont les numéros sont plus élevés. Cette stratégie est une réponse à la condition C4. Esquive des interblocages La solution la plus connue pour esquiver les interblocages est l'algorithme du "banquier" (Dijkstra - 1965). Pour exposer sa philosophie, on considérera dans ce qui suit que l'on a u utilisateurs et r ressources identiques. L'algorithme consiste alors en les règles suivantes : ● ● ● ● Chaque utilisateur indique à l'avance le nombre maximum de ressources dont il a besoin ; Le système d'exploitation accepte une demande si celle-ci ne dépasse pas r ; Un utilisateur peut acquérir ou libérer une ressource une par une ; Une attente est possible, mais elle doit rester finie. On considère que le système informatique peut être dans l'un des deux états suivants : ● ● état SAIN : les utilisateurs peuvent terminer leurs travaux dans un temps garanti comme fini. état NON SAIN : pas de garantie et l'algorithme du banquier consiste à allouer les ressources (d'après les règles précédentes) de manière à passer d'un état sain à un autre état sain. exemple 1 : 12 ressources, 3 utilisateurs Si on donne 2 ressources à U(2), il peut finir et il libère alors 6 ressources. On en prend 3 que l'on donne à U(1) qui peut alors finir et libérer ainsi 4 ressources. On prend 3 autres ressources pour U(3) qui peut alors finir. En conclusion l'état I est un état sain exemple 2 : mêmes conditions que l'exemple précédent. L'unique ressource disponible ne suffit pas à contenter n'importe lequel des utilisateurs. En conclusion, l'état II est non sain. exemple 3 : mêmes conditions que dans l'exemple précédent. Un état sain peut devenir non sain par mauvaise allocation des ressources. Si U(3) acquiert 1 ressource, on passe à l'état III qui est non sain. On comprend donc le rôle décisif de l'allocation de ressources. Bien entendu, le raisonnement précédent a porté sur un cas peu réaliste. Dans la réalité, le nombre d'utilisateurs peut varier de même que le nombre de ressources. Par ailleurs, il est difficile de connaître à l'avance le maximum de ressources demandées par un utilisateur. Détection des interblocages La méthode générale est l'utilisation de graphes d'allocation de ressources. Le processus P1 demande une ressource de classe R1 Une ressource de classe R2 a été allouée au processus P2 Circular Wait : La détection des interblocages s'effectue par réduction du graphe : si une demande de processus peut être satisfaite, on l'effectue et on libère la ressource ; le graphe est alors réduit par ce processus. Il n'y a pas d'interblocage si le graphe peut être réduit par tous ses processus, sinon l'irréductibilité indique un interblocage. exemple état initial réduction par P3 réduction par P1 Guérison des interblocages La solution principale est la suspension de processus (guérison dans la douleur). réduction par P2 Plusieurs méthodes sont à considérer : ● ● ● ● suspension de tous les processus bloqués faire repartir le traitement à partir d'un point de contrôle antérieur suspension successive es processus bloqués retrait successif des ressources des processus bloqués.