Please enable JavaScript.
Coggle requires JavaScript to display documents.
Capítulo 9 Mecanismos de comunicação - Coggle Diagram
Capítulo 9
Mecanismos de comunicação
9.1 Pipes
É um canal de comunicação unidirecional
entre dois processos.
Características:
Canal de comunicação local entre dois
processos (1:1)
Unidirecional
Síncrono
Orientado a fluxo
Confiável
Capacidade
finita
Geralmente são utilizados para conectar a saída stdout de um processo à entrada stdin de outro processo, permitindo a comunicação entre eles.
Pipes Padrão:
só existem durante a execução da linha de comando ou do processo que os criou, sendo destruídos logo em seguida.
Pipes Nomeados:
independentes de processos e têm um nome próprio, permanecem desde sua criação até serem explicitamente destruídos ou o sistema ser encerrado.
9.2 Filas de mensagens
São mecanismos de comunicação entre vários processos (N:M ou N:1, dependendo da implementação).
Características:
Confiáveis
Prientadas a mensagens
Capacidade finita
Operações de envio e recepção podem ser síncronas ou assíncronas, dependendo da implementação.
Principais chamadas para a utilização de fila de mensagens POSIX em C:
mq_open:
abre uma fila já existente ou cria uma nova fila
mq_setattr e mq_getattr:
permitem ajustar ou obter atributos da fila, como o tamanho máximo da fila, o tamanho de cada mensagem, etc.
mq_send:
envia uma mensagem para a fila. (caso a fila esteja cheia, o emissor fica bloqueado até que a fila seja liberada).
mq_receive:
recebe uma mensagem da fila. (caso a fila esteja vazia, o receptor fica bloqueado até que a fila receba uma nova mensagem).
mq_close:
fecha o descritor da fila criado por
mq_open
mq_unlink:
remove a fila do sistema, destruindo seu conteúdo.
9.3 Memória compartilhada
A comunicação de tarefas em processos distintos dever ser feita pelo núcleo, através das chamadas de sistema, pois não é possível para ambas acessarem variáveis comuns (áreas de memória são distintas e isoladas).
Caso a comunicação pelo núcleo seja frequente ou seja grande a transferência de dados essa comunicação pelo núcleo acaba sendo inviável.
A solução seria criar uma área de memoria comum, que seria utilizada pelos processos sem o custo da intermediação do núcleo
A definição dessas áreas e o processos que acessam as mesmas são gerenciados pelo núcleo, porém, o acesso do conteúdo de cada área é feito pelos processos.
Não há coordenação ou sincronização implícita no acesso à área de memória compartilhada, podendo dois processos escreverem sobre os mesmos dados simultaneamente, podendo gerar erros. Por essa razão, mecanismos de coordenação adicionais podem ser necessários.
Exemplo de criação de uma área compartilhada entre dois processos Pa e Pb:
1.
o processo Pa solicita ao núcleo a criação de uma área de memória compartilhada
2.
o núcleo aloca uma nova área de memória e a registra em uma lista de áreas compartilháveis
3.
o núcleo devolve ao processo Pa o ID da área alocada
4.
o processo Pa solicita ao núcleo que a área seja anexada ao seu espaço de endereçamento
5.
o núcleo modifica a configuração de memória do processo Pa para incluir a área em seu espaço de endereçamento
6.
o núcleo devolve a Pa um ponteiro para a área alocada
7.
O processo Pb executa os passos 4-6 e também recebe um ponteiro para a área alocada
8.
Os processos Pa e Bb comunicam através de escritas e leituras de valores na área de memória compartilhada