04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX...

24
12/11/14 1 1 Agenda Inter Process Communication sous UNIX/LINUX Introduction On est capable de créer n processus Comment échanger des données entre processus ? Comment le synchroniser ? 2

Transcript of 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX...

Page 1: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

1

1

Agenda

n  Inter Process Communication sous UNIX/LINUX

Introduction

n  On est capable de créer n processus n  Comment échanger des données entre

processus ? n  Comment le synchroniser ?

2

Page 2: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

2

3

Introduction

wait

père fils

fork

Synchronisation

4

Introduction

wait

père fils

fork

père

fork

?

fils

Page 3: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

3

Signals

n  Software Interrupt n  One signal is one event send to a process

n  Error condition, illegal instruction, … n  Used for communication between processes n  signal.h defines signals name

SIGABORT Process abort SIGALARM Alarm clock SIGFPE FP exception SIGHUP Hangup SIGILL Illegal instruction SIGINT Terminal interrupt SIGKILL Kill (non maskerable) SIGPIPE Write on a pipe with no reader SIGQUIT Terminal quit SIGSEGV Invalid memory segment access SIGTERM Termination SIGUSR1 User-defined signal 1 SIGUSR2 User-defined signal 2 SIGCHLD Child process stopped or exited

Page 4: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

4

kill

n  Send (from the shell) one signal to a process: kill -SIGINT 123 n  If the process has not been programmed

to manage the signal, then the process will be terminated

n  Specify the signal handler

signal ( )

#include <signal.h> void (*signal (int sig, void (*func)(int)))(int);

n  signal allows to set the signal handler n  2 parameters:

n  sig: signal to capture n  func: the function to execute when the signal is

received, the function has only one parameter int

Page 5: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

5

signal ( )

n  Two special signals n  SIG_IGN: ignore the signal n  SIG_DFL: use default handler

Exemple

n  ./example/signal/ex1.c

Page 6: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

6

kill ( )

#include <sys/types.h> #include <signal.h>

int kill (pid_t pid, int sig);

n  Send a signal to one process n  The two processes must have the same

UID

alarm ( )

#include <unistd.h> unsigned int alarm(unsigned int seconds);

n  Send SIGALARM after seconds seconds

Page 7: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

7

Exemple

n  ./example/signal/ex2.c

PIPE (Tube)

n  A PIPE corresponds to a data flow between two processes

n  Each process uses one part of the pipe

P1 P2

Page 8: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

8

pipe ( ) #include <unistd.h> int pipe (int fd[2]);

n  fd contains the two file descriptor n  fd[1] write to pipe n  fd[0] read from pipe

n  returns: n  0 OK n  -1 Error

Fonctions read () write ()

n  Réception des données n  int read(int sockfd, char *buf, int count);

n  read lit jusqu'à count octets depuis le descripteur de socket dans le buffer pointé par buf.

n  read renvoie -1 s'il échoue, sinon read renvoie le nombre d'octets lus

16

Page 9: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

9

Fonctions read () write ()

n  Transmission des données n  int write(int sockfd, char *buf, int count);

n  write écrit jusqu'à count octets dans le fichier associé au descripteur sockfd depuis le buffer pointé par buf

n  write renvoie le nombre d'octets écrits (0 signifiant aucune écriture), ou -1 s'il échoue.

17

Close ()

n  int close(int id);

n  close ferme le descripteur id, n  close renvoie 0 s'il réussit, ou -1 en cas

d'échec

18

Page 10: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

10

pipe & fork

n  Childs processes have the same file descriptors of the father

n  One pipe (open) allows the communication between father and child process

PIPE

n  A PIPE corresponds to a data flow between two processes

n  Each process uses one part of the pipe

P1 P2

Page 11: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

11

PIPE

n  A PIPE corresponds to a data flow between two processes

n  Each process uses one part of the pipe

P1 P2

PIPE

n  A PIPE corresponds to a data flow between two processes

n  Each process uses one part of the pipe

P1 P2

P1 P2

Page 12: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

12

Exemple

n  ./example/pipe/ex1.c

23

24

Synchronisation avec Pipe

père

fork

read

write

fils

Page 13: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

13

Exercice

n  Exercice: n  implémenter en langage C le

prog correspondant au schéma de synchronisation

25

père

fork

read

write

fils

Exercice

n  Solution n  ./example/pipe/ex2.c

26

père

fork

read

write

fils

Page 14: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

14

Mémoire partagée

27

COD

E D

ATA

P1

Mémoire partagée

28

COD

E D

ATA

P1 fork()

Page 15: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

15

Mémoire partagée

29

COD

E D

ATA

P1 fork()

COD

E D

ATA

P2

Mémoire partagée

30

P1 P2

Processes Queue

RAM

Page 16: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

16

Mémoire partagée

n  La mémoire partagée est la forme de IPC la plus rapide n  tous les processus partagent la même

mémoire. n  ne nécessite pas d'appel système.

31

Mémoire partagée

32

COD

E D

ATA

P1

COD

E D

ATA

P2

SHM

Page 17: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

17

Mémoire partagée

33

P1 P2

Processes Queue

RAM

Mémoire partagée

n  Utilisation n  Allocation de la mémoire

n  shmget!

n  Attachement de la mémoire n  Permet d’utiliser la mémoire partagée n  shmat!

n  De-allocation de la mémoire n  shmctl!

34

Page 18: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

18

Debug

n  Command ipcs –m

IPC status from <running system> as of Thu Oct 11 10:39:13 CEST 2012!T ID KEY MODE OWNER GROUP!Shared Memory:!m 65536 0x0000162e --rw-rw-rw- albertobosio staff!

35

Exemple

36

n  Program n  ./example/shared_mem/exemple1.c

Page 19: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

19

Mémoire partagée

37

Return

int shmget(key_t key, int size,int shmflg); Summary

2 Manual Section

<sys/ipc.h> <sys/shm.h>

Include File(s)

Sets errno Failure Success

Yes -1 Shared memory identifier.

Mémoire partagée

n  int shmget(key_t key, int size,int shmflg); n  Son premier paramètre est une clé entière qui

indique le segment à créer. n  Des processus sans lien peuvent accéder au même

segment partagé en spécifiant la même valeur de clé, ce qui provoquerait un conflit.

n  Utiliser la constante spéciale IPC_PRIVATE comme valeur de clé garantit qu'un nouveau segment mémoire est créé.

38

Page 20: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

20

Mémoire partagée

n  int shmget(key_t key, int size,int shmflg); n  Le second paramètre indique le nombre d'octets

du segment.

39

Mémoire partagée n  int shmget(key_t key, int size,int shmflg);

n  Le troisième paramètre est un ou binaire entre des indicateurs décrivant les options demandées à shmget.

n  IPC_CREAT : Demande la création d'un nouveau segment.

n  IPC_EXCL : utilisé avec IPC_CREAT n  Provoque l'échec de shmget si la clé de segment

spécifiée existe déjà. n  Si cette option n'est pas précisée et que la clé d'un

segment existant est utilisé, shmget renvoie le segment existant au lieu d'en créer un nouveau.

40

Page 21: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

21

Mémoire partagée n  Indicateurs de mode : Cette valeur spécifie les permissions du

propriétaire, du groupe et des autres utilisateurs pour contrôler l'accès au segment

n  Par exemple, S_IRUSR et S_IWUSR spécifient des permissions de lecture et écriture pour le propriétaire du segment de mémoire partagée et S_IROTH et S_IWOTH spécifient des permissions de lecture et écriture pour les autres utilisateurs.

shmget (IPC_PRIVATE, !shared_segment_size, !IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR);!

41

Mémoire partagée

42

Return

int shmctl(int shmid, int cmd, struct shmid_ds *buf); Summary

2 Manual Section

<sys/ipc.h> <sys/shm.h>

Include File(s)

Sets errno Failure Success

Yes -1 0

Page 22: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

22

Mémoire partagée

n  Le premier paramètre est l'identifiant d'un segment de mémoire partagée.

n  Pour obtenir des informations sur un segment de mémoire partagée, passez IPC_STAT comme second argument et un pointeur vers une struct shmid_ds.

n  Pour supprimer un segment, passez IPC_RMID comme second argument et NULL comme troisième argument. Le segment est supprimé lorsque le dernier processus qui l'a attaché le détache.

43

Mémoire partagée

44

Return

void *shmat(int shmid, const void *shmaddr, int shmflg); Summary

2 Manual Section

<sys/ipc.h> <sys/shm.h>

Include File(s)

Sets errno Failure Success

Yes -1 Reference to the data segment

Page 23: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

23

Mémoire partagée

n  Première argument est l'identifiant de mémoire partagée SHMID renvoyé par shmget.

n  Le second argument est un pointeur qui indique l’adresse mémoire que vous voulez associer à la mémoire partagée n  NULL: Linux sélectionnera une adresse disponible.

45

Mémoire partagée

n  Le troisième argument est un indicateur, qui peut prendre une des valeurs suivantes: n  SHM_RDONLY indique que le segment sera

uniquement lu, pas écrit. n  0 lecture et ecriture

n  Si l'appel se déroule correctement, il renvoie l'adresse du segment partagé attaché. n  Les processus fils créés par des appels à fork

héritent des segments partagés attachés; il peuvent les détacher s'ils le souhaitent.

46

Page 24: 04 - ipcbosio/HMEE209/CM_2015_2016/04 - ipc.pdf · Inter Process Communication sous UNIX/LINUX Introduction ! On est capable de créer n processus ! Comment échanger des données

12/11/14

24

Exemple

n  /example/shared_mem n  shm_server.c n  shm_client.c

n  /example/shared_mem n  shm_server_fork_client.c

47