Tube (computador)

Na engenharia de software , um pipe ou pipeline é um mecanismo de comunicação entre processos na forma de uma série de dados, bytes ou bits , acessível em FIFO . O padrão de design que corresponde a esse mecanismo é chamado de filtro. Os tubos do shell , inventados para o UNIX , permitem vincular a saída de um programa a seguir entra no shell e permite, como está, criar filtros . Esses tubos são feitos por meio de um mecanismo subjacente chamado tubos anônimos . Esses canais são destruídos quando o processo que os criou desaparece; em vez disso , os canais nomeados são vinculados ao sistema operacional e devem ser destruídos explicitamente. Esse tipo de mecanismo é obviamente encontrado em todos os sistemas operacionais do tipo Unix, mas também nos sistemas operacionais da Microsoft, no entanto, suas semânticas são significativamente diferentes. Tubos são considerados a implementação não trivial mais antiga de programação modular no nível de arquitetura de um projeto de TI .

Implementação

Os tubos são particularmente eficazes em sistemas operacionais multitarefa, uma vez que todos os processos da cadeia são iniciados simultaneamente. A aquisição de dados é imediatamente processada por todos os processos sucessivos sem a necessidade de acumular uma grande quantidade de dados. Isso também torna possível de facto para maximizar a actividade das unidades de computação .

Normalmente, um mecanismo de sincronização entre processos é configurado, as operações de leitura ou gravação estão bloqueando. Isso significa que, por um lado, a execução do processo de aquisição de dados é suspensa até que todos os dados possam ser gravados no processo de destino que o segue e, por outro lado, a execução do processo de destino fica suspensa até que todos os dados da fonte está disponível. Um deadlock pode então ocorrer, cada um dos processos sendo capaz de esperar pelo outro indefinidamente.


Por motivos de desempenho, uma vez que os processos geralmente não são síncronos, as interfaces de programação que implementam esses mecanismos usam buffers FIFO maiores ou menores. O tamanho é configurável no UNIX. Este fenômeno é encontrado, por exemplo, durante a compressão em formato MP3 em um disco rígido de um arquivo de música reproduzido em um CD . O mecanismo de leitura é bloqueado e mais rápido do que o mecanismo de compactação , então isso permitirá, se o buffer for suficiente, remover o CD da unidade antes que a compactação seja concluída.

Implementação em Unix

No Unix, o tubo é implementado por meio da chamada do sistema pipe (), fork () e exec (). Como um processo pode enviar informações mais rápido do que o próximo pode lê-las, há um buffer gerenciado por kernel associado ao pipe. Quando o buffer está cheio, o processo que invoca a chamada write () é bloqueado até que um processo leia o conteúdo do buffer. No Linux, o tamanho do buffer é de 65.536 bytes.

Tubos de Hartman

Os tubos Hartmann são uma porta deste conceito para os sistemas operacionais VM , Unix e MVS . Esses tubos são mais complexos do que os tubos de shell tradicionais do UNIX, pois permitem a manipulação de tubos com várias entradas e várias saídas. A sintaxe associada ao seu uso é bastante complexa e os riscos de intertravamento são maiores. Essas implementações raramente são usadas em aplicativos UNIX, embora os kernels as suportem. Alguns shells UNIX os suportam por meio de descritores de arquivo arbitrários. Eles são mais fáceis de usar em sistemas operacionais IBM .