PDF de programación - Tema 5 - Comunicación entre procesos mediante tuberías - Sistemas Operativos: Programación de Sistemas

Imágen de pdf Tema 5 - Comunicación entre procesos mediante tuberías - Sistemas Operativos: Programación de Sistemas

Tema 5 - Comunicación entre procesos mediante tuberías - Sistemas Operativos: Programación de Sistemasgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 23 de Febrero del 2018)
727 visualizaciones desde el 23 de Febrero del 2018
184,7 KB
19 paginas
Creado hace 17a (19/12/2006)
Tema 5 : Comunicación entre Procesos
mediante Tuberías

Sistemas Operativos:
Programación de Sistemas

Oscar Déniz Suárez
Alexis Quesada Arencibia
Francisco J. Santana Pérez
Curso 2006-07

Introducción
 Algunas aplicaciones involucran más de

un proceso
 Necesidades de comunicación y
sincronización

 Algunos mecanismos básicos que nos

permiten comunicar y sincronizar
procesos son …

Introducción
 Los mecanismos de comunicación a emplear

dependen del escenario en que nos
encontremos

 Consideramos dos situaciones:

 Los procesos se ejecutan en una misma máquina
 Los procesos se ejecutan en máquinas diferentes

Introducción
 Estudiaremos:

 Tuberías (pipes) y FIFOs
 Mecanismos IPC (Inter-Process Communication)

aparecidos con UNIX System V:
• Semáforos
• Memoria compartida
• Colas de mensajes

 Sockets

Tuberías sin nombre (pipes)
 El método más básico para comunicación entre

procesos

 Creación de una tubería sin nombre

#include <stdio.h>
int pipe (int fildes[2]);

 pipe crea una tubería donde:

 fildes[0] es un descriptor de un fichero de sólo

lectura de la tubería

 fildes[1] es un descriptor de un fichero de sólo

escritura en la tubería

 Lo que se escribe en fildes[1] se lee en fildes[0]

Tuberías sin nombre (pipes)
 Ventaja:

 Fácil manejo de la tubería (mismo
tratamiento que un fichero: read, write, close)

 Limitaciones:

 Solo permiten comunicaciones de tipo half
duplex
 Sólo pueden ser usadas entre procesos
relacionados (aquellos que tienen un
ancestro en común)

Tuberías sin nombre (pipes)
 Normalmente, un proceso crea una tubería y luego

ejecuta la llamada fork
 Como los descriptores de fichero se heredan de padres a hijos

….

 En general, después de fork y pipe:

 El proceso de lectura cierra el lado de escritura de la tubería
 El proceso de escritura cierra el lado de lectura de la tubería
(operaciones de lectura y escritura)

 A continuación suele venir el intercambio de datos
 Y finalmente el proceso de cierre

Tuberías sin nombre (pipes)
 La tubería usa un buffer gestionado por el

núcleo

 La sincronización entre los accesos de escritura

y lectura la lleva a cabo el núcleo
 Cuando el buffer está lleno, la llamada write se

bloquea

bloquea

 Cuando el buffer está vacío, la llamada read se

 También es el núcleo el encargado de

gestionar la tubería según una política FIFO

Tuberías sin nombre (pipes)

 Si se intenta escribir cuando el extremo

lector ha cerrado se genera la señal
SIGPIPE

 Cuando se cierra el extremo escritor, se
recibe un EOF tras la recepción de los
últimos datos

Tuberías sin nombre (pipes)
 Ejercicio práctico:

 Vamos a crear un proceso padre que se
encargue de leer mensajes de la entrada
estándar y se los pase a un proceso hijo que
los presentará por pantalla. El ciclo terminará
cuando el padre envíe la cadena “FIN” al
proceso hijo

Tuberías sin nombre (pipes)
 Para la comunicación bidireccional entre
dos procesos podemos usar dos tuberías

Proceso A

Tub. AB

Tub. BA

Proceso B

Tuberías con nombre (FIFO)
 Permiten comunicación entre dos procesos

 Son un tipo especial de fichero, con una

cualesquiera, entre los que no hay relación de
parentesco
entrada en un directorio
 Son persistentes, es decir, existen en el sistema de
 También se conocen como tuberías FIFO (First

archivos

In First Out)

Tuberías con nombre (FIFO)
 Desde el shell podemos crear tuberías con

nombre con la orden mkfifo

 Ejercicio práctico:

 Abrir un shell, crear una tubería con el nombre
 En un shell, mostrar los datos escritos en la tubería

“pruebafifo” y listar los permisos
desde otro shell a través de la entrada estandar

Tuberías con nombre (FIFO)
 Creación de una tubería con nombre

#include <sys/types.h>
#include <sys/stat.h>
int mkfifo (const char *pathname, mode_t mode);
donde:

pathname: ruta de la tubería con nombre que se va
a crear
mode: máscara de permisos

Tuberías con nombre (FIFO)
 Ejercicio práctico:

 Crear una tubería con nombre desde un programa
(el nombre de la tubería se pasa como parámetro al
programa)

 Comprobarlo desde un shell (nombre y permisos)
 Volver a lanzar el mismo programa, ¿Qué ocurre?

Tuberías con nombre (FIFO)
 Apertura, cierre, eliminación, lectura y escritura en una

tubería con nombre
 Equivalente a las operaciones sobre ficheros
 open, close, unlink, read y write

 Con algunas diferencias

 Apertura bloqueante

• open(“fifo_ejemplo”,O_WRONLY) => el proceso escritor se

bloquea hasta hasta que no haya otro proceso que abra la tubería
para leer de ella
• open(“fifo_ejemplo”,O_RONLY) => el proceso lector se bloquea
hasta que no haya otro proceso que abra la tubería para escribir
en ella

 Esto es así a menos que se indique en la apertura el

modificador O_NONBLOCK

Tuberías con nombre (FIFO)
 Apertura con el modificador

O_NONBLOCK
 Si se especifica, un open de solo lectura
retorna inmediatamente
 Un open de solo escritura retorna un error si
ningún proceso tiene la FIFO abierta para
lectura

Tuberías
 En algunas ocasiones puede que sólo exista

un lector y un escritor

 La constante PIPE_BUF define el número

máximo de caracteres que se pueden escribir
en una tubería atómicamente

 Sin embargo, esto no es una imposición. Puede

haber muchos lectores y escritores
 En este caso es necesario implementar mecanismos

para coordinar su uso

Tuberías con nombre (FIFO)
 Ejercicio práctico:

 Escribir un programa que lea de una tubería
con nombre “pruebaFIFO” y muestre lo leído
por pantalla
 Escribir otro programa que cada 5 segundos
envíe a la tubería “pruebaFIFO” su pid y la
hora
 Lanzar varias instancias del programa
escritor en diferentes ventanas
  • Links de descarga
http://lwp-l.com/pdf9012

Comentarios de: Tema 5 - Comunicación entre procesos mediante tuberías - Sistemas Operativos: Programación de Sistemas (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad