3. Construire et interpréter un graphe d'allocation
3.1. Nœuds et orientation des arcs
La première représentation suppose une seule instance de chaque type de ressource. Un cercle désigne un processus; un carré désigne une ressource. Les arcs ont deux sens distincts :
| Arc | Interprétation |
|---|---|
| Ressource → processus | Le processus détient la ressource |
| Processus → ressource | Le processus demande la ressource et attend de l'obtenir |
Une instruction « demander R » ne produit pas systématiquement un arc processus → ressource. Il faut examiner l'état réel de R à cet instant. Si la demande est accordée immédiatement, on représente la détention par R → processus. L'arc d'attente est utilisé lorsque la demande reste insatisfaite.
Lorsqu'une ressource est libérée, son arc d'allocation disparaît. Si elle est ensuite accordée à un processus qui l'attendait, la représentation doit montrer cette nouvelle détention. La direction d'une flèche suit donc l'état de l'allocation, pas seulement le verbe figurant dans l'instruction du programme.
3.2. Lire une dépendance circulaire
Une chaîne processus → ressource → processus se lit : le premier processus attend une ressource détenue par le second. Lorsque la chaîne revient au point de départ, les processus du cycle ne peuvent plus produire les libérations nécessaires aux autres participants.
Pour une instance par type, le cycle permet ainsi de détecter l'interblocage étudié. Cette conclusion doit conserver son hypothèse : le traitement de plusieurs instances est donné séparément aux sections 8 à 10. Il ne faut pas appliquer sans justification la conclusion du premier modèle à tous les systèmes de ressources.
L'objectif pratique est de savoir construire le graphe à partir d'une trace d'événements, parcourir un cycle dans le bon sens et nommer les processus et ressources concernés. Un dessin comportant beaucoup de nœuds exige la même rigueur qu'un exemple à deux processus.
3.3. Trois processus : une trace qui interbloque
Les suites d'opérations du support sont les suivantes :
| Processus | Ordre interne des opérations |
|---|---|
| A | Demander R; demander S; libérer R; libérer S |
| B | Demander S; demander T; libérer S; libérer T |
| C | Demander T; demander R; libérer T; libérer R |
L'ordonnancement entrelace ces suites sans changer l'ordre interne de chacune. Dans la première trace, A obtient R, B obtient S et C obtient T. Les arcs d'allocation sont donc R → A, S → B et T → C.
Les demandes suivantes donnent :
- A demande S; S est détenue par B, donc A → S.
- B demande T; T est détenue par C, donc B → T.
- C demande R; R est détenue par A, donc C → R.
Le cycle complet est A → S → B → T → C → R → A. A attend B, B attend C et C attend A. Les trois suites contiennent des libérations, mais aucune ne peut être atteinte après la demande bloquante de son processus. La simple présence d'instructions de libération dans le code ne garantit donc pas leur exécution.
3.4. Les mêmes programmes : une trace sans interblocage
Le second ordonnancement du support fait intervenir A et C de cette manière :
- A obtient R : R → A.
- C obtient T : T → C.
- A obtient S, encore libre : S → A.
- C demande R, déjà détenue : C → R; C attend.
- A peut libérer R, car il n'attend aucune ressource détenue par C.
- R peut être accordée à C; sa détention devient R → C.
- A libère S et la progression reste possible.
Il y a une attente à l'étape 4, mais aucun cycle empêchant A de produire l'événement attendu par C. L'attente de C ne suffit donc pas à conclure à un interblocage. Exécuter entièrement A, puis B, puis C serait une autre exécution possible sans conflit pour ces programmes; l'intérêt du second exemple est de montrer qu'un entrelacement peut lui aussi fonctionner.
3.5. Conséquence pour le diagnostic
Les deux traces sont compatibles avec les mêmes suites d'opérations. La survenue du bogue dépend de l'ordonnancement et des changements de contexte. Le cours décrit ce comportement comme intermittent : une exécution peut fonctionner, une autre peut former le cycle.
Une exécution réussie établit seulement que la trace observée a réussi. Elle n'établit pas que les autres entrelacements sont exempts de dépendances circulaires. Pour diagnostiquer le programme, il faut pouvoir montrer la trace fautive et les ressources conservées pendant les attentes. Cette difficulté devient plus importante dans un projet volumineux, maintenu par beaucoup de personnes pendant plusieurs années.
Une instance par type : les ressources vont vers leur détenteur, les demandes insatisfaites vont vers les ressources. Chaque processus conserve sa ressource en attendant la suivante.
Source : Ajout pédagogique du portail, depuis le maître S08 déclaré; les tableaux de la lecture constituent l’alternative textuelle. · 3. Construire