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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://web101.leandronsp.com/comunicacao-entre-processos.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
