Les Moniteurs

  1. Description

    Le type moniteur est une autre structure de synchronisation de haut niveau introduite par Hoare en 1974. Un moniteur peut être assimilé à une sorte d'objet de synchronisation, contenant les données communes, et caractérisé par un ensemble d'opérations définis par le programmeur et seules autorisées à accéder (aussi bien en lecture qu'en écriture) à ces données.

    Les moniteurs assurent l'exclusion mutuelle sur leurs opérations.

    Figure 10 : Fonctionnement d'un moniteur

    Les processus, lorsqu'ils désirent effectuer des traitements sur les données communes, expédient une demande au moniteur en appelant l'opération correspondante.

    La structure du moniteur assure qu'un seul processus à la fois puisse être actif dans celui-ci, les autres étant suspendus en entrée, par le moniteur, dans une file d'attente.

    Ainsi, les moniteurs permettent de décharger le programmeur de la contrainte de la gestion des sémaphores, par exemple pour ce qui concerne l'exclusion mutuelle, en déplaçant cette tâche au niveau du système, et en l'occurrence au niveau du moniteur dédié.

    Ils permettent aux programmeurs à déclarer explicitement les ressources et données partagées et à les placer dans les moniteurs correspondants.

    Des langages dédiés, tels que Pascal concurrent, autorise la définition et l'emploi de moniteurs.

  2. L'exclusion mutuelle grâce aux moniteurs

    Reprenons notre exemple de réservation de place d'avion. Il peut être correctement réalisé à l'aide d'un moniteur du type suivant :

    NB : les syntaxes suivantes sont basées sur celle de "Pascal concurrent".

    type placeAvion = monitor

    var places : array [0..n-1] of (occupe, libre);

    procedure entry reserve (i : integer, var rep : boolean );

    begin

    rep := false;

    if places[i] = libre

    then begin

    places[i] := occupe;

    rep := true;

    end;

    end;

    begin

    (* code d'initialisation*)

    for i := 0 to n-1

    do places[i] := libre;

    end.

    Un processus qui souhaite réserver une place d'avion, devra appeler l'opération reserve() sur l'instance du moniteur placeAvion concerner pour effectuer ce traitement.

    NB : on peut remarquer que la définition d'un moniteur n'est pas sans rappeler celle d'un objet (données + méthodes, traitement) dans le domaine de la programmation orientée objet.


© RENAUDON Xavier - Juin 1996
Retour au Sommaire retour au Sommaire