especificação de sistemas distribuídos modelo cspm - estacionamento equipe: rafael araújo...
TRANSCRIPT
Especificação de Sistemas Distribuídos
Modelo CSPm - EstacionamentoEquipe:
Rafael Araújo ([email protected])Ingridd Brito ([email protected])
Sistema
• Sistema de estacionamento de um local genérico;• Possui possibilidade de pagamento tanto em um Caixa
quanto na Cancela de Saída (caso o pagamento seja necessário);• O pagamento pode ser realizado utilizando cartão de crédito
ou dinheiro se realizado no Caixa;• Se realizado na Cancela de Saída, o único meio aceito é via
cartão de crédito.
Sistema
• Os veículos poderão entrar por uma das Cancelas de Entrada disponíveis;• Os mesmos poderão realizar o pagamento no caixa, dadas as
devidas sincronizações;• Ou podem realizar o mesmo na Cancela de Saída;• O Servidor é responsável por armazenar e gerenciar a
sequência de tuplas (placa, hora) dos carros que entram no estacionamento através da Cancela de Entrada.
Componentes
• O sistema é composto por:
• Datatypes, conjuntos e sequências;• Funções.• Canais e eventos;• Processos;
Datatypes, Conjuntos e Sequências
• Datatypes:
• datatype PLACAS = KGC3920 | KHJ2103 | KLA9123 | KFL1984
• Representam as placas dos veículos;
Datatypes, Conjuntos e Sequências
• Datatypes:
• datatype MENSAGEM= RetireTicket | PlacaExistente| BemVindo| TempoEsgotado| Obrigado
• Representam as mensagens que são exibidas para o usuário/veículo durante algumas das operações;
Datatypes, Conjuntos e Sequências
• Alguns dos conjuntos presentes no sistema:
• RANGE = {1..3} //Capacidade de determinados processos.
• HORA = {1200, 1300, 1400, 1500} -- Simulam um horário de entrada de um veículo.
• VEICULOS = {1..2} // Quantidade de veículos.
• Representam as mensagens que são exibidas para o usuário/veículo durante algumas das operações;
Datatypes, Conjuntos e Sequências
• Sequência utilizada no Sistema:
• TICKETS = <>
• Esta sequência armazena pares de placas e horas (i.e. (KGC3920, 1200)) de modo a representar os horários os quais as placas (veículos) entraram no estabelecimento.
Funções
• Funções utilizadas no sistema (assinaturas):
• placaJaCadastrada(p, <>)• placaJaCadastrada(p, <(placa, hora)> ^ ticketsRestantes)
• Utilizada para determinar se uma placa já existe na sequência para que não haja veículos com a mesma placa em horários diferentes.
Funções
• Funções utilizadas no sistema (assinaturas):
• GetHora(p, t) = { h | h <- HORA, elem((p, h), t) }
• Utilizada para retornar um horário de entrada (h) relacionado a uma determinada placa (representada por p).
Funções
• Funções utilizadas no sistema (assinaturas):
• RemovePlaca(placa, <>) = <>
• RemovePlaca(p, <(placa, hora)> ^ placasRestantes)
• Utilizada para remover a placa de uma sequência, onde a entrada é dada por uma própria sequência que é dividida em head e tail através da concatenação de elementos e é analisada separadamente até que a placa desejada seja encontrada, então, a concatenação dos elementos previamente analisados e os restantes serão retornados como uma única sequência.
Canais e Eventos
• Alguns dos Canais de Dados e Eventos presentes no sistema:
• channel levantaCancela, baixaCancela
• Representam ações de um processo que não recebem dados, normalmente utilizadas como alfabeto de sincronização ou operações únicas;
Canais e Eventos
• Alguns dos Canais de Dados e Eventos presentes no sistema:
• channel enviaDados: RANGE.PLACAS.HORA
• Representam ações de um processo que recebem dados, onde há a comunicação (output) de um processo X para a entrada (input) de um processo Y. Estas representam operações que operam sobre dados ou que irão gerar eventos baseados em valores transientes (calculados) sobre tais dados;
Processos
• Exemplo de Processo encontrado no sistema:
• CancelaEntrada(n) = recebeDados!n?p -> leHora!n?hora -> enviaDados!n!p!hora -> entregaTicket.n -> abrirCancela.n -> display!BemVindo-> fecharCancela.n -> CancelaEntrada(n)
• Representam um conjunto de ações (eventos) com trasmissão de dados ou não, estes denotam o comportamento do processo de maneira contínua;
Processos
• Exemplo de Processo encontrado no sistema:
• Servidor(T) = (enviaDados?n?placa?hora -> if (not placaJaCadastrada(placa, T)) then Servidor(T ^ <(placa, hora)>) else display!PlacaExistente -> Servidor(T))
• Neste caso, faz-se o uso da sequência presente no sistema, estruturas de controle if-then-else e avaliação de expressões provenientes de funções.
Avaliações
• Para determinar algumas propriedades do sistema são utilizadas algumas asserções, tais como:
• assert CancelaEntrada(1) :[deterministic]
• assert CancelaEntrada(1) :[deadlock free]
• assert CancelaEntrada(1) :[livelock free]
• Estas representam, respectivamente, a presença de determinismo em um processo (ou composições, escolhas, etc. entre eles), a presença de deadlock e livelock, dada a análise unitária ou em conjunto com outros processos.
Avaliações
• Exemplo de asserções relativas a interação entre processos:
• CancelaEntradaANDVeiculo = CancelaEntrada(1) [|{|recebeDados|}|] Veiculo(1)
• assert CancelaEntradaANDVeiculo :[deterministic]
• assert CancelaEntradaANDVeiculo :[deadlock free]
• assert CancelaEntradaANDVeiculo :[livelock free]
• Mesmos conceitos presentes na análise de um único processo, a diferença é a avaliação como um todo para quaisquer processos envolvidos e suas operações, havendo sincronização ou não.
Refinamento
• Para availiar se um processo "melhora" o outro em determinado modelo (Traces, Falhas, Falhas-Divergências) foram utilizadas as seguintes asserções:
assert TotalVeiculos_UNREF [T= TotalVeiculos_REF
assert TotalVeiculos_UNREF [F= TotalVeiculos_REF
assert TotalVeiculos_UNREF [FD= TotalVeiculos_REF
Refinamento
• Para esta avaliação, foram utilizados os seguintes processos:
• TotalVeiculos_UNREF = |~| x: VEICULOS @ Veiculo(x) --Processo com não-determinismo proposital, proveniente da escolha interna
• TotalVeiculos_REF = [] x: VEICULOS @ Veiculo(x) -- Processo que refinará o anterior, utilizando escolha externa
Melhorias no Modelo
• Interação entre Processos da Cancela de Saída e Veículo;
• Utilização do servidor ao sincronizar dados com o Caixa, ao invés de utilizar uma função como filtro de valores.
Considerações Finais
• Todos os processos foram avaliados nas 3 proposições de asserção;
• Deadlocks esperados estão marcados no modelo (.csp);
• Operações de dados foram realizadas utiizando índices para indicar qual o evento e qual o processo que originou este evento, durante a sincronização / paralelismo.