Comunicação entre processos - Visão geral
A comunicação entre processos (IPC) é um mecanismo que envolve a comunicação de um processo com outro processo. Isso geralmente ocorre em apenas um sistema.
A comunicação pode ser de dois tipos -
Entre processos relacionados iniciando a partir de apenas um processo, como processos pai e filho.
Entre processos não relacionados, ou dois ou mais processos diferentes.
A seguir estão alguns termos importantes que precisamos saber antes de prosseguirmos neste tópico.
Pipes- Comunicação entre dois processos relacionados. O mecanismo é half duplex, o que significa que o primeiro processo se comunica com o segundo processo. Para obter um full duplex, isto é, para o segundo processo se comunicar com o primeiro, outro tubo é necessário.
FIFO- Comunicação entre dois processos não relacionados. O FIFO é um full duplex, o que significa que o primeiro processo pode se comunicar com o segundo processo e vice-versa ao mesmo tempo.
Message Queues- Comunicação entre dois ou mais processos com capacidade full duplex. Os processos se comunicarão entre si postando uma mensagem e recuperando-a da fila. Depois de recuperada, a mensagem não está mais disponível na fila.
Shared Memory- A comunicação entre dois ou mais processos é obtida por meio de um pedaço de memória compartilhado entre todos os processos. A memória compartilhada precisa ser protegida uma da outra, sincronizando o acesso a todos os processos.
Semaphores- Os semáforos servem para sincronizar o acesso a vários processos. Quando um processo deseja acessar a memória (para leitura ou gravação), ele precisa ser bloqueado (ou protegido) e liberado quando o acesso é removido. Isso precisa ser repetido por todos os processos para proteger os dados.
Signals- Sinal é um mecanismo de comunicação entre vários processos por meio de sinalização. Isso significa que um processo de origem enviará um sinal (reconhecido por um número) e o processo de destino o tratará de acordo.
Note - Quase todos os programas neste tutorial são baseados em chamadas de sistema no sistema operacional Linux (executado no Ubuntu).