> For the complete documentation index, see [llms.txt](https://web101.leandronsp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://web101.leandronsp.com/comunicacao-entre-processos.md).

# Comunicação entre processos

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? &#x20;

Afinal, um processo isolado que não conversa com outros processos não serve para muita coisa...

<figure><img src="/files/MXvE6eXBX8zErmHnLm5g" alt=""><figcaption></figcaption></figure>

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**.

## 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*.&#x20;

### Como os dados persistentes são armazenados

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.&#x20;

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**.

<figure><img src="/files/PJSp3BhBoQnNlgVREKo5" alt=""><figcaption></figcaption></figure>

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*.&#x20;

Vamos então, explorar diferentes formas de IPC, começando por **file descriptors**.
