Tubo (computadora)

En la ingeniería de software , una tubería o una tubería es un mecanismo de comunicación entre procesos en forma de una serie de datos, bytes o bits , accesibles en FIFO . El patrón de diseño que corresponde a este mecanismo se llama filtro. Los tubos de la cáscara , inventados para UNIX , permiten enlazar la salida de un programa luego entra en la cáscara y permite, tal cual, crear filtros . Estos tubos se fabrican a través de un mecanismo subyacente llamado tubos anónimos . Estas canalizaciones se destruyen cuando desaparece el proceso que las creó; en cambio , las canalizaciones con nombre están vinculadas al sistema operativo y deben destruirse explícitamente. Este tipo de mecanismo se encuentra, por supuesto, en todos los sistemas operativos de tipo Unix, pero también en los sistemas operativos de Microsoft, sin embargo, su semántica es significativamente diferente. Los tubos se consideran la implementación no trivial más antigua de la programación modular a nivel de arquitectura de un proyecto de TI .

Implementación

Los tubos son particularmente efectivos en sistemas operativos multitarea, ya que todos los procesos de la cadena se inician simultáneamente. La adquisición de datos es procesada inmediatamente por todos los procesos sucesivos sin la necesidad de acumular una gran cantidad de datos. Esto también hace que sea posible de facto para maximizar la actividad de las unidades de computación .

Por lo general, se configura un mecanismo de sincronización entre procesos, las operaciones de lectura o escritura se bloquean. Esto significa que por un lado se suspende la ejecución del proceso de adquisición de datos hasta que se puedan escribir todos los datos en el proceso de destino que le sigue y por otro lado se suspende la ejecución del proceso de destino hasta que se hayan eliminado todos los datos de la fuente. disponible. Entonces puede ocurrir un punto muerto , cada uno de los procesos puede esperar al otro indefinidamente.


Por motivos de rendimiento, dado que los procesos suelen ser no síncronos, las interfaces de programación que implementan estos mecanismos utilizan búferes FIFO más grandes o más pequeños. El tamaño se puede configurar en UNIX. Este fenómeno se encuentra, por ejemplo, durante la compresión en formato MP3 en un disco duro de un archivo de música reproducido en un CD . El mecanismo de lectura es en bloque y más rápido que el mecanismo de compresión , por lo que esto permitirá, si el búfer es suficiente, quitar el CD de la unidad antes de que se complete la compresión.

Implementación bajo Unix

En Unix, el tubo se implementa a través de la llamada al sistema pipe (), fork () y exec (). Dado que uno proceso puede enviar información más rápido que la próxima puede leerlo, hay un kernel logrado memoria intermedia asociada con el tubo. Cuando el búfer está lleno, el proceso que invoca la llamada write () se bloquea hasta que un proceso lee el contenido del búfer. En Linux, el tamaño del búfer es de 65.536 bytes.

Tubos de Hartman

Los tubos Hartmann son un puerto de este concepto para los sistemas operativos VM , Unix y MVS . Estos tubos son más complejos que los tubos de carcasa UNIX tradicionales, permiten la manipulación de tubos con múltiples entradas y múltiples salidas. La sintaxis vinculada a su uso es bastante compleja y los riesgos de enclavamiento son mayores. Estas implementaciones rara vez se utilizan en aplicaciones UNIX, aunque los núcleos las admiten. Algunos shells de UNIX los admiten mediante descriptores de archivo arbitrarios. Son más fáciles de usar en los sistemas operativos de IBM .