PROMELA SPIN - GTA / COPPE / UFRJ - Mestrado e Doutorado...

50
André Chaves Mendes Fabrício Jorge Lopes Ribeiro Raphael Melo Guedes Profº: Aloysio de Castro Pinto Pedroza PROMELA SPIN

Transcript of PROMELA SPIN - GTA / COPPE / UFRJ - Mestrado e Doutorado...

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

Operadores

PROMELAVARIÁVEIS E TIPOS

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 - NO ATOMIC

24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes

PROMELADECLARAÇÃO - ATOMIC

24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes

PROMELADECLARAÇÃO - D_STEP

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

XSPINSequência de Simulação

24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes

XSPINSequência de Simulação

24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes

XSPINSequência de Simulaçã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

PROMELAPROTOCOLO BIT ALTERNANTE

24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes

PROMELAPROTOCOLO BIT ALTERNANTE

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

SPINSIMULAÇÃO - BIT ALTERNANTE

24/07/2009COE819 - Tóp. Esp. Validação de Sistemas Concorrentes

SPINSIMULAÇÃO - BIT ALTERNANTE

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