Shared Variables Analyzer Tool by Oxford University Computing Lab
An analysis tool for concurrent programs with shared variables, simulates programs via CSP network, FDR analysis, Java frontend. Analyzes refinements and outputs results.
Shared Variables Analyzer Tool by Oxford University Computing Lab
E N D
Presentation Transcript
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/