Test de Systèmes d'exploitation dans les conditions d'un TP

©     M. Laporte laporte@romarin.univ-aix.fr - D. Mathieu mathieu@romarin.univ-aix.fr
I.U.T.d'Aix en Provence - Département Informatique
Créé le 06/11/2000 - Dernière mise à jour : 06/11/2001

Tout document autorisé

Sommaire

Outils nécessaires à la communication au travers d'une file de messages
Protocole de communication, adressage du consommateur, messages de taille variable
Gestion des priorités
Gestion de catégories de messages


Outils nécessaires à la communication au travers d'une file de messages

    Voir le support de cours "Les supports du modèle Producteurs/Consommateurs sous Unix" et plus particulièrement le paragraphe "files de messages".

    Dans les fichiers nsSysteme.h, nsSysteme.hxx et nsSysteme.cxx, vous disposez des wrappers correspondants à l'utilisation des files de messages (espace de noms nsSysteme) :
 
// Fonctions concernant les files de messages

void Msgctl (int msqid) throw (CExcFctSystIPC);

void Msgctl (int msqid, int cmd, ::msqid_ds * buf)
                        throw (CExcFctSystIPC);

int Msgget (::key_t key, int msgflg)
                        throw (CExcFctSystIPC);

// key != IPC_PRIVATE

int Msgget (::key_t key) throw (nsUtil::CExcFct);

int Msgrcv (int msqid, void * msgp, std::size_t msgsz, 
            long msgtyp, int msgflg = 0) 
                         throw (CExcFctSystIPC);

void Msgsnd (int msqid, void * msgp, std::size_t msgsz, int msgflg = 0)
                         throw (CExcFctSystIPC);

    Dans le fichier nsMsg.h, vous disposez des déclarations suivantes :
 
/**
*
* @File : nsMsg.h
*
* @Authors : M. Laporte
*
* @Date : 06/11/2001
*
* @Version : V1.0
*
* @Synopsis :
*
**/
#if !defined __NSMSG_H__
#define      __NSMSG_H__

#include <cstddef>      // size_t
#include <unistd.h>     // pid_t

namespace nsMsg
{
    struct SMsg
    {
        long  m_type;                 // partie "type"
        ::pid_t m_Pid;                // partie "utile"

    }; // SMsg

    const long   CstMaxNumber = 4;
    const size_t CstMaxTaille = 128;

    struct SRep
    {
        long m_Type;                   // partie "type"
        char m_Message [CstMaxTaille]; // partie "utile"

    }; // SRep

} // namespace nsMsg

#endif __NSMSG_H_

Protocole de communication, adressage du consommateur, messages de taille variable

exo_01
    Dans le fichier exo_01d.cxx, écrire un "démon" qui gère une file de messages dont la clé est votre numéro d'utilisateur.

    Dans le fichier exo_01p.cxx, écrire un "producteur" qui :

    On suppose que la valeur de la constante CstMaxTaille est suffisante pour que les arguments puissent être stockés dans le tableau m_Message, y compris le caractère '\0'.

    Dans le fichier exo_01c.cxx, écrire un "consommateur" qui :

    Modifier le fichier Makefile.

Corrigés : Makefile    -    exo_01d.cxx    -    exo_01c.cxx    -    exo_01p.cxx

Sommaire


Gestion des priorités

exo_02
Dans cet exercice, il s'agit de gérer des priorités des messages qui peuvent aller de 1 à CstMaxNumber (niveau 1 = priorité maximale)
    Dans le fichier exo_02p.cxx, écrire un "producteur" qui :     Dans le fichier exo_02c.cxx, écrire un "consommateur" qui :     Si vous avez suivi les consignes pour l'exo_02c, vous vous apercevez que le processus fait de l'attente active. Que faut-il ajouter et où, dans exo_02c.cxx, pour que l'attente soit passive.

Corrigés : exo_02c.cxx    -    exo_02p.cxx

Sommaire


Gestion de catégories de messages

exo_03
Dans cet exercice, il s'agit de gérer des messages en classes d'équivalence. Le type d'un message envoyé sera la taille maximale d'un message (CstMaxTaille)  diminuée de la longueur de la chaîne contenue dans la partie "utile" du message. Le type sera donc d'autant plus petit que la taille du message sera longue.
    Dans le fichier exo_03p.cxx, écrire un "producteur" qui :    Dans le fichier exo_03c.cxx, écrire un "consommateur" qui :

Corrigés : exo_03c.cxx    -    exo_03p.cxx

Sommaire


© M. Laporte laporte@romarin.univ-aix.fr
    D. Mathieu mathieu@romarin.univ-aix.fr

I.U.T.d'Aix en Provence - Département Informatique