Especificação de Sistemas Distribuídos Paulo Borba e Augusto Sampaio Centro de Informática Universidade Federal de Pernambuco Detalhes sobre o curso • http://www.cin.ufpe.br/~phmb/CSPZ Especificação • 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 Implementaçã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;} } Operações • 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) Especificação credito, debito, saldo, numero EmOperacao • 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: – http://www.cin.ufpe.br/~phmb/CSPZ/Mater 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 Implementaçã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;} } Sincronizaçã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 Implementaçã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; } ... } Monitores • 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 Sincronização e 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 Distribuídos • 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 Sistemas Distribuídos 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 Especificação Formal • 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 • 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 CSP • 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