7. Détecter un cycle avec une instance par type
7.1. Préparer le graphe et conserver l'hypothèse
On construit le graphe à partir des allocations et demandes de l'état étudié. Chaque type possède ici une seule instance. Il faut conserver l'orientation définie à la section 3 et distinguer les ressources détenues des ressources seulement demandées.
Le support choisit une méthode d'« épluchage » plus simple à comprendre que l'algorithme auquel il renvoie dans le manuel. L'enseignant précise qu'il existe d'autres algorithmes de recherche de cycles, éventuellement plus efficaces. Le choix du cours vise la compréhension et la facilité d'application; il n'affirme pas l'optimalité de cette méthode.
7.2. Procédure complète
Code (text) · sélectionner pour copier
Tant que le graphe contient des nœuds :
chercher un nœud sans arc sortant
si aucun nœud de cette sorte n'existe :
conclure qu'un cycle existe et arrêter
sinon :
supprimer ce nœud et les arcs qui y entrent
Si le graphe devient vide :
conclure qu'aucun cycle n'est présent
Le critère est sans arc sortant dans le graphe courant. Il faut reprendre la recherche après chaque suppression, car une suppression peut rendre un autre nœud admissible. Se limiter aux extrémités visibles dans le graphe initial abandonnerait la procédure avant sa conclusion.
Les suppressions sont des opérations sur la représentation utilisée pour le diagnostic. Elles ne demandent pas de supprimer réellement les processus du système.
7.3. Justification et interprétation des deux issues
Un nœud appartenant à un cycle dirigé possède un arc sortant vers la suite de ce cycle. Un nœud sans arc sortant ne peut donc pas être un membre du cycle recherché. On peut l'éliminer pour simplifier le problème sans effacer un cycle passant par ce nœud.
Pour un processus, l'absence d'arc sortant signifie qu'il n'attend pas de ressource dans le graphe représenté. Pour une ressource, le sens de l'arc est différent : un arc sortant représente son allocation à un processus. Il faut appliquer le critère graphique sans confondre la signification des deux catégories de nœuds.
Si toutes les suppressions vident le graphe, aucun cycle ne subsiste. Si le graphe est non vide et qu'aucun nœud ne peut plus être supprimé, il contient un cycle. Cette seconde issue ne dit pas que chaque nœud restant est lui-même un membre de ce cycle : une dépendance peut rester rattachée à une boucle sans être sur la boucle.
7.4. Exemple du support : élimination et cycle résiduel
Les pages 29 à 43 déroulent un même exemple animé. La séquence de suppressions est S, C, A, R, F, W. On retire chaque nœud et ses arcs entrants, puis on examine le graphe réduit. Les noms et directions sont contrôlés sur le support graphique, car les lettres sont parfois mal reconnues dans la transcription.
Après ces suppressions, le cycle est :
D → T → E → V → G → U → D.
Il se lit ainsi : D attend T, détenue par E; E attend V, détenue par G; G attend U, détenue par D. Aucun des trois processus ne peut atteindre une libération qui débloquerait le suivant.
Le processus B demande également T. Il reste visible dans le sous-graphe réduit, mais ne figure pas dans la chaîne fermée D–T–E–V–G–U–D. Il dépend du cycle sans en être un membre dans le dessin. Pour une réponse précise, il faut distinguer « le graphe contient un cycle », « ces nœuds sont sur le cycle » et « ce processus attend une ressource retenue dans le cycle ».
7.5. Méthode d'application et erreurs à éviter
Procéder en trois temps : vérifier les flèches, effectuer les suppressions en les justifiant, puis formuler la conclusion avec le cycle s'il reste présent. Une réponse qui donne seulement des noms de processus sans montrer les liens ne permet pas de vérifier pourquoi ils sont concernés.
Les erreurs typiques sont d'inverser allocation et demande, de chercher des nœuds sans arc entrant, de ne pas réexaminer le graphe après une suppression, ou d'assimiler tous les nœuds résiduels aux membres du cycle. L'exemple de B est précisément utile pour éviter cette dernière confusion.