Your SlideShare is downloading. ×
Mecanismos IPC system V en Linux
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Mecanismos IPC system V en Linux

473

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
473
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Mecanismos IPC System V en LinuxDani Gutiérrez Porset profesor asociado de Ing. de Comunicaciones 2013/04 Eman ta zabal zazu
  • 2. Fuentes y Referencias● man● Wikipedia● Fuentes del kernel● http://www.advancedlinuxprogramming.com/ 2Mecanismos IPC System V en Linux 2
  • 3. Licencia, Agradecimientos y Herramientas● Agradecimientos a todas las personas que han participado en los proyectos GNU y Linux. Gracias a la compartición libre de ese conocimiento es que esta presentación existe.● Úsala, cópiala, difúndela, mejórala según los términos de la licencia: CC BY-SA 3.0 ES http://creativecommons.org/licenses/by-sa/3.0/es/● Esta presentación ha sido realizada íntegramente con KDE, LibreOffice y Chromium 3Mecanismos IPC System V en Linux 3
  • 4. Índice● Tipos de Mecanismos IPC. IPC System V vs POSIX● Usos● Aspectos comunes a los tres tipos● Memoria compartida● Semáforos● Colas de mensajes● Interfaces de consola y procfs 4Mecanismos IPC System V en Linux 4
  • 5. Tipos de mecanismos IPC● System V (desde la versión ● Otros mecanismos (entre una SVR1, 1983) y POSIX: o más máquinas): – Memoria compartida – Señales – Semáforos – Sockets – Colas de mensajes – Pipes y Named pipes – Memoria mapeada a fichero – (Ficheros) – Otros: RPC, RMI, Corba, D-Bus, Web services,... 5Mecanismos IPC System V en Linux 5
  • 6. Usos● Memoria compartida: intercambio rápido de datos entre procesos, sin sincronización.● Semáforos: elementos para sincronizar procesos, que se basan en aumentar o decrementar su valor de forma atómica (no puede haber más de un proceso a la vez haciendo estas operaciones).● Colas de mensajes: utilidad para intercambio de mensajes entre procesos de una máquina. También empleadas para sincronizar procesos. 6Mecanismos IPC System V en Linux 6
  • 7. IPC System V vs POSIX● Diferencias: – Interfaces C distintos pero semejantes. No confundir las funciones System V con las de POSIX. – System V más ampliamente implementada. – POSIX más moderna (y mejor).● Más información en: – man 7 svipc – http://www.linuxdevcenter.com/pub/a/linux/2007/05/24/semaphores-in-linux.html?page=4 7Mecanismos IPC System V en Linux 7
  • 8. Aspectos comunes a los tres tipos: Ciclo de uso 1 Creación Acceso shm sem msg Otras 2 Conexión / Increm. / Envío / operaciones Desconexión Decrem. Recepción 3 Borrado 8Mecanismos IPC System V en Linux 8
  • 9. Aspectos comunes a los tres tipos: Creación de un recurso● Se usa una función de la forma XXXget (shmget, semget, msgget) con el parámetro IPC_CREAT.● En la misma, hay dos posibilidades para la creación de un recurso IPC: – Usar una clave que se crea con ftok (3) a partir del nombre de un fichero accesible y de un número de 8 bits. Puede haber colisiones. – No usar una clave sino un parámetro IPC_PRIVATE. Internamente la clave es 0 pero a este valor le corresponderán uno o más recursos.● Otros comentarios sobre la función XXXget: – Establece los permisos de lectura y escritura (los de ejecución no se usan) para el usuario que la ha abierto, el grupo y otros. – También se emplea para obtener información de un recurso existente.● Es importante borrar un recurso tras su uso. 9Mecanismos IPC System V en Linux 9
  • 10. Aspectos comunes a los tres tipos: Operaciones de control● Se emplea una función con nombre de la forma XXXctl (shmctl, semctl, msgctl).● Las operaciones comunes a los tres tipos son: – IPC_STAT: obtener información del recurso. – IPC_SET: establecer información de usuario, grupo y permisos asociados. – IPC_RMID: eliminar el recurso. Es inmediato para colas de mensajes y semáforos. Para memoria compartida, se borra cuando el último proceso se desconecte de la zona a borrar. – IPC_INFO: límites del sistema para el recurso concreto. 10Mecanismos IPC System V en Linux 10
  • 11. Aspectos comunes a los tres tipos: Capacidades● CAP_IPC_OWNER: no considerar las comprobaciones de permisos.● CAP_SYS_ADMIN: realizar operaciones IPC_SET y IPC_RMID sobre objetos IPC. 11Mecanismos IPC System V en Linux 11
  • 12. Aspectos comunes a los tres tipos: Bloqueos● Se gestionan esperas de procesos mediante llamadas bloqueantes en los casos de semáforos y de colas de mensajes. No para memoria compartida.● Dichas llamadas también pueden realizarse de modo que no haya espera (IPC_NOWAIT). 12Mecanismos IPC System V en Linux 12
  • 13. Aspectos comunes a los tres tipos: Permisos● Se controlan los permisos de lectura y escritura (para el usuario, grupo, otros) en las distintas operaciones.● Dichos permisos se especifican en la creación, pero también pueden modificarse después.● Hay una estructura de C llamada ipc_perm (ver fichero ipc.h) que gestiona: – La clave para crear el recurso. – Los identificadores del usuario y el grupo propietario y creador – Los permisos de lectura y escritura para usuario, grupo y otros 13Mecanismos IPC System V en Linux 13
  • 14. Aspectos comunes a los tres tipos: Límites del sistema● Existen límites del sistema para los tres tipos de recursos.● Son accesibles (y en algún caso modificables) mediante las distintas interfaces: – C: shmctl, msgctl, semctl – Terminal: ipcs – procfs 14Mecanismos IPC System V en Linux 14
  • 15. Aspectos comunes a los tres tipos: Ficheros include● En Linux sólo se requiere el correspondiente al recurso a emplear: <sys/shm.h>, <sys/msg.h>, <sys/sem.h>● Para mejorar la portabilidad incluir también <sys/types.h> y <sys/ipc.h> 15Mecanismos IPC System V en Linux 15
  • 16. Memoria compartida: Conceptos● Es una zona de la memoria a la que varios procesos pueden conectarse, pudiendo acceder por tanto a la misma información a nivel de lectura y/o escritura.● De los tres tipos de mecanismos IPC es el más usado.● Es un mecanismo rápido para intercambio de datos.● Puede requerir de otro mecanismo para sincronizar (semáforos o colas de mensajes).● Dentro de cada zona compartida cada proceso no va ver la misma dirección absoluta que ven los demás, por lo que hay que emplear punteros relativos.● Tras un fork el hijo hereda las zonas en uso, en un exec no, y en un exit se desconectan. 16Mecanismos IPC System V en Linux 16
  • 17. Memoria compartida: Datos en C● Cada zona de memoria compartida tiene: – Un número identificador. – Una estructura de C shmid_ds que contiene: ● Tamaño en bytes. ● Número de processos actualmente usando esa zona de memoria. ● PIDs del creador y del último en hacer shmat o shmdt. ● Una estructura ipc_perm. ● Tiempos de la última conexión y desconexión y la última modificación sobre algún miembro de esta estructura. 17Mecanismos IPC System V en Linux 17
  • 18. Memoria compartida: Funciones C: shmget (2)int shmget(key_t key, size_t size, int shmflg);● Doble uso: ● Reserva una zona de memoria de un tamaño concreto, inicializando el contenido a 0 y la estructura shmid_ds (permisos,...). ● Obtiene el identificador de una zona existente asociada con una clave.● A partir de una clave (para crearlo sin necesidad de clave, usar IPC_PRIVATE).● Ej: mem_id = shmget(clave, tam, IPC_CREAT|0666); 18Mecanismos IPC System V en Linux 18
  • 19. Memoria compartida: Funciones C: shmctl (2)int shmctl(int shmid, int cmd, struct shmid_ds *buf);● Realiza operaciones de control: ● Leer o escribir el valor de shmid_ds. ● Bloquear y desbloquear una zona para que no se haga swap de la misma. ● Marcar la zona para ser destruida (lo será cuando se desconecte de la misma el último proceso). – Otra operación es obtener información del sistema sobre memoria compartida.● Ej: shmctl(mem_id, IPC_RMID, NULL); 19Mecanismos IPC System V en Linux 19
  • 20. Memoria compartida: Funciones C: shmat (2), shmdt (2)void *shmat(int shmid, const void *shmaddr, int shmflg);int shmdt(const void *shmaddr);● Se conecta o desconecta una zona de memoria a un proceso. En el segundo caso, el proceso no puede seguir accediendo a esa zona.● Ejs: ptr = shmat(mem_id, NULL, SHM_RDONLY); resultado = shmdt(mem_id); 20Mecanismos IPC System V en Linux 20
  • 21. Memoria compartida: Otras funciones C de POSIX● man 7 shm_overview● shm_open (3), close (3)● mmap (3), munmap (3), mprotect (3)● shm_unlink (3)● fstat (3), fchown (3), fchmod (3), ftruncate (3) 21Mecanismos IPC System V en Linux 21
  • 22. Memoria compartida: Límites del sistema● Máximo nº de segmentos: /proc/sys/kernel/shmmni● Máximo nº de páginas: /proc/sys/kernel/shmall● Máximo tamaño de la memoria compartida● Tamaño máximo de segmento: /proc/sys/kernel/shmmax 22Mecanismos IPC System V en Linux 22
  • 23. Semáforos: Conceptos● Posibilita sincronizar el acceso a un recurso desde varios procesos o threads.● Tiene un valor numérico (entero) que se puede incrementar o decrementar, pero nunca puede ser menor que cero.● Los semáforos en System V (y en POSIX) se agrupan en conjuntos o sets. 23Mecanismos IPC System V en Linux 23
  • 24. Semáforos: Bloqueos● Se bloquea si en semop: – Se espera a 0. Se desbloquea si llega a cero. – Se intenta decrementar y llega a menos de cero. Se desbloquea si es posible decrementarlo en la cantidad indicada. – También en ambos casos se desbloquea: ● Si el semáforo se borra del sistema. ● Si el proceso recibe una señal. ● Si hay un timeout habiendo usado semtimedop 24Mecanismos IPC System V en Linux 24
  • 25. Semáforos: Datos en C● Cada grupo de semáforos tiene: – Un número identificador. – Una estructura de C semid_ds que contiene: ● El nº de semáforos en el grupo (los semáforos se numeran con 0, 1,...). ● Una estructura ipc_perm. ● Tiempos de la última operación y la última modificación sobre algún miembro de est a estructura. 25Mecanismos IPC System V en Linux 25
  • 26. Semáforos: Datos en C● Cada semáforo tiene una estructura C sem que contiene: – El valor del semáforo. – El nº de procesos esperando para que su valor sea 0. – El nº de procesos esperando para que su valor se incremente. – El PID que hizo la última operación. 26Mecanismos IPC System V en Linux 26
  • 27. Semáforos: Funciones C: semget (2)int semget(key_t key, int nsems, int shmflg);● Doble uso: – Crea un nuevo set de N semáforos, inicializando la estructura semid_ds (permisos,...). – Obtiene el identificador de un set existente asociado con una clave.● A partir de una clave (para crearlo sin necesidad de clave, usar IPC_PRIVATE).● Ej: mq_id = semget(clave, 3, IPC_CREAT|0666); 27Mecanismos IPC System V en Linux 27
  • 28. Semáforos: Funciones C: semctl (2)int semctl(int semid, int semnum, int cmd, ...);● Realiza operaciones de control: – Sobre uno o todos los semáforos de un set: leer o escribir valores. – Sobre un solo semáforo: leer el último proceso que ha operado sobre el mismo, el nº de procesos que están a la espera de que su valor sea 0 o de que se incremente. – Sobre un set: Leer o escribir el valor de semid_ds para un set, y borrar un set.● Otra operación es obtener información del sistema sobre semáforos.● Ej: semctl(sem_id, 2, SETVAL, valor); 28Mecanismos IPC System V en Linux 28
  • 29. Semáforos: Funciones C: semop (2), semtimedop (2)int semop(int semid, struct sembuf *sops, unsigned nsops);int semtimedop(int semid, struct sembuf *sops, unsigned nsops, struct timespec *timeout);● Realiza de forma atómica una operación sobre uno más semáforos (usando la estructura sembuf) de un set. – Las operaciones pueden ser: ● Añadir un valor a un semáforo ● Restar un valor a un semáforo. Si el resultado es menor que cero, el proceso queda en espera a que sea al menos cero (vuelve también si se borra, o hay una señal o un timeout) ● Esperar a que el semáforo valga cero (idem espera y vuelta) – Para cada operación se puede indicar si se espera en la llamada, y si al finalizar el proceso se restaura el valor anterior del semáforo.● Ej. resultado = semop(sem_id, buffer, 4); 29Mecanismos IPC System V en Linux 29
  • 30. Semáforos: Otras funciones C de POSIX● man 7 sem_overview● sem_open (3), sem_init (3)● sem_wait (3), sem_trywait (3), sem_timedwait (3)● sem_post (3)● sem_getvalue (3)● sem_close (3), sem_unlink (3), sem_destroy (3) 30Mecanismos IPC System V en Linux 30
  • 31. Semáforos: Límites del sistema● Máximo nº de semáforos: /proc/sys/kernel/sem● Máximo nº de sets de semáforos: /proc/sys/kernel/sem● Máximo nº de semáforos por set: /proc/sys/kernel/sem● Valor máximo de semáforo● Máximo nº de operaciones en cada llamada a semop: /proc/sys/kernel/sem 31Mecanismos IPC System V en Linux 31
  • 32. Colas de mensajes: Conceptos● Es un mecanismo para intercambiar mensajes de un proceso a otro, ambos en la misma máquina.● Son colas cola FIFO.● Además, en lectura ofrece prioridades según el tipo de cada mensaje, que es un valor > 0. El tipo con prioridad más alta es 1, luego 2,...● Cada cola tiene un tamaño máximo (en bytes, no en mensajes).● Las funciones de lectura o escritura operan sólo con un único mensaje en cada llamada. 32Mecanismos IPC System V en Linux 32
  • 33. Colas de mensajes: Bloqueos● Cuando se envía un mensaje, hay bloqueo si no hay sitio en la cola. Se desbloquea: – Cuando haya espacio. – Si el proceso recibe una señal.● Cuando se lee un mensaje, hay bloqueo si no lo hay del tipo solicitado. Se desbloquea: – Si llega el del tipo solicitado. – Si la cola se borra del sistema. – Si el proceso recibe una señal. 33Mecanismos IPC System V en Linux 33
  • 34. Colas de mensajes: Datos en C● Cada cola tiene: – Un número identificador. – Una estructura en C msgid_ds que contiene: ● El nº actual de mensajes en la cola. ● El tamaño máximo de la cola en bytes. ● PIDs del último proceso que ha enviado un mensaje, y que ha recibido un mensaje. ● Una estructura ipc_perm. ● Tiempos de la última operación y la última modificación sobre algún miembro de esta estructura. 34Mecanismos IPC System V en Linux 34
  • 35. Colas de mensajes: Datos en C● Cada mensaje tiene una estructura en C msgbuf que contiene: – El tipo o prioridad del mensaje (numero > 0). – El tamaño que ocupa en bytes. 35Mecanismos IPC System V en Linux 35
  • 36. Colas de mensajes: Funciones C: msgget (2)int msgget(key_t key, int shmflg);● Doble uso: – Crea una cola, inicializando la estructura msqid_ds (permisos,...). – Obtiene el identificador de una cola existente asociada con una clave.● A partir de una clave (para crearlo sin necesidad de clave, usar IPC_PRIVATE).● Ej: mq_id = msgget(clave, IPC_CREAT|0666); 36Mecanismos IPC System V en Linux 36
  • 37. Colas de mensajes: Funciones C: msgctl (2)int msgctl(int msqid, int cmd, struct msqid_ds *buf);● Realiza operaciones de control: ● Leer o escribir el valor de msqid_ds. ● Borrar una cola, avisando a los procesos en espera para leer o escribir. – Otra operación es obtener información del sistema sobre colas.● Ej: msgctl(mq_id, IPC_RMID, NULL); 37Mecanismos IPC System V en Linux 37
  • 38. Colas de mensajes: Funciones C: msgsnd (2), msgrcv (2)● int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);● ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);● Envía o recibe un sólo mensaje, para el que se indica el tamaño (se permiten tamaños 0). Para el caso de recepción hay 3 posibilidades: – Se lee cualquier mensaje. – Se lee un mensaje con un tipo igual a o distinto a un valor concreto. – Se lee el mensaje de menor valor para el tipo, que sea igual o menor que un valor dado.● Ej. resultado = msgsnd(mq_id, buffer, tam, IPC_NOWAIT); resultado = msgrcv(mq_id, buffer, tam, -3, 0); /* prioridades 1, 2, 3 */ 38Mecanismos IPC System V en Linux 38
  • 39. Colas de mensajes: Otras funciones C de POSIX● man 7 mq_overview● mq_open(3), mq_open(2)● mq_close(3), close(2)● mq_getattr(3), mq_getsetattr(2)● mq_setattr(3), mq_getsetattr(2)● mq_send(3), mq_timedsend(2)● mq_receive(3), mq_timedreceive(2)● mq_timedsend(3), mq_timedsend(2)● mq_timedreceive(3), mq_timedreceive(2)● mq_unlink(3), mq_unlink(2)● mq_notify(3), mq_notify(2) 39Mecanismos IPC System V en Linux 39
  • 40. Colas de mensajes: Límites del sistema● Máximo nº de colas● Tamaño máximo de mensaje: /proc/sys/kernel/msgmax● Tamaño máximo de cola 40Mecanismos IPC System V en Linux 40
  • 41. Interface de consola● ipcs (1): proporciona información sobre un recurso IPC, sobre todos los usados, o acerca de límites del sistema.● ipcmk (1): crea recursos y les asigna permisos.● ipcrm (1): borra uno o más recursos (para una zona de memoria, no se borra hasta que lo hace el último proceso que la usaba). Se pueden especificar por identificadores de cada recurso o por claves de ftok.Nota: estos comandos no funcionan con mecanismos IPC dePOSIX. Para éstos emplear otros ej. /dev/shm/* 41Mecanismos IPC System V en Linux 41
  • 42. Interface procfs del kernel● Algunas entradas son de sólo lectura y otras permiten modificar límites.● Ver distintos apartados de “Límites del sistema”● Otros ficheros: – /proc/sysipc/mem – /proc/sysipc/msg – /proc/sysipc/sem● Se pueden configurar parámetros mediante: – /etc/sysctl.conf – /etc/sysctl.d/*● Más información en man 5 proc 42Mecanismos IPC System V en Linux 42

×