Projet Spécification des Systèmes Distribués - 2017-18

Exclusion mutuelle distribuée

Le but de ce projet est d'implémenter un algorithme d'exclusion mutuelle distribuée en utilisant le framework de communication utilisé en TP.

Le choix d'implémentation est libre, vous pouvez vous baser sur les algorithmes vus en cours.

Dans une version minimaliste, l'algorithme pourra fonctionner avec un nombre fixe de processus. Dans une version plus étendu, l'algorithme devra gérer du dynamisme avec l'arrivée et le départ de processus voire la prise en compte des crashs de processus.

Contraintes techniques

La ressource partagée

Par convention, le processus avec l'identifiant 0 jouera le rôle de la ressource partagée avec le fonctionnement suivant :

  1. Quand un processus vient d'acquérir le droit d'accéder à la ressource, il envoie un message particulier au processus 0.
  2. A sa réception, le processus 0 affiche à l'écran l'identifiant du processus qui vient d'accèder à la ressource partagée : "Le processus 3 vient d'entrer dans la section critique".
  3. Le processus 0 fait une pause de 4 secondes pour simuler le temps d'accès à la ressource.
  4. Une fois ce temps écoulé, le processus 0 envoie un message particulier au processus qui accédait à la ressource pour signaler que la ressource peut être libérée et affiche à l'écan qu'il a libéré la ressource : "Le processus 3 a libéré la section critique".

Un processus participant à l'algorithme

Rajoutez dans le code du framework un sous-pacakge "mutex" dans le package "service". Créez dans le package service une interface "IMutex" avec les signatures suivantes :

public interfance IMutex {
   public void demanderAcces();
   public void acquerirRessource();
}

La méthode "demancerAcces" est bloquante tant que le processus n'a pas reçu l'autorisation d'accèder à la ressource. Cet accès se fait ensuite par l'appel de "acquerirRessource". Cette méthode terminera quand le processus 0 aura envoyé son message de fin d'accès à la ressource partagée.

N'oubliez pas de modifier la classe "DistributedServicesMiddleware" du framework pour instancier le service de mutex.

Evaluation

TODO