fork()
.g++ Client.cc GrandElecteur.cc Utilitaires.cc MainOrdonnanceur.cc -o ordonnanceur
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
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.
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).
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
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
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:
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.
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).
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.