Paulo Borba e Augusto Sampaio Centro de Informática Universidade Federal de Pernambuco Especificação de Sistemas Distribuídos
Detalhes sobre o curso
O que o sistema faz? Que serviços o sistema oferece? Que objetos são manipulados pelo sistema? Abstrair detalhes irrelevantes Análise e Projeto Especificação
class Conta { private double saldo; private String numero; Conta (String n) {numero = n; saldo = 0;} void credito(double valor) {saldo = saldo + valor;} void debito(double valor) {saldo = saldo - valor;} String numero() {return numero;} double saldo() {return saldo;} } Implementação
Tanto na especificação quanto na implementação de um sistema temos que considerar não só –as operações que são oferecidas pelo sistema, mas também –quando tais operações podem ser executadas (a ordem em que as operações podem ser executadas) Operações
Quando cada operação pode ser executada? Em que estados ou situações uma operação pode ser executada? Máquina de estados Especificação
Uma máquina de estados real: – ialDeEnsino/Apresentacao/MaquinaDeEsta dosDoPDV.dochttp:// ialDeEnsino/Apresentacao/MaquinaDeEsta dosDoPDV.doc Especificação da ordem de execução das operações: –útil para sistemas sequenciais –essencial para sistemas concorrentes e distribuídos Especificação
class Conta { private double saldo;... synchronized void credito(double valor) { saldo = saldo + valor’; } synchronized void debito(double valor) { saldo = saldo - valor; } synchronized String numero() {return numero;} synchronized double saldo() {return saldo;} } Implementação
Necessário para –evitar interferências indesejadas na execução dos métodos de um objeto –controlar acesso a recursos compartilhados Um objeto só pode executar um método synchronized por vez –Um objeto pode executar vários métodos não sincronizados ao mesmo tempo que está executando um método synchronized Sincronização
class Conta { private double saldo;... synchronized void credito(double valor) { saldo = saldo + valor; notifyAll (); } synchronized void debito(double valor) { while (saldo < valor) wait(); saldo = saldo - valor; }... } Implementação
O comando notifyAll acorda todos os processos esperando para executar um método do objeto que executou o notifyAll –O comando notify só acorda um dos processos (escolha arbitrária) O comado wait só pode ser usado dentro de um método synchronized; o processo executando o comando é posto para esperar e a restrição de sincronização é liberada Monitores
Devem ser usados com muito cuidado: –é fácil introduzir erros e levar o sistema a deadlock ou livelock A especificação do sistema é essencial para guiar a introdução de sincronização ou operações de monitores Sincronização e Monitores
class File { private String text; private File otherPart;... void print(String message) { System.out.println(text+" by thread "+message); } void printAll(String message) { this.print(message); otherPart.printAll(message); }
Sistemas cliente-servidor (2, 3, n camadas) –Sistemas de informação tradicionais Sistemas distribuídos –Sistema de automação de loja –Aplicações para ensino à distância Sistemas Distribuídos
Concorrência é inerente aos sistemas cliente-servidor e distribuídos: –recursos sendo compartilhado, execuções simultâneas É essencial considerar a ordem em que as operações são executadas para evitar interferência, deadlock, e livelock Sistemas Distribuídos
Devido a concorrência, têm um alto grau de não-determinismo A realização de testes não é efetiva para garantir a corretude dos sistemas É necessário utilizar métodos formais para especificação dos sistemas: –garantia de que a implementação corresponde à especificação –abstrair detalhes irrelevantes Sistemas Distribuídos
Z Especificação dos aspectos sequencias Quais são as operações e o que elas fazem? Implementação detalha como a operação é realizada Especificação Formal CSP Especificação dos aspectos concorrentes Quando as operações podem ser executadas e em que ordem? Implementação garante que a ordem de execução é satisfeita
Foco inicial na ordem em que as operações podem ser executadas –depois considera-se o que cada operação deve fazer Outras aplicações para CSP: –projeto de interface com o usuário –fluxo de eventos dos use cases CSP