ESIEE I3 IN301/IN3ST01 

Systèmes d'exploitation - UNIX

Mini-Projet 2005-2006

Synchronisation de processus et de threads

Communication par SMS

Problème producteur/consommateur

Description du projet :

sms Les compagnies de téléphones mobiles Béton, ElleSaitPasFaire, et Bleue, ont monté un consortium afin de mettre au point un nouveau système de sms fondé sur les toutes dernières technologies. En particulier, on veut mettre au point une technique pour qu'un sms qui ne réussit pas à partir d'un téléphone essaie de repartir tout seul, évitant ainsi au propriétaire du téléphone de retaper tout un tas de touches au clavier. La première tâche est de proposer une architecture pour ce projet, et de le simuler.
Pour cela, après mûre réflexion, elles ont décidé de faire appel à vos services. Vous recevez le cahier des charges ci-dessous.
Il s'agit de faire communiquer entre eux un certain nombre de téléphones. Chaque téléphone sera modélisé par un processus indépendant, ne partageant donc pas de mémoire avec les autres téléphones.

Un téléphone n'a qu'un seul canal d'émission et de réception. Ce canal ne peut accepter qu'un seul sms à la fois; il ne peut pas émettre en même temps qu'il reçoit, et il ne peut pas recevoir plusieurs sms en même temps. Les messages qui sortent du téléphone ou qui y arrivent doivent donc attendre que le canal soit libre. On considère pour simplifier que les téléphones ont une mémoire infinie. Les téléphones ne communiquent pas entre eux directement. Ils passent par un central, qui reçoit les sms et les redirige vers le bon correspondant. Les sms arrivant en provenance d'un téléphone doivent attendre dans le central que le canal de réception et d'émission se libère.
Les limites suivantes sont fixées :

Question 1 (7 points)

La modélisation du comportement d'un téléphone et du central se fera sous forme de threads. Un téléphone est un processus qui passe son temps à attendre des messages ou à essayer d'en émettre. Des messages sont écrit (aléatoirement) par le propriétaire du téléphone, et ces messages vont attendre de pouvoir partir.
Le central est un processus qui passe son temps à attendre des messages, et à les réémettre vers les bons destinataires. Les téléphones et le central ne partagent donc pas de mémoire.

Question 2 (3 points)

Quelles sont les possibilités qui s'offrent à vous pour effectuer le transfert d'un message depuis un des téléphones vers un autre téléphone ? Choisissez, après justification, une de ces possibilités.
Pour un exemple de générateur aléatoire de sms, vous pouvez télécharger le lien suivant. Pour le décompresser, tapez la commande 'tar zxvf sms.tz'.
Un message est une suite de caractères de longueur aléatoire. Proposez un "protocole de communication" pour pouvoir transférer proprement le message (en d'autres termes, vous ne pouvez pas vous contenter de transmettre juste la chaîne de caractère).

Question 3 (5 points)

Concevez un gestionnaire de type "ligne de commande" qui lancera les divers processus.
Le gestionnaire devra s'occuper de synchroniser les temps (les tours) des différents téléphones: chaque téléphone peut émettre ou recevoir au maximum un seul sms par tour (mais plusieurs sms peuvent vouloir arriver en même temps sur un téléphone donné). Cela veut dire qu'un téléphone va faire un certain nombre d'actions différentes, et qu'il va s'arrêter à un moment donné pour attendre que tous les autres téléphones aient fini leurs actions.
Que proposez-vous pour simuler ce mécanisme ? Discutez plusieurs possibilités, et choisissez (et justifiez) celle qui vous semble la meilleure.

Première programmation

Le gestionnaire prendra comme paramètres sur la ligne de commande:
Le gestionnaire sera donc lancé en tapant au clavier une commande du type: "gestionnaire 10 5 100 0.2"

Programmez votre modélisation.
Suggestion :

Question 4 (5 points)

Les téléphones peuvent être hors réseau. Dans ce cas un message ne peut pas arriver sur ce téléphone ni en partir. De même, le central peut être en maintenance, auquel cas, aucun téléphone ne reçoit de message, ni ne peut en émettre.
On simulera ce comportement en ajoutant un temps aléatoire à la date d'arrivée de chaque message.
Les usagers n'aiment pas que leurs messages mettent trop de temps à arriver. Proposez une manière de connaître pour chaque message, le temps passé depuis l'émission du message vers le central. Lorsqu'un message a passé trop de temps depuis son émission, il doit devenir prioritaire.

Deuxième programmation

Vous compléterez votre programme précédent, en ajoutant votre mécanisme de priorité, et en ajoutant les paramètres suivant au gestionnaire: Par conséquent, un message arrivera en un temps T+/-r, où r est un nombre aléatoire entre 0 et E.

Bonus

Le consortium vous demande de lui faire des recommandations détaillées; en particulier il souhaite que la communication soit la plus fluide possible, même si le réseau est saturé (par exemple au jour de l'an). Le consortium souhaite donc savoir à quelles conditions le réseau est saturé.

Consignes :