120 likes | 260 Views
SVA e SVL. Sidney Nogueira e André Didier. Ambiente. Versão mais nova de sva (sva2 ) Descompactar versao mais nova ant run Java 1.6 FDR 2.91 (busca no google fdr 2.91 oxford ) e xport FDRHOME=. Roteiro.
E N D
SVA e SVL Sidney Nogueira e André Didier
Ambiente • Versão mais nova de sva (sva2) • Descompactar versao mais nova • antrun • Java 1.6 • FDR 2.91 (busca no googlefdr 2.91 oxford) • export FDRHOME=...
Roteiro • Criar um algoritmo usando seções atômicas. Verificar as propriedades de seção crítica. • Usar diretiva da linguagem • Reescrever o algoritmo sem o auxílio das seções atômicas. Verificar as mesmas propriedades de antes. • Algoritmo tie-breaker • Modificação no algoritmo para atender às propriedades de acesso à seção crítica
Propriedades de seção crítica • Exclusão Mútua: no máximo um processo está em sua seção crítica. • Ausência de deadlock e livelock: se dois ou mais processos tentarem entrar em suas seções críticas, pelo menos um terá sucesso • Ausência de atraso desnecessário: se um processo estiver tentando entrar em sua seção crítica e os outros estiverem em seções não-críticas ou tiverem terminado, então o primeiro processo não é impedido de entrar em sua seção crítica. • Entrada eventual: Um processo tentando entrar em sua seção crítica eventualmente conseguirá.
Diretiva atomic • Crie uma especificação que compartilha uma variável compartilhada count. A especificação deve apenas incrementar e decrementar essa variável. • O processo deve ter acesso exclusivo para que a ordem de leitura ou escrita não altere o resultado: count deve ser menor ou igual a 1. • Use a diretiva atomic de SVL.
Algoritmo de seção crítica • Substitua a diretiva atomic pelo algoritmo tie-breaker visto em aula: • Verifique que a propriedade de count ser menor ou igual a 1 continua sendo satisfeita. • Pergunta-se: por que essa solução não atende às propriedades de seção crítica? Como identificar o problema com SVA e resolvê-lo? • process CS2 { while (true) { in2=true; while (in1) skip; critical section; in1=false; /* exit */ noncritical section; }} • process CS1 { while (true) { in1=true; while (in2) skip; critical section; in1=false; /* exit */ noncritical section; }}
Resolução do deadlock • Uso da variável last. process CS1 { while (true) { in1=true; last=1; while (in2 and last==1) skip; critical section; in1=false; noncritical section; } } process CS2 { while (true) { in2=true; last=2; while (in1 and last==2) skip; critical section; in2=false; noncritical section; } }
Verificando refinamentos • extatomic.csp • Verificar refinamentos entre PP e QQ • Contexto sequencial • Ext_atomic = true/false • Escreva • um programa RR que refine PP e QQ no contexto geral com ext_atomic = false • um programa TT o mais simples que refina todos acima, porém não é refinado por nenhum outro
Bakery • BakeryDraft.csp • Ver se com maxD refina a especificação %%SPEC = css?i -> cse!i -> SPEC • Trocar maxD por MaxB • Verificar novamente
Refinando máximos • Verificar com SVA quais implementações são refinamentos uma da outra (ver o porque) • MaxA • MaxB • MaxC • MaxD
CSP vs CSP de SVA • mappingSample.csp • Incluir processo P(i) e verificar em SVA se P(i) equivale a Psva(i)
Invariante • Verifique em SVL se o invariante a seguir é válido nas implementações de Max • turn[i]’>= turn[i]