TP - Interblocage☘
La bande-dessinée ci-dessous résume cette notion. Merci à L. Petit qui est le concepteur de cette planche :
Visualisation d'un interblocage☘
Ce TP a pour but de mettre en pratique un cas d'interblocage sur système Linux.
- Ouvrez un terminal dans votre répertoire utilisateur.
-
Exécutez les commandes suivantes pour télécharger et copier deux fichiers Python dans ce répertoire utilisateur :
wget http://www.mathinfo.ovh/Terminale_NSI/C01_Gestion_Processus/fichiers/ouvre_fichier1.py
wget http://www.mathinfo.ovh/Terminale_NSI/C01_Gestion_Processus/fichiers/ouvre_fichier2.py
-
Exécutez la commande
ls
et vérifiez que les fichiersouvre_fichier1.py
etouvre_fichier2.py
sont présents. -
En lisant le code de ces programmes, conjecturez ce qu'ils font.
Contenu de ces fichiers
Le code du fichier
ouvre_fichier1.py
est :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
import time import fcntl fichier1 = "fichierA.txt" fichier2 = "fichierB.txt" temps_attente = 10 temps_ouvert = 5 def ouvrir_fichier(nom_fichier): """ Ouvre le fichier 'nom_fichier' en écriture avec verrouillage et renvoie le descripteur de fichier. """ print(f"Tente d'ouvrir {nom_fichier} en écriture") f = open(nom_fichier, "w") fcntl.lockf(f, fcntl.LOCK_EX) print(f"{nom_fichier} ouvert") return f def fermer_fichier(f): """ Déverrouille et ferme le descripteur de fichier 'f' """ fcntl.lockf(f, fcntl.LOCK_UN) f.close() f1 = ouvrir_fichier(fichier1) print(f"Attente de {temps_attente} secondes") time.sleep(temps_attente) f2 = ouvrir_fichier(fichier2) time.sleep(temps_ouvert) fermer_fichier(f1) fermer_fichier(f2)
Réponse
Ils ouvrent en écriture les deux mêmes fichiers, chacun dans un ordre différent, en attendant 10 secondes entre l'ouverture du premier et l'ouverture du second.
-
Ouvrez un second terminal dans le même répertoire.
-
Dans le terminal A, préparez la commande suivante (sans l'exécuter) :
python3 ouvre_fichier1.py
-
Dans le terminal B, préparez la commande suivante (sans l'exécuter)
python3 ouvre_fichier2.py
-
Exécutez ces commandes à moins de 10 secondes d'intervalle.
Que se passe-t-il ?Réponse
Un des programmes plante car le système a détecté un cas d'interblocage.
-