Mis à jour le 7 mars 2006
TD 7

TD 7

Mardi 7 mars 2006


1  Questions de cours



2  Agenda

On désire créer un petit agenda partagé (sur un mois), avec accès concurrent. Pour cela, nous proposons d'écrire un serveur utilisant des co-processus et un client qui effectue les opérations sur l'agenda par l'intermédiaire d'appels de fonctions distantes en OCaml.

Écrire un serveur avec un nombre fixe de co-processus qui protège l'accès à accept par un mutex. Pour assurer la cohérence de l'agenda, on impose qu'à tout instant, il y ait un unique écrivain ou (exclusif) plusieurs lecteurs en train de manipuler l'agenda. (On pourra utiliser la fonction Thread.delay pour amplifier le temps pris par l'écriture ou la lecture, afin de pouvoir observer les attentes sur le mutex.)

(corrigé)


Les types des opérations que le client pourra demander au serveur d'effectuer sont les suivantes:
      
type event = {start : intfinish : intinfo : string }
type day = (string*eventlist;;
type agenda = day array;;

type operation =
  | Get_agenda  (** demander les informations de tout l'agenda *)
  | Get_day of int (** demander les informations sur une journée *)
  | Add_event of string * int * int * int * string
        (** (nom, jour, heure début, heure fin, info) ajouter une entrée, le
           nom droit être unique le jour donné  *)

  | Delete_event of string * int;;
        (** (jour, nom) supprimer les informations de la journée donnée
           avec le nom donné *)


type result =
  | Unit
  | Agenda of agenda
  | Day of day
  | Exception of exn;;

Pour faire transiter entre le client et le serveur l'opération demandée sur l'agenda et son résultat (exception), on utilisera les fonctions input_value et output_value sur des in_channel et un out_channel construit autour du descripteur de prise.

(corrigé)
Écrire un programme client qui effectue des accès au calendrier. Par exemple, on pourra définir des suites d'appels aux fonctions distantes et lancer la suite dont le numéro est passé sur la ligne de commande.

(corrigé)





Ce document a été traduit de LATEX par HEVEA