Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización...
Transcript of Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización...
![Page 1: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/1.jpg)
Tema 3Comunicación y sincronización entre procesos
F. García-Carballeira, Mª. Soledad Escolar,
Luis Miguel Sánchez, Fco. Javier García
Sistemas Distribuidos
Grado en Ingeniería Informática
Universidad Carlos III de Madrid
![Page 2: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/2.jpg)
Contenido
� Repaso de los conceptos de proceso y threads
� Concurrencia
� Mecanismos de comunicación
� Mecanismos de sincronización
� Llamadas al sistema de POSIX
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
2
� Llamadas al sistema de POSIX � para comunicación y sincronización de procesos
� Paso de mensajes
![Page 3: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/3.jpg)
Bibliografía
Sistemas Operativos
2ª edición.
Por Jesús Carretero,
Prácticas de Sistemas Operativos: de la base al diseño
� Bibliografía básica:
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
3
Por Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez
Mc. Graw-Hill
Por Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez
Mc. Graw-Hill
![Page 4: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/4.jpg)
Sistema Distribuido
� Sistema formado por recursos de computación (hardware y software) físicamente distribuidos e interconectados a través de una red, que comunican mediante paso de mensajes y cooperan para realizar una determinada tarea
La espina dorsal de los sistemas distribuidos son
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
4
Red
sistemas distribuidos son los mecanismos de comunicación entre procesos (IPC)
![Page 5: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/5.jpg)
Conceptos previos
� Un programa es un conjunto de instrucciones
� Un proceso es un programa en ejecución
� Una red de computadores es un conjunto de computadores conectados por una red de interconexión
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
5
� Un sistema distribuido es un conjunto de computadores (sin memoria ni reloj común) conectados por una red
� Aplicaciones distribuidas: conjunto de procesos que ejecutan en uno o más computadores que colaboran y comunican intercambiando mensajes
� Un protocolo es un conjunto de reglas e instrucciones que gobiernan la comunicación en un sistema distribuido, es decir, el intercambio y formato de los mensajes
![Page 6: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/6.jpg)
� Gestión de los recursos del computador� Ejecución de servicios para los programas en ejecución� Ejecución de los mandatos de los usuarios
Sistema Operativo
UsuariosAPI
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
6
Núcleo
Servicios
Procesos de usuario ShellSistemaoperativo
API
Hardware
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 7: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/7.jpg)
Componentes del Sistemas Operativo
Programas de usuario
Usuarios
Shell 1 Shell 2
Objetivo Tema 2
Objetivo Tema 2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
7
Núcleo
Interfaz de llamadas al SOSistemaoperativo
Hardware
Gestión deprocesos
Gestión dememoria
Gestión de la E/S
Comunicac.y
sincroniz.
Seguridad y
protección
Gestión de archivos y directorios
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 8: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/8.jpg)
� Definición
� Programa en ejecución
� Unidad de procesamiento gestionada por el SO
� Para que un programa pueda ser ejecutado ha de residir en memoria principal
� Árbol de procesos
Proceso
Proc. Inic.
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
8
� Árbol de procesos� Relación de jerarquía
Inicio Inicio
ShellShell
Editor
Dem. Impr. Dem. Com..
Proceso A
Proceso B Proceso D Proceso C
Proceso E Proceso F
InicioInicio
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 9: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/9.jpg)
Información de los procesos
� El sistema operativo mantiene un conjunto de estructuras de información que permiten identificar y gestionar los procesos
Mapa de memoria del Proceso A
Mapa de memoria
Registrosespeciales
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
9
Mapa deMemoria
Tablas SOPC
SP
Estado
Mapa de memoria del Proceso B
Mapa de memoria del Proceso C
Registrosgenerales
Tablas del sistema operativo
Tabla de procesos
- Tabla de memoria- Tabla de E/S- Tabla de ficheros
BCP Proceso BBCP Proceso A BCP Proceso C- - Identificación- Control
Estado (registros)- - Identificación- Control
Estado (registros) - - Identificación- Control
Estado (registros)
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 10: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/10.jpg)
Proceso monothread o multithread
� Un proceso ligero, hilo o thread es un programa en ejecución (flujo de ejecución) que comparte la imagen de memoria (y otras informaciones) con otros procesos ligeros
� Dependiendo del número de procesos que puedan ejecutar simultáneamente, un SO es monotarea o multitarea
� Un proceso ligero puede contener un solo flujo de ejecución (monothread) o más (multithread)
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
10
o más (multithread)
� Por ejemplo, en el lenguaje C el hilo de ejecución primario se corresponde con la función principal main
Proceso
Procesos ligeros@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 11: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/11.jpg)
Información propia/compartida
� Por thread (información propia)� Contador de programa, Registros
� Pila� Estado (ejecutando, listo o bloqueado)
� Por proceso (información compartida)
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
11
Por proceso (información compartida)� Espacio de memoria� Variables globales
� Ficheros abiertos
� Procesos hijos� Temporizadores
� Señales y semáforos
� Contabilidad
![Page 12: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/12.jpg)
Estructura de un proceso con threads
Recursos (ficheros, ...)
Datos
CódigoProceso
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
12
Hilo 1Registros
Pila
Entorno del proceso
Hilo nRegistros
Pila
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 13: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/13.jpg)
Mapa de memoria de un proceso con threads
Mapa de memoriaCódigo
Fichero ejecutable
Fichero
Datos con valor inicial
Datos sin valor inicial
Heap
Fichero proyectado F
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
13
Bibliotecas Swap
Pila del thread n
Zona de memoria compartida
Pila de thread 1
Código biblioteca dinámica B
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 14: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/14.jpg)
Estados del proceso ligero
� Como los procesos convencionales, un proceso ligero puede estar en varias situaciones o estados: ejecutando, listo o bloqueado� El estado del proceso será la combinación de los estados de sus
procesos ligeros.
ProcesoBloqueado por comunicación
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
14
Proceso
Procesos ligeros
ActivoBloqueado por acceso a disco
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 15: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/15.jpg)
Threads y paralelismo
� Los procesos ligeros permiten paralelizar una aplicación
� Un programa puede dividirse en procedimientos que pueden ejecutar de manera independiente mediante procesos ligeros� Los procesos ligeros pueden lanzar su ejecución de manera simultánea
� Diseño modular de la aplicación
� La base del paralelismo:
� Mantener algún proceso ligero siempre en estado de ejecución: “mientras que un
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
15
� Mantener algún proceso ligero siempre en estado de ejecución: “mientras que un proceso está bloqueado otro podría estar ejecutando”
main(){
…
function1 (args);
function2 (args);
…
}
Diseño secuencial
main(){
…
lanzar_thread (
function1(args));
lanzar_thread (
function2(args));
}
Diseño paralelo
![Page 16: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/16.jpg)
Ejemplo: ejecución serie vs. paralela
Procedimiento 1
Esperaen E/S
P F
Procedimiento 1
Ejecuciónserie
Procedimiento 2
Esperaen E/S
P F
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
16
Procedimiento 2
Procedimiento 1
Ejecuciónparalela
Esperaen E/S
P F
ProcesamientoEsperaen E/S
P F
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 17: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/17.jpg)
Programación concurrente
� En SSOO multitarea pueden coexistir varios procesos activos a la vez� Multiprogramación con un único procesador
� Multiprocesador
� Multicomputadora
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
17
� En general,
para p procesadores y n procesos, la concurrencia es:� Aparente si n>p
� real si n<=p
![Page 18: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/18.jpg)
Comunicación entre procesos
Procesode Usuario
Procesode Usuario
Procesode Usuario
Procesode Usuario
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
18
SO
Un computador Dos computadores
SO SO
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 19: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/19.jpg)
Servidores secuenciales
� Diseño secuencial de servidores
Petición/respuestaCliente
Recurso
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
19
servidorCliente
Cliente
Recurso
![Page 20: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/20.jpg)
Servidores concurrentes con threads
� Los procesos concurrentes deben comunicar y sincronizarse
petición
Crea thread de servicio
servidorCliente
Recurso
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
20
respuesta
de servicio
Thread de servicio
Diseño concurrente
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 21: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/21.jpg)
� Distintas arquitecturas de SW para construir servidores paralelos:
� Un proceso distribuidor que acepta peticiones y las distribuye entre un pool de procesos ligeros
� Cada proceso ligero realiza las mismas tareas: aceptar peticiones, procesarlas y devolver su resultado
� Segmentación: cada trabajo se divide en una serie de fases, cada una de ellas se procesa por un proceso ligero especializado
Diseño de servidores mediante threads
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
21
Trabajador
Núcleo Sol
icitu
des
Núcleo Sol
icitu
des
E/SNúcleo
Distribuidor
Sol
icitu
des
E/S E/S
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 22: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/22.jpg)
Programación con procesos ligeros
� Servicios UNIX incluyen:� Operaciones de gestión
� Creación e identificación de procesos ligeros
� Atributos de un proceso ligero
� Planificación de procesos ligeros� Prioridades, políticas de planificación
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
22
� Prioridades, políticas de planificación
� Terminación de procesos ligeros
![Page 23: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/23.jpg)
Creación e identificación de threads
� Crear un thread:int pthread_create (pthread_t* thread,
const pthread_attr_t* attr, void * (*funcion)(void *), void * arg);
donde:
thread Identificador del nuevo thread (se captura cuando se crea)
attr Atributos a aplicar al nuevo thread o NULL
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
23
attr Atributos a aplicar al nuevo thread o NULL
funcion Función a ejecutar por el thread que es creado
arg Puntero a el/los argumentos del thread
devuelve:
int 0 si éxito o -1 si error
� Obtener el identificador de un thread:pthread_t pthread_self (void);
![Page 24: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/24.jpg)
Atributos de un proceso ligero
� Un hilo se crea con una serie de atributos por defecto
� Ejemplo: Por defecto, un hilo es joinable o No Independiente
� Es posible modificar los atributos por defecto del hilo:� Inicia un objeto atributo que se puede utilizar para crear nuevos procesos ligeros
int pthread_attr_init (pthread_attr_t *attr);
� Destruye un objeto de tipo atributo
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
24
� Destruye un objeto de tipo atributoint pthread_attr_destroy (pthread_attr_t *attr);
� Cambiar el estado de terminación (Joinable / Detached)
int pthread_attr_setdetachstate (pthread_attr_t *a, int detachstate);
Si detachstate es� PTHREAD_CREATE_DETACHED el proceso se crea independiente
� PTHREAD_CREATE_JOINABLE el proceso se crea no independiente
� Otras atributos: tamaño de pila, planificación, prioridad, etc.
![Page 25: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/25.jpg)
Terminación de procesos ligeros
� Finaliza la ejecución del proceso ligero:int pthread_exit (void *value);
� Para procesos creados como NO independientes es además necesario:
int pthread_join ( pthread_t thid , void ** value );
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
25
int pthread_join ( pthread_t thid , void ** value );
� Espera la terminación del proceso con identificador thid
� Devuelve en el segundo argumento el valor pasado en pthread_exit.
� Sólo se puede esperar la terminación de procesos ligeros no independientes (PTHREAD_CREATE_JOINABLE)
![Page 26: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/26.jpg)
Ejemplo: Jerarquía de threads
No independientep_create
p_create
p_create
Thread A
Thread D Thread C
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
26
p_joinp_exit
p_exit
p_exitThread B
Thread D Thread C
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 27: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/27.jpg)
Ejemplo I: creación y terminación #include <stdio.h> /* printf */
#include <pthread.h> /* Para threads… */
#define NUM_THREADS 10
int funcion(int *idThread){
printf(“Thread id = %d\ti=%d: ”, pthread_self (),*idThread);
pthread_exit (NULL);
}
int main () {
pthread_t arrayThread[NUM_THREADS]; /* Array de threads */
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
27
pthread_t arrayThread[NUM_THREADS]; /* Array de threads */
int i;
/* CREAR THREADS */
for(i=0;i<NUM_THREADS;i++){
if ( pthread_create (&arrayThread[i],NULL,(void *)funcion, &i)==-1)
printf(“Error al crear proceso ligero\n”);
}
/* ESPERAR TERMINACIÓN DE THREADS */
for(i=0;i<NUM_THREADS;i++)
pthread_join (arrayThread[i], NULL);
exit(0);
}
![Page 28: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/28.jpg)
Ejemplo I: Cuestiones
� ¿Por qué se pasa el argumento 4 de pthread_create como una referencia?
� Identificar variables compartidas y secciones críticas
� ¿Tiene este programa problemas de concurrencia?
� Dar un ejemplo de ejecución incorrecta.
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
28
![Page 29: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/29.jpg)
Ejemplo II: Modificar atributos#include <stdio.h> /* printf */
#include <pthread.h> /* Para threads… */
#define MAX_THREADS 10
void func(void) {
printf("Thread %d \n", pthread_self());pthread_exit (0);
}
main() {
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
29
main() {int j;pthread_attr_t attr;pthread_t thid[MAX_THREADS];
pthread_attr_init (&attr);pthread_attr_setdetachstate (&attr,PTHREAD_CREATE_DETACHED);
for(j = 0; j < MAX_THREADS; j ++)pthread_create (&thid[j], &attr, func, NULL);
sleep(5);
pthread_attr_destroy (&attr);
}
![Page 30: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/30.jpg)
Concurrencia
� Modelos:� Multiprogramación en un único procesador
� Multiprocesador
� Multicomputador (proceso distribuido)
� Ventajas:
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
30
� Facilita la programación
� Acelera los cálculos
� Posibilita el uso interactivo a múltiples usuarios
� Mejor aprovechamiento de los recursos
![Page 31: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/31.jpg)
Monoprocesador vs. Multiprocesador
Proceso A
Proceso B
Proceso C
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
31
Tiempo
Tiempo
Proceso B
Proceso A
Proceso C
Proceso D
CPU 1
CPU 2
![Page 32: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/32.jpg)
Tipos de procesos concurrentes
� Tipos de procesos: � Independientes: su ejecución no requiere la ayuda o cooperación con
otros procesos
� Cooperantes: su ejecución requiere trabajar conjuntamente con otros procesos para realizar una actividad
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
32
� En ambos casos se produce una interacción entre procesos � Compiten por recursos
� Comparten recursos
![Page 33: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/33.jpg)
Conceptos previos
� Una condición de carrera es el acceso concurrente a los recursos compartidos sin coordinación� Puede producir resultados diferentes a los esperados
� Una sección crítica (SC) es un fragmento de código en el que los distintos procesos pueden acceder y modificar recursos compartidos
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
33
� Una sección es atómica si se ejecuta por un thread completamente de manera indivisible, de principio a fin, sin que su ejecución se pueda interrumpir por ningún otro thread
� Tienen una semántica de éxito-o-fallo
![Page 34: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/34.jpg)
Ejemplo I:
Servidor concurrente
Distribuidor
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
34
E/SNúcleo
Cache
Solicitudes
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 35: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/35.jpg)
Ejemplo II:
Acceso a una caché compartida
Update_block() Update_block()
threadprincipal
Petición 1 Petición 2
� Condición de carrera en la sentencia: Update_block
Update_block(bloque) {
b = Get_block();
copy(b, bloque);
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
35
Update_block() Update_block()
Cache
copy(b, bloque);
}
copy(b1, b2){
for (i=0; i<length;i++)
*b1++ = *b2++;
![Page 36: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/36.jpg)
Acceso a una caché compartida
� Condición de carrera en la sentencia: Update_block
Update_block(bloque) {
b = Get_block();
copy(b, bloque);Update_block() Update_block()
threadprincipal
Petición 1 Petición 2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
36
copy(b, bloque);
}
copy(b1, b2){
for (i=0; i<length;i++)
*b1++ = *b2++;
Operación no atómica
Update_block() Update_block()
Cache
![Page 37: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/37.jpg)
El problema de la sección crítica� Sistema compuesto por n procesos
� Cada uno tiene un fragmento de código: sección crítica� Los procesos deben acceder a la SC con exclusividad
� Estructura general de cualquier mecanismo utilizado para resolver el problema de la sección crítica:
Entrada en la sección crítica
Código de la sección crítica
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
37
Código de la sección crítica
Salida de la sección crítica
� Requisitos que debe ofrecer cualquier solución para resolver el problema de la sección crítica:
� Exclusión mutua
� Progreso
� Espera limitada
![Page 38: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/38.jpg)
Modelos de comunicación y
sincronización
� Modelo productor-consumidor
� Modelo de lectores-escritores
� Modelo de acceso a recursos limitados
� Modelo cliente-servidor
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
38
![Page 39: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/39.jpg)
Modelo productor-consumidor
ProcesoProductor
ProcesoConsumidor
Flujo de
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
39
Mecanismo de comunicación
Flujo de datos
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 40: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/40.jpg)
Modelo de lectores-escritores
EscritorLector Lector Escritor Lector
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
40
Recurso
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 41: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/41.jpg)
� Ejemplo: problema de los filósofos comensales
Modelo de acceso a recursos limitados
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
41
![Page 42: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/42.jpg)
Modelo cliente-servidor
Procesocliente
Petición
Procesoservidor
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
42
Procesocliente
S.O.Respuesta
Procesoservidor
![Page 43: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/43.jpg)
Comunicación cliente-servidor
� Muy utilizada en entornos distribuidos (más del 90% de los sistemas distribuidos utilizan la arquitectura cliente-servidor)
cliente
petcición
servidor
Máquina A Máquina B
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
43
� Protocolo típico: petición-respuesta
NÚCLEO
cliente
respuesta
servidor
NÚCLEO
RED@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 44: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/44.jpg)
Mecanismos de comunicación
� Ficheros
� Tuberías (pipes, FIFOS)
� Variables en memoria compartida
� Paso de mensajes
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
44
![Page 45: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/45.jpg)
Comunicación mediante archivos
� Un archivo es un mecanismo que puede emplearse para comunicar procesos� Un proceso puede escribir datos y otro puede leerlos
Dato1
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
45
Dato1
Dato2
Dato3
…
Dato n
Fichero compartido
Proceso escritor
Proceso lector
![Page 46: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/46.jpg)
� Una tubería (pipe) es un mecanismo de comunicación y sincronización� Comunicación: archivo compartido
� Sincronización: semántica bloqueante
� Puede verse como un pseudoarchivo identificado por dos descriptores, uno se usa para leer y el otro para escribir� Los servicios utilizados para lectura y escritura de pipes son los mismos que los
Comunicación mediante tuberías
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
46
� Los servicios utilizados para lectura y escritura de pipes son los mismos que los usados sobre ficheros
read
Tubería
Proceso usuario
Proceso usuario
Flujo de datos
writeSO
![Page 47: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/47.jpg)
Ejemplo III:
Productor-consumidor con tuberías#include <stdio.h> /* printf */
#include <unistd.h>
struct elemento dato; /* dato a producir */
int fildes[2];
int main () {
if ( pipe (fildes)<0){
printf(“Error al crear la tubería );
exit (1);
}
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
47
}
if (fork() == 0){
for (;;){
<Producir dato>
write (fildes[1], (char*)&dato, sizeof (struct elemento));
}
}else{
for (;;){
read (fildes[0], (char*)&dato, sizeof (struct elemento));
<Consumir dato>
}
}
![Page 48: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/48.jpg)
Mecanismos de sincronización
� Señales (asincronismo)
� Tuberías (pipes, FIFOs)
� Semáforos
� Mutex y variables condicionales
� Paso de mensajes
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
48
� Paso de mensajes
![Page 49: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/49.jpg)
Semáforos
� Un semáforo [Dijkstra, 1965] es un mecanismo de sincronización de procesos que ejecutan en la misma máquina
� Idea muy simple:� Un semáforo es un objeto con un valor entero inicialmente no negativo
� Dos operaciones atómicas� wait
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
49
� wait
� signal
![Page 50: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/50.jpg)
� Operación wait
wait (s )
{
s = s - 1;
if (s < 0) {
<bloquear al proceso>
}
Operaciones sobre semáforos
� Operación signal
signal(s )
{
s = s + 1;
if (s <= 0)
<Desbloquear a un
proceso bloqueado por
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
}
}
proceso bloqueado por
la operacion wait >
}
}
![Page 51: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/51.jpg)
Secciones críticas con semáforos
P0
Valor delsemáforo (s)
wait(s) wait(s)1
P1 P2
Ejecutando código de la sección crítica
wait (s); /* entrada en la seccion critica */
< seccion critica >
signal (s); /* salida de la seccion critica */
El semáforo debe tener valor inicial 1
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
51
wait(s)
signal(s)
signal(s)
signal(s)
wait(s)
desbloquea
desbloquea
wait(s)
1
0-1
-2
-1
0
Proceso bloqueado en el semáforo
s: valor entero asociado al semáforo
Estructura para projeger la SC:
wait ( s)
Código de la sección crítica
signal ( s)
![Page 52: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/52.jpg)
Productor
Productor-consumidor con semáforos
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
52
Consumidor
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 53: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/53.jpg)
Ejemplo IV:
Productor-consumidor con semáforos
#define TAMAÑO_DEL_BUFFER 1024
Productor() {
int posicion = 0;
for(;;) {
Producir un dato;
Consumidor() {
int posición = 0;
for(;;) {
wait (elementos);
dato = buffer[posicion];
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
53
Producir un dato;
wait (huecos);
buffer[posicion] = dato;
posicion = (posicion + 1) % TAMAÑO_DEL_BUFFER;
signal (elementos);
}
}
dato = buffer[posicion]; posicion = (posicion + 1)
% TAMAÑO_DEL_BUFFER;
signal (huecos);
Consumir el dato extraído;
}
}
![Page 54: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/54.jpg)
Ejemplo V:
Lectores-escritores con semáforos
Lector() {
wait (sem_lectores);
n_lectores = n_lectores + 1;
if (n_lectores == 1)
wait (sem_recurso);
signal (sem_lectores);
Escritor(){
wait (sem_recurso);
/*se puede modificar el recurso*/
signal (sem_recurso);
}
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
54
Consultar el recurso compartido
wait (sem_lectores);
n_lectores = n_lectores - 1;
if (n_lectores == 0)
signal (sem_recurso);
signal (sem_lectores);
}
}
![Page 55: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/55.jpg)
Mutex
� Un mutex es un mecanismo de sincronización especialmente indicado para procesos ligeros
� Se emplean para tener exclusión mutua sobre SC y tener acceso exclusivo a los recursos compartidos
� Es un semáforo binario (valor inicial 1) con dos operaciones atómicas:
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
55
atómicas: � lock(m)
� Intenta bloquear el mutex.
� Si el mutex ya está bloqueado el proceso se suspende
� unlock(m)
� Desbloquear el mutex.
� Si existen procesos bloqueados en el mutex se desbloquea a uno
![Page 56: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/56.jpg)
Secciones críticas con mutex
Thread A Thread Bthread ejecutando
lock (m) ; /* entrada en la seccion critica */
< seccion critica >
unlock (m) ; /* salida de la seccion critica */
� La operación unlock debe realizarla el proceso ligero que ejecutó lock
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
56
lock mutex
Seccióncrítica
lock mutex
unlock mutex obtiene mutex
thread bloqueado
Punto de sincronización
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 57: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/57.jpg)
Variables condicionales
� Una variable condicional es una variable de sincronización asociada a un mutex � Bloquea o desbloquea el proceso hasta que ocurra algún suceso
� Conveniente ejecutarlas entre las llamadas lock y unlock
Dos operaciones atómicas:
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
57
� Dos operaciones atómicas: � c_wait
� Bloquea al proceso ligero que la ejecuta y libera el mutex
� c_signal
� Desbloquea a uno o varios procesos suspendidos en la variable condicional
� El proceso que se despierta compite de nuevo por el mutex
![Page 58: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/58.jpg)
Uso de mutex y variables condicionales
� Thread A lock ( m);
/* Código de la sección crítica */
while (condición == FALSE)
c_wait( c , m) ;
/* Resto la sección crítica */
unlock ( m); /* Salida de la SC */
� Thread Block ( m);
/* Código de la sección crítica */
/* Se modifica la condición */
condición = TRUE;
c_signal ( c);
/* Resto la sección crítica */
unlock ( m); /* Salida de la SC */
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
58
Thread BThread A
c_waitunlock mutex
Adquiere el mutex
Adquiere el mutex
Se compite por el mutex
locklock
unlock
Thread bloqueado esperando c_signal
Thread bloqueado esperando unlock
c_signal
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 59: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/59.jpg)
Uso de mutex y variables condicionales
� Thread A lock(mutex); /* acceso al recurso */
comprobar las estructuras de datos;
while (recurso ocupado)
wait(condition, mutex);
marcar el recurso como ocupado;
unlock(mutex);
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
59
unlock(mutex);
� Thread B lock(mutex); /* acceso al recurso */
marcar el recurso como libre;
signal(condition);
unlock(mutex);
� Importante utilizar while
![Page 60: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/60.jpg)
Ejemplo VI: Productor-consumidor con
mutex y variables condicionales
Productor() {
int pos = 0;
for(;;) {
< Producir un dato >
lock (mutex);
/* acceder al buffer */
while (n_elementos == TAMAÑO_DEL_BUFFER)
c_wait (lleno, mutex);
Consumidor() {
int = 0;
for(;;) {
lock (mutex);
while (n_elementos == 0)c_wait (vacío, mutex);
dato = buffer[pos];
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
60
c_wait (lleno, mutex);
buffer[pos] = dato;
pos = (pos + 1) % TAMAÑO_DEL_BUFFER;
n_elementos ++;
if (n_elementos == 1)
c_signal (vacio);unlock (mutex);
}
}
dato = buffer[pos];
pos = (pos + 1) % TAMAÑO_DEL_BUFFER;
n_elementos --;
if (n_elementos == (TAMAÑO_DEL_BUFFER - 1));
c_signal (lleno);
unlock (mutex);
< Consumir el dato >
}
}
![Page 61: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/61.jpg)
Servicios UNIX para mutex
� Inicializa un mutexint pthread_mutex_init (pthread_mutex_t *mutex,
pthread_mutexattr_t * attr);
� Destruye un mutexint pthread_mutex_destroy (pthread_mutex_t *mutex) ;
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
61
� Intenta obtener el mutex. Bloquea al proceso ligero si el mutex se encuentra adquirido por otro proceso ligeroint pthread_mutex_lock (pthread_mutex_t *mutex);
� Desbloquea el mutexint pthread_mutex_unlock (pthread_mutex_t *mutex);
![Page 62: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/62.jpg)
Servicios UNIX para variables condicionales
(I)
� Inicializa una variable condicional
int pthread_cond_init (pthread_cond_t*cond,
pthread_condattr_t*attr);
� Destruye una variable condicionalint pthread_cond_destroy (pthread_cond_t *cond);
� Bloquea al proceso ligero y libera el mutex:
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
62
� Bloquea al proceso ligero y libera el mutex:� Suspende al proceso ligero hasta que otro proceso señaliza la variable
condicional cond .� Automáticamente se libera el mutex . Cuando se despierta el proceso ligero
vuelve a competir por el mutex .
int pthread_cond_wait (pthread_cond_t*cond,
pthread_mutex_t*mutex);
![Page 63: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/63.jpg)
Servicios UNIX para variables condicionales
(II)
� Desbloquea el/los proceso(s) ligero(s) y libera el mutex
int pthread_cond_signal (pthread_cond_t *cond);
� Se reactivan uno o más de los procesos ligeros que están suspendidos en la variable condicional cond
� No tiene efecto si no hay ningún proceso ligero esperando (diferente a los semáforos)
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
63
semáforos)
int pthread_cond_broadcast (pthread_cond_t *cond);
� Todos los threads suspendidos en la variable condicional cond se reactivan
� No tiene efecto si no hay ningún proceso ligero esperando
![Page 64: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/64.jpg)
Ejemplo VII:
Productor-consumidor con mutex (I)#define MAX_BUFFER 1024 /* tamanio del buffer */
#define DATOS_A_PRODUCIR 100000 /* datos a producir */
pthread_mutex_t mutex; /* mutex para controlar el acceso al buffer compartido */
pthread_cond_t no_lleno; /* controla el llenado del buffer */
pthread_cond_t no_vacio; /* controla el vaciado del buffer */
int n_elementos; /* numero de elementos en el buffer */
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
64
int buffer[MAX_BUFFER]; /* buffer comun */
int main(int argc, char *argv[]){
pthread_t th1, th2;
pthread_mutex_init (&mutex, NULL);
pthread_cond_init (&no_lleno, NULL);
pthread_cond_init (&no_vacio, NULL);
![Page 65: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/65.jpg)
Ejemplo VII:
Productor-consumidor con mutex (II)pthread_create (&th1, NULL, Productor, NULL);
pthread_create (&th2, NULL, Consumidor, NULL);
pthread_join (th1, NULL);
pthread_join (th2, NULL);
pthread_mutex_destroy (&mutex);
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
65
pthread_cond_destroy (&no_lleno);
pthread_cond_destroy (&no_vacio);
return 0;
}
![Page 66: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/66.jpg)
Ejemplo VII:
Productor-consumidor con mutex (III)void Productor(void) {
int dato, i ,pos = 0;
for(i=0; i<DATOS_A_PRODUCIR; i++ ) {dato = i; /* producir dato */pthread_mutex_lock (&mutex); /* acceder al buffer */
while (n_elementos == MAX_BUFFER)/* si buffer lleno */pthread_cond_wait (&lleno, &mutex); /* se bloquea*/
buffer[pos] = i;
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
66
buffer[pos] = i;
pos = (pos + 1) % MAX_BUFFER;n_elementos = n_elementos + 1;
if (n_elementos == 1)pthread_cond_signal (&vacio); /* buffer no vacío*/
pthread_mutex_unlock (&mutex);}pthread_exit(0 );
}
![Page 67: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/67.jpg)
Ejemplo VII:
Productor-consumidor con mutex (IV)void Consumidor(void) {
int dato, i ,pos = 0;
for(i=0; i<DATOS_A_PRODUCIR; i++ ) {pthread_mutex_lock (&mutex); /* acceder al buffer */
while (n_elementos == 0) /* si buffer vacío */pthread_cond_wait (&vacio, &mutex); /* se bloquea */
dato = buffer[pos];
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
67
pos = (pos + 1) % MAX_BUFFER;n_elementos = n_elementos - 1 ;
if (n_elementos == MAX_BUFFER - 1);pthread_cond_signal (&lleno);/* buffer no lleno */
pthread_mutex_unlock (&mutex);
printf(“Consume %d \n”, dato); /* consume dato */}pthread_exit (0);
}
![Page 68: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/68.jpg)
Contenido
� Paso de mensajes
� Colas de mensajes
� Llamadas al sistema de POSIX para comunicación y sincronización de procesos usando colas de mensajes
� Comunicación de grupos
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
68
� Comunicación de grupos
![Page 69: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/69.jpg)
� Mecanismo de comunicación y sincronización de procesos que ejecutan en distintas máquinas
� En este tipo de comunicación, los procesos intercambian mensajes
� Entre los procesos que comunican debe existir un enlace de comunicación
Paso de mensajes:
conceptos básicos
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
69
comunicación
� Dos primitivas básicas:
� send (destino, mensaje)
� receive(origen, mensaje)
![Page 70: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/70.jpg)
Modelo de comunicación
Proceso emisor
Proceso receptor
mensaje
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
70
� Emisor: Receptor:
send(destino, mensaje) receive(origen, mensaje)
emisor receptor
![Page 71: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/71.jpg)
Paso de mensajes: conceptos básicos
Computador A Computador B
Procesode Usuario
mensaje1 dato
Procesode Usuario
mensaje2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
71
SO SO
![Page 72: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/72.jpg)
Proceso de comunicación
Computador A Computador B
Procesode Usuario
mensaje1 dato
Procesode Usuario
mensaje2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
72
(mensaje1)
SO SO
![Page 73: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/73.jpg)
Proceso de comunicación
Computador A Computador B
Procesode Usuario
mensaje1 dato
Procesode Usuario
mensaje2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
73
(mensaje1)
dato
SO SO
![Page 74: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/74.jpg)
Proceso de comunicación
Computador A Computador B
Procesode Usuario
mensaje1 dato
Procesode Usuario
mensaje2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
74
(mensaje1)
dato
SO SO
dato
![Page 75: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/75.jpg)
Proceso de comunicación
Computador A Computador B
Procesode Usuario
mensaje1 dato
Procesode Usuario
mensaje2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
75
(mensaje1)
dato
SO
dato
SO
dato
![Page 76: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/76.jpg)
Proceso de comunicación
Computador A Computador B
Procesode Usuario
mensaje1 dato
Procesode Usuario
mensaje2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
76
(mensaje1)
dato
SO
(mensaje2)
dato
SO
dato
![Page 77: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/77.jpg)
Proceso de comunicación
Computador A Computador B
Procesode Usuario
mensaje1 dato dato
Procesode Usuario
mensaje2
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
77
(mensaje1)
dato
SO
(mensaje2)
dato
SO
dato
![Page 78: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/78.jpg)
Paso de mensajes:
cuestiones de diseño� Tamaño del mensaje
� Longitud fija o variable
� Flujo de datos
� Bidireccional, unidireccional
� Nombrado
� Comunicación directa
� send(P, m): envía un mensaje m al proceso P
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
78
� receive(Q, m): recibe un mensaje del proceso Q
� receive (ANY, m): recibe un mensaje de cualquiera
� Comunicación indirecta
� Colas de mensajes o puertos
� Sincronización
� Almacenamiento (buffering)
� Capacidad o no de almacenamiento del enlace de comunicaciones
� Fiabilidad
� Representación de datos, aplanamiento
![Page 79: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/79.jpg)
� Nombrado� Comunicación indirecta: los datos se envían a estructuras intermedias
� Puertos: se asocian a un proceso (un único receptor)
� Ejemplo: sockets
� Colas de mensajes: múltiples emisores y receptores
� Ejemplo: Colas de mensajes POSIX
Paso de mensajes: cuestiones de diseño
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
79
Comunicación con puertosComunicación con colas de mensajes
Proceso cliente Proceso clientesend
mensaje
receive
Cola de mensajes
Proceso cliente Proceso cliente
mensaje
Puertosend
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 80: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/80.jpg)
� Sincronización
� Síncrona (bloqueante)
� Asíncrona (no bloqueante)
Paso de mensajes: cuestiones de diseño
Proceso A
Ava
nza
la e
jecu
ción
Proceso B
Proceso BComunicación síncrona
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
80
enviar
EsperaEsperarecibir enviar
recibir
El proceso A espera al B
Ava
nza
la e
jecu
ción
El proceso B espera al A
Proceso AProceso B
@Fuente: Jesús Carretero, Félix García, Pedro de Miguel y Fernando Pérez. Mc Graw Hill
![Page 81: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/81.jpg)
Paso de mensajes: cuestiones de diseño
� El almacenamiento hace referencia a la capacidad del enlace de comunicaciones:� Sin almacenamiento:
� Comunicación entre los procesos emisor y receptor debe ser síncrona
� Con almacenamiento: las estructuras intermedias (colas o
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
81
� Con almacenamiento: las estructuras intermedias (colas o puertos) tienen un cierto tamaño para almacenar mensajes� Si la cola no está llena, el emisor al enviar un mensaje lo inserta en ella
y continúa su ejecución
� Si la cola está llena el emisor se bloquea
![Page 82: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/82.jpg)
Colas de mensajes UNIX
� Implementación de paso de mensajes en UNIX
� Mecanismo de comunicación y sincronización
� Nombrado indirecto
� Asignan a las colas nombres de ficheros� Sólo pueden utilizar colas de mensajes procesos que comparten un
mismo sistema de ficheros
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
82
mismo sistema de ficheros
� Tamaño del mensaje variable
� Flujo de datos bidireccional
� Sincronización:� Envío asíncrono
� Recepción síncrona o asíncrona
� Los mensajes se pueden etiquetar con prioridades
![Page 83: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/83.jpg)
Llamadas al sistema de POSIX para
gestión de colas de mensajes
� Crear y abrir una cola de mensajes
� Cerrar una cola de mensajes
� Borrar una cola de mensajes
� Modificar los atributos
� Enviar
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
83
� Enviar
� Recibir
![Page 84: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/84.jpg)
Crear y abrir una cola de mensajes (I)
� Crear una cola de mensajes con nombre y atributosmqd_t mq_open(char *name, int flag, mode_t mode,
struct mq_attr *attr)
� El primer argumento especifica el nombre de la cola� Sigue la convención de nombrado de archivos
� man 7 mq_overview
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
84
� man 7 mq_overview
� El segundo argumento especifica los flags de la cola (definidos en fnctl.h):O_CREAT Crea una cola si no existe
O_RDONLY Crea una cola para lectura
O_WRONLY Crea una cola para escritura
O_RDWR Crea una cola para lectura y escritura
O_NONBLOCK Envío y recepción no bloqueante
![Page 85: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/85.jpg)
Crear y abrir una cola de mensajes (II)
� El tercer argumento son los permisos de acceso a la cola (definido en sys/stat.h):� Permisos de lectura, escritura y ejecución
� El cuarto argumento especifica los atributos de la cola. Se usa la estructura attr, que entre otros campos define:
mq_maxmsg Número máximo de mensajes
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
85
mq_maxmsg Número máximo de mensajes
mq_msgsize Tamaño del mensaje
� Si no se especifica se toman los atributos por defecto
� La llamada mq_open devuelve un descriptor de cola o -1 si error
![Page 86: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/86.jpg)
Cerrar y borrar una cola de mensajes
� Cerrar una cola de mensajesint mq_close (mqd_t mqdes)
� Borrar una cola de mensajes� Después de cerrar la cola de mensajes
int mq_unlink (char *name)
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
86
![Page 87: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/87.jpg)
Ejemplo I: Crear una cola de mensajes#include <printf.h> /* printf */
#include <fcntl.h> /* flags */
#include <sys/stat.h> /* modes */
#include <mqueue.h>
#define NUM_MENSAJES 50
int main () {
mqd_t mqd; /* Descriptor de la cola */
struct mq_attr atributos; /* Atributos */
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
87
atributos. mq_maxmsg = NUM_MENSAJES;
atributos. mq_msgsize = sizeof(int);
if ((mqd= mq_open(“/almacen.txt”, O_CREAT|O_WRONLY, 0777, &atributos))==-1){
printf(“Error mq_open\n”);
exit(-1);
}
// Escribir en la cola
mq_close (mqd);
mq_unlink (“/almacen.txt”);
}
![Page 88: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/88.jpg)
Ejemplo II: Compilar
� Es necesario enlazar la librería librtgcc filename.c –lrt –o executable
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
88
![Page 89: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/89.jpg)
Gestión de los atributos
� Modificar los atributos de una colaint mq_setattr (mqd_t mqdes, struct mq_attr *qstat,
struct mq_attr *oldmqstat)
� Permite cambiar los atributos de una cola de mensajes
� Los nuevos atributos se pasan en qstat
� Si oldmqstat es distinto de NULL se almacenarán en él los antiguos atributos
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
89
� Obtener los atributos de una colaint mq_getattr (mqd_t mqdes, struct mq_attr *qstat)
� Devuelve los atributos de una cola de mensajes
![Page 90: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/90.jpg)
Ejemplo III: Recuperar los atributos#include <printf.h> /* printf */
#include <fcntl.h> /* flags */
#include <sys/stat.h> /* modes */
#include <mqueue.h>
int main () {
mqd_t mqd; /* Descriptor de la cola */
struct mq_attr atributos; /* Atributos */
if ((mqd= mq_open(“/almacen.txt”, O_CREAT|O_WRONLY, 0777, &atributos))==-1){
printf(“Error mq_open \ n”);
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
90
printf(“Error mq_open \ n”);
exit(-1);
}
if ( mq_getattr (mqd, &atributos) == -1)
printf(“Error mq_getattr\n”);
exit(-1);
}
printf(“Numero maximo de mensajes en la cola: %d\n”, atributos .mq_maxmsg);
printf(“Longitud máxima del mensaje en la cola: %d\n”, atributos .mq_msgsize );
printf(“Numero de mensajes actualmente en la cola: %d\n”, atributos .curmsgs );
exit(0);
}
![Page 91: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/91.jpg)
Comunicación y sincronización
� Las colas de mensajes ofrecen un mecanismo de comunicación y sincronización:� Comunicación:
� El nombre de la cola permite compartir ésta para que múltiples procesos puedan enviar y recibir datos
� Sincronización
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
91
� Sincronización
� Semántica bloqueante
� No bloqueante (O_NONBLOCK)
![Page 92: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/92.jpg)
Servicios UNIX para enviar mensajes
� Enviar un mensaje a una colaint mq_send(mqd_t mqdes, char *msg, size_t len,int prio)
� El mensaje msg de longitud len se envía a la cola de mensajes mqdes con prioridad prio
� Argumentos de entrada
mqdes Descriptor de la cola
msg Buffer que contiene el mensaje a enviar
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
92
msg Buffer que contiene el mensaje a enviar
len Longitud del mensaje a enviar
prio Prioridad del mensaje. Los mensajes se insertan según su prioridad (0..MAX)
� Si la cola está llena el envío puede ser bloqueante o no (depende de O_NONBLOCK)� Si es O_NONBLOCK y la cola está llena el proceso no se bloquea pero devuelve -1 (error)
� Sino, devuelve el número de bytes enviados a la cola
![Page 93: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/93.jpg)
Servicios UNIX para recibir mensajes
� Recibir un mensaje desde una colaint mq_receive (mqd_t mqdes, char *msg,
size_t len, int *prio)
� Recibe el mensaje msg con mayor prioridad en la cola (prio) de longitud len de la cola de mensajes mqdes
� Argumentos de entrada
mqdes Descriptor de la cola
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
93
mqdes Descriptor de la cola
msg Buffer que contiene el mensaje a recibir
len Longitud del mensaje a recibir
prio Prioridad del mensaje.
� Si la cola está vacía la recepción puede ser bloqueante o no (depende de O_NONBLOCK)� Si es O_NONBLOCK y la cola está vacía el proceso no se bloquea pero devuelve -1 (error)
� Sino, devuelve el número de bytes leidos de la cola
![Page 94: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/94.jpg)
Relación entre descriptores y colas
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
94
@Fuente: Michael Kerrisk. The Linux Programing Interface.
![Page 95: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/95.jpg)
Productor-consumidor con paso de
mensajesProductor () {
for(;;) {
<Producir dato>
send (Consumidor, dato);
} /* end for */
}
Consumidor () {
for(;;) {
receive (Productor, dato);
<Consumir dato>
} /* end for */
}
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
![Page 96: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/96.jpg)
Ejemplo III: Productor-consumidor con colas de mensajes
#include <mqueue.h>
#include <stdio.h>
#define MAX_BUFFER 1024 /* tamaño del buffer */
#define DATOS_A_PRODUCIR 100000 /* datos a p roducir */
mqd_t almacen; /* cola de mensajes donde dejar los datos producidos y extraer los datos a consumir */
void main(void){
struct mq_attr attr;
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
96
struct mq_attr attr;
attr.mq_maxmsg = MAX_BUFFER;
attr.mq_msgsize = sizeof (int);
almacen = mq_open(“ALMACEN”, O_CREAT|O_WRONLY, 0700, &attr);
if (almacen == -1){
perror (“mq_open”);
exit(-1);
}
Productor ();
mq_close (almacen);
exit(0);
}
![Page 97: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/97.jpg)
Ejemplo III: Productor-consumidor con colas de mensajes
Productor (void){
int dato;
int i;
for(i=0;i<DATOS_A_PRODUCIR;i++){
/* producir dato */
dato = i;
if ( mq_send(almacen, &dato, sizeof(int), 0)== -1){
perror(“mq_send”);
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
97
perror(“mq_send”);
mq_close (almacen);
exit(1);
}
} /* end for */
return;
} /* end productor */
![Page 98: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/98.jpg)
Ejemplo III: Productor-consumidor con colas de mensajes
#include <mqueue.h>
#include <stdio.h>
#define MAX_BUFFER 1024 /* tamaño del buffer */
#define DATOS_A_PRODUCIR 100000 /* datos a p roducir */
mqd_t almacen; /* cola de mensajes donde dejar los datos producidos y extraer los datos a consumir */
void main(void){
struct mq_attr attr;
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
98
struct mq_attr attr;
almacen = mq_open(“ALMACEN”, O_RDONLY);
if (almacen == -1){
perror (“mq_open”);
exit(-1);
}
Consumidor ();
mq_close (almacen);
exit(0);
}
![Page 99: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/99.jpg)
Ejemplo III: Productor-consumidor con colas de mensajes
Consumidor (void){
int dato;
int i;
for(i=0;i<DATOS_A_RECIBIR;i++){
/* recibir dato */
dato = i;
if ( mq_receive (almacen,
&dato, siezof(int), 0)== - 1){
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
99
&dato, siezof(int), 0)== - 1){
perror(“mq_send”);
mq_close (almacen);
exit(1);
}
/* Consumir el dato */
printf(“El dato consumido es: %d\n”, dato);
} /* end for */
return;
} /* end consumidor */
![Page 100: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/100.jpg)
Ejemplo IV: Cadena de montaje� Se pretende diseñar e implementar una cadena de montaje usando colas de mensajes de
UNIX. La cadena de montaje está compuesta por tres procesos, cada uno especializado en una función. La comunicación entre cada par de procesos (es decir el proceso i y el proceso i+1) se realiza a través de una cola de mensajes de UNIX. En esta cadena de montaje, cada proceso realiza una función bien diferenciada: � El primer proceso lee un fichero f1 y escribe en la primera cola trozos del fichero de longitud máxima 4KB.
� El proceso intermedio i lee de la cola i-1 cada trozo del fichero y realiza una simple función de conversión, consistente en reemplazar las letras minúsculas por letras mayúsculas. Una vez realizada esta transformación, escribe el contenido en la cola i.
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
100
� El último proceso lee de la cola i-1 y lo vuelca al fichero f2.
![Page 101: Tema 3ocw.uc3m.es/.../Tema3_ComunicacionYsincronizacion.pdfTema 3 Comunicación y sincronización entre procesos F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez,](https://reader034.fdocumento.com/reader034/viewer/2022042203/5ea4ff3d7626a006495ad649/html5/thumbnails/101.jpg)
Ejemplo IV: Cadena de montaje
� El programa principal acepta dos argumentos de entrada, correspondientes al nombre del fichero origen (f1) y destino (f2). Debe ejecutarse de la siguiente manera:
cadena_montaje <f1> <f2>
� Se pide:� Decisiones de diseño necesarias para la implementación del programa
cadena_montaje
F. García-Carballeira, Mª. Soledad Escolar, Luis Miguel Sánchez, Fco. Javier García
Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 3.0 España.
101
cadena_montaje
� Código fuente en el lenguaje de programación C del programa cadena_montaje.c