Arquitetura entre Sistemas Operativos/Mecanismos de Comunicação entre Processos
Mecanismos de Comunicação entre Processos
[editar | editar código-fonte]A comunicação entre processos é o que permite a transferência de informação entre processos. Processos e threads interagem para trabalhar conjutamente num sistema, estes trocam dados, utilizam os serviços de comunicação fornecidos pela máquina e S.O e seguem protocolos de comunicação para que se possam entender.
Há três formas de comunicação entre Processos:
- Mecanismos locais ( Pipes )
- Mecanismos cliente/servidor ( Sockets )
- Sincronização entre processos
Mecanismos Locais
[editar | editar código-fonte]Pipes nomeados
[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]Uma forma de IPC é
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 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]Dois ou mais processos utilizam a região de memória compartilhada, conectando-a no seu espaço de endereçamento.
Deve se ter a garantia de que os dois processos não estejam gravando dados no mesmo local simultaneamente.
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]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]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.
Um dos primeiros mecanismos de comunicação interprocessos disponíveis em sistemas UNIX. • São interrupções de software que notificam ao processo que um evento ocorreu, são utilizados pelo núcleo.
- Permitem somente o envio de uma palavra de dados (código do sinal (1 a 64)) para outros processos.
- Não permitem que processos especifiquem dados para trocar com outros processos.
- Dependem do SO e das interrupções geradas por software suportadas pelo processador do sistema.
- Quando ocorre um sinal, o SO determina qual processo deve receber o sinal e como esse processo responderá ao sinal.
Quando sinais são gerados
- Criados pelo núcleo em resposta a interrupções e exceções, os sinais são enviados a um processo ou thread.
- Em consequência da execução de uma instrução (como falha de segmentação)
- Em um outro processo (como quando um processo encerra outro) ou em um evento assíncrono.
Sinais POSIX
[editar | editar código-fonte]Estão definidos 64 sinais.
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
• Um kill -9 pid tem o mesmo efeito de um kill -SIGKILL pid