promela spin - gta / coppe / ufrj - mestrado e doutorado...
TRANSCRIPT
André Chaves MendesFabrício Jorge Lopes Ribeiro
Raphael Melo Guedes Profº: Aloysio de Castro Pinto Pedroza
PROMELA SPIN
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELA SPININDICE
• Verificação de Modelos• Linguagem PROMELA• Ferramenta SPIN / Xspin• Simulação: Protocolo Bit Alternante
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• A Verificação de Modelos é uma técnica automatizada que, dado
um modelo de estados finitos de um sistema e suas propriedades
lógicas, verifica sistematicamente se essas propriedades se
aplicam ao modelo.
• M |= Ø (M satisfaz Ø) sendo:
• M modelo de estados finitos
• Ø propriedade
MODELOSVERIFICAÇÃO
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
Projeto
Modelo Abstrato Verificadordo Modelo
Implementação
Abstração Manual
Técnicas de Refinamento
Verificação Clássicade Modelos
• Verificação – Verifica o correto funcionamento do modelo M
• Debugging – Encontra erros de sintaxe no modelo M
MODELOSVERIFICAÇÃO E DEBUGGING
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELA - PROcedural MEta LAnguage
Linguagem de modelagem que descreve Sistemas Concorrentes e:Permite a criação de modelos dinâmicosDescreve Protocolos de comunicação via canais de mensagens Utiliza processos que se comunicam através de variáveis compartilhadas e/ou mensagens síncronas ou assíncronasO foco de PROMELA é a interação entre processos.
A sintaxe de especificação é baseada em:Linguagem CCanais para troca de mensagensControle de fluxo
A linguagem fornece mecanismos que abstraem os detalhes que não são relacionados à interação entre os processos.
PROMELADEFINIÇÃO
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
Programas em PROMELA são formados por:Processos (globais)Canais (globais ou locais) Variáveis (globais ou locais)
Processos modelam o comportamento enquanto canais e variáveis globais modelam o ambiente no
qual os processos irão rodar.
PROMELAINTRODUÇÃO
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• Cinco tipos básicos diferentes
• Arrays
• Records (estruturas) INICIA EM 0
DECLARAÇÃO DE VARIÁVEIS
PROMELAVARIÁVEIS E TIPOS
O padrão de valor inicial para as variáveis (local e global) é zero
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• Variáveis devem ser declaradas por:• Designação
• Passagem de parâmetro
• Passagem de mensagem
• Variáveis podem ser usadas em
expressões:• Aritméticas
• Relacionais
• Operadores lógicos
DESIGNAÇÃO =
DECLARAÇÃO + INICIALIZAÇÃO
TESTE IGUAL ==
PROMELAVARIÁVEIS E TIPOS
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
A modelagem com PROMELA consiste na declaração de:
• Tipos• Canais• Variáveis• Processos
mtype = {MSG, ACK}
chan toS = ...chan toR = ...bool flag;
proctype Sender () {
... Corpo do processo
}
proctype Receiver () {
...
}
init {
... procesos criados
}
PROMELAMODELAGEM
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
Um processo
é definido pela declaração proctype.
pode ser executado simultaneamente com os outros processos.
pode se comunicar com outros processos através de variáveis globais (compartilhadas) ou canais.
Proctype Sender (chan in; chan out) {
bit sndB, rcvB;
do
:: out ! MSG, sndB ->
in ? ACK, rcvB;
if
:: sndB == rcvB -> sndB = 1-sndB
:: else -> skip
fi
od
}
Nome Parâmetros Formais
Body
Podem haver vários processos do mesmo tipo
Cada processo tem seu próprio:
estado local
contador de processos
variáveis locais
PROMELAPROCESSOS
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• Um processo (proctype) consiste de:NomeLista de parâmetrosDeclaração de variáveis locaisBody
PROMELAPROCESSOS
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• São inicializados usando a declaração run• Podem ser criados em qualquer ponto durante a execução• Processos também podem ser criados adicionando active antes da
declaração proctype• Proctype apenas define o processo, mas não instancia nenhum
processo novo
; e -> são separadores de declarações
PROMELAPROCESSOS
int turno;proctype P0(){(turno==1); turno=0;
}active proctype P1(){(turno==0)-> turno=1;
}init {run PO
}
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
state = 0, 1 ou 2
PROMELAPROCESSOS
Interleaving entre processos
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• Pode-se usar a palavra atomic seguida de um bloco de declarações (delimitados por chaves) para indicar que a sequência é única e indivisível
• Neste caso, na sequência atômica não é permitido interleaving de declarações de outros processos
PROMELADECLARAÇÃO - ATOMIC
byte state = 1; proctype A() { atomic{
(state==1) -> state++; };
} proctype B() {atomic{
(state==1) -> state--;};
} init { run A(); run B();
}
state = 0 ou 2
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• É uma versão da declaração atomic, porém nenhum estado intermediário é gerado
e/ou gravado
• Contém somente passos determinísticos
• d_step é normalmente reservado para fragmentos do código, enquanto que o
atomic é preferrido em implementações síncronas.
• d_step pode existir dentro de uma sequência atomica, mas não vice-versa
• atomic e d_step podem ser usados para diminuir o número de estados do modelo.
PROMELADECLARAÇÃO - D_STEP
d_step { if::a>=b -> MAX = a; branch = 1::a>=b -> MAX = b; branch = 2
fi }
Sempre a primeira sentença verdadeira será escolhida, branch terá valor 1.
d_step {
temp = b;
b = a;
a = temp
}
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELADECLARAÇÃO - IF
A sequência de declarações é precedida por ::
• Se existir uma sentença executável, esta será executada• Se existir mais de uma, o SPIN aleatoriamente escolherá uma delas
• Caso nenhuma das escolhas seja executável, o processo ficará bloqueado até que ao menos uma delas passe a ser
• Para evitar o bloqueio podemos usar o skip ou timeout
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELADECLARAÇÃO - DO
• Se existir uma sentença executável, esta será executada• Se existir mais de uma, o SPIN aleatoriamente escolherá uma delas
• Caso nenhuma das escolhas seja executável, o processo ficará bloqueado até que ao menos uma delas passe a ser
• Após execução de uma sentença, uma nova análise de executabilidade será realizada e a execução continua na estrutura
• Para evitar o bloqueio podemos usar o break e ou o timeout
O do funciona como um loop
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELADECLARAÇÃO - TIMEOUT
O timeout pode ser visto como um else global
• Modela uma condição especial que representa uma situação em que nenhum dos processos podem mais avançar
• Torna-se executável apenas quando nenhuma outra declaração em todo sistema distribuído poder ser executada
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELADECLARAÇÃO - ASSERT
• Declarações assert são do tipo: assert(boolean_condition)
• Esta declaração é usada no processo de verificação
• Caso a condição booleana seja verdadeira, nada acontece
• Caso a condição seja falsa, a verificação falha
byte state = 1; proctype A() {
(state==1) -> state++; }
proctype B() {(state==1) -> state--;
}
init { run A(); run B();assert(state != 1)
}
Error: assertion violated
spin: text of failed assertion:assert((state!=1))
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELACOMUNICAÇÃO - CANAIS
• Canais de mensagens são usados para modelar a
transferência de dados entre processos
• Canais de mensagens em PROMELA, possuem sintaxe similar
a dos canais de comunicação de Communicating Sequential
Processes (CSP) (C.A.R. Hoare)
• Canais de mensagens:
São declarados local ou globalmente
Podem ser passados como parâmetros
Podem ser enviados por outros canais
São FIFO
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELACOMUNICAÇÃO - CANAIS
TRANSMISSOR RECEPTOR
MSG
ACK
s2r
r2s
s2r!MSG
r2s?ACK
s2r?MSG
r2s!ACK
! ENVIO? RECEPÇÃO
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELACOMUNICAÇÃO - CANAIS
• A palavra reservada chan é utilizada para indicar a declaração de uma variável do tipo canal
• PROMELA suporta a declaração de arrays de canais
• A mera declaração de canais é insuficiente. Canais precisam ser inicializados.
• A inicialização do canal define qual o tamanho do buffer de mensagens que será usado e qual o formato das mensagens que ele suporta
chan qname = [16] of {byte, int, chan}chan a = [10] of {int};chan b = [1] of {chan, int};chan c[3] = [4] of {bool};
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELACOMUNICAÇÃO - CANAIS
Canal = FIFO-buffer (para dim>0)
! Envio – coloca uma mensagem no canal - Ch ! <expr> O valor de <expr> deve corresponder ao tipo da declaração do canalO envio é executado se o canal não estive cheio
? Recepção – retira a mensagem do canal Ch ? <var>
•Se o canal não estiver vazio, a mensagem é retirada do canal e gravada dentro de <var>s
Ch ? <const>•Se o canal não estiver vazio e a mensagem que será recebida for equivalente a <const>, a mensagem é retirada do canal
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELACOMUNICAÇÃO
Rendez-vous <dim==0>O número dos elementos no canal é igual a zeroSe um envio pelo ch! é habilitado e se há um recebimento correspondente (ch?), ambas declarações são habilitadas desde que haja um equivalência no tipo da constante.
Exemplo:chan ch = [0] of {bit, byte}- P quer transmitir ch ! 1, 3+7- Q quer receber ch ? 1, x- Então depois da transmissão x será igual a 10
x deve ser declarado como byte
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
SPINDEFINIÇÃO
• SPIN - Simple Promela INterpreter
É uma ferramenta de análise de programas descritos em PROMELA que se destina a verificação formal de sistemas concorrentesUsa Linear Temporal Logic (LTL) como linguagem de especificação de propriedadesVerifica a consistência lógica e detecta erros
especialmente de protocolos de comunicação de dados
Possui interface gráfica chamada de Xspin
Encontra-se na versão 5.2 (maio de 2009)
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
Dado um modelo especificado em PROMELA, o SPIN pode:Realizar simulações randômicas da execução do sistemaGerar um programa em CVerificar a correção das propriedades do sistema, como:
Ausência de DeadlockEstados não alcançáveisManutenção de InvariantesLivelocks, StarvationFórmulas expressas em LTLCondições de funcionamento, afirmação de violaçãoPropriedades seguras (o sistema nunca atinge um estado indesejado) Propriedades vivas (o sistema eventualmente atinge um estado
desejado)
SPININTRODUÇÃO
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
SPINPROPRIEDADES
Propriedades Seguras:
Nada de “ruim” acontecerá
Invariância – X sempre menor
que Y
Livre de Deadlock – o sistema
nunca alcançará um estado onde
nenhuma ação será possível
SPIN – Procura uma
sinalização de algo “ruim”. Se
não houver esta sinalização a
propriedade é satisfeita
Propriedades Vivas:
Alguma coisa “boa” poderá
eventualmente acontecer
Eventualmente o sistema poderá
finalizar
Resposta - Se a ação X ocorre,
então eventualmente a ação Y
ocorrerá
SPIN – Encontrar um loop
(infinito) no qual não acontecerá a
coisa “boa”. Se não encontrar este
loop a propriedade é satisfeita.
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
XSPINCARACTERÍSTICAS
O XSPIN permite ao usuário:Editar modelos em PROMELAVerificar a sintaxe
•Simular modelos em PROMELA de forma:•Randômica•Interativa•Guiada
Verificar modelos em PROMELAPossui características adicionais, como:
•Xspin sugere abstração para o modelo em PROMELA•Xspin pode desenhar o diagrama de estados para cada processo•Gerencia propriedades LTL •Guia de ajuda sobre Verificação e Simulação
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
LÓGICA TEMPORALFÓRMULAS LTL
As formulas LTL são usadas para especificar propriedades vivas
LTL = LÓGICA PROPOSITAL + OPERADORES TEMPORAIS• [ ] p → Sempre p• <> p → Algum ponto no futuro p• p U q → p é verdadeiro até que q torne-se verdadeiro
Alguns parâmetros LTL:• Invariância [ ] (p)• Resposta [ ] ( (p) -> (<> (q) ))• Precedência [ ] ( (p) -> ((q) U (r) ))• Objetivo [ ] ( (p) -> <> ( (q) || (r) ))
O Xspin contém um gerenciador de LTL
para edição, gravação e obtenção de
propriedades LTL
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
<>p – p verificar-se-a algures no futuro. (finally p)
[]p – p verificar-se-á sempre no futuro. (globally p)
()p – p verificar-se-á no próximo instante. (next p)
pUq – p verificar-se-á até q se verificar. (p until q)
LÓGICA TEMPORALPROPRIEDADE LTL
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• [](<>p) (“allways there will be a state such that p”) (existirá sempre um estado em que se verifique p)
• <>([]p) (“all the time for a certain time onwards”) (a partir de um determinado estado, verifica-se sempre p)
LÓGICA TEMPORALFÓRMULAS ABREVIADAS DE LTL
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• Reachability propertystates that some particular situation can be reached• Safety propertyexpresses that, under certain conditions, something never occurs• Liveness propertyexpresses that, under certain conditions, something will ultimately occur• Fairness propertyexpresses that, under certain conditions, something will (or will not) occur infinitely often.• Deadlock-freeness propertywhatever the state reached may be, there will exist an immediatesuccessor state.
LÓGICA TEMPORALPROPRIEDADE LTL
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
“Safety property”Exemplo: A e B nunca terão acesso simultâneo à região crítica.Uma sequência finita pode servir para provar a sua falsidade
“Liveness property”Exemplo: Se A pretende entrar na região crítica então isso irá acontecer.Só se pode provar a falsidade através de sequências infinitas (uma vez que, toda a sequência finita pode ser aumentada de forma a satisfazer a condição)
Exemplos:O programa P termina?A condição C1 é verdadeira até que a condição C2 se verifique?As condições C1 e C2 são mutuamente exclusivas?O programa P não tem “deadlocks”?
LÓGICA TEMPORALPROPRIEDADE LTL
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
[] <> p “existirá sempre um estado em que se verifique p”<> [] p “a partir de um determinado estado, verifica-se sempre p”
LÓGICA TEMPORALPROPRIEDADE LTL
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
SPINARQUITETURA
φ TradutorLTL
spin (exec)
Simulador
Geradorverificador
Verificador
Xspin ouJspin
Contra-exemplo
Programa C
PROMELAModelo M
DeadlocksPropriedades SegurasPropriedades vivas
Edição de JanelasOpções de SimulaçõesOpções de Verificação
pan.*
FalsoExecutável pan
SPIN InterativaRandômicaGuiada
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
XSPINCARACTERÍSTICAS
No menu run encontramos todas as opções de execução para a
sequência de trabalho no Xspin:
Verificar a sintaxe para obter as indicações de advertências (Warnings)
Simular randomicamente para promover a depuração (Debugging)
Verificar as propriedades (Afirmações nunca assumidas)
Executar em partes uma verificação de redundância
Executar a verificação para a prova exata.
Simulação Guiada para inspeção de erros informado pelas opções de
verificação
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
PROMELAPROTOCOLO BIT ALTERNANTE
Funcionamento do Protocolo Bit Alternante
Para toda mensagem, o transmissor alterna o bit.
O receptor confirma a recepção enviando uma mensagem de
confirmação com o mesmo bit recebido.
Se o transmissor receber a confirmação do receptor, ele envia uma
nova mensagem alternando o bit.
Caso o receptor receba mensagens com o mesmo bit ele excluirá a
mensagem e encaminha novamente a confirmação.
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
SPINPROTOCOLO BIT ALTERNANTE - PROMELA
mtype = { msg0, msg1, ack0, ack1 };chan sender = [1] of { mtype };chan receiver = [1] of { mtype };
active proctype Sender(){do::
if:: receiver?msg0;:: skipfi;do:: sender?ack0 -> break:: sender?ack1:: timeout ->
if:: receiver!msg0;:: skipfi;
od;::
if:: receiver?msg1;:: skipfi;
do:: sender?ack1 -> break:: sender?ack0:: timeout ->
if:: receiver!msg1;:: skipfi;
od;od}
active proctype Receiver() {do::
do:: receiver?msg0 -> sender!ack0; break;:: receiver?msg1 -> sender!ack1od;do:: receiver?msg1 -> sender!ack1; break;:: receiver?msg0 -> sender!ack0od;
od}
24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes
• Algumas notas do material apresentado por Flavio Lerda como parte do Ed Clarke’s model-
checking course.
http://www.cs.toronto.edu/~chechik/courses05/csc2108/Lectures/SPINlecture.2up.pdf. Último
acesso em 15 de julho de 2009.
• Material utilizado na disciplina MAT A58 - Sistemas Operacionais da UFBA,
https://disciplinas.dcc.ufba.br/pub/MATA58/MaterialDidatico/Spin.ppt. Último acesso em 15 de
julho de 2009.
• Concise PROMELA Reference, http://spinroot.com/spin/Man/Quick.html. Último acesso em 15
de julho de 2009.
• SPIN Online Reference, Tutorial_1.pdf, Tutorial_2.pdf, SpinIntro.pdf.
http://spinroot.com/spin/Man/. Último acesso em 15 de julho de 2009.
• Métodos Formais em Engenharia de Software, professora Ana Paiva, Universidade do Porto –
FEUP, http://paginas.fe.up.pt/~apaiva/teach/0809/MFES.htm
• Mordechai Ben-Ari, “Principles of the Spin Model Checker”, 2008, Springer
PROMELA SPINREFERÊNCIAS