PWiR lab 2: Spin - wprowadzenie

Spin jest narzędziem do symulacji i formalnej weryfikacji systemów współbieznych i rozproszonych. Językiem wejściowym jest PROMELA. Narzędzie powstało w Bell Labs w roku 1991, gdzie jest rozwijane do chwili obecnej (ostatnia wersja 6.2.5 z maja 2013). Siłą Spina są implementacje wielu znanych efektywnych metod analizy systemów współbieżnych. Zasadniczo, narzędzie to zbudowano z myślą o modelowaniu i weryfikacji protokołów komunikacyjnych, natomiast nadaje się ono także wyśmienicie do dydaktyki programowania współbieżnego i rozproszonego. W Spinie nie zaimplementowano natomiast metod weryfikacji symbolicznej, szeroko stosowanych w przemysłowej weryfikacji hardware'u.

Literatura

Pytania


Cel


Spis treści

  1. Pliki, z których będziemy korzystać
  2. Promela w Emacs'ie i w Vim'ie
  3. Podstawowe konstrukcje Promeli
  4. Ekstremalne przeploty - weryfikacja przy użyciu asercji
  5. Siła niedeterminizmu (ćwiczenie samodzielne)

Pliki, z których będziemy korzystać

W niniejszym scenariuszu będziemy korzystać z następujących przykładowych programów (do pobrania tutaj):

promela-mode.el
Tryb Emacs'a do edycji Promeli.
step1-init.pml, step2-proctype.pml, ..., step8-chan2.plm
Proste programy (modele) w Promeli.
increment-par.pml
2 procesy inkrementujące zmienną globalną w przeplocie.
spina
Przykładowy skrypt do wywoływania weryfikatora.
cannibals.pml
Przykładowe rozwiązanie zadania o kanibalach.


Promela w Emacs'ie

  1. umieść w folderze ~/.emacs.d/ plik promela-mode.el
  2. dopisz to pliku ~/.emacs następujące polecenia:
    (add-to-list 'load-path "~/.emacs.d/")
    
    (autoload 'promela-mode "promela-mode" "PROMELA mode" nil t)
            (setq auto-mode-alist
                  (append
                   (list (cons "\\.promela$"  'promela-mode)
                         (cons "\\.spin$"     'promela-mode)
                         (cons "\\.pml$"      'promela-mode)
                         )
                   auto-mode-alist))
    
    
  3. syntax-check: C-c/C-s

Promela w Vim'ie


Podstawowe konstrukcje Promeli

Kolejno obejrzyj następujące pliki od step1-init.pml do step8-chan2.pml. Dla każdego z nich spróbuj przewidzieć efekt uruchomienia, a następnie uruchom poleceniem:

> spin nazwa_pliku
Wykonaj polecenia i odpowiedz na pytania.

Promela man pages


Ekstremalne przeploty - weryfikacja przy użyciu asercji

Obejrzyj zawartość pliku increment-par.pml. Jakie wartości końcowe może przyjmować zmienna n? Jaka jest najmniejsza teoretycznie możliwa wartość?

Jak zmieni się wynik, jeśli inkrementacja zmiennej n będzie atomowa? Atomowość uzyskujemy pomijając zmienna reg, czyli n++ zamiast
      reg = n + 1;
      n = reg;
Atomowość można także wymusić w Promeli za pomocą konstrukcji atomic { ... }:
   atomic {
      reg = n + 1;
      n = reg;
   }
Inna konstrukcja, która jest bardziej efektywna ale można ją stosować tylko w niektórych przypadkach:
   d_step {
      reg = n + 1;
      n = reg;
   }
Parametry wywołań:

Siła niedeterminizmu (ćwiczenie samodzielne)

Rozwiąż samodzielnie następujące zadanie używając niedeterminizmu.

Wskazówki:


Ostatnia modyfikacja: 12/02/2014