Td5 corrigé: synchronisation processus avec sémaphores - tél

Ce document de Travaux Dirigés (TD) est spécifiquement conçu pour les étudiants de 1ère année Ingénierie en Systèmes d'Exploitation Avancés de l'Institut Supérieur d'Informatique.

Il aborde en détail les mécanismes de synchronisation des processus, en se concentrant sur l'utilisation des sémaphores. Les exercices pratiques proposés couvrent des scénarios variés tels que :

  • La modélisation de systèmes de gestion de ressources partagées (tirage d'examens);
  • La gestion du trafic ferroviaire sur une voie unique;
  • La coordination d'agents dans un processus de tri de courrier complexe.

L'objectif est de consolider les connaissances sur la concurrence et l'ordonnancement des processus.

Td5 corrigé: synchronisation processus avec sémaphores - tél
Télécharger PDF

Correction:

Synchronisation des processus avec des Sémaphores

Cet article explore la synchronisation des processus à l'aide de sémaphores, un mécanisme fondamental en programmation concurrente pour gérer l'accès aux ressources partagées et éviter les conditions de concurrence. Nous examinerons plusieurs exercices pratiques pour illustrer ces concepts essentiels des systèmes d'exploitation avancés.

Exercice 1 : Tirage d'examens

On se propose de modéliser le système de tirage d’examen mis en place dans un établissement. Une salle est réservée pour le tirage d’examens (où sont faites les photocopies du sujet d’examen), dans laquelle opère un seul agent, l'agent K. Pour garantir la confidentialité du sujet, seuls sont présents lors du tirage, l’agent K et l’enseignant responsable du module, l'enseignant E.

On supposera les hypothèses suivantes :

  • À tout moment de la journée, l’agent est ou bien en train de tirer un examen (un seul examen à la fois), ou bien en attente non active d’un nouvel examen à tirer.
  • Un enseignant qui souhaite faire le tirage de son sujet d’examen doit se présenter devant la salle de tirage :
    • Si l’agent K est libre (c'est-à-dire en attente d’un nouveau sujet à tirer), l’enseignant et l’agent procèdent au tirage.
    • Si l’agent K est déjà occupé à tirer un autre sujet, l’enseignant :
      • S’il trouve une chaise libre (il y a quatre chaises en tout) devant la salle de tirage, il attend l’agent K (attente non active).
      • Si toutes les chaises sont occupées, l’enseignant préfère alors partir et revenir plus tard (on considérera dans ce cas qu’il est sorti du système).

Il faut remarquer que les quatre chaises devant la salle de tirage ne peuvent être occupées que par des enseignants qui veulent faire des tirages de sujets d’examens.

  • Une fois le tirage d’un sujet d’examen fini, l’enseignant responsable du module part (sort du système). Pour l’agent K, si d’autres enseignants attendent (sur les chaises), l’un d’entre eux procède avec l’agent K au tirage de son examen. Sinon, l’agent K se met en attente d’un nouvel examen à tirer.

On se propose de modéliser ce système en utilisant un processus « agentK » et un autre processus « enseignantE ».

Exercice 2 : Trains

Deux villes A et B sont reliées par une seule voie de chemin de fer. Les trains peuvent circuler dans le même sens de A vers B ou de B vers A. Cependant, ils ne peuvent pas circuler simultanément dans les sens opposés.

On considère deux classes de processus : les trains allant de A vers B (TrainAversB) et les trains allant de B vers A (TrainBversA). Ces processus se décrivent comme suit :

Processus TrainAversB

Demande d'accès à la voie A; Circulation de A vers B; Sortie de la voie par B;

Processus TrainBversA

Demande d'accès à la voie B; Circulation de B vers A; Sortie de la voie par A;

L'objectif est de représenter les programmes de ces deux types de processus en utilisant des mécanismes de synchronisation, tels que les sémaphores, pour éviter les collisions.

Exercice 3 : Poste

Le tri du courrier à la poste s'effectue en deux étapes : la première dans les bureaux de poste régionaux, et la deuxième dans un bureau de poste principal. On dénombre quatre bureaux régionaux et un bureau principal.

Dans chaque bureau de poste régional, trois agents procèdent au tri (fonction trier_courrier_régional). Si l'un des agents termine avant les autres, il doit les attendre (fonction attendre). Une fois que tous les agents ont terminé, un unique agent doit être désigné pour se rendre au bureau de poste principal (fonction désigner_transporteur).

Au bureau de poste principal, les quatre agents régionaux désignés pour transporter le courrier procèdent au tri final (fonction trier_courrier_principal). Le courrier n'est enfin expédié (fonction expédier_courrier) que si tous ces agents ont fini leur tri. L'expédition sera faite par un unique agent (choisi par la même fonction désigner_transporteur). Un processus représente un agent de la poste.

L'objectif est de synchroniser ces processus avec des sémaphores. On définit les constantes suivantes :

ConstanteValeurRôle
nb_reg3Nombre de fonctionnaires dans un bureau régional
nb_princ4Nombre de fonctionnaires dans un bureau principal

Chaque réponse doit être précédée par une partie "initialisations" qui doit définir les variables partagées et les sémaphores utilisés.

1. Code de la méthode attendre

Donner le code de la méthode attendre(num, nbAgentTotal) qui va permettre à un agent de numéro num d'attendre les autres s'il n'est pas le dernier (le nombre d'agents total à attendre est nbAgentTotal).

2. Code de la méthode désigner_transporteur

Donner le code de la méthode désigner_transporteur(num, nbAgentTotal) qui va choisir un unique agent comme transporteur. L'agent choisi sera le dernier agent parmi les nbAgentTotal agents ayant appelé la fonction désigner_transporteur. Les agents qui ne sont pas choisis quitteront la poste (fonction exit()).

3. Code de la fonction principale agent

Donner le code de la fonction principale agent(num) qui définit le comportement de chaque agent.

Foire Aux Questions (FAQ)

Qu'est-ce qu'un sémaphore en synchronisation de processus ?

Un sémaphore est un type de variable spéciale utilisée pour contrôler l'accès à une ressource commune par plusieurs processus dans un environnement de programmation concurrente. Il permet de gérer les problèmes de concurrence en assurant l'exclusion mutuelle et en coordonnant les activités des processus, évitant ainsi les conditions de course et les incohérences de données.

Quelle est la différence entre un sémaphore binaire et un sémaphore de comptage ?

Un sémaphore binaire, aussi appelé mutex, ne peut prendre que deux valeurs (0 ou 1) et est principalement utilisé pour garantir l'exclusion mutuelle à une ressource unique. Un sémaphore de comptage, quant à lui, peut prendre n'importe quelle valeur entière non négative et est utilisé pour contrôler l'accès à un ensemble de ressources identiques, permettant à un nombre prédéfini de processus d'accéder simultanément à ces ressources.

Pourquoi la synchronisation des processus est-elle cruciale dans les systèmes d'exploitation ?

La synchronisation des processus est cruciale pour maintenir l'intégrité des données et le bon fonctionnement des systèmes d'exploitation multiprogrammés. Sans synchronisation adéquate, les processus concurrents pourraient interférer les uns avec les autres lors de l'accès à des ressources partagées, entraînant des erreurs logiques, des blocages (deadlocks) ou des résultats imprévisibles, compromettant ainsi la fiabilité du système.

Partagez vos remarques, questions , propositions d'amélioration ou d'autres cours à ajouter dans notre site

Enregistrer un commentaire (0)
Plus récente Plus ancienne