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


    Évaluation



Institut National des Télécommunications
Télécom INT 2è année

TP Noté CSC4508/M2 du 05/10/06
(2è session)

Corrigés

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" ) :
  1. Expliquez le rôle du sémaphore sem
  2. Indiquez la valeur initiale de ce sémaphore. Justifier votre réponse.
  3. 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" ) :
  1. 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.
  2. Quel(s) paradigme(s) de synchronisation distinguez-vous dans cette solution ?
  3. Ajoutez les déclarations de sémaphores, leurs initialisations et leurs manipulations (P() et V()) dans les algorithmes ci-dessus



Page mise à jour le 5 octobre 2006