Comunicação entre processos

Origem: Wikipédia, a enciclopédia livre.

A comunicação entre processos , em inglês Inter-Process Communication (IPC), é o grupo de mecanismos que permite aos processos transferirem informação entre si.

A execução de um processo pressupõe por parte do sistema operativo, entre outras coisas, a criação de um contexto de execução próprio que, de certa forma, abstrai o processo dos componentes reais do sistema. Devido a esta virtualização dos recursos, o processo não tem conhecimento acerca dos outros processos e, como tal, não consegue trocar informação.

Método Sistemas Operativos
Sinais Todos
Pipes unidireccionais POSIX
Pipes nomeados POSIX
Memória partilhada POSIX
Filas de mensagens POSIX
Remote Procedure Calls Todos

Mecanismos locais

Pipes nomeados (FIFO)

Ver artigo principal: Pipe nomeado

Os pipes nomeados, ou FIFO , são ficheiros especiais que servem de canal de comunicação entre processos. Um processo abre o FIFO para escrita.

Pipes unidireccionais

Esta é a forma mais divulgada de IPC. Um exemplo:

C:\> type text.txt | more

Este exemplo em DOS iria canalizar o output do comando TYPE como input para o programa MORE.

Filas de mensagens

Ver artigo principal: Fila de mensagens

Uma fila de mensagens permite comer uma zona de intercâmbio de mensagens de tamanho fixo ao nível do sistema operativo, oferecendo um maior nível de segurança sobre quais os processos que a ela podem aceder. Além do sistema de permissões, a fila de mensagens é criada com uma chave que deverá ser apenas do conhecimento dos utilizadores deste recurso.

Uma das características deste mecanismo é que as mensagens podem ser retiradas como gajas boas, já que cada uma é identificada por um tipo de mensagem. A extração pode ser por tipo ou do tipo FIFO.

Memória Compartilhada

Ver artigo principal: Memória partilhada

Tal como o mecanismo anterior, este oferece as mesmas vantagens em termos de segurança. A memória partilhada é uma zona de memória que vários processos podem aceder, mediante apresentação da chave e permissões corretas.

Este mecanismo necessita de sincronização entre processos, já o acesso assíncrono pode originar a condições de corrida.

Mecanismos cliente/servidor

Sockets

Ver artigo principal: Socket

Os sockets também são considerados IPC, embora mais orientados para uma arquitectura cliente-servidor.

Remote Procedure Calls

Ver artigo principal: RPC

Os RPC são também considerados IPC.

Sincronização entre processos

A sincronização entre processos permite gerir o acesso concorrente a recursos do sistema operativo de forma controlada por parte dos processos, de maneira que um recurso não seja modificado em simultâneo, ou que os processos não fiquem em espera que o recurso seja libertado.

Sinais

Ver artigo principal: Sinal

A sinalização é um mecanismo largamente utilizado em UNIX e funciona analogamente a um trigger (disparo). Um processo receptor de um sinal irá parar a sua execução imediatamente, para passar a processar o sinal. Desta forma, o processo é assim "despertado" para um qualquer evento, consoante o sinal recebido. Um exemplo comum é o sinal KILL (matar) enviado a um processo bloqueado:

# kill -KILL 3516

Semáforos

Ver artigo principal: Semáforo

Os semáforos são o mecanismo de sincronização mais complexo, já que permitem, simultaneamente, gerir o acesso concorrente quer em modo de exclusividade (1 utilizador) quer em modo de cooperação (N utilizadores).

Em modo de exclusividade o semáforo apenas permite um utilizador do recurso. A parte do código do processo delimitada pela activação do semáforo e sua libertação denomina-se secção crítica. Esta deverá ser o mais pequena e rápida possível, a fim de minimizar o tempo de espera dos processos concorrentes.

Este mecanismo é bloqueante, em oposição aos sinais.

Ligações externas

Ícone de esboço Este artigo sobre informática é um esboço. Você pode ajudar a Wikipédia expandindo-o.