Département INFormatique 
 CSC4508/M2 : Concepts des systèmes d'exploitation et mise en œuvre sous Unix


   Évaluation



TÉLÉCOM SudParis 2ème année

TP Noté CSC4508/M2 du 30/06/17

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}_TPNote2017Session2

Préparation

	    cd votreRepertoireDeTravailPourCSC4508M2
	    wget http://www-inf.it-sudparis.eu/COURS/CSC4508/Current/Documents/ExoCoursSys/TPNote2017Session2/WWW/tPNote2017Session2.tgz
	    tar xvfz tPNote2017Session2.tgz
	    mv TPNote2017Session2 ${USER}_TPNote2017Session2
	    cd ${USER}_TPNote2017Session2
	    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd)/cmocka/install/lib
	  

Pour les utilisateurs de Mac, vous devez également faire les instructions suivantes:

	    export DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:$(pwd)/cmocka/install/lib
            cd cmocka
            rm -Rf Build/*
            rm -Rf install
            cd Build
            cmake   -DCMAKE_INSTALL_PREFIX=../install   -DCMAKE_BUILD_TYPE=Debug   ..
            make
            make install
            cd ../..
	  

Préambule

Les 3 exercices de ce TP noté s'appuient sur les fichiers vector.* qui implémentent un ensemble de fonctions permettant de manipuler des vecteurs de chaînes de caractères. Par exemple, après avoir exécuté la séquence d'instructions suivante :

            struct vector_t *pv = newVec();
            pushBack(pv, "abc");
            pushBack(pv, "ab");
            pushBack(pv, "a");
	    

la mémoire d'un processus contient les informations suivantes :

De ce fait, si le processus exécute getElem(pv, 0), cette fonction renvoie la chaîne de caractères "abc".

Les exercices sont indépendants. Pour chaque exercice, vous avez à votre disposition :

  • Les fichiers vector.h et vector.c implémentant des fonctions permettant de manipuler des vecteurs. Seul le fichier vector.c est à modifier.
  • Un programme testUnitaire.c pour tester les différentes fonctions implémentées dans vector.c

Question 1 : Création et destruction de vecteurs (8 points)

Question 1.1

Dans la fonction newVec, pourquoi n'a-t-on pas écrit:

	struct vector_t v = {0, NULL};
	return &v;
	    

qui aurait été plus simple ?

Répondez dans le fichier Q1/reponses1.txt.

Question 1.2

Toujours dans NewVec, quel est l'intérêt d'utiliser calloc au lieu de malloc ?

Répondez dans le fichier Q1/reponses1.txt.

Question 1.3

La fonction pushBack appelle actuellement realloc. Modifiez cette fonction pour qu'elle n'utilise que malloc. (NB: vous pouvez tester votre modification en exécutant les tests unitaires ./testsUnitaires)

Par ailleurs, expliquez (dans le fichier Q1/reponses1.txt) quel est l'avantage, pour cette fonctionpushBack, de la solution à base de realloc par rapport à la solution à base de malloc.

Question 1.4

Implémentez la fonction deleteVector.

Question 2: multi-threading (7 points)

Question 2.1

On souhaite pouvoir utiliser les fonctions pushBack et getElem depuis plusieurs threads de manière concurrente.

Dans le fichier Q2/reponses2.txt, donnez, en justifiant, le type de problème de synchronisation rencontré entre ces deux fonctions si l'on souhaite que le parallélisme entre les threads soit maximal.

Modifiez le code pour que le parallélisme entre les threads soit maximal.

Question 3: Chargement/sauvegarde sur disque (6points)

On souhaite pouvoir sauvegarder un vecteur dans un fichier ou charger un vecteur stocké dans un fichier. Pour cela, on utilise le format de fichier suivant:

  • Les 4 premiers octets contiennent le nombre, écrit en binaire, d'éléments du vecteur
  • Ensuite, pour chaque élément du vecteur, il y a 4 octets contenant la longueur, écrite en binaire, que doit avoir la zone mémoire pour stocker la chaîne de caractères qui va être lue ensuite (NB: cette longueur prend en compte le '\0' final), puis les octets de la chaîne de caractères (y compris le '\0' final).

Question 3.1

Implémentez la fonction loadVec

Question 3.2

Implémentez la fonction saveVec.





Page mise à jour le 20 juin 2017