9. Exécuter l'algorithme de marquage
9.1. Marquage initial et sens du résultat
L'algorithme commence par marquer les processus dont C[i] = (0,…,0). Ils ne détiennent aucune ressource susceptible d'entretenir le cycle recherché. Le critère porte sur les allocations C, pas sur les requêtes R.
Ce marquage initial ne prouve pas que le processus s'exécute actuellement, ni que toutes ses demandes sont déjà satisfaites. Il signifie qu'on ne le retient pas comme détenteur participant au problème recherché dans cette analyse. Cela explique pourquoi il faut conserver le sens propre de chaque étape plutôt que interpréter tous les marquages comme le même événement réel.
Pour les autres processus, marquer une ligne après une comparaison R[i] ≤ A signifie que sa terminaison peut être simulée avec les disponibilités alors obtenues. Il s'agit d'un raisonnement sur les libérations possibles, pas de l'ordonnancement réellement exécuté sur la machine.
9.2. Procédure et disponibilité de travail
Pour ne pas confondre l'état initial et le calcul, on peut employer un vecteur de travail A_sim, initialement égal à A. C'est le vecteur A que le support fait évoluer dans sa simulation.
Code (text) · sélectionner pour copier
A_sim ← A
marquer les processus dont C[i] est entièrement nul
Répéter :
chercher un processus i non marqué tel que R[i] ≤ A_sim
si aucun processus ne convient : arrêter la recherche
sinon :
A_sim ← A_sim + C[i]
marquer i
Les processus restant non marqués sont ceux
que le détecteur présenté identifie comme interbloqués.
La recherche porte toujours sur les processus non marqués. Une ligne marquée a déjà été éliminée de l'analyse; ses allocations ne doivent pas être restituées une seconde fois.
9.3. Pourquoi ajouter C[i], et pourquoi recommencer
La condition R[i] ≤ A_sim vérifie que les demandes de i peuvent être satisfaites. Si sa terminaison est possible, les ressources qu'il détenait déjà deviennent également disponibles. C'est précisément la ligne C[i] que l'on ajoute.
On ne cumule pas R[i] dans les disponibilités. Les instances accordées temporairement pour satisfaire cette demande sont prises dans le disponible puis rendues au terme de la simulation; leur effet net s'annule. L'augmentation nette provient des allocations antérieures C[i] qui sont libérées. Cette explication rend compte de la mise à jour du support sans introduire une autre règle d'allocation.
Après l'augmentation de A_sim, une demande refusée auparavant peut devenir admissible. Il faut donc revenir aux lignes précédemment écartées. Un premier tour qui ne retient qu'un processus ne constitue pas nécessairement la fin de l'algorithme.
9.4. Arrêt et précautions d'interprétation
On s'arrête lorsqu'aucun processus non marqué ne satisfait la comparaison dans l'état simulé. Si tous sont marqués, l'analyse a trouvé une manière de les éliminer par terminaisons et libérations successives; aucun interblocage n'est détecté dans cet état. Sinon, on indique les non-marqués comme résultat du détecteur présenté.
Les pièges sont de comparer R[i] à E au lieu du disponible, de confondre C et R, de marquer seulement les lignes R nulles, de ne faire qu'un passage, ou d'ajouter plusieurs fois les allocations d'un processus. Il faut également conserver l'hypothèse et les données du modèle : une simulation de l'état fourni n'est pas une preuve générale pour tous les futurs comportements du programme.