Adloun

Détecter un interblocage

Exercice de TD · niveau 3 (difficile) · NSI (terminale), chapitre 13 — Systèmes d'exploitation et processus

Énoncé

Détecter un interblocage.

Deux processus utilisent deux ressources, un verrou A et un verrou B :


# Processus P1            # Processus P2
verrou_A.acquerir()       verrou_B.acquerir()
verrou_B.acquerir()       verrou_A.acquerir()
# section critique        # section critique
verrou_B.liberer()        verrou_A.liberer()
verrou_A.liberer()        verrou_B.liberer()

Montrer qu'un interblocage est possible, puis proposer une correction.

Corrigé

Scénario d'interblocage : supposons l'entrelacement suivant.

On a une attente circulaire : P1 attend B (tenu par P2) et P2 attend A (tenu par P1). Les quatre conditions de Coffman sont réunies : c'est un interblocage.

Correction : imposer un ordre global d'acquisition des verrous, par exemple toujours acquérir A avant B. Il suffit de réécrire P2 pour qu'il acquière A puis B (comme P1). L'attente circulaire devient impossible, donc l'interblocage aussi.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.