Filas de mensagens POSIX
O objetivo deste projeto é usar o mecanismo de filas de mensagens POSIX para construir aplicações comunicantes.
Problema
Construir um sistema com dois processos independentes A e B, onde A sorteia pares de números inteiros aleatórios n1
e n2
e os envia a B; o processo B recebe os números aleatórios e devolve sua soma s
ao processo A.
Comportamento do processo A:
estabelece o canal de comunicação while (true) { n1 = random() % 100 n2 = random() % 100 envia n1 e n2 a B recebe soma de B escreve n1, " + ", n2, " = ", soma }
Comportamento do processo B:
estabelece o canal de comunicação while (true) { recebe n1 e n2 de A soma = n1 + n2 aguarda 1 segundo envia soma a A }
Observações
- Este problema deve ser resolvido usando filas de mensagens POSIX (POSIX message queues). Consulte o livro-texto e a documentação online para encontrar exemplos de funcionamento (os exemplos mqueue-send.c e mqueue-recv.c do livro-texto podem ser usados como ponto de partida).
- O primeiro parâmetro da chamada
mq_open
é um identificador de fila. Ambos os processos devem usar as mesma filas para poder comunicar entre si. - Escolha identificadores de fila personalizados (por exemplo:
fila-joao-e-maria
), para evitar conflitos de nomes de filas com outros alunos. Para ver os nomes das filas já criadas por outros alunos, digite “ll /dev/mqueue
”.
Roteiro
- Defina quantas filas serão necessárias para resolver o problema
- Implemente sua solução
- Avalie o comportamento da solução com um processo A e um processo B
- Idem, com dois processos A e um processo B
- Idem, com um processo A e dois processos B
- Idem, com dois processos A e dois processos B
- Se observou problemas nas situações com mais de um processo de cada tipo, qual seria a forma mais adequada de resolvê-los?
A entregar
- Os arquivos
a.c
eb.c
, dos processos A e B (não esqueça de identificar os autores). - Um relatório sucinto (e no formato correto) descrevendo os resultados observados nas experiências.