Comunicação entre processos
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)
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
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
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
Os sockets também são considerados IPC, embora mais orientados para uma arquitectura cliente-servidor.
Remote Procedure Calls
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
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
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.