|
|
Institut National des Télécommunications
Télécom INT 2è année
TP Noté CSC4508/M2 du 05/10/06
(2è session)
Modalités
Durée : 1 heure 30
Les quatre questions sont indépendantes les unes des autres.
Le barême est donné à titre indicatif des poids
entre les différentes questions.
La «livraison» de votre travail en fin de TP
noté se fera par remise de votre copie à l'enseignant et
par
envoi d'un mail à Michel.Simatic@int-evry.fr
(sujet «CSC4508/M2:TP noté session 2») avec en pièce
jointe le fichier d'extension tgz constitué de
la manière suivante :
cd votreRepertoireDeTravailPourCS22M1 tar cvfz $USER.tgz TPNote2006Session2
Préparation
cd votreRepertoireDeTravailPourCS22M1 cp ~simatic/CS22M1/tPNote2006Session2.tgz . tar xvfz tPNote2006Session2.tgz cd TPNote2006Session2
Introduction
Au cours de ce TP noté (inspiré d'un stage
effectué par un étudiant de Télécom-INT),
on souhaite concevoir
(ce travail de conception nécessitant 1h30, ce TP noté ne
peut inclure de codage) un "serveur de tatouage d'image". Le
rôle de ce serveur est de permettre à des applications
clientes de lui soumettre des images. Ce serveur tatoue
chaque image (c'est-à-dire qu'il intègre des éléments
spéciaux dans l'image) avant de renvoyer cette image
tatouée au client.
Question 1 : Nombre maximum de tatouages simultanés (2 points)
La machine qui hébergera le serveur disposera de 1 Go de RAM
(250 Mo
étant utilisés par le système et les applications
autres que
le "serveur de tatouage") et de 1 Go de swap. L'application serveur
aura besoin de 500 Mo de RAM par tatouage à effectuer.
Sur votre copie
ou
bien dans le fichier Q1/reponse1.txt (dans ce dernier
cas, indiquez sur votre copie "Réponse dans Q1/reponse1.txt "
) :
- Estimez le nombre de tatouages simultanés que la machine serveur pourra effectuer,
- Justifiez votre réponse.
Question 2 : Borne inférieure pour la
durée d'exécution pour un tatouage quand le serveur
travaille à pleine charge (2,5 points)
L'application serveur (qui est une application CPU-intensive) a besoin
de 1 minute CPU pour réaliser un tatouage, si toutes ses
données résident en mémoire vive. Sachant que
la machine serveur est mono-processeur et ne permet pas d'hyper-threading,
proposer une borne inférieure pour la durée
d'exécution d'un tatouage lorsque l'application
serveur exécute simultanément le nombre de tatouages
trouvé à la question 1. Justifiez votre
réponse.
NB : vous pouvez répondre sur votre copie
ou
bien dans le fichier Q2/reponse2.txt (dans ce dernier
cas, indiquez sur votre copie "Réponse dans Q2/reponse2.txt "
).
Question 3 : Evaluation d'une première solution (6,5 points)
La solution suivante est envisagée :
- Tout client exécute l'algorithme suivant :
Début
connexionAuServeur(référenceClient)
envoyerAuServeur(imageATatouer)
recevoirDuServeur(imageTatouee)
rompreConnexionAuServeur()
Fin
- Le serveur travaille de la manière suivante :
Début
faire
attenteConnexionDUnClient(référenceClient)
recevoirDuClient(référenceClient,imageATatouer)
P(sem)
démarrerUneTâcheDeTatouageDImage(référenceClient,imageATatouer)
tant que VRAI
Fin
-
Le serveur démarre des tâches de tatouage d'image dont l'algorithme est le suivant :
Tâche tatouageDImage(Données : réferenceClient : Référence
imageATatouer : Image)
Début
réaliserTatouage(imageATatouer, imageTatouée)
envoyerAUnClient(référenceClient, imageTatouée)
V(sem)
Fin
Sur votre copie
ou
bien dans le fichier Q3/reponse3.txt (dans ce dernier
cas, indiquez sur votre copie "Réponse dans Q3/reponse3.txt "
) :
- Expliquez le rôle du sémaphore sem
- Indiquez la valeur initiale de ce sémaphore. Justifier votre réponse.
- On considère le cas où 10
clients demandent presque simultanément le tatouage d'une image.
Montrez que 3 de ces clients restent bloqués pendant
au moins 3 minutes entre l'instruction connexionAuServeur()et l'instruction recevoirDuServeur(imageTatouee), 3 autres pendant au moins 6 minutes, 3 autres pendant au moins 9 minutes, et le 10è pendant au moins 10 minutes.
Question 4 : Mise au point d'une solution de meilleure qualité (9 points)
Cette éventuelle attente sans aucune information du serveur
apparaît inacceptable pour les développeurs de ce "serveur
de tatouage d'image".
La solution suivante est donc envisagée :
- Un client qui souhaite soumettre le tatouage d'une image exécute l'algorithme suivant :
Début
connexionAuServeur(référenceClient)
envoyerAuServeur(REQUETETATOUAGE)
envoyerAuServeur(imageATatouer)
recevoirDuServeur(estimationDélaiTraitement)
rompreConnexionAuServeur()
affichage("Temps d'attente estimé :", estimationDélaiTraitement)
Fin
- Un client qui souhaite savoir où en est le tatouage de l'image qu'il a soumise exécute l'algorithme suivant :
Début
connexionAuServeur(référenceClient)
envoyerAuServeur(STATUTTATOUAGE)
recevoirDuServeur(statut)
rompreConnexionAuServeur()
affichage("Status tatouage :", statut)
Fin
- Un client qui souhaite récupérer une image tatouée exécute l'algorithme suivant :
Début
connexionAuServeur(référenceClient)
envoyerAuServeur(RECUPERATIONIMAGE)
recevoirDuServeur(imageTatouée)
rompreConnexionAuServeur()
Fin
- Le serveur travaille de la manière suivante :
Début
Pour i=1:Naturel à NBMAXTACHESTATOUAGE faire
démarrerTâcheDeTatouageDImage()
Fait
faire
attenteConnexionDUnClient(référenceClient)
recevoirDuClient(typRequête)
cas où typRequête vaut :
REQUETETATOUAGE:
recevoirDuClient(imageATatouer)
stockerDansStructureDeDonnées(référenceClient, imageATatouer, estimationDélaiTraitement)
envoyerAUnClient(référenceClient, estimationDélaiTraitement)
break
STATUTTATOUAGE:
interrogerStructureDeDonnées(référenceClient, statut)
envoyerAUnClient(référenceClient, statut)
RECUPERATIONIMAGE:
récupérationDansStructureDeDonnées(référenceClient, imageTatouée)
envoyerAUnClient(référenceClient, imageTatouée)
fincas
tant que VRAI
Fin
-
Le serveur démarre des tâches de tatouage d'image dont l'algorithme est le suivant :
Tâche tatouageDImage()
Début
rechercherDansStructure(imageATatouer)
réaliserTatouage(imageATatouer, imageTatouée)
stockerDansStruture(imageTatouée)
Fin
Sur votre copie
ou
bien dans le fichier Q4/reponse4.txt (dans ce dernier
cas, indiquez sur votre copie "Réponse dans Q4/reponse4.txt "
) :
- Décrivez les grandes lignes de la structure de données qui serait manipulée par les procédures stockerDansStructureDeDonnées(), interrogerStructureDeDonnées() et récupérationDansStructureDeDonnées() : tableau de structures ? liste de structures ? champs contenus dans ces structures ? Justifiez votre réponse.
- Quel(s) paradigme(s) de synchronisation distinguez-vous dans cette solution ?
- Ajoutez les déclarations de sémaphores, leurs initialisations et leurs manipulations (P() et V()) dans les algorithmes ci-dessus
|