|
|
TELECOM & Management SudParis
TELECOM SudParis 2ème
année
TP Noté CSC4508/M2 du 19/06/08(2è session)
(Corrigés)
Modalités
Durée : 1 heure de préparation et 1 1/2-heure d'oral
Tous documents autorisés.
---beginCorr
Principes de notation :
- Les questions 1 et 2 sont chacune notées sur 10 points.
- Répondre
correctement à la question 1 (respectivement aux questions 2.1
et 2.2) rapporte 5 points (à moduler selon la qualité de
la réponse).
- La réponse aux "questions à poser pendant l'oral" rapporte les 5 autres points.
---endCorr
Préparation
cd votreRepertoireDeTravailPourCSC4508M2 cp ~simatic/Cours/CSC4508/tPNote2008Session2.tgz . tar xvfz tPNote2008Session2.tgz cd TPNote2008Session2
Question 1 : DescendanceLe programme Q1/descendance.c prend en argument un entier qui est stocké dans la variable nbGenerations. Modifiez
ce programme pour que ce programme forke un enfant qui, lui-même
forke un enfant qui, lui-même, forke un enfant... et ce
nbGenerations fois. Voici un exemple de sortie que doit faire votre
programme :
$ ./descendance 3 Generation 1 : enfant de pid 5562 ayant pour parent le processus de pid 5561 Generation 2 : enfant de pid 5563 ayant pour parent le processus de pid 5562 Generation 3 : enfant de pid 5564 ayant pour parent le processus de pid 5563
---beginCorr
voir descendance.corrige.c
Questions à poser pendant l'oral :
- Comment garantissez-vous qu'il n'y a pas de zombies ?
- Passez l'outil valgrind sur votre application. Pourquoi n'y a-t-il aucun message d'erreur ?
- Passez l'outil splint sur votre application. Expliquez les éventuels messages d'erreur.
- Comment
auriez-vous fait si la variable s'était appelée nbEnfants
et que donc, le programme avait dû créer nbEnfants
enfants, tous enfants du même parent ?
---endCorr
Question 2 : Un tramway (nommé désir ?), le retour en conditionnel
On imagine que le futur tramway qui reliera Évry à Corbeil aura une
section de voie
unique (nommée SVU dans la suite) sur 2 kilomètres au niveau de TELECOM & Management SudParis.
De ce fait, une société est en charge d'écrire un simulateur de
circulation sur les différentes voies. Elle fait appel à vos services
pour la conception de la fonction circulationECSurSVU (respectivement
circulationCESurSVU) qui gère l'accès à la SVU pour les tramway venant
d'Évry (respectivement Corbeil), l'utilisation de cette voie et la
sortie de la SVU.
Pour les questions suivantes (qui sont autant d'hypothèses
d'utilisation de la SVU), vous devrez donc écrire les algorithmes (pas
de code !) des fonctions circulationECSurSVU et
circulationCESurSVU en utilisant les
opérations pthread_mutex_lock
et pthread_mutex_unlock d'objets mutex thread.
Question 2.1 : Un seul train sur la SVU
Dans cette question, on souhaite qu'à tout instant, il ne puisse y
avoir au maximum qu'un tramway sur la SVU.
Écrire les algorithmes (et éventuelles initialisations).
---beginCorr
C'est un problème d'exclusion mutuelle. On applique donc la solution de
ce paradigme.
/* Initialisations */
mutex mutexSVU;
/* circulationECSurSVU */
pthread_mutex_lock(mutexSVU)
utilisationSVU()
pthread_mutex_lock(mutexSVU)
/* circulationCESurSVU */
L'algorithme d'un tramway Corbeil-Evry est identique.
---endCorr
Question 2.2 : Plusieurs trains dans le sens EC sur la SVU
Dans cette question, on souhaite que plusieurs tramways EC puisse
circuler simultanément sur la SVU. En revanche, à tout instant, au plus
un tramway CE peut
circuler sur la SVU. De plus, on ne peut jamais avoir un tramway EC
et un tramway CE simultanément sur la SVU.
NB : On veillera à ce qu'il n'y ait jamais de tramway qui attende
indéfiniment parce qu'il y a des tramways qui s'engagent constamment
sur la SVU, mais dans l'autre sens.
Écrire les algorithmes (et éventuelles initialisations).
---beginCorr
C'est un problème de lecteurs (les tramway EC)/rédacteurs (les tramway
CE) pour lequel il faut éviter les famines. On applique donc la
solution de ce paradigme.
/* Initialisations */
mutex mutexSVU;
mutex mutexEC;
mutex mutexfifo;
int nbEC = 0
/* circulationECSurSVU */
pthread_mutex_lock(fifo) pthread_mutex_lock(mutexEC) nbEC += 1 si nbEC == 1 alors pthread_mutex_lock(mutexSVU) finsi pthread_mutex_unlock(mutexEC)
pthread_mutex_unlock(fifo)
utilisationSVU() pthread_mutex_lock(mutexEC) nbEC -= 1 si nbEC == 0 alors pthread_mutex_unlock(mutexSVU) finsi pthread_mutex_unlock(mutexEC)
/* circulationCESurSVU */
pthread_mutex_lock(fifo)
pthread_mutex_lock(mutexSVU)
pthread_mutex_unlock(fifo)
utilisationSVU() pthread_mutex_unlock(mutexEC)
Questions à poser pendant l'oral :
- Dans
cette question, on souhaite que plusieurs tramways EC (respectivement
CE) puisse circuler simultanément sur la SVU. En revanche, on ne
peut jamais avoir un tramway EC et un tramway CE simultanément
sur la SVU.
NB : On veillera à ce qu'il n'y ait jamais de
tramway qui attende indéfiniment parce qu'il y a des tramways
qui s'engagent constamment sur la SVU, mais dans l'autre sens. Écrire ces algorithmes (et initialisations) sur le tableau.
---endCorr
|