Next: La primitive de manipulation Up: Inter Processus Communications Previous: La primitive de contrôle

Les sémaphores

Les sémaphores permettent de réaliser l'accès en exclusion mutuelle à une ressource (par exemple une zone de mémoire partagée).

Un peu de théorie :
Les sémaphores garantissent l'accès d'un nombre borné de processus à une donnée. Ils permettent de placer en exclusion mutuelle une ressource (par exemple la mémoire).

Dijkstra a écrit de nombreux algorithmes d'exclusion mutuelle, et a défini les sémaphores pour faciliter l'écriture de ces algorithmes. Les sémaphores sont des variables partagées, dont l'accès ne se fait que grâce aux deux opérations atomiques P et V.

On appelle section critique la partie de programme qui doit être réalisée en exclusion.

P(S)

V(S)

Ces opérations sont atomiques : totalement ininterruptibles, ont toujours lieu séquentiellement même sur une machine multi-processeurs.
Le fichier <sys/sem.h> :

Pour chaque sémaphore :

  struct __sem {
      unsigned short int semval;    /* adresse */
      unsigned short int sempid;    /* pid de dernière opération */
      unsigned short int semncnt;   /* # de Proc. en attente de V */
      unsigned short int semzcnt;   /* # en attente de S = 0 */
  };
Pour chaque dipc de sémaphore:
 struct semid_ds {
     struct ipc_perm    sem_perm;   /* droits  */
     struct __sem       *sem_base;  /* premier élément de l'ensemble*/
     time_t             sem_otime;  /* last semop time */
     time_t             sem_ctime;  /* last change time */
     unsigned short int sem_nsems;  /* taille de l'ensemble */
 };




Dominique REVUZ
Mon Feb 2 12:10:31 MET 1998
Une Bug Un mail Merci