Alexandre Alapetite & Brice Andujar   (12/2000)

Grands électeurs sans présidents

Sommaire

Quitter

Mode d'emploi

Sources du programme:

Sommaire

Utilisation du programme:

Dès que vous avez lancé le programme, vous devez faire des choix :

MainOrdonnanceur : AUTOMATIQUE=1 - MANUEL=2
MainOrdonnanceur : RANDOM=1 - TOURNIQUET=2 - LILO=3 - FIFO=4
MainOrdonnanceur : Temps d'exécution en secondes
  1. Automatique: les clients font des choix aléatoirement. En manuel, saisissez une valeur entre 1 et 7 selon la liste ci-dessous :
  2. Puis vous pouvez choisir la politique d'élection du GrandElecteur :
  3. Enfin, entrez un temps maximum d'exécution en secondes. Si ce délai est dépassé, le GrandElecteur envoit un ordre de suicide à tous les Clients, puis il s'auto-détruit.
Sommaire

Description des protocoles utilisés entre les processus.

Communication GrandElecteur vers Client

La communication se fait avec une file de messages.

struct Tmsgperso{long etiquette; char contenu;}

L'étiquette est le numéro de processus (PID) du Client. Le GrandElecteur envoit dans la file avec cette étiquette le quantum de temps (char) en secondes attribué au Client correpondant.

Communication Client vers GrandElecteur

La communication se fait avec un tube nommé.
Le GrandElecteur est le seul à l'écoute du tube. Il connaît la provenance du message car il y a un seul Client actif à la fois et c'est celui qui a été élu par GrandElecteur.
Le Client envoie un entier (int) symbolisant le choix effectué. (cf.choix fait par le Client).

Sommaire

Jeu d'essai

Exemple d'exécution manuelle où le GrandElecteur se termine lorsqu'il n'y a plus de Client:

MainOrdonnanceur : AUTOMATIQUE=1 - MANUEL=2
MainOrdonnanceur : Mode manuel
MainOrdonnanceur : RANDOM=1 - TOURNIQUET=2 - LILO=3 - FIFO=4
MainOrdonnanceur politique : 1
MainOrdonnanceur : Temps d'exécution en secondes
Serveur : créé comme processus 4184
Serveur : File de messages créée avec succés
Client 4189 : Créé
Serveur : Tube nommé créé avec succés
Serveur : ajoute le client 4189 à l'indice 0
Serveur : Liste des processus, 4189
Serveur : élit processus 4189 avec un quantum de temps de 2
Client 4189 :  a reçu un quantum de temps de 2
Client 4189 : Entrez choix entre 1 et 7
Client 4189 :  envoie 4190 dans le tube
Serveur : ajoute le client 4190 à l'indice 1
Client 4190 : Créé
Client 4189 :  envoie 1 dans le tube
Serveur : Liste des processus, 4189, 4190
Serveur : élit processus 4190 avec un quantum de temps de 2
Client 4190 :  a reçu un quantum de temps de 2
Client 4190 : Entrez choix entre 1 et 7
Client 4190 :  envoie 2 dans le tube
Serveur : supprime le client 4190 à l'indice 1
Serveur : Liste des processus, 4189
Serveur : élit processus 4189 avec un quantum de temps de 3
Client 4189 :  a reçu un quantum de temps de 3
Client 4190 : Détruit
Client 4189 : Entrez choix entre 1 et 7
Client 4189 :  envoie 2 dans le tube
Serveur : supprime le client 4189 à l'indice 0
Serveur : Plus de clients
Client 4189 : Détruit
Serveur : Plus de temps
Serveur : Fin de GrandElecteur
Serveur : détruit
MainOrdonnanceur : Fin du processus de GrandElecteur
Sommaire

Exemple d'exécution automatique où le GrandElecteur se termine aprés la durée maximale choisie par l'utilisateur :

MainOrdonnanceur : AUTOMATIQUE=1 - MANUEL=2
MainOrdonnanceur : Mode automatique
MainOrdonnanceur : RANDOM=1 - TOURNIQUET=2 - LILO=3 - FIFO=4
MainOrdonnanceur politique : 1
MainOrdonnanceur : Temps d'exécution en secondes
Serveur : créé comme processus 4158
Serveur : File de messages créée avec succés
Client 4163 : Créé
Serveur : Tube nommé créé avec succés
Serveur : ajoute le client 4163 à l'indice 0
Serveur : Liste des processus, 4163
Serveur : élit processus 4163 avec un quantum de temps de 1
Client 4163 :  a reçu un quantum de temps de 1
Client 4163 :  envoie 4164 dans le tube
Serveur : ajoute le client 4164 à l'indice 1
Client 4164 : Créé
Client 4163 :  envoie 1 dans le tube
Serveur : Liste des processus, 4163, 4164
Serveur : élit processus 4163 avec un quantum de temps de 2
Client 4163 :  a reçu un quantum de temps de 2
Client 4163 :  envoie 4165 dans le tube
Serveur : ajoute le client 4165 à l'indice 2
Client 4165 : Créé
Client 4163 :  envoie 1 dans le tube
Serveur : Liste des processus, 4163, 4164, 4165
Serveur : élit processus 4164 avec un quantum de temps de 2
Client 4164 :  a reçu un quantum de temps de 2
Client 4164 :  envoie 4167 dans le tube
Client 4167 : Créé
Serveur : ajoute le client 4167 à l'indice 3
Client 4164 :  envoie 2 dans le tube
Serveur : supprime le client 4164 à l'indice 1
Serveur : Liste des processus, 4163, 4165, 4167
Serveur : élit processus 4165 avec un quantum de temps de 2
Client 4165 :  a reçu un quantum de temps de 2
Client 4164 : Détruit
Client 4165 :  envoie 2 dans le tube
Serveur : supprime le client 4165 à l'indice 1
Serveur : Liste des processus, 4163, 4167
Serveur : élit processus 4167 avec un quantum de temps de 1
Client 4165 : Détruit
Client 4167 :  a reçu un quantum de temps de 1
Client 4167 :  envoie 4168 dans le tube
Serveur : ajoute le client 4168 à l'indice 2
Client 4168 : Créé
Client 4167 :  envoie 2 dans le tube
Serveur : supprime le client 4167 à l'indice 1
Serveur : Liste des processus, 4163, 4168
Serveur : élit processus 4163 avec un quantum de temps de 2
Client 4163 :  a reçu un quantum de temps de 2
Client 4167 : Détruit
Client 4163 :  envoie 4169 dans le tube
Serveur : ajoute le client 4169 à l'indice 2
Client 4169 : Créé
Client 4163 :  envoie 1 dans le tube
Serveur : Liste des processus, 4163, 4168, 4169
Serveur : élit processus 4163 avec un quantum de temps de 3
Client 4163 :  a reçu un quantum de temps de 3
Client 4163 :  envoie 4170 dans le tube
Serveur : ajoute le client 4170 à l'indice 3
Client 4170 : Créé
Client 4163 :  envoie 2 dans le tube
Serveur : supprime le client 4163 à l'indice 0
Serveur : Liste des processus, 4168, 4169, 4170
Serveur : élit processus 4170 avec un quantum de temps de 2
Client 4163 : Détruit
Client 4170 :  a reçu un quantum de temps de 2
Client 4170 :  envoie 4171 dans le tube
Serveur : ajoute le client 4171 à l'indice 3
Client 4171 : Créé
Client 4170 :  envoie 1 dans le tube
Serveur : Liste des processus, 4168, 4169, 4170, 4171
Serveur : élit processus 4170 avec un quantum de temps de 1
Client 4170 :  a reçu un quantum de temps de 1
Client 4170 :  envoie 4172 dans le tube
Serveur : ajoute le client 4172 à l'indice 4
Client 4172 : Créé
Client 4170 :  envoie 2 dans le tube
Serveur : supprime le client 4170 à l'indice 2
Serveur : Liste des processus, 4168, 4169, 4171, 4172
Serveur : élit processus 4168 avec un quantum de temps de 1
Client 4168 :  a reçu un quantum de temps de 1
Client 4170 : Détruit
Client 4168 :  envoie 1 dans le tube
Serveur : Liste des processus, 4168, 4169, 4171, 4172
Serveur : élit processus 4169 avec un quantum de temps de 2
Client 4169 :  a reçu un quantum de temps de 2
Client 4169 :  envoie 4173 dans le tube
Serveur : ajoute le client 4173 à l'indice 4
Client 4173 : Créé
Client 4169 :  envoie 1 dans le tube
Serveur : Liste des processus, 4168, 4169, 4171, 4172, 4173
Serveur : élit processus 4173 avec un quantum de temps de 3
Client 4173 :  a reçu un quantum de temps de 3
Client 4173 :  envoie 4174 dans le tube
Serveur : Agrandit table
Serveur : ajoute le client 4174 à l'indice 5
Client 4174 : Créé
Client 4173 :  envoie 2 dans le tube
Serveur : supprime le client 4173 à l'indice 4
Serveur : Liste des processus, 4168, 4169, 4171, 4172, 4174
Serveur : élit processus 4171 avec un quantum de temps de 1
Client 4171 :  a reçu un quantum de temps de 1
Client 4173 : Détruit
Client 4171 :  envoie 4175 dans le tube
Serveur : ajoute le client 4175 à l'indice 5
Client 4175 : Créé
Client 4171 :  envoie 2 dans le tube
Serveur : supprime le client 4171 à l'indice 2
Serveur : Liste des processus, 4168, 4169, 4172, 4174, 4175
Serveur : élit processus 4174 avec un quantum de temps de 3
Client 4174 :  a reçu un quantum de temps de 3
Client 4171 : Détruit
Client 4174 :  envoie 1 dans le tube
Serveur : Liste des processus, 4168, 4169, 4172, 4174, 4175
Serveur : élit processus 4169 avec un quantum de temps de 1
Client 4169 :  a reçu un quantum de temps de 1
Client 4169 :  envoie 1 dans le tube
Serveur : Liste des processus, 4168, 4169, 4172, 4174, 4175
Serveur : élit processus 4172 avec un quantum de temps de 2
Client 4172 :  a reçu un quantum de temps de 2
Client 4177 : Créé
Client 4172 :  envoie 4177 dans le tube
Serveur : ajoute le client 4177 à l'indice 5
Client 4172 :  envoie 2 dans le tube
Serveur : supprime le client 4172 à l'indice 2
Serveur : Plus de temps
Client 4172 : Détruit
Serveur : élit processus 4168 avec un quantum de temps de 0
Serveur : élit processus 4169 avec un quantum de temps de 0
Serveur : élit processus 4174 avec un quantum de temps de 0
Serveur : élit processus 4175 avec un quantum de temps de 0
Serveur : élit processus 4177 avec un quantum de temps de 0
Client 4168 :  a reçu un quantum de temps de 0
Client 4168 : Suicidé
Client 4168 : Détruit
Client 4169 :  a reçu un quantum de temps de 0
Client 4169 : Suicidé
Client 4169 : Détruit
Client 4174 :  a reçu un quantum de temps de 0
Client 4174 : Suicidé
Client 4174 : Détruit
Client 4175 :  a reçu un quantum de temps de 0
Client 4175 : Suicidé
Client 4175 : Détruit
Client 4177 :  a reçu un quantum de temps de 0
Client 4177 : Suicidé
Client 4177 : Détruit
Serveur : Fin de GrandElecteur
Serveur : détruit
MainOrdonnanceur : Fin du processus de GrandElecteur
Sommaire

Questions

Que se passe-t-il si tous les candidats se sont désistés?

Dans le cas de notre programme, le GrandElecteur constate qu'il n'y a plus de Client candidat et il se suicide.
Pour que la simultation puisse continuer, deux solutions apparaissent:

  1. Le GrandElecteur peut générer un nouveau Client lorsqu'il n'y en a plus.
  2. Le GrandElecteur peut passer un code spécial au dernier Client lui interdisant de se détruire.
Sommaire

Auriez vous gardé ces moyens de communication?

Puisqu'il nous est donné de programmer le GrandElecteur ainsi que les Client, la méthode qui semble logique est l'utilisation de mémoire partagée.

Sommaire

Analyse des cas de fins prématurées

Dans les deux cas, il serait possible de spécifier un délai de dépassement (time out) lors de l'attente d'une réponse au bout duquel le processus concerné adopte une solution par défaut (suicide pour un Client, élimination du Client dans la table pour le GrandElecteur).

Sommaire

Formulez une question dont la réponse serait : " plus rien ne bouge, il y a blocage complet "

Sommaire

Conclusion

Notre programme respecte le cahier des charges. Tous les points ont été traités.
L'accent a été mis sur la clarté du code, dans une optique d'évolutivité.
En effet, le projet a été fait en C++, avec des classes et des méthodes bien distinctes. Les spécifications sont nombreuses. La modularité permet de rajouter des fonctions aisément, sans avoir à analyser profondement l'ensemble du programme.

La diversité des moyens de communication utilisés (tubes nommés, file de messages) nous a permis de mieux cerner les différents concepts enseignés en cours.

Sommaire
https://alexandre.alapetite.fr

Quitter