sistemas concorrentes com csp e java sérgio soares gente
TRANSCRIPT
Sistemas Concorrentes com CSP e Java
Sérgio Soares
GENTe
Objetivos
Aproximar especificações de programas gerar código automaticamente a partir
de especificações
Motivação
Object-Z linguagem de especificação de alto nível
CSP oferece poderosos suportes formais para
projeto de sistemas distribuídos, logo concorrentes
Java difundida linguagem de implementação que
da suporte à distribuição e concorrência.
Concorrência em Java
Monitores comandos
synchronizedwaitnotify, notifyAll
qualificadorsynchronized
class Conta { ... synchronized void credito(double v) { saldo = saldo + v; notifyAll(); } synchronized void debito(double v) { while (saldo < v) wait(); saldo = saldo - v; }}
Concorrência em Java
CSP
Interação e comunicação entre processos por meio de eventos
Descrição da ordem de processamento sincronização total, parcial e interleaving
Automatic model checking FDR
Especificação formal de processos concorrentes e/ou distribuídos
Conta(n,s) = credito.n?v -> Conta(n,s+v)
[]
debito.n?v -> if(s > v) then Conta(n,s-v)
else Conta(n,0)
[]
saldo.n!s -> Conta(n,s)
Banco = Conta(1, 1000) ||| Conta(2, 500)
CSP
Jass - Java with assertions
Assertions descrevem propriedades que devem ser verdadeiras em determinados pontos da execução do programa Especificação formal como parte da
linguagem Especificação documentada no código Pré e pós condições, invariantes e
variantes...
class Conta { ...
public void debito(double v) { /** require saldo >= v; **/ // ... /** ensure changeonly{saldo}; Old.saldo == saldo + v; **/ }}
Jass - Java with assertions
Z
Bancocontas: NUMERO VALOR
CreditoBancoc?: NUMEROv?: VALORc? dom contascontas’ = contas {c? ((contas c?)+v?) }
Especificação
CSP-OZ / CSP-Z Z
dados, alterações no estado
CSPcomunicação entre processos/sistemas,
concorrência, ordem de execução
CSP-OZ
CSP-OZ
TTT Distribuído
CSP-OZ → Jass
CSP-OZ deve ter tipos de dados compatíveis com os de Java para automatizar a geração de código (assertions e assinatura dos métodos) O corpo dos métodos deve ser
implementado manualmente
CSP-OZ → Jass
CSP-OZ-Jass
Não garante corretude (matemática) da implementação implementação não é automática
CSP-OZ-Jass-Java
Limitações
Número limitado de canais de comunicação Não descreve sistemas com estruturas de
comunicação dinâmicasDeve trabalhar com fully synchronized
threads (dois threads não executam um mesmo método ao mesmo tempo) o mecanismo de comunicação de CSP é
síncrono
Trabalhos futurosUma extensão de UML
linguagem de predicados como Object-Z semântica formal precisa substituindo CSP-OZ Uma ligação mais próxima de especificações
em UML com programas Pode solucionar a limitação de CSP-OZ em não
lidar com estruturas de comunicação dinâmicas
Tornar Jass parte da linguagem Java oficial
ReferênciasJass: Java with assertions, May 1999.
http://semantik.informatik.uni-oldenburg.de/~jass.
A. W. Roscoe. The Theory and Practice of Concurrency. Prentice-Hall, 1997.
Clemens Fischer. Software Development with Object-Z, CSP and Java: A Pragmatic Link from Formal Specifications to Programs.
Doug Lea. Concurrent Programming in Java.