140 likes | 221 Views
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
E N D
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) output.csp Compilador escrito em CSPM + Análise de refinamentos com FDR share2priorities.csp Resultado das análises (GUI/log) 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
GUI Lista de propriedades 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 • são atômicas %%atomic_exprs = false %%sba = 3 %%sia = 0 %%MinI = 0 %%MaxI = 3 %%InitI = MinI %%InitB = false • tamanho de arrays booleanos e inteiros • mínimo e máximo para inteiros • valor default para inteiros e booleanos 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; P(i) = {iter {b[i] := true; while !(t = i) do {while b[3-i] do skip; t := i }; count := count + 1; if count > 1 then sig(mutexerror); count := count -1; b[i] := false; } } Prog = <P(1),P(2)> array de booleanos sinal (evento) processo mesmo que: while true do {} 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, Sq.(While.(BVar.BA.1.(3-i),Skip), Iassign.(I.2,Const.i)) ), Sq.(Iassign.(I.1,Plus.IVar.I.1.Const.1), Sq.(Cond.(Gt.IVar.I.1.Const.1, Sig.mutexerror,Skip), Sq.(Iassign.(I.1, Minus.IVar.I.1.Const.1), Bassign.(BA.1.i,False))) ) ) ) Prog = Compile((<<P(1),P(2)>>, (<(IVar.I.2,1)>,<>))) while b[3-i] ... t := i count := count + 1 if count > 0 ... count := count =1 b[i] := true t = 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) • Propriedadeem 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) Pelo log vemos: (1) expressões não são atômicas, (2) leitura e escrita de variáveis são atômicas Checking output.csp Checking CHAOS(diff(Events,{|outofrangeT,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 Debug do log Log de FDR (results)
Exclusão Mútua de Hyman (Propriedades) • Propriedadeem 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,Skip,Sig.assertionfailed)>>, (<(IVar.I.2,1)>,<>)))
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/concurrency/tools/sva/