Comunicação entre processos
Last updated
Last updated
Uma vez que entendemos como os computadores evoluíram para um modelo onde múltiplos programas podem ser executados de forma concorrente, e que a principal unidade de concorrência em um sistema operacional é o processo, como podemos fazer dois processos independentes comunicarem entre si?
Afinal, um processo isolado que não conversa com outros processos não serve para muita coisa...
Pelo motivo de serem isolados e terem seu próprio espaço em memória, para comunicação processos precisam compartilhar um canal de comunicação, ou communication channel.
É onde entramos então num conceito muito importante chamado Inter-process communication, ou IPC.
Existem diversas formas de IPC, mas vamos destacar algumas delas, que serão abordadas neste guia.
File descriptors
UNIX Pipes
UNIX Sockets
Antes de entrarmos em detalhe sobre cada uma das formas de comunicação acima, vamos entender como um computador armazena dados persistentes de longa duração.
Sabemos que o computador possui uma memória de trabalho onde diferentes programas podem utilizá-la durante suas execuções. Mas esta memória é volátil e não serve para armazenar dados de longa duração.
Então, utilizamos outro dispositivo físico para isto, que geralmente é chamado de HDD (Hard disk drive), ou simplesmente HD. Ou então, os mais modernos SSD. Independente do dispositivo I/O, o sistema operacional utiliza um sistema de persistência e busca baseado em intervalos, ou ranges.
Como conseguimos aceder a uma informação no dispositivo? Em termos físicos, o sistema operacional precisa saber o intervalo entre o começo da informação e seu término. A este intervalo, damos o nome de file, ou arquivo.
Se agruparmos todos os arquivos/files do sistema operacional em um sistema composto por dicionários, temos o que é chamado de filesystem.
Sabendo que cada processo é isolado na memória de trabalho, não nos resta outra chance para fazer IPC a não ser utilizando o filesystem.
Vamos então, explorar diferentes formas de IPC, começando por file descriptors.