Shared Variables Analyser (SVA) • Ferramenta desenvolvida pelo Computing Laboratory (Oxford University) • Analisa programas concorrentes com variáveis compartilhadas – Simula programas através de uma rede processos CSP – Análise é realizada por FDR de forma transparente • Front-end da ferramenta implementado em Java Fluxo de SVA Programa + propriedades (Shared Variables Language) input.sva Java Parser Representação intermediária (CSPM) Compilador escrito em CSPM + Análise de refinamentos com FDR Resultado das análises (GUI/log) output.csp share2priorities.csp results Rodando SVA • Pré-requisitos: Java 1.6 e FDR2 no PATH • Pacote da ferramenta (sva.tar) • Compilador share2priorities.csp deve estar no diretório • Rodando interface – java InterpreterGUI in.sva • Traduz in.sva para output.csp e roda GUI. Resultados armazenados em results Lista de propriedades GUI Informações de debug Verificar propriedades Programa em SVL • Tipos são inteiros e booleanos • Setup: – atomicidade de expressões – tamanho máximo dos arrays (estáticos) – faixa de valores (se ultrapassado exceção é lançada) • Contém variáveis, constantes e sinais • É uma lista de processos que podem ser parâmetrizados por inteiros • Processo é uma lista de comandos separados por ; – cada comando é delimitado entre { } Exclusão Mútua de Hyman (Setup de SVL) se expressões %%atomic_exprs = false são atômicas %%sba = 3 tamanho de arrays booleanos e inteiros %%sia = 0 %%MinI = 0 mínimo e máximo para inteiros %%MaxI = 3 %%InitI = MinI valor default para inteiros e booleanos %%InitB = false declarações precedidas por %% não são traduzidas pelo compilador Exclusão Mútua de Hyman em SVL variáveis inteiras int count,t=1; bool[] b; sig mutexerror; array de booleanos sinal (evento) P(i) = {iter {b[i] := true; while !(t = i) do {while b[3-i] do skip; t := i processo }; count := count + 1; if count > 1 then sig(mutexerror); count := count -1; mesmo b[i] := false; que: while } true do {} } Prog = <P(1),P(2)> programa Exclusão Mútua de Hyman (Representação intermediária) b[i] := true while !(t = i) ... P(i) = Iter.Sq.( Bassign.(BA.1.i,True), Sq.(While.(Not.Eq.IVar.I.2.Const.i, while b[3-i] ... Sq.(While.(BVar.BA.1.(3-i),Skip), Iassign.(I.2,Const.i)) t := i ), Sq.(Iassign.(I.1,Plus.IVar.I.1.Const.1), count := count + 1 Sq.(Cond.(Gt.IVar.I.1.Const.1, Sig.mutexerror,Skip), if count > 0 ... Sq.(Iassign.(I.1, Minus.IVar.I.1.Const.1), Bassign.(BA.1.i,False))) ) count := count =1 ) b[i] := true ) t=1 Prog = Compile((<<P(1),P(2)>>, (<(IVar.I.2,1)>,<>))) Verificando Propriedades do Programa • Validade de expressões booleanas (BEXPR) – assert always BEXPR in PROGRAM – assert never BEXPR in PROGRAM • Presença de sinais durante a execução – assert nosignal { SIGNALS } in PROGRAM • Sinal outofrange – exceção levantada quando o valor de uma expressão inteira extrapola os limites especificados Exclusão Mútua de Hyman (Propriedades) • Propriedade em SVL assert nosignal {outofrange, mutexerror} in Prog • Propriedade em CSPM assert CHAOS(diff(Events,{|outofrangeT, mutexerrorT|})) [T= Prog Exclusão Mútua de Hyman (Propriedades) Checking output.csp Checking CHAOS(diff(Events,{|outofr angeT,mutexerrorT|})) [T= Prog xfalse BEGIN TRACE example=0 process=1 bvwriteT.BA.1.2.true.0 breq.BE.1 ivevalT.I.2.1.0 beval.BE.1.true bvevalT.BA.1.1.false.0 ... mutexerrorT.1 END TRACE example=0 process=1 Log de FDR (results) Pelo log vemos: (1) expressões não são atômicas, (2) leitura e escrita de variáveis são atômicas Debug do log Exclusão Mútua de Hyman (Propriedades) • Propriedade em SVL assert never (count > 1) in Prog • Propriedade em CSPM assert CHAOS(diff(Events, {|assertionfailedT|})) [T= Compile((<<P(1), P(2), Atomic.Cond.(Not.Gt.IVar.I.1.Const.1,Ski p,Sig.assertionfailed)>>, (<(IVar.I.2,1)>,<>))) Exclusão Mútua de Hyman (Propriedades) Referências • A. W. Roscoe. Compiling Shared Variable Programs into CSP. In Proceedings of PROGRESS workshop 2001, 2001. • A. W. Roscoe and D. Hopkins. Sva, a tool for analysing shared-variable programms. In Proceedings of AVoCS 2007, pages 177–183, 2007. • Ferramenta e artigos em http://web.comlab.ox.ac.uk/activities/concurrenc y/tools/sva/