Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction...

26
TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets que les processus utilisent exclusivement à l’aide de deux opérations P (Proberen) et V (Verhogen). L’opération P est paramètrée par le nombre de tickets demandés par l’appelant tandis que l’opération V est paramètrée par le nombre de tickets rendus par l'appelant.

Transcript of Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction...

Page 1: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 1

Utilisation des sémaphores Unix

1.Introduction Schématiquement, un sémaphore est un objet

qui joue le rôle d’un distributeur de tickets que les processus utilisent exclusivement à l’aide de deux opérations P (Proberen) et V (Verhogen).

L’opération P est paramètrée par le nombre de tickets demandés par l’appelant tandis que l’opération V est paramètrée par le nombre de tickets rendus par l'appelant.

Page 2: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 2

Utilisation des sémaphores Unix Fonctionnement d’un sémaphore général (FIFO)S Vo ; procedure P (S,n) si (S < n) alors

Mettre en attente le processus; Sinon Si (pas de processus en attente) alors

S S-n; Sinon

Mettre en attente le processus;finsi

fin P

Page 3: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 3

Utilisation des sémaphores Unix

procedure V (S,n) // stratégie FIFO S S+n;

si (S >= 1ère Dem. En attente) alors S S-Dem Débloquer le 1er processus;

finsi fin V

Page 4: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 4

Utilisation des sémaphores Unix

Fonctionnement d’un sém. d’exclusion mutuelle (FIFO)S 1 ; procedure P (S)

si (S < 1) alors // S=0 Mettre en attente le processus;

Sinon S S-1;

finsi fin P

Page 5: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 5

Utilisation des sémaphores Unixprocedure V (S) S S+1;

si (Il y a une Dem. En attente) alors S S-1 Débloquer le 1er processus;

finsi fin V Rem: Les procédures P(S) et V(S) sont

atomiques (indivisibles) et c'est à l'utilisateur de les utiliser correctement.

Page 6: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 6

Utilisation des sémaphores Unix Autre fonctionnement d’un sém.

d’exclusion mutuelle (FIFO)S 1 ; procedure P (S) S S-1

si (S < 0) alors // proc. en attente Mettre en attente le processus;finsi

fin P

Page 7: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 7

Utilisation des sémaphores Unixprocedure V (S) S S+1; si (S<=0) alors // proc. en attente

Débloquer le 1er processus;finsi

fin V Rem: La valeur absolue de S (<0) indique le

nombre de proc. en attente

Page 8: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 8

Utilisation des sémaphores UnixExemple d’utilisation Sem. d’exclusion (1ere var.)

P1 P2 P3 P1 P2 P3P(s) P(s) P(s) V(s) V(s) V(s)

S=1 0 0 0 11,0 11,0 1

Exemple d’utilisation Sem. d’exclusion (2eme var.)

P1 P2 P3 P1 P2 P3P(s) P(s) P(s) V(s) V(s) V(s)

S=1 0 -1 -2 -1 0 1

Page 9: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 9

Utilisation des sémaphores Unix

L’utilisation des sémaphores sous unix suppose défini un ensemble de fonctions, de types et de constantes, pour cela il faut ajouter les directives d’inclusion suivantes en tête des programmes qui utilisent les sémaphores :

#include <sys/types.h>#include <sys/ipc.h>#include <sys/sem.h>

Page 10: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 10

Utilisation des sémaphores Unix

La synchronisation à l’aide des sémaphores est faite grâce aux trois primitives: semget, semctl et semop

2. Ouverture d’un ensemble de sémaphores

La primitive semget permet d’ouvrir un ensemble de sémaphores

Page 11: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 11

Utilisation des sémaphores Unix

Lorsqu’un ensemble de sémaphores est ouvert, un numéro interne de type int, un nom externe de type key_t et un descripteur de type semid_ds lui sont associés (même persistance que pour les fichiers) .

Les sémaphores sont numérotés de 0 à N-1 ( N étant le nombre de sémaphores de l’ensemble).

Page 12: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 12

Utilisation des sémaphores Unix

La primitive semget permet d’ouvrir un ensemble de sémaphores

int semget (Nom_Ext, Nb_Sem, Indicateur)key_t Nom_Ext;int Nb_Sem, Indicateur; Le numéro interne retourné par cette

primitive sera utilisé lors des opérations ultérieures sur cet ensemble.

Page 13: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 13

Utilisation des sémaphores Unixa) La création La création est effectuée si le Nom_Ext a

la valeur particulière IPC_PRIVATE définie comme (key_t) 0

Si le bit IPC_CREAT de Indicateur est positionné à 1. Le bit IPC_EXCLUSIF indique le mode de partage selon qu’il est positionné ou non. Si le Nom_Ext est dejà utilisé il y a erreur si IPC_EXCLUSIF.

Page 14: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 14

Utilisation des sémaphores Unix

Le nombre de sémaphores dans l’ensemble et les droits d’accès aux sémaphores (9 bits de poids faible de Indicateur) sont précisés par l’appelant.

Exemple de valeur de Indicateur: Indicateur=IPC_CREAT|IPC_EXCLUSIF|0666

Page 15: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 15

Utilisation des sémaphores Unixb) L’ouverture (existe déjà) La primitive semget vérifie si le droit

d’accès spécifié par le créateur de l’ensemble des sémaphores autorise ou non l’ouverture par l’appelant.

Les bits IPC_EXCLUSIF et IPC_CREAT ne doivent pas être positionnés en même temps à l'ouverture pour le partage.

Page 16: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 16

Utilisation des sémaphores Unix

3.Contrôle des attributs de l’ensemble des sémaphores

La primitive semctl permet diverses opérations de contrôle sur un ensemble de sémaphores. Le changement des droits d'accès du propriétaire ou

du groupe. La consultation des valeurs des sémaphores. La modification (initialisation) de ces valeurs. La destruction de l’ensemble des sémaphores.

Page 17: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 17

Utilisation des sémaphores Unix La valeur retournée par la primitive semctl est

fonction de l’opération demandée.int semctl (Num_Int, Num_Sem, Controle,

Argument)int Num_Int, Num_Sem, Controle;union Type_Argument

{ int Valeur; struct semid_ds *Tampon; ushort Tab_Valeur[ ];} Argument ;

Page 18: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 18

Utilisation des sémaphores Unix

Le type de l’argument dépend de l'opération de contrôle à effectuer IPC_STAT copie le descriptif de l'ensemble

des sémaphores (NumSem=0) dans la zone définie par le champ Argument.Tampon.

GETVAL retourne la valeur du sémaphore spécifié comme résultat de la fonction.

GETALL place les valeurs des sémaphores de l’ensemble dans le tableau Argument.Tab_Valeur[ ]

Page 19: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 19

Utilisation des sémaphores Unix

IPC_SET modifie certains attributs de l’ensemble (propriétaire,groupe,droits, ...) à partir des valeurs contenues dans Argument . Tampon.

SETVAL affecte Argument.Valeur à la valeur du sémaphore spécifié

SETALL affecte Argument .Tab_Valeur[ ] aux valeurs des sémaphores de l’ensemble.

IPC_RMID détruit l’ensemble des sémaphores (Argument=0)

Page 20: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 20

Utilisation des sémaphores Unix

Rem: tout processus, en attente derrière un sémaphore de cet ensemble détruit, est réveillé et averti de cet événement voir remarque sur semop.

Page 21: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 21

Utilisation des sémaphores Unix

4. Blocage et réveil de processus La primitive semop permet à un

processus d’effectuer une suite d’opérations de synchronisation (équivalent à P et V) portant sur les sémaphores d’un ensemble donné. Cette suite d'opérations est décrite dans un tableau de structures de type sembuf.

Page 22: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 22

Utilisation des sémaphores Unix

struct sembuf{ short sem_num; short sem_op; short sem_flg; // SEM_UNDO = 0

}

Page 23: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 23

Utilisation des sémaphores Unix

int semop (Num_Int, Tab_Oper, Nb_Oper)int Num_Int, Nb_Oper;struct sembuf Tab_Oper[];

On peut accéder à un ou plusieurs sémaphores à la fois avec un seul ordre semop.

Page 24: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 24

Utilisation des sémaphores Unix

Le champ sem_op de chaque élément de Tab_Oper décrit l'opération à effectuer. Si sem_op < 0 alors |semop| tickets sont

demandés (opération P) . L’appelant est bloqué tant que ces tickets ne sont pas disponibles. Le blocage est évité si le bit IPC_NOWAIT du champ sem_flg est positionné (à 1). Dans ce cas, l’appelant poursuit son exécution et il est informé du non-aboutissement de sa demande ( retour de -1 et errno = EAGAIN (11)).

Page 25: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 25

Utilisation des sémaphores Unix

Si sem_op > 0 alors  semop  tickets supplémentaires sont mis dans le distributeur (opération V).

Si sem_op = 0 alors il y a blocage de l’appelant tant que le nombre de tickets n’est pas nul. Le bit IPC_NOWAIT joue le même rôle que précédemment.

Page 26: Utilisation des sémaphores Unix...TD //1 1 Utilisation des sémaphores Unix 1.Introduction Schématiquement, un sémaphore est un objet qui joue le rôle d’un distributeur de tickets

TD //1 26

Utilisation des sémaphores Unix

Remarque: Il se peut que pendant qu’un processus est bloqué derrière un sémaphore, l’ensemble auquel appartient ce sémaphore soit détruit (IPC_RMID). Dans ce cas, le processus reprend son exécution avec -1 comme valeur retournée par la primitive semop et errno = EIDRM(36).