DCC605: Sistemas Operacionais
2015/2

TP0: Calculadora interprocessos

Liberado: Quinta, 27 de agosto.

Valor: 4 pontos. Individual.

Introdução

Neste trabalho iremos implementar uma calculadora que funciona através do mecanismo mais simples de comunicação interprocessos: passagem de sinais.

Especificação

No Linux, sinais podem ser enviados a processos usando o programa kill -SIGNAL PID, onde SIGNAL é um sinal disponível no sistema (ver man 7 signal). Programas podem informar ao sistema como cada sinal deve ser tratado usando a função sigaction. Neste trabalho iremos implementar uma calculadora que recebe comandos através de sinais. O "protocolo" de comunicação será o seguinte:

Usaremos SIGUSR1 para incrementar o operando atual. Operandos começam em 0 e só podem ter valores positivos. Para passar à calculadora um operando com valor 3, basta enviar o sinal SIGUSR1 três vezes.

Usaremos SIGUSR2 para confirmar entradas de parâmetros. Após enviar a quantidade desejada de sinais SIGUSR1, o usuário da calculadora deve enviar um SIGUSR2 para confirmar o valor do operando. Quando um operando é confirmado, o programa deve imprimir na tela o valor do operando.

Logo após a confirmação de um operando via SIGUSR2, podemos enviar um operando. Usaremos SIGHUP para soma, SIGINT para subtração, e SIGALRM para igual. Ao receber cada operador, a calculadora deve imprimí-lo na tela; quando receber o operador igual, a calculadora deve imprimir o resultado na tela seguido de uma quebra de linha.

A calculadora deve iniciar no modo de recepção de operador, e deve voltar ao modo de recepção de operador após tratar o operador igual.

O sinal SIGSEGV sinaliza o final da operação da calculadora. A calculadora deve fechar após receber o sinal SIGSEGV.

O que deve ser entregue

Deve ser entregue o código do programa da calculadora. Documentação é opcional. Se entregue, deve ser em formato PDF e ter no máximo duas páginas.

Clarificações e dicas

A correção do trabalho será semi-automática; clique aqui para obter um exemplo do teste que será executado. Seu programa deverá seguir exatamente o protocolo de comunicação e formato de saída para ser compatível com o sistema de teste.

Extra

Descreva porque o script de teste (calctest.sh) faz chamadas a sleep. Proponha modificações à especificação da calculadora interprocesso para permitir que ela funcione corretamente sem chamadas a sleep. Implemente suas modificações.