TÉLÉCOM SudParis 2ème
année
TP Noté CSC4508/M2 du 19/06/15
(Corrigés)
Modalités
Durée : 1 heure 30
Tous documents autorisés.
Les questions sont indépendantes les unes des autres. Aussi,
n'hésitez pas à lire tout le sujet avant de commencer pour déterminer
l'ordre dans lequel vous souhaitez traiter les questions.
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
remontée sous Moodle (rubrique « TP noté de 1 heure 30 ») du fichier
d'extension tgz constitué de la manière suivante :
cd votreRepertoireDeTravailPourCSC4508M2 tar cvfz ${USER}.tgz ${USER}_TPNote2015Session2
NB: Si vous êtes plus à l'aise en écrivant vos réponses sur une copie
plutôt qu'en les tapant sur ordinateur, vous pouvez rendre également
une copie papier à l'enseignant qui vous surveille. En fin d'épreuve,
même si vous ne rendez pas de copie, passez voir l'enseignant qui vous
surveille pour lui signaler explicitement que vous ne rendez pas de
copie.
Préparation
cd votreRepertoireDeTravailPourCSC4508M2
wget http://www-inf.it-sudparis.eu/COURS/CSC4508/Current/Documents/ExoCoursSys/TPNote2015Session2/WWW/tPNote2015Session2.tgz
tar xvfz tPNote2015Session2.tgz
mv TPNote2015Session2 ${USER}_TPNote2015Session2
cd ${USER}_TPNote2015Session2
Question 1 : cartoonisation d'image
Le script cartoon.sh permet de transformer un
fichier image pour qu'il ait l'air d'être dessiné. On
souhaite utiliser ce script dans un logiciel fonctionnant en
mode client-serveur : un serveur attend des connexions de
processus clients qui lui envoient un fichier à
transformer. Le serveur appelle alors le script afin de
transformer l'image fournie par le client et renvoie le
fichier résultant.
Question 1.1: utilisation de tubes nommés
Dans un premier temps, on souhaite que le serveur crée un
tube nommé et attende qu'un client lui envoie le nom d'un
fichier à traiter. Une fois le traitement effectué, le
serveur envoie au client le nom du fichier créé et contenant
le résulat.
Compléter les fichiers Q1/Q1.1/serveur_image.c
et Q1/Q1.1/client_image.c afin d'implémenter ce
fonctionnement.
NB: a priori, seules les parties marquées A COMPLETER sont à modifer.
---beginCorr
Corrigé : client_image.corrige.Q1.1.c et serveur_image.corrige.Q1.1.c
---endCorr
Question 1.2: copier le contenu du fichier
On souhaite maintenant que le programme fonctionne dans un
mode client-serveur proche au fonctionnement d'un serveur
web: le client envoie le nom du fichier au serveur qui
transforme le fichier et renvoie le contenu du fichier
résultat.
Pour simplifier le code, la connexion de fait toujours à
travers des tubes nommés, il est donc conseillé de reprendre
le code que vous avez écrit pour la question 1.1.
Compléter les fichiers Q1/Q1.2/client_image.c
et Q1/Q1.2/serveur_image.c afin d'implémenter
ce fonctionnement.
---beginCorr
Corrigé : client_image.corrige.Q1.2.c et serveur_image.corrige.Q1.2.c
---endCorr
Question 2 : find
Le but de l'exercice est d'écrire une partie d'un jeu
informatique dans lequel des joueurs ne peuvent commencer
une partie que lorsqu'ils sont au moins 4. On vous demande
donc d'écrire à l'aide de sémaphores la fonction
attend4joueurs() qui bloque tant que 4 joueurs
n'ont pas rejoint la partie. Vous pouvez supposer qu'un
joueur à rejoint la partie si il
appelle attend4joueurs() .
Question 2.1
De quelles variables et sémaphores avez-vous besoin ?
---beginCorr
attente = sémaphore initialisé à 0
n = compteur initialisé à 0
mutex = sémaphore initialisé à 1
---endCorr
Question 2.2
Donnez le pseudo-code de la fonction attend4joueurs() .
---beginCorr
attend4joueurs() {
P(mutex);
n++;
if(n == 4) {
V(mutex);
for(int i=1; i<4; i++)
V(attente);
} else {
V(mutex);
P(attente);
}
}
---endCorr
|