|
|
TÉLÉCOM SudParis 2ème
année
TP Noté CSC4508/M2 du 21/06/12
(2ème session)
Modalités
Durée : 1 heure 30
Tous documents autorisés.
Les questions 1, 2 et 3 sont indépendantes. 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}_TPNote2012Session2
Préparation
cd votreRepertoireDeTravailPourCSC4508M2 cp ~trahay_f/Cours/CSC4508/tPNote2012Session2.tgz . tar xvfz tPNote2012Session2.tgz mv TPNote2012Session2 ${USER}_TPNote2012Session2
cd ${USER}_TPNote2012Session2
Question 1 : Implémentation d'un verrou (12 points)
Dans une application parallèle, plusieurs threads ont besoin d'accèder
à un tableau t. Certains threads sont chargés de consulter le tableau
en appelant la fonction f1:
double t[SIZE];
void f1 ( ) {
acces_en_lecture( t );
}
D'autres threads peuvent modifier ce tableau en appelant la fonction
f2:
void f2 ( ) {
acces_en_ecriture( t );
}
Pour chacune des questions ci-dessous, répondez dans le fichier
Q1/reponse1.txt ou bien sur votre copie (dans ce dernier
cas, indiquez dans le fichier Q1/reponse1.txt « Réponse
sur copie »).
- Expliquez le problème que peuvent poser ces accès concurrents au
tableau.
- Implémentez à l'aide de sémaphores (dont vous indiquerez les
valeurs initiales), d'éventuelles variables additionnelles (dont
vous indiquerez les valeurs initiales), et d'opérations P() et V(),
une solution permettant de résoudre ce problème.
- L'accès simultané par plusieurs threads à la fonction f1 ne pose
pas de problème car les accès se font en lecture. Implémentez à
l'aide de sémaphores (dont vous indiquerez les valeurs initiales),
d'éventuelles variables additionnelles (dont vous indiquerez les
valeurs initiales), et d'opérations P() et V(), une autre solution
permettant à plusieurs threads d'accèder en lecture au tableau,
mais empêchant les écritures lorsqu'un autre thread lit ou écrit
dans le tableau.
: Q1.1: 3 points, Q1.2: 3 points, Q1.3: 6 points
Question 2 : Compter le nombre de fichiers d'un répertoire (8
points)
On souhaite écrire le programme compter qui
permer de compter le nombre de fichiers du répertoire courant. Par
exemple :
$ ls
toto
un.c deux.c
trois.php quatre.c cinq.php
La commande suivante doit donner:
$
./compter
il y a 5 fichiers
On considère que le répertoire ne contient pas de fichier comportant
un espace.
Modifiez le programme compter.c
pour qu'il crée 1 processus exécutant la commande ls en redirigeant le
résultat de la commande dans un tube. Le processus père doit compter le
nombre de mots sortant du tube.
|
|