Comunicação entre processos

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa

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[editar | editar código-fonte]

Pipes nomeados (FIFO)[editar | editar código-fonte]

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

Pipes unidireccionais[editar | editar código-fonte]

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[editar | editar código-fonte]

Uma fila de mensagens ou message queue permite criar 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ística deste mecanismo é que as mensagens podem ser retiradas selectivamente, já que cada uma é identificada por um tipo de mensagem. A extração pode ser por tipo ou do tipo FIFO.

Memória Compartilhada[editar | editar código-fonte]

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[editar | editar código-fonte]

Sockets[editar | editar código-fonte]

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

Remote Procedure Calls[editar | editar código-fonte]

Os RPC são também considerados IPC.

Sincronização entre processos[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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