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
shmgetpermet d’obtenir un pointeur vers une zone mémoire partageable entre plusieurs processus (Linux) - L’appel système
shm_openpermet d’obtenir un descripteur de fichier (en accès aléatoire aveclseek) vers une zone mémoire partageable (POSIX)
Combinaison avec mmap¶
- Les descripteurs de fichiers retournés par
shm_openpeuvent ensuite être passés àmmappour 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…)
- soit à la demande d’un autre processus (appel système
Utilisation¶
- Il existe différents types de signaux (numéros)
- Un programme peut associer une procédure à un signal (appels systèmes
signalousigaction) - 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_readetaio_writed’é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
SIGUSR1etSIGUSR2ré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
- notion inventée par Edsger W. Dijkstra
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_waitpeut ê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é.