Comunicación y sincronización de procesos Comunicación por tuberías
Conceptos básicos •Mecanismo de comunicación entre procesos. •La transmisión se efectúa a través de un canal de comunicación: –Los datos escritos en un extremo del canal se leen en el otro extremo.
escritura lectura Conceptos básicos
•Comparable con una cola tipo FIFO. •La lectura de los datos es independiente de la escritura. •Ventaja: permite leer de una sola vez datos escritos en varias ocasiones.
Conceptos básicos • La gestión de las tuberías está integrada en el sistema de archivos. •El acceso a las tuberías se realiza por los descriptores de entradas/salidas • Tipo de tubería –Tubería anónima. –Tubería con nombre
Estructuras básicas •Estructura pipe_inode_info
Implementación •Para crear una tubería primero hay que crear un i-nodo •La creación del i-nodo se efectúa por la función get pipe_inode (fs/pipe.c).
Tuberías anónimas •La creación se efectúa con do_pipe (fs/pipe.c). •Esta llamada construye una tabla de dos descriptores de archivos –la salida (lectura) –la entrada (escritura)
Tuberías con nombre •La creación se efectúa con fifo-open (fs/fifo.c). •Opciones de la creación: –Lectura exclusiva (con o sin bloqueo) –Escritura exclusiva –Lectura y escritura
Operaciones de entrada/salida •Las lecturas y las escrituras se efectúan en una memoria intermedia de tamaño PIPE_BUF. •Todas las operaciones de entradas/salidas, ya se trate de tuberías con nombre o anónimas, se encuentran en el archivo fs/pipe.c.
Operaciones de entrada/salida •Vemos los detalles y su funcionamiento: –pipe_read lectura en la tubería –pipe_write escritura en la tubería –pipe_ioctl recupera el nº de bytes almacenados –pipe_select para la operación de multiplexado *multiplexado en lectura *multiplexado en escritura: *excepciones
Operaciones de entrada/salida •En el contexto de las tuberías con nombre, cuando al crear la tubería, ningún proceso ha abierto la tubería en escritura: –connect_read modifica las operaciones realizables sobre el i-nodo –connect_select modifica el campo f_op en el caso del multiplexado en lectura
Operaciones de entrada/salida •Funciones para cerrar descriptores (decrementa el nº de procesos): –pipe_read_release –pipe_write_release –pipe_rdwr_release
Operaciones de entrada/salida •Funciones de creación de un nuevo proceso que hereda la tubería (incrementa el nº de procesos): –pipe_read_open –pipe_write_open –pipe_rdwr_open