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 aveclseek
) 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…)
- 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
signal
ousigaction
) - 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
etaio_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
etSIGUSR2
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
- 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_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é.