Si il n'y a que trois boules, deux conditions ne sont plus remplies. L'exclusion mutuelle car il y a une boule qui n'est exclue par aucune autre
L'exclusion mutuelle c'est l'existence d'une ressource qui ne peut pas être partagée. Un seul process à la fois peut y avoir accès. Le fait d'avoir 3 boules ne change rien à l'existence ou non de cette ressource. Il y a toujours l'exclusion mutuelle.
A noter que la légende du schéma indique que la ressource c'est la zone grise, mais l'animation ainsi que la "right-before-left policy" suggèrent plutôt 4 ressources partagées qui sont les intersections des lignes bleues.
et l'attente circulaire
Effectivement, elle n'existe plus et donc il n'y a plus le deadlock.
Ces 4 conditions sont-elles aussi suffisantes comme cela est suggéré dans l'article?
J'aurais dû mal à démontrer que c'est suffisant, je ne vois même pas dans quel formalisme se placer. Mais intuitivement, oui ça l'est.
Supposons que les 4 conditions (C1, C2, C3, C4) soient vérifiées. Pour qu'il n'y ait pas de deadlock, il faut au moins 1 process qui puisse faire évoluer son état. Disons que c'est P1. C4 implique que P1 soit en attente d'une ressource (disons R1) détenue par un autre process (disons P2). C1 implique que P1 doive attendre la libération de R1. C3 implique que seul P2 puisse libérer R1. Donc P1 ne peut faire évoluer son état avant P2. De même P2, ne peut pas faire évoluer son état avant P3, ... jusqu'à Pn qui ne peut pas faire évoluer son état avant P1.
La seule possibilité qu'il n'y ait pas de deadlock est donc que tous les process fassent évoluer leurs états simultanément. Hors chaque process a besoin d'une ressource non partageable (C1) qui est aussi nécessité par un autre process. Du coup, la simultanéité est elle aussi interdite.
Dans le raisonnement ci-dessus, je ne me sers pas de C2, mais j'ai l'impression que c'est une forme affaiblie de C4. J'ai peut-être raté quelque chose.
Il faut faire des hypothèses supplémentaire sur le scheduling, j'imagine. J'ai bien l'impression que je pourrais créer un scheduler qui ne va jamais autoriser un deadlock même avec 4 boules.
Le scheduler pourrait peut-être éviter d'arriver dans la situation où les conditions sont vérifiées et donc éviter le deadlock. Mais si tu te places dans une situation où les conditions sont déjà vérifiées, aucun process ne peut tourner. Du coup le scheduler n'a aucune marge de manœuvre (autre que killer un process).
# Mon interprétation
Posté par NicolasP . En réponse au message Deadlock. Conditions de Coffman. Évalué à 2. Dernière modification le 25 août 2019 à 23:35.
L'exclusion mutuelle c'est l'existence d'une ressource qui ne peut pas être partagée. Un seul process à la fois peut y avoir accès. Le fait d'avoir 3 boules ne change rien à l'existence ou non de cette ressource. Il y a toujours l'exclusion mutuelle.
A noter que la légende du schéma indique que la ressource c'est la zone grise, mais l'animation ainsi que la "right-before-left policy" suggèrent plutôt 4 ressources partagées qui sont les intersections des lignes bleues.
Effectivement, elle n'existe plus et donc il n'y a plus le deadlock.
J'aurais dû mal à démontrer que c'est suffisant, je ne vois même pas dans quel formalisme se placer. Mais intuitivement, oui ça l'est.
Supposons que les 4 conditions (C1, C2, C3, C4) soient vérifiées. Pour qu'il n'y ait pas de deadlock, il faut au moins 1 process qui puisse faire évoluer son état. Disons que c'est P1. C4 implique que P1 soit en attente d'une ressource (disons R1) détenue par un autre process (disons P2). C1 implique que P1 doive attendre la libération de R1. C3 implique que seul P2 puisse libérer R1. Donc P1 ne peut faire évoluer son état avant P2. De même P2, ne peut pas faire évoluer son état avant P3, ... jusqu'à Pn qui ne peut pas faire évoluer son état avant P1.
La seule possibilité qu'il n'y ait pas de deadlock est donc que tous les process fassent évoluer leurs états simultanément. Hors chaque process a besoin d'une ressource non partageable (C1) qui est aussi nécessité par un autre process. Du coup, la simultanéité est elle aussi interdite.
Dans le raisonnement ci-dessus, je ne me sers pas de C2, mais j'ai l'impression que c'est une forme affaiblie de C4. J'ai peut-être raté quelque chose.
Le scheduler pourrait peut-être éviter d'arriver dans la situation où les conditions sont vérifiées et donc éviter le deadlock. Mais si tu te places dans une situation où les conditions sont déjà vérifiées, aucun process ne peut tourner. Du coup le scheduler n'a aucune marge de manœuvre (autre que killer un process).