Communication inter-processus

Introduction

Motivation

Malgré la généralité des mécanismes d”entrée-sortie, d’autres mécanismes peuvent être nécessaire pour faire communiquer des processus.

Communication via la mémoire

Mémoire partagée

  • Rappel : le système assure que par défaut, chaque processus travaille dans une zone mémoire qui lui est propre (cf. séances sur l’allocation de mémoire)
  • L’appel système shmget permet d’obtenir un pointeur vers une zone mémoire partageable entre plusieurs processus (Linux)
  • L’appel système shm_open permet d’obtenir un descripteur de fichier (en accès aléatoire avec lseek) vers une zone mémoire partageable (POSIX)

Combinaison avec mmap

  • Les descripteurs de fichiers retournés par shm_open peuvent ensuite être passés à mmap pour accéder à cette zone mémoire directement.
  • Peut sembler être un « détour » inutile et compliqués, mais ces deux appels systèmes peuvent aussi être utilisés seuls, donc ils ont chacun leur raison d’être.

Signaux

Définition : Signal

  • Un signal est un événement logiciel, produit par le système à destination d’un processus
    • soit à la demande d’un autre processus (appel système kill)
    • soit en réponse à un événement interne au système (interruption matérielle, erreur logicielle, etc…)

Utilisation

  • Il existe différents types de signaux (numéros)
  • Un programme peut associer une procédure à un signal (appels systèmes signal ou sigaction)
  • L’action associée par défaut à la majorité des signaux est l”arrêt du processus
    • différent pour quelques signaux: ignoré, bloque ou débloque le processus…

Signal et programmation événementielle

  • Les signaux sont un mécanisme pour faire de la programmation événementielle

    NB : ce n’est pas le seul…

  • Ils sont notamment une manière d’utiliser les entrées / sorties asynchrone : on peut demander à aio_read et aio_write d’émettre un signal lorsque l’opération est effectivement terminée.

Signaux entre processus

Les signaux peuvent également être utilisés pour communiquer entre plusieurs processus de manière asynchrone

  • SIGUSR1 et SIGUSR2 réservés aux applications (i.e. pas de sémantique préfédinie, jamais envoyés par le système lui même)

Ils peuvent notamment servir à la synchronisation

  • un processus attend (appel système sleep) qu’un autre processus lui envoie un signal pour poursuivre son exécution

Sémaphore

Sémaphore

Ressource servant à la synchronisation

Analogie à une pile de jetons

  • contient initialement un certain nombre de jetons
  • les processus peuvent poser (sem_post) ou prendre (sem_wait) un jeton
  • comme son nom, l’appel sem_wait peut être bloquant: lorsqu’un processus tente de prendre un jeton alors que la pile est vide, il se bloque en attendant qu’un jeton soit posé.