TD3 Correction : Programmation concurrente et synchronisation
Présentation du document
Ce document pédagogique correspond au troisième TD (travaux dirigés) de programmation concurrente et synchronisation, destiné aux étudiants en deuxième année d'études supérieures en réseaux et systèmes. Il est issu de l'Université de Lorraine et plus particulièrement de Télécom Nancy. Proposé sous forme d'un corrigé détaillé, il aborde des notions fondamentales de l'informatique concurrente à travers l'étude de cas pratiques, d'exercices d'algorithmique et de problèmes classiques de synchronisation par sémaphores.
Le support s'articule autour de trois grands axes : les exercices d'interblocage, les conditions de compétition dans la gestion de ressources, et les problèmes complexes de synchronisation tels que le problème du barbier et le problème des philosophes.
Contenu et thématiques abordées
Le document commence par l'étude des interblocages (deadlocks). À travers l'exercice 1, il analyse un programme utilisant deux sémaphores pour obtenir une exclusion mutuelle, illustrant l'apparition systématique d'un interblocage au moyen d'un diagramme de transition. Les questions suivantes explorent la modification des conditions initiales et l'utilisation de requêtes ordonnées pour éviter ce blocage. L'exercice 2 poursuit sur l'analyse de paires de sémaphores et de l'ordonnancement des réservations selon un ordre strict de ressources.
La deuxième partie du document se penche sur les conditions de compétition (race conditions). L'exercice 4 étudie un système d'allocation de machines à laver dans un lavomatique, où un défaut de synchronisation lors du test et de la modification d'un tableau de disponibilité engendre une attribution simultanée de la même machine à plusieurs clients. La correction détaille l'utilisation de verrous d'exclusion mutuelle pour rétablir l'invariant de l'algorithme.
Enfin, la troisième partie aborde des problèmes de synchronisation classiques. L'exercice 5 traite en détail le problème du barbier endormi, en décomposant l'écriture du code entre le client et le barbier, la gestion d'une salle d'attente à capacité limitée, l'utilisation de mutex pour protéger les accès et la mise en place de rendez-vous unilatéraux via des sémaphores privées. L'exercice 6 s'attaque au problème des philosophes avec des variantes : l'ordonnancement des fourchettes pour casser les cycles de dépendance, l'introduction de variables d'état avec des fonctions de test et de réveil, et la méthode du maître d'hôtel.
Méthodes de révision et utilisation conseillée
Ce document de correction constitue un support d'entraînement idéal pour assimiler les mécanismes de synchronisation basés sur les sémaphores et les mutex. Il est recommandé d'étudier chaque exercice en s'exerçant d'abord à tracer les diagrammes de transition ou à identifier les risques d'interblocage et de concurrence avant de consulter les solutions rédigées. La compréhension rigoureuse des notions d'exclusion mutuelle, de rendez-vous et d'ordonnancement des requêtes est indispensable pour aborder sereinement les examens et projets en programmation système.
Questions fréquentes
Quel est le niveau académique visé par ce document ?
Ce TD s'adresse à des étudiants en deuxième année d'études supérieures en informatique, réseaux et systèmes, notamment à Télécom Nancy (Université de Lorraine).
Quels sont les principaux problèmes classiques traités dans le TD ?
Le document aborde principalement le problème d'attribution de ressources avec gestion d'interblocages, le problème du barbier et le problème des philosophes.
Quelles méthodes sont présentées pour éviter les interblocages ?
Le document présente l'ordonnancement des requêtes sur les ressources, l'utilisation de réservations globales et la modification de l'algorithme par l'introduction de variables d'état ou d'un maître d'hôtel.
Testez vos connaissances
Question 1
Quel est l'effet d'un défaut de protection entre un test de disponibilité d'une ressource et son affectation (comme dans l'exercice du lavomatique) ?
- Un interblocage immédiat de tous les processus.
- Une condition de compétition menant à l'attribution de la même ressource à plusieurs clients.
- Une accélération globale de l'exécution des processus.
- La fin prématurée du programme sans erreur.
Réponse correcte : Une condition de compétition menant à l'attribution de la même ressource à plusieurs clients.
Explication : Si un changement de contexte survient entre le test et la modification de l'état d'une ressource, plusieurs processus peuvent valider le test simultanément, violant ainsi l'invariant du système.
Question 2
Comment peut-on casser un cycle de dépendance de ressources pour éviter un interblocage ?
- En augmentant le nombre de processus concurrents.
- En ordonnant les ressources et en effectuant les réservations dans un ordre strict.
- En supprimant toutes les sémaphores du programme.
- En remplaçant les processus par des threads non synchronisés.
Réponse correcte : En ordonnant les ressources et en effectuant les réservations dans un ordre strict.
Explication : L'ordonnancement des requêtes garantit l'absence de deadlock en interdisant les cycles d'attente circulaire entre les ressources.
Question 3
Dans le problème du barbier, à quoi sert la sémaphore d'exclusion mutuelle au début de l'action du client ?
- À empêcher le barbier de dormir.
- À protéger le test du nombre de places disponibles et sa décrémentation.
- À remplacer la chaise du salon.
- À forcer le client à payer sa coupe de cheveux.
Réponse correcte : À protéger le test du nombre de places disponibles et sa décrémentation.
Explication : Le mutex garantit qu'un seul client à la fois vérifie et met à jour le nombre de places libres dans la salle d'attente, évitant ainsi toute condition de compétition.
Télécharger TD3 Correction : Programmation concurrente et synchronisation pdf