next up previous contents
Next: Opérations de base sur Up: UTILISATION DE LA LIBRAIRIE Previous: Opérations de base sur

Principe de la synchronisation

Les sémaphores permettent de synchroniser l'accès à une ressource en bloquant les process désirant l'utiliser. Il faut toutefois remarquer qu'un process peut accéder une ressource sans utiliser ce mode de synchronisation. Cela peut être utile pour communiquer avec un process exécutant une tache en arrière plan (voir plus loin sous "communication asynchrone"), mais dans la plupart des cas les accès asynchrones généreront des situations illégales difficile à contrôler ou à identifier.

La synchronisation utilise 3 sémaphores que l'on appelle SEM0, SEM1 et SEM2. Ils ont les fonctions suivantes:

Fonctionnalités de SEM0

SEM0 permet de gérer l'accès à la ressource. Il est initialisé à 1 par le serveur, indiquant par là que la ressource est libre. Chaque client voulant accéder la ressource doit commencer par décrémenter ce sémaphore avant de d'effectuer une quelconque opération sur le bloc de communication ou sur les autres sémaphores. Si la ressource est occupée, le client et mis en attente et NCNT0 est incrémenté d'une unité.

Selon le mode de synchronisation, en fin de travail, c'est le serveur ou le client qui incrémente SEM0 pour libérer l'accès à la ressource pour le client suivant.

Fonctionnalités de SEM1

SEM1 bloque le serveur tant que le bloc de communication ne contient rien de valide. Il est initialisé à zéro par le serveur qui se met tout de suite en attente par une décrémentation (dans ce cas NCNT1=1). C'est le client qui incrémente ce sémaphore lorsqu'il a obtenu l'accès à la ressource et remplis le bloc de communication.

Le serveur se remet en attente automatiquement en décrémentant SEM1 en fin de travail

Fonctionnalités de SEM2

SEM2 indique si le serveur est en cours d'exécution. Lorsqu'il vaut zéro, le serveur ne travaille pas, lorsqu'il vaut 1, il travaille. C'est toujours le client qui le pose à 1 avant d'ordonner l'exécution d'une commande au serveur en incrémentant le SEM1. C'est le serveur qui le pose à zéro à la fin d'une exécution. Si le client veut attendre la fin d'une exécution, il se met en attente de valeur zéro sur ce sémaphore (dans ce cas ZCNT2=1).

Ce sémaphore est utilisé lors des opérations d'initialisation d'un serveur où un serveur peut savoir s'il a été tué durant l'exécution d'une commande (SEM2=1) et ainsi le signaler au client qui peut être toujours en attente.


next up previous contents
Next: Opérations de base sur Up: UTILISATION DE LA LIBRAIRIE Previous: Opérations de base sur

WEBER Luc
Mon May 10 13:41:34 MET DST 1999