Εισαγωγή στο εργαλείο SPIN



Σχετικά έγγραφα
ΕΠΛ 664 Ανάλυση και Επαλήθευση Συστημάτων 6-1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Αυτοματοποιημένη Επαλήθευση

Αυτόματος έλεγχος μοντέλων με το εργαλείο SPIN : Εφαρμογή σε μοντέλο συγχρονισμού αντικειμενοστρεφούς λογισμικού

ΕΠΛ 664 Ανάλυση και Επαλήθευση Συστημάτων 8-1

Εισαγωγή στον Προγραμματισμό

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

Ανάλυση της Ορθότητας Προγραμμάτων (HR Κεφάλαιο 4)

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Κατανεμημένα Συστήματα Ι

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Ενδεικτικές Λύσεις 1ου Σετ Ασκήσεων

Κατανεμημένα Συστήματα Ι

Προγραμματισμός Ι (HY120)

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Κεφάλαιο 5 Αξιωματική Σημασιολογία και Απόδειξη Ορθότητας Προγραμμάτων

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Ψευδοκώδικας. November 7, 2011

Στοιχειώδης προγραμματισμός σε C++

Ανάλυση της Ορθότητας Προγραμμάτων

Τυπικές Μέθοδοι Ανάλυσης Συστημάτων: Ο Ελεγκτής Μοντέλων SPIN

Ανάλυση της Ορθότητας Προγραμμάτων

Λύσεις Σειράς Ασκήσεων 5

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

FORTRAN και Αντικειμενοστραφής Προγραμματισμός

Δομημένος Προγραμματισμός (ΤΛ1006)

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

ΗΥ-150. Προγραμματισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

Αλγοριθμική & Δομές Δεδομένων- Γλώσσα Προγραμματισμού Ι (PASCAL) (PASCAL ) Εντολές Ελέγχου & Επανάληψης

Λύσεις Σειράς Ασκήσεων 5

Διαδικασιακός Προγραμματισμός

Οι εντολές ελέγχου της ροής ενός προγράμματος.

Εντολές ελέγχου ροής if, for, while, do-while

for for for for( . */

Σειρά Προβλημάτων 1 Λύσεις

Ένα αφαιρετικό πραγματικού χρόνου μοντέλο λειτουργικού συστήματος για MPSoC

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

ΗΥ-150. Προγραμματισμός

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

3. Εκφράσεις και έλεγχος ροής

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επανάληψης. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Τμήμα Μηχανολόγων Μηχανικών Πανεπιστήμιο Θεσσαλίας ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Δομή Επιλογής. Ιωάννης Λυχναρόπουλος Μαθηματικός, MSc, PhD

Δυναμικές Ιστοσελίδες Εισαγωγή στην Javascript για προγραμματισμό στην πλευρά του client

Ιδιοκτησία Αντικειµένου

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Διάλεξη 10: Αλγόριθμοι Αμοιβαίου Αποκλεισμού σε περιβάλλον ανταλλαγής μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Στόχοι και αντικείμενο ενότητας. Βασικές κατασκευές ΓΠ. Έλεγχος ροής προγράμματος. #4.. Εντολές Επιλογής

Ατοµική ιπλωµατική Εργασία ΜΟΝΤΕΛΟ-ΕΛΕΓΧΟΣ ΑΛΓΟΡΙΘΜΟΥ ΣΥΝΟΧΗΣ ΜΝΗΜΗΣ ΓΙΑ ΠΟΛΥΠΥΡΗΝΟΥΣ ΕΠΕΞΕΡΓΑΣΤΕΣ ΜΕ ΤΟ ΕΡΓΑΛΕΙΟ SPIN. Χριστοδουλίδης Ανδρέας Χρίστος

Προγραµµατισµός Η/Υ. Μέρος2

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος lantzos@teiser.gr

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Διαδικασιακός Προγραμματισμός

Δομές ελέγχου ροής προγράμματος

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

Προγραμματισμός Ι (ΗΥ120)

Εισαγωγή στον Προγραμματισμό

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΟΙΚΟΝΟΜΙΚΩΝ ΚΑΙ ΚΟΙΝΩΝΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΕΦΑΡΜΟΣΜΕΝΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΘΕΩΡΙΑ ΥΠΟΛΟΓΙΣΜΩΝ ΚΑΙ ΑΥΤΟΜΑΤΩΝ

Διαγράμματα UML στην Ανάλυση. Μέρος Γ Διαγράμματα Επικοινωνίας Διαγράμματα Ακολουθίας Διαγράμματα Μηχανής Καταστάσεων

Ακολουθιακές εντολές. (Peter Ashenden, The Students Guide to VHDL)

A2. Να γράψετε για κάθε περίπτωση τον αριθμό της πρότασης και δίπλα το γράμμα που δίνει τη σωστή επιλογή.

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Ανάπτυξη και Σχεδίαση Λογισμικού

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

Η γλώσσα προγραμματισμού C

Κατανεμημένα Συστήματα Ι

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

Εισαγωγή στην Επιστήμη Υπολογιστών. Εισαγωγή στην Python

Εισαγωγή στον Προγραμματισμό

Εντολές επιλογής Επαναλήψεις (if, switch, while)

Βασικά Στοιχεία της Java

Ελεγχος, Αξιοπιστία και Διασφάλιση Ποιότητας Λογισµικού Πολυπλοκότητα

Αντικειμενοστρεφής Προγραμματισμός

ιαφάνειες παρουσίασης #3

Λύσεις Σειράς Ασκήσεων 5

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

ιαδικαστικός Προγραμματισμός

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

Εργαστήριο Αρχιτεκτονικής Υπολογιστών Ι. Εισαγωγή στη VHDL

Πρόβλημα 29 / σελίδα 28

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

Σειρά Προβλημάτων 1 Λύσεις

Περίληψη Φροντιστηρίου. Κατανεμημένα Συστήματα Ι. Το περιβάλλον DAP - Χαρακτηριστικά. Το περιβάλλον DAP Τι είναι.

ΣΤΗΛΗ Β ΑΠΟΤΕΛΕΣΜΑ 1. float(10) α pow(2,3) β abs(-10) γ int(5.6) δ. 10 ε. 5.6 Μονάδες 8 ΣΤΗΛΗ Α ΣΥΝΑΡΤΗΣΗ

Εκλογή αρχηγού σε σύγχρονο δακτύλιο: Οι αλγόριθμοι LCR και HS. 1 Ο αλγόριθμος LCR (Le Lann, Chang, and Roberts)

Μεταγλωττιστές. Σημασιολογική Ανάλυση. Εργαστήριο 9. Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Behavioral & Mixed VHDL Architectures Finite State Machines in VHDL

Τύποι δεδομένων, τελεστές, μεταβλητές

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

Κατανεμημένα Συστήματα Ι

Κατανεμημένα Συστήματα. Javascript LCR example

Transcript:

Εισαγωγή στο εργαλείο SPIN Στην ενότητα αυτή θα μελετηθούν τα εξής θέματα: O model-checker SPIN H γλώσσα προδιαγραφής συστημάτων Promela Εντολές, διεργασίες και μοντέλο επικοινωνίας Σημασιολογία εκτέλεσης Ανάλυση με την SPIN Παραδείγματα 5-1

Spin και μοντελοέλεγχος Ο μοντελοέλεγχος είναι ένα σύνολο από αυτοματοποιημένες τεχνικές οι οποίες ελέγχουν κατά πόσο μοντέλα συστημάτων ικανοποιούν επιθυμητές ιδιότητες. Ένας μοντελοελεγκτής (model-checker) επαληθεύει κατά πόσο, για ένα σύστημα M και μια ιδιότητα Φ, Μ = Φ. Το εργαλείο SPIN είναι ένας από τους πιο αποδοτικούς μοντελοελεγκτές. Ελέγχει ιδιότητες της LTL και για την αυτοματοποιημένη επαλήθευση χρησιμοποιεί αλγόριθμους αυτομάτων. Αναπτύχθηκε στα Bell Laboratories. 5-2

Βασική δομή της Spin PLTL parser and translator Verifier Generator Optimized Model Checker Executable On-the-Fly Verifier Xspin/iSpin front end Promela parser Interactive Simulation Syntax Error Reports 5-3

Spin SPIN (Simple Promela Interpreter) Γλώσσα μοντελοποίησης συστημάτων: Promela (Protocol/Process Meta Language) Γλώσσα προδιαγραφής συστημάτων με πεπερασμένο αριθμό καταστάσεων (όχι γλώσσα προγραμματισμού) χαλαρά βασισμένη στην άλγεβρα διεργασιών CSP δυναμική δημιουργία παράλληλων διεργασιών επικοινωνία ανάμεσα σε διεργασίες μπορεί να γίνει είτε συγχρονισμένα είτε ασύγχρονα (μέσω buffer) στοιχεία από τη γλώσσα C 5-4

Spin Σημαντικότερα versions Στοιχεία επιτυχίας 1.0 Jan 1991 αρχικό version, Holzmann 1991 2.0 Jan 1995 partial-order reduction 3.0 Apr 1997 ελαχιστοποίηση του αυτομάτου του μοντέλου 4.0 2002 εισαγωγή κώδικα C 5.0 2007 Multi-core support 6.0 2012 Priority-based scheduling ανάλυση συστημάτων με το πάτημα ενός κουμπιού πολύ αποδοτική υλοποίηση καλή γραφική διασύνδεση καλή υποστήριξη περιέχει τα αποτελέσματα έρευνας 2+ δεκαετιών στην αυτοματοποιημένη επαλήθευση συστημάτων (πολλοί αλγόριθμοι βελτιστοποίησης) ACM Software Systems Award, 2001 Gerard Holzmann 5-5

Promela Ένα μοντέλο της Promela περιέχει δηλώσεις τύπων δηλώσεις καναλιών δηλώσεις καθολικών μεταβλητών mtype = {OK, READY, ACK int name; typedef type1 type2 channel ch = {s of type δηλώσεις διεργασιών δήλωση αρχικής διεργασίας proctype p (args) {statements [init process] Μοντέλα της Promela αντιστοιχούν σε δυνατόν μεγάλα αλλά πεπερασμένα συστήματα μεταβάσεων. 5-6

Τύποι δεδομένων bit/bool 0,1 byte 0...255 short -2 15-1 2 15-1 int -2 31-1 2 31-1 Δηλώσεις μεταβλητών byte name1, name2=4, name3; int arr1[5]; Δηλώσεις νέων τύπων mtype = {OK, READY, ACK mtype status = OK Δομές typedef Msg{ byte a[2], b; short c 5-7

Σταθερές: #define NAME 5 Εκφράσεις και εντολές Εκφράσεις: αριθμητικές (+, -, *, /, %), συγκρίσεις (>, >=, <, <=, ==,!=) Boolean (&&,,!), ανάθεση (=) αύξηση/μείωση (++, --) Στην Promela οι συνθήκες μπορούν να χρησιμοποιηθούν ως εντολές: π.χ. η συνθήκη (a == b) εκτελείται όταν τα a και b εξισωθούν. /* Τα σχόλια μπαίνουν σε παρενθέσεις */ Μία εντολή σε οποιοδήποτε σημείο του μοντέλου μπορεί να ονομαστεί από μία ετικέτα. Μία ετικέτα μπορεί να είναι μία ακολουθία χαρακτήρων ακολουθούμενη από :. Οι ετικέτες end, progress, accept, έχουν ειδική σημασία. 5-8

Διεργασίες Ένας τύπος διεργασίας (proctype) περιέχει ένα όνομα μία λίστα από τυπικές παραμέτρους δηλώσεις τοπικών μεταβλητών μία ακολουθία εντολών proctype A () { byte state; state = 3 byte state; proctype B () { state = state 1 proctype C(){ (state == 1) -> state = 3 5-9

Διεργασίες Μία δήλωση διεργασίας απλά ορίζει μια συμπεριφορά διεργασίας, δεν την εκτελεί. Εκτέλεση διεργασίας πρέπει να δηλωθεί ρητά μέσω του τελεστή run. Ο τελεστής run επιστρέφει τον αριθμό της διεργασίας που ξεκίνησε. Σε ένα μοντέλο της Promela, αρχικά εκτελείται μόνο η διεργασία με όνομα init. Διεργασίες μπορούν να δημιουργηθούν από οποιαδήποτε διεργασία σε οποιοδήποτε σημείο κατά την εκτέλεση ενός μοντέλου. Διεργασίες μπορούν επίσης να δημιουργηθούν όταν δηλωθούν ως active πριν από τη δήλωση proctype. 5-10

Παράδειγμα byte state = 1; proctype A(){ byte tmp; (state==1) -> tmp = state; tmp = tmp+1; state = tmp proctype B(){ byte tmp; (state==1) -> tmp = state; tmp = tmp-1; state = tmp init{ run A(); run B() 5-11

Ο αλγόριθμος αμοιβαίου αποκλεισμού του Dekker #define true 1 #define false 0 #define Aturn false #define Bturn true bool x, y, t; proctype A(){ x = true; t = Bturn; (y == false t == Aturn); /* critical section */ x = false proctype B(){ y = true; t = Aturn; (x == false t == Bturn); /* critical section */ y = false init{ run A(); run B() 5-12

Ατομικές ακολουθίες Η λέξη κλειδί atomic έχει ως αποτέλεσμα τη δημιουργία ατομικών εντολών, δηλαδή, εκτελεί την ακολουθία εντολών στην οποία αναφέρεται ως μία αδιάσπαστη οντότητα. Ποιες οι δυνατές εκτελέσεις του πιο κάτω μοντέλου; byte state = 1 proctype Α () { atomic{ (state == 1) -> state = state 1 proctype B (){ atomic{ (state == 1) -> state = state + 1 init { run A(); run B(); 5-13

Κανάλια μηνυμάτων Στην Promela είναι δυνατή η δημιουργία καναλιών τα οποία χρησιμοποιούνται για μεταφορά μηνυμάτων ανάμεσα σε διεργασίες. Η δήλωση chan Transfer = [x] of {type 1, type 2,, type n δημιουργεί το κανάλι Transfer που μπορεί να κρατήσει μέχρι x μηνύματα-πλειάδες n στοιχείων τύπου (type 1, type 2,, type n ). Η εντολή Τransfer!expr στέλνει την τιμή του expr στο κανάλι Transfer, ενώ η εντολή Trasfer?y λαμβάνει ένα μήνυμα από το κανάλι Transfer και τοποθετεί την τιμή αυτή στη μεταβλητή y. 5-14

H επικοινωνία είναι FIFO. Κανάλια μηνυμάτων Κανάλια μπορούν να είναι αντικείμενα μηνυμάτων: chan queue = [3] of {mtype,chan,int queue!ready, Transfer, 1 ή queue!ready(transfer, 1) 5-15

Παράδειγμα proctype A(chan q1){ chan q2; q1?q2; q2!123 proctype B(chan q3){ int x; q3?x; printf("x = %d\n", x) init { chan qname = [1] of { chan ; chan qforb = [1] of { int ; run A(qname); run B(qforb); qname!qforb 5-16

Κανάλια μηνυμάτων Ειδική περίπτωση όταν x (το μέγεθος του καναλιού) = 0. Για παράδειγμα chan port = [0] of {byte είναι ένα συγχρονισμένο κανάλι. Το κανάλι μπορεί να διαβιβάσει αλλά όχι να αποθηκεύσει μηνύματα. Επομένως εξαναγκάζει τον αποστολέα να περιμένει μέχρις ότου κάποιος είναι έτοιμος να συγχρονιστεί. 5-17

Εντολές Μία εντολή μπορεί να βρίσκεται σε μια από τις καταστάσεις εκτελέσιμη, αν η εντολή μπορεί να εκτελεστεί άμεσα blocked, αν δεν μπορεί να εκτελεστεί Μια ανάθεση είναι πάντα εκτελέσιμη. Οι εκφράσεις είναι επίσης νόμιμες εντολές. Μια έκφραση είναι εκτελέσιμη αν η τιμή της είναι άνιση του μηδενός 2 < 3 πάντα εκτελέσιμη x < 27 εκτελέσιμη μόνο αν η τιμή του x είναι μικρότερη του 27 3 + x εκτελέσιμη μόνο αν η τιμή του x είναι άνιση με 3 5-18

Εντολές Η εντολή skip είναι πάντα εκτελέσιμη δεν κάνει τίποτα, απλά αυξάνει το process counter της διεργασίας Ο τελεστής run είναι εκτελέσιμος μόνο αν είναι δυνατόν να δημιουργηθεί μια νέα διεργασία. Η εντολή printf είναι πάντα εκτελέσιμη. 5-19

Έλεγχος ροής Επιλογή if if :: x%2==1 -> z=z*y; x-- :: x%2==0 -> y=y*y; x=x/2 fi Γενικά, αν υπάρχουν περισσότερες από μια αληθείς συνθήκες η Spin διαλέγει τυχαία μια από τις εκτελέσιμες επιλογές. Αν δεν υπάρχει καμιά αληθής επιλογή η εντολή if μπλοκάρεται. Λέξη κλειδί else Μπορεί να χρησιμοποιηθεί ως συνθήκη. Γίνεται εκτελέσιμη αν καμιά από τις υπόλοιπες συνθήκες δεν είναι εκτελέσιμη. if :: x==1 -> x-- :: else -> skip fi 5-20

Επανάληψη do και εντολή goto Έλεγχος ροής do :: x>y -> x=x-y :: y>x -> y=y-x :: else goto outside od; outside: H εντολή break επιτρέπει τη διαφυγή από ένα do-loop. 5-21

Ποια η διαφορά των πιο κάτω βρόχων byte count; byte count; proctype counter(){ do :: count = count + 1 :: count = count - 1 :: (count == 0) -> break od proctype counter(){ do :: (count!= 0) -> if :: count = count + 1 :: count = count - 1 fi :: (count == 0) -> break od 5-22

#define p 0 #define v 1 Παράδειγμα chan sema = [0] of { bit ; proctype dijkstra(){ byte count = 1; do :: (count == 1) -> sema!p; count = 0 :: (count == 0) -> sema?v; count = 1 od proctype user(){ do :: sema?p; /* critical section begins */ sema!v /* non-critical section */ od init{ run dijkstra(); run user(); run user(); run user() 5-23

Η εντολή timeout Πολλά πρωτόκολλα χρησιμοποιούν ρολόγια ή μηχανισμούς timeout για να ξαναστείλουν μηνύματα ή acknowledgements. H Promela δεν παρέχει στοιχεία πραγματικού χρόνου, αλλά Η λέξη κλειδί timeout επιτρέπει την απόδραση από καταστάσεις αδιεξόδου: παίρνει την τιμή 1 όταν καμιά άλλη εντολή δεν μπορεί να εκτελεστεί. Η πιο κάτω διεργασία κάνει reset το σύστημα όταν αυτό κολλήσει. proctype watchdog(){ do :: timeout -> guard!reset od 5-24

Ετικέτες στην Promela Για διευκόλυνση ανίχνευσης αδιεξόδων και προόδου, κατά την εκτέλεση ενός μοντέλου στην Promela, παρέχονται (διαδικασίες και) ειδικές ετικέτες οι οποίες μπορούν να χρησιμοποιηθούν για να ξεχωρίσουν ανάμεσα σε φυσιολογική αδράνεια και αδιέξοδα, και σημαντικά κομμάτια κώδικα που υποδηλώνουν πρόοδο κατά την εκτέλεση Για σήμανση ότι μια αδρανής κατάσταση δεν αποτελεί αδιέξοδο αλλά αναμονή για νέα δεδομένα, μπορεί να χρησιμοποιηθεί η ετικέτα end ή οποιαδήποτε συμβολοσειρά αρχίζει με τους χαρακτήρες end (π.χ. end2). Η ίδια ετικέτα μπορεί να χρησιμοποιηθεί για να δείξει ότι μια κατάσταση μπορεί να θεωρηθεί ως τελική (αν όλες οι υπόλοιπες διεργασίες έχουν τερματίσει). Για σήμανση ότι κάποιο κομμάτι κώδικα πρέπει να εκτελεσθεί για να σημειωθεί πρόοδος στο μοντέλο μπορεί να χρησιμοποιηθεί η ετικέτα progress ή οποιαδήποτε συμβολοσειρά αρχίζει με τους χαρακτήρες progress (π.χ. progresstwo). 5-25

Ετικέτες στην Promela proctype dijkstra(){ byte count = 1; end: do :: (count == 1) -> progress: sema!p; count = 0 :: (count == 0) -> sema?v; count = 1 od 5-26

Σημασιολογία παρεμβαλλόμενης διάταξης Διεργασίες στην Promela εκτελούνται ταυτόχρονα με σημασιολογία παρεμβαλλόμενης διάταξης. Εντολές των διεργασιών θεωρούνται ως ατομικές. Αν σε κάποια στιγμή υπάρχουν περισσότερες από μια εκτελέσιμες εντολές σε ενεργές παράλληλες διεργασίες, μία από αυτές επιλέγεται τυχαία για εκτέλεση. Οι μόνες εντολές που εκτελούνται ταυτόχρονα, αφορούν τις εντολές που απαρτίζουν μια συγχρονισμένη επικοινωνία. 5-27

Ιδιότητες Με τη Spin μπορούμε να ελέγξουμε τους πιο κάτω τύπους ιδιοτήτων ισχυρισμούς ύπαρξη αδιεξόδων ύπαρξη νεκρού κώδικα ιδιότητες ζωτικότητας Κύκλοι έλλειψης προόδου Αποδεκτοί κύκλοι ιδιότητες γραμμικής λογικής (LTL) 5-28

Ισχυρισμοί Η εντολή assert(expr) χρησιμοποιείται συχνά σε μοντέλα της Promela για έλεγχο κατά πόσο ιδιότητες ικανοποιούνται σε κάποιες καταστάσεις. Αν η τιμή της έκφρασης expr υπολογισθεί ως 0 η Spin θα τερματίσει την εκτέλεση με μήνυμα λάθους, αφού η πρόταση expr παραβιάζεται. Η εντολή assert(expr) είναι πάντα εκτελέσιμη. 5-29

Αμοιβαίος Αποκλεισμός Χρήση ισχυρισμού bool busy; byte mutex; proctype P(int i){ (!busy) -> busy = true; mutex++; printf( P%d in critical section\n, i); mutex--; busy = false; active proctype invariant(){ assert (mutex <= 1) Ισχυρισμός μαρκάρουμε την επιλογή Assertions στα Verification Options init{ run P(0); run P(1) 5-30

Ιδιότητες Με τη Spin μπορούμε να ελέγξουμε τους πιο κάτω τύπους ιδιοτήτων ισχυρισμούς ύπαρξη αδιεξόδων ύπαρξη νεκρού κώδικα ιδιότητες ζωτικότητας Κύκλοι έλλειψης προόδου Αποδεκτοί κύκλοι ιδιότητες γραμμικής λογικής (LTL) 5-31

Αμοιβαίος Αποκλεισμός Εντοπισμός αδιεξόδου bit x, y; byte mutex; active proctype A(){ active proctype B(){ x=1; y=1; (y==0) -> mutex++; (x==0) -> mutex++; printf( P%d in critical printf( P%d in critical section\n, _pid); section\n,_pid); mutex--; mutex--; x=0; y=0; active proctype invariant(){ assert (mutex <= 1) Πιθανό αδιέξοδο μαρκάρουμε την επιλογή Invalid Endstates στα Verification Options 5-32

#define p 0 #define v 1 chan sema = [0] of { bit ; proctype dijkstra(){ end: do :: sema!p; sema?v od Παράδειγμα proctype user(){ sema?p; /* critical section */ sema!v Αποδεκτό αδιέξοδο init{ run dijkstra(); run user(); run user(); run user() 5-33

Ιδιότητες Με τη Spin μπορούμε να ελέγξουμε τους πιο κάτω τύπους ιδιοτήτων ισχυρισμούς ύπαρξη αδιεξόδων ύπαρξη νεκρού κώδικα ιδιότητες ζωτικότητας Κύκλοι έλλειψης προόδου Αποδεκτοί κύκλοι ιδιότητες γραμμικής λογικής (LTL) Η SPIN ενημερώνει για μη εφικτές καταστάσεις 5-34

Ιδιότητες Με τη Spin μπορούμε να ελέγξουμε τους πιο κάτω τύπους ιδιοτήτων ισχυρισμούς ύπαρξη αδιεξόδων ύπαρξη νεκρού κώδικα ιδιότητες ζωτικότητας Κύκλοι έλλειψης προόδου Αποδεκτοί κύκλοι ιδιότητες γραμμικής λογικής (LTL) 5-35

Ο αλγόριθμος αμοιβαίου αποκλεισμού του Dekker byte mutex; bool x, y; mtype t = Aturn; active proctype A(){ do :: x = true; t = Bturn; (!y t == Aturn); mutex++; /* critical section */ mutex--; x = false od active proctype invariant(){ assert (mutex <= 1) active proctype B(){ do :: y = true; t = Aturn; (!x t == Bturn); progress: mutex ++; /* critical section */ mutex--; y = false Υπάρχει κύκλος όπου δεν σημειώνεται πρόοδος στη διεργασία Β μαρκάρουμε την επιλογή Non-progress cycles στα Verification Options 5-36

Ιδιότητες Με τη Spin μπορούμε να ελέγξουμε τους πιο κάτω τύπους ιδιοτήτων ισχυρισμούς ύπαρξη αδιεξόδων ύπαρξη νεκρού κώδικα ιδιότητες ζωτικότητας Κύκλοι έλλειψης προόδου Αποδεκτοί κύκλοι ιδιότητες γραμμικής λογικής (LTL) 5-37

LTL στην SPIN Η SPIN επιτρέπει τον μοντελοέλεγχο LTL ιδιοτήτων. Η σύνταξη που χρησιμοποιείται έχει ως εξής: f ::= true, false propositional symbols (p, q, κλπ) ( f ) unary f f 1 binary f 2 unary ::= [] (G) binary ::= U <> (F) && (λογικό και) X (λογικό ή)! (λογική άρνηση) -> (λογική συνεπαγωγή) <-> (λογική ισοδυναμία) 5-38

Spin H Spinεπιτρέπει στο χρήστη τα εξής: Σύνταξη μοντέλων στην Promela Προσομοίωση μοντέλων της Promela τυχαιοποιημένες προσομοιώσεις προσομοιώσεις με αλληλεπίδραση Επαλήθευση μοντέλων της Promela έλεγχος LTL ιδιοτήτων έλεγχος ισχυρισμών και εύρεση αδιεξόδων, κλπ Επιπλέον προσφέρει Εισηγήσεις για απλοποίηση μοντέλων γραφικό user interface με γραφική παράθεση των συστημάτων μεταβάσεων που αντιστοιχούν σε διεργασίες Property manager για LTL ιδιότητες 5-39

Εκλογή αρχηγού Ένας κατευθυνόμενος δακτύλιος από επεξεργαστές. Κάθε ένας έχει μια μοναδική τιμή. Επικοινωνία γίνεται στη φορά των δεικτών του ρολογιού. Ο αρχηγός εκλέγεται ως ο επεξεργαστής με τη μέγιστη τιμή. 5-40

Παράδειγμα 9 2 4 7 12 3 5-41

Βασική ιδέα αλγορίθμου Αρχικά όλες οι διεργασίες είναι ενεργές. Αν κάποια διεργασία αντιληφθεί πως η τιμή της δεν είναι η μέγιστη γίνεται αδρανής. Μια αδρανής διεργασία απλά μεταφέρει τιμές σε δεξιόστροφη φορά. Ο αλγόριθμος εκτελείται σε φάσεις. Σε κάθε φάση κάθε διεργασία στέλνει κάποια τιμή προς τα δεξιά. 5-42

Βασική ιδέα (συν.) Bήμα 1: Κάθε διεργασία, λαμβάνοντας κάποια τιμή από τα αριστερά τη συγκρίνει με την τωρινή της τιμή Αν είναι η ίδια, αυτή είναι και η μέγιστη. Αν δεν είναι η ίδια στέλνει την τιμή που μόλις έλαβε στα δεξιά. Βήμα 2: Όταν λάβει τη δεύτερη τιμή συγκρίνει τις τρεις τιμές, δηλαδή την τιμή της ίδιας της διεργασίας και τις τιμές των δύο ενεργών διεργασιών στα αριστερά. Αν η πρώτη αριστερή ενεργή διεργασία έχει τη μέγιστη τιμή, τότε κρατά αυτή την τιμή και επιστρέφει στο Βήμα 1. Διαφορετικά γίνεται αδρανής. 5-43

Παράδειγμα 4 12 9 129 92 74 2 9 3 12 7 7 9 12 4 12 73 7 9 2 12 3 7 5-44

Ψευδοκώδικας active: d = my_number; do forever send(d); receive(e); if (e = d) then send to all processes and STOP send(e); receive(f); if e>=max(d,f) then d = e else goto relay end relay: do forever receive(d); send(d); end 5-45

Ανάλυση αλγορίθμου Αφού μοντελοποιήσουμε τον αλγόριθμο στη Promela, μπορούμε να ελέγξουμε ιδιότητες όπως: Η μέγιστη τιμή τελικά θα βρεθεί. Ο αλγόριθμος βρίσκει ακριβώς μια μέγιστη τιμή. Από τη στιγμή που βρίσκεται η μέγιστη τιμή εξακολουθεί να υπάρχει και δεν αλλάζει η τιμή της. Η μέγιστη τιμή είναι πάντα ίση με 5. Δείτε την υλοποίηση (αρχείο leader) και ιδιότητες για ανάλυση (αρχείο leader.ltl) στο distribution της SPIN. 5-46

To πρόβλημα με τους hippies Τέσσερα άτομα (Νικόλας, Βίκη, Μαρία and Γιώργος) βρίσκονται μέσα σε μια σπηλιά κρατώντας μια λάμπα πετρελαίου. Πρέπει να διασχίσουν ένα στενό πέρασμα όπου μόνο ένα ή δύο άτομα μπορούν να περάσουν την ίδια στιγμή. Επίσης δεν είναι ασφαλές να περάσουν χωρίς φως. Τα τέσσερα άτομα μπορούν να περάσουν το πέρασμα σε διαφορετικούς χρόνους: ο Νικόλας σε 5 λεπτά, η Βίκη σε 10, η Μαρία σε 20 και ο Γιώργος σε 25. Όταν δύο άτομα περνούν μαζί από το πέρασμα, ο χρόνος που χρειάζονται είναι ο μεγαλύτερος από τους χρόνους τους. Το λάδι στη λάμπα μπορεί να παρέχει φως μόνο για 60 λεπτά. Είναι δυνατή η διάσχιση σε χρόνο <= 60; 5-47

Μοντέλο Spin (1) chan out-of-cave = [0] of {hippie, hippie ; chan into-cave = [0] of {hippie ; chan stopwatch = [0] of {hippie ; byte time ; proctype Out() { bit here[n] ; hippie h1, h2 ; here[0]=1; here[1]=1; here[2]=1; here[3]=1; do :: select_hippie(h1) ; select_hippie(h2) ; out-of-cave! h1, h2 ; if all_gone -> break fi; into-cave? h1 ; here[h1] = 1 ; stopwatch! h1 ; od 5-48

Μοντέλο Spin (2) proctype In() { bit here[n] ; hippie h1, h2 ; do :: out-of-cave? h1, h2 ; stopwatch! max(h1,h2) ; here[h1] = 1 ; here[h2] = 1 ; if all_here -> break fi; select_hippie(h1); into-cave! h1 ; od 5-49

Μοντέλο Spin (3) 5-50

Μοντέλο Spin (4) proctype Timer() { end: do :: stopwatch? 0 -> time=time+5 ; :: stopwatch? 1 -> time=time+10 :: stopwatch? 2 -> time=time+20; :: stopwatch? 3 -> time=time+25; od init { atomic { run Out(); run In(); run Timer(); Ελέγχουμε την ιδιότητα <> (time>60) 5-51

Αλγόριθμος Προσομοίωσης (simulation) 5-52

Αλγόριθμος Επαλήθευσης ιδιότητες κατάστασης Η Spin χρησιμοποιεί κατά βάθος διερεύνηση για να διασχίσει το σύστημα καταστάσεων ενός μοντέλου. Ο έλεγχος της όποιας ιδιότητας γίνεται ταυτόχρονα με την κατασκευή του μοντέλου (επαλήθευση on-the-fly) 5-53

Αλγόριθμος Επαλήθευσης ιδιότητες εκτέλεσης Το μοντέλο και η άρνηση της ιδιότητας μοντελοποιούνται ως: αυτόματα. Αν τομή των γλωσσών των δύο αυτομάτων, Χ, είναι κενή η ιδιότητα ικανοποιείται από το μοντέλο. 5-54

Αποθήκευση καταστάσεων 5-55

Αναφορές από SPIN 5-56

Αλγόριθμοι Ελαχιστοποίησης (1) Η Spin υποστηρίζει διάφορους αλγόριθμους ελαχιστοποίησης του συστήματος καταστάσεων: partial order reduction bitstate hashing minimised automaton encoding of states state vector compression dataflow analysis slicing algorithm 5-57

Αλγόριθμοι Ελαχιστοποίησης (2) Partial Order Reduction Βασίζεται στην παρατήρηση ότι η ικανοποίηση κάποιας ιδιότητας συχνά δεν εξαρτάται από τη σειρά με την οποία εκτελούνται διάφορες εντολές => είναι αρκετό να θεωρήσουμε μόνο ένα υποσύνολο των δυνατών εκτελέσεων. Ο αλγόριθμος εκτελεί ατομικά τις «τοπικές» μεταβάσεις των διεργασιών όπου τοπικές μεταβάσεις περιλαμβάνουν: Αναθέσεις και άλλες προσβάσεις σε τοπικές μεταβλητές Επικοινωνίες σε κανάλια τα οποία χρησιμοποιούνται από αποκλειστικά δύο διεργασίες. Οι υπόλοιπες εκτελέσεις καλύπτονται από μια μορφή συρροής. 5-58

Αλγόριθμοι Ελαχιστοποίησης (3) 5-59

Bit-state hashing Αλγόριθμοι Ελαχιστοποίησης (4) Μόνο ένα δυφίο χρησιμοποιείται για την αποθήκευση μιας προσβάσιμης κατάστασης. Για οποιαδήποτε κατάσταση, μια συνάρτηση κατακερματισμού χρησιμοποιείται για υπολογισμό της διεύθυνσης στον πίνακα κατακερματισμού Δεν γίνεται έλεγχος για συγκρούσεις Συντελεστής φορτίου = # existing bits / # reached states Στόχος: συντελεστής φορτίου > 100 5-60

Αλγόριθμοι Ελαχιστοποίησης (5) 5-61

Αμετάβλητες συνθήκες []P, όπου η P είναι μια ιδιότητα κατάστασης. Παραδείγματα: [] mutex! = 2 []!aflag H Spin προσφέρει (τουλάχιστον) 7 τρόπους ανάλυσης τέτοιων ιδιοτήτων. 5-62

Προτάσεις 1 + 2: monitor διεργασία Προσθέτουμε την πιο κάτω διεργασία στον κώδικά μας. Δύο παραλλαγές: Η διεργασία δημιουργείται πρώτη Η διεργασία δημιουργείται τελευταία 5-63

Πρόταση 3: διεργασία με φρουρό Η πιο κάτω πρόταση αποφεύγει την συνεχή ενεργοποίηση του assert το οποίο γίνεται εκτελέσιμο μόνο όταν η P γίνει ψευδής. 5-64

Πρόταση 4: διεργασία με do H πιο κάτω διεργασία φαίνεται λιγότερο αποδοτική από λειτουργική άποψη, αλλά ο αριθμός των καταστάσεων είναι μειωμένος. 5-65

Πρόταση 5 never claim 5-66

Πρόταση 6 - LTL Ελέγχουμε την αμετάβλητη συνθήκη ως [] P. H Spinμεταφράζει την ιδιότητα στο πιο κάτω never claim. 5-67

Πρόταση 7 - unless Εσωκλείουμε τον κορμό τουλάχιστον μιας διεργασίας ως εξής: + Η ιδιότητα Ρ μπορεί να χρησιμοποιήσει τοπικές μεταβλητές. + Δεν χρειάζεται να ορίσουμε καινούρια διεργασία - Απαιτεί την αλλαγή του κώδικα - Πιθανόν να έρθει σε σύγκρουση με το partial-order reduction - Η διεργασία δεν τερματίζει 5-68

Αποτελέσματα Πειραμάτων 5-69

Αποτελέσματα Πειραμάτων 5-70

Αποτελέσματα Πειραμάτων 5-71

Αποτελέσματα Πειραμάτων 5-72

Further Reading Basic Spin Manual: http://spinroot.com/spin/man/manual.html Guidelines for verification with Xspin : http://spinroot.com/spin/man/gettingstarted.html A sample set of exercises with Spin: http://spinroot.com/spin/man/exercises.html Spin Online References: http://spinroot.com/spin/man/index.html 5-73