Comunicación entre procesos SISTEMAS OPERATIVOS Comunicación entre procesos Mg. Samuel Oporto Díaz Lima, 11 de junio 2005
Tabla de Contenido Concurrencia. Problemas clásicos de comunicación y sincronización. Mecanismos de comunicación.
CONCURRENCIA
Procesos concurrentes Modelos Multiprogramación en un único procesador Multiprocesador Multicomputador (proceso distribuido) Razones Compartir recursos físicos Compartir recursos lógicos Acelerar los cálculos Modularidad Comodidad
Sistema multiprogramado con una CPU
Sistema con multiprocesador
Tipos de procesos concurrentes Independientes Cooperantes Interacción entre procesos Compiten por recursos Comparten recursos
PROBLEMAS CLASICOS DE COMUNICACION
Prob. comunicación y sincronización El problema de la sección crítica El problema del productor-consumidor El problema de los lectores-escritores Comunicación cliente-servidor 1 2 3 4
Problema de la sección crítica 1 Sistema compuesto por n procesos Cada uno tiene un fragmento de código: sección crítica Sólo uno de los procesos en cada instante puede ejecutar en la sección crítica. Cuando un proceso está ejecutando en la sección crítica, ningún otro puede hacerlo
Solución al problema de la sección crítica 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 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
Problema del productor-consumidor 2 Existe una fuente de datos que se coloca en una cola para que sea consumido por otro proceso El productor puede generar sus datos en cualquier momento El consumidor puede coger un dato solamente cuando hay alguno No se puede consumir un dato hasta que se termine su producción. producer: consumer: forever forever produce(item) take(item) place(item) consume(item)
Problema del productor-consumidor
El problema de los lectores-escritores 3 Varios procesos comparten datos. Los procesos lectores sólo leen los datos. Los procesos escritores leen y escriben. Varios lectores pueden acceder simultáneamente a los datos compartidos. Se debe evitar que accedan simultáneamente un proceso escritor y cualquier otro proceso.
Comunicación cliente-servidor 4 Comunicación cliente-servidor
MECANISMOS DE COMUNICACION
Mecanismos de comunicación Tuberías (pipes, FIFOS) Variables compartidas Paso de mensajes. POSIX es el acrónimo de Portable operating system interface, Unix based (Sistema operativo portable basado en UNIX). Una familia de estándares de llamadas al sistema definidos por el IEEE y especificados formalmente en el IEEE 1003, intenta estandarizar las interfaces de los sistemas operativos para que las aplicaciones se ejecuten en distintas plataformas.
Tuberías (POSIX) Mecanismo de comunicación y sincronización 1 Mecanismo de comunicación y sincronización Sin nombre: pipes Con nombre: FIFOS Sólo puede utilizarse entre los procesos hijos del proceso que creó el pipe int pipe(int fildes[2]); Identificación: dos descriptores de archivo Para lectura Para escritura Flujo de datos: unidireccional Mecanismo con capacidad de almacenamiento
Comunicación unidireccional con tuberías
Comunicación bidireccional con tuberías
Tuberías read(fildes[0], buffer, n) Pipe vacío se bloquea el lector Pipe con p bytes Si p ³ n devuelve n Si p < n devuelve p Si pipe vacío y no hay escritores devuelve 0 write(fildes[1], buffer, n) Pipe lleno se bloquea el escritor Si no hay lectores se recibe la señal SIGPIPE Lecturas y escrituras atómicas (cuidado con tamaños grandes)
Tuberías con nombre en POSIX (FIFOS) Igual que los pipes Mecanismo de comunicación y sincronización con nombre Misma máquina Servicios int mkfifo(char *name, mode_t mode); Crea un FIFO con nombre name int open(char *name, int flag); Abre un FIFO (para lectura, escritura o ambas) Bloquea hasta que haya algún proceso en el otro extremo Lectura y escritura mediante read() y write() Igual semántica que los pipes Cierre de un FIFO mediante close() Borrado de un FIFO mediante unlink()
Memoria compartida 2 Declaración independiente de variables
Paso de mensajes Permite resolver: Primitivas básicas: Exclusión mutua 3 Permite resolver: Exclusión mutua Sincronizar un proceso que recibe un mensaje y otro que lo envía Comunicación de datos entre espacios de memoria diferentes (mismo computador, diferentes computadores) Primitivas básicas: send(destino, mensaje) envía un mensaje al proceso destino receive(destino, mensaje) recibe un mensaje del proceso destino
Paso de mensajes Múltiples soluciones Aspectos de diseño Tamaño del mensaje Flujo de datos (unidireccional, bidireccional) Nombrado Directo Indirecto (puertos, colas) Sincronización (síncrono, asíncrono) Almacenamiento
Uso de colas y puertos
Bibliografía http://es.wikipedia.org/wiki/POSIX