next up previous contents
Next: Travail à effectuer Up: Mise en place d'un Previous: Principe   Contents

Dialogue

Le dialogue entre les 2 processus est le suivant :

client serveur
0 récupère les identifiant du segment, des sémaphores et initialise le générateur. 0 Crée le segment mémoire. Crée et initialise les sémaphores.
1 demande à acquérir seg_dispo 1 attend que seg_init passe à 0
2 initialise segment et acquiert seg_init 2 calcule résultat et acquiert res_ok
3 attend que res_ok passe à 0 3 essaie d'acquérir seg_init (indique résultat lu)
4 lit résultat et libère seg_init 4 libère res_ok puis seg_init
5 libère seg_dispo 5 boucle sur 1
6 affiche résultats    
7 boucle sur 1    



Un certain nombres de procédures réunies dans la librairie libseg.a sont disponibles pour réaliser le programme :

[linestyle=none,fillstyle=solid,fillcolor=lightgray](1,-0.5)(13,-0.5)(13,-2)(1,-2)(1,-0.5)

init_rand() : initialise le générateur
long getrand() : retourne un entier long signé
int ntty() : retourne un entier correspondant au numéro du tty
Les routines suivantes bloquent le processus en attendant d'aboutir. semid désigne l'identifiant de l'ensemble de sémaphores :

[linestyle=none,fillstyle=solid,fillcolor=lightgray](1,-0.5)(13,-0.5)(13,-2)(1,-2)(1,-0.5)

wait_sem(semid, sem) : attend que le sémaphore sem passe à 0
acq_sem(semid,sem) : tente d'acquérir le sémaphore sem
lib_sem(semid,sem) : libère le sémaphore sem

La structure du segment sera définie ainsi :
[linestyle=none,fillstyle=solid,fillcolor=lightgray](0,-0.4)(12,-0.4)(12,-3.8)(0,-3.8)(0,-0.4)


struct shmseg
{
      int tty;            /* Numero de tty */
      int req;            /* numero de requete */
      long tab[maxval];   /* Tableau de valeurs */
      long result;        /* resultat */
}


Cette structure est définie sous le type SEGMENT dans le fichier segdef.h. Ce fichier réunit tous les includes nécessaires ainsi que la définition des constantes suivantes :

cle (key_t)3 clé d'accès commune au segment et aux sémaphores
seg_dispo 0 sémaphore accès segment
seg_init 1 sémaphore segment initialisé
res_ok 2 sémaphore résultat prêt
maxval 100 nombre de valeurs à calculer
segsize   taille du type SEGMENT


L'application sera conçue à partir de 4 fichiers :

Le fichier client devra déclarer une structure associée à la manipulation des sémaphores : struct sembuf sop;

L'organisation du programme sera la suivante :

  1. Initialisations (faire une fonction séparée)
  2. Boucle contrôlée par le compteur de requête
  3. détacher segment mémoire et exit



next up previous contents
Next: Travail à effectuer Up: Mise en place d'un Previous: Principe   Contents
Arnaud Revel
2001-11-26