Download - Mg. Samuel Oporto Díaz Lima, 11 de junio 2005 Comunicación entre procesos SISTEMAS OPERATIVOS
Mg. Samuel Oporto Díaz Lima, 11 de junio 2005
Comunicación entre procesos
SISTEMAS OPERATIVOS
22 /72/72
Tabla de Contenido• Concurrencia.• Problemas clásicos de comunicación y sincronización. • Mecanismos de comunicación.
33 /72/72
CONCURRENCIA
44 /72/72
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
55 /72/72
Sistema multiprogramado con una CPU
T ie m p o
P ro c e so A
P ro c e so B
P ro c e so C
66 /72/72
Sistema con multiprocesador
T ie m p o
P ro c e so B
P ro c e so A
P ro c e so C
P ro c e so D
C P U 1
C P U 2
77 /72/72
Tipos de procesos concurrentes• Tipos de procesos
– Independientes – Cooperantes
• Interacción entre procesos – Compiten por recursos – Comparten recursos
88 /72/72
PROBLEMAS CLASICOS DE COMUNICACION
99 /72/72
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
1010 /72/72
Problema de la sección crítica• 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
1
1111 /72/72
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
1212 /72/72
Problema del productor-consumidor• Existe una fuente de datos que se coloca en una cola
para que sea consumido por otro proceso
1. El productor puede generar sus datos en cualquier momento
2. El consumidor puede coger un dato solamente cuando hay alguno
3. 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)
2
1313 /72/72
Problema del productor-consumidor
ProcesoProductor
ProcesoConsum idor
M ecanism o de com unicación
Flu jo de datos
1414 /72/72
El problema de los lectores-escritores
EscritorLector Lector Escritor Lector
Recurso
1. Varios procesos comparten datos.
2. Los procesos lectores sólo leen los datos.
3. Los procesos escritores leen y escriben.
4. Varios lectores pueden acceder simultáneamente a los datos compartidos.
5. Se debe evitar que accedan simultáneamente un proceso escritor y cualquier otro proceso.
3
1515 /72/72
Comunicación cliente-servidor
Computador Computador
Procesocliente
S.O.
P etic ión
R espuesta
Procesoservidor
4
1616 /72/72
MECANISMOS DE COMUNICACION
1717 /72/72
Mecanismos de comunicación1. Tuberías (pipes, FIFOS)
2. Variables compartidas
3. 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.
1818 /72/72
Tuberías (POSIX)• 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
1
1919 /72/72
Comunicación unidireccional con tuberías
P rocesode U suario
P rocesode U suario
p ipe
S O
w rite read
F lu jo de da tos
2020 /72/72
Comunicación bidireccional con tuberías
P rocesode U suario
P rocesode U suario
SO
w rite w rite readread
F lu jo de datos
F lu jo de datos
p ipe
p ipe
2121 /72/72
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)
2222 /72/72
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()
2323 /72/72
Memoria compartida
Declaración independiente de variables
D atos
Texto
Proceso A Proceso B
P ila
TextoD atos
P ilaSegm ento de m em oriacom partida
var1
2
var2
2
2424 /72/72
Paso de mensajes• 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
3
2525 /72/72
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
2626 /72/72
Uso de colas y puertos
Com unicación con puertosCom unicación con colas de m ensajes
Proceso c lien te Proceso c lien tesend
m ensaje
receive
Cola de m ensajes
Proceso c lien te Proceso c lien te
m ensaje
Puertosend
2727 /72/72
Bibliografía• http://es.wikipedia.org/wiki/POSIX