Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων ΙΙΙ 1 lalis@inf.uth.gr
Ιδιότητες προγραμμάτων Ιδιότητα ασφάλειας (safety properties): δεν θα φτάσουμε ποτέ σε μια ανεπιθύμητη κατάσταση Ιδιότητα προόδου/ζωτικότητας (progress/liveness properties): κάποτε/τελικά θα φτάσουμε σε μια επιθυμητή κατάσταση Μια ιδιότητα ασφάλειας μπορεί να εκφραστεί ως άρνηση μιας ιδιότητας προόδου, και το αντίστροφο always {Χ >= 0} not eventually {Χ < 0} Ένα πρόγραμμα χαρακτηρίζεται ως «ορθό» εφόσον ικανοποιεί τις επιθυμητές ιδιότητες προόδου χωρίς να παραβιάζει τις επιθυμητές ιδιότητες ασφάλειας ΙΙΙ 2 lalis@inf.uth.gr
Απόδειξη ιδιοτήτων Ιδανικά, η ορθότητα ενός ταυτόχρονου προγράμματος (συστήματος) πρέπει να επαληθευθεί συστηματικά Αυτό δεν μπορεί να γίνει μέσω «τυχαίων» σεναρίων μικτής εκτέλεσης είναι πολύ εύκολο να γίνουν λάθη ή/και να μην ληφθούν υπόψη προβληματικά σενάρια Χρειάζεται διεξοδικός έλεγχος όλων των πιθανών σεναρίων μικτής εκτέλεσης για τα τμήματα κώδικα που πιθανώς υπάρχουν συνθήκες ανταγωνισμού Όλα τα πιθανά σενάρια εκτέλεσης μπορεί να αναπαρασταθούν μέσω ενός γράφου καταστάσεων Οι επιθυμητές ιδιότητες μπορεί να αποδειχθεί ότι ισχύουν (ή όχι) μέσω αυτού του γράφου ΙΙΙ 3 lalis@inf.uth.gr
Γράφος καταστάσεων Οι πιθανές εκτελέσεις ενός ταυτόχρονου συστήματος περιγράφονται με την μορφή ενός γράφου G=(V,E) Ο κόμβος v i V αντιστοιχεί σε μια συγκεκριμένη εφικτή/πιθανή κατάσταση (που μπορεί να προκύψει κατά την ταυτόχρονη εκτέλεση) Η κατευθυνόμενη ακμή e=(v i,v j ) E αντιστοιχεί σε μια πιθανή μετάβαση από την κατάσταση v i στην v j Οι μεταβάσεις πραγματοποιούνται μέσα από εντολές που θεωρούμε ότι πραγματοποιούνται ατομικά Μια πιθανή εκτέλεση x={v 0,v 1,v 2, } είναι μια διαδρομή κατά μήκος των ακμών του γράφου ΙΙΙ 4 lalis@inf.uth.gr
κατάσταση αρχική κατάσταση μετάβαση εκτέλεση τερματική κατάσταση ΙΙΙ 5 lalis@inf.uth.gr
Επαλήθευση ιδιοτήτων Ιδιότητα ασφάλειας (safety property) always Φ Για κάθε κατάσταση v i ισχύει Φ(v i ) Ιδιότητα προόδου (progress property) if Φ1 eventually Φ2 Αν υπάρχει κατάσταση v i που να ισχύει Φ1(v i ), τότε κάθε διαδρομή/εκτέλεση που περνάει από την v i περνάει στην συνέχεια, μέσα από μια ή περισσότερες μεταβάσεις, από μια κατάσταση v j όπου ισχύει Φ2(v j ) ΙΙΙ 6 lalis@inf.uth.gr
always Φ 0 Φ 1 Φ 2 Φ 3 Φ 4 Φ 5 Φ 6 Φ 7 Φ 8 Φ 9 Φ 10 Φ ΙΙΙ 7 lalis@inf.uth.gr
always Φ 0 Φ 1 Φ 2 Φ 3 Φ 4 5 Φ 6 Φ 7 Φ 8 Φ 9 Φ 10 Φ ΙΙΙ 8 lalis@inf.uth.gr
if Φ1 eventually Φ2 0 Φ1 1 2 3 Φ2 4 5 6 Φ2 7 8 9 Φ2 10 ΙΙΙ 9 lalis@inf.uth.gr
if Φ1 eventually Φ2 0 Φ1 1 2 3 4 5 6 Φ2 7 Φ2 8 9 Φ2 10 ΙΙΙ 10 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια (α) Μ Μ F F (β) F F M M Δίνονται 4 βάτραχοι, 2 αρσενικοί (M) και 2 θηλυκοί (F) Αρχικά, κάθονται σε πέτρες, όπως δείχνει το σχήμα (α) Οι αρσενικοί βάτραχοι μπορούν να κινηθούν μόνο προς τα δεξιά ενώ οι θηλυκοί μόνο προς τα αριστερά Ένας βάτραχος μπορεί να πηδήσει σε μια άδεια πέτρα αν είναι δίπλα του ή αν μεσολαβεί μόνο ένας βάτραχος Είναι εφικτό οι βάτραχοι να φτάσουν στις θέσεις (β); Είναι εγγυημένο; ΙΙΙ 11 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF ΙΙΙ 12 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF ΙΙΙ 13 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF ΙΙΙ 14 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MFM_F ΙΙΙ 15 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MFM_F MFMF_ MF_MF ΙΙΙ 16 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MFM_F MFMF_ MF_MF MF_FM MFFM FMMF ΙΙΙ 17 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MFM_F MFMF_ MF_MF MF_FM MFFM FMMF _FMFM MFF_M F_MMF ΙΙΙ 18 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MFM_F MFMF_ MF_MF MF_FM MFFM FMMF _FMFM MFF_M F_MMF ΙΙΙ 19 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MFM_F MFMF_ MF_MF MF_FM MFFM FMMF _FMFM MFF_M F_MMF F_MFM ΙΙΙ 20 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MFM_F MFMF_ MF_MF MF_FM MFFM FMMF _FMFM MFF_M F_MMF F_MFM FFM_M ΙΙΙ 21 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MFM_F MFMF_ MF_MF MF_FM MFFM FMMF _FMFM MFF_M F_MMF F_MFM FFM_M FF_MM ΙΙΙ 22 lalis@inf.uth.gr
Παράδειγμα: ντάμα με βατράχια MM_FF _MMFF M_MFF MMF_F MMFF_ MFM_F M_FMF MFMF_ MF_MF _MFMF MF_FM MFFM FMMF FM_MF _FMFM MFF_M F_MMF FMFM_ F_MFM FMF_M FFM_M F_FMM FF_MM ΙΙΙ 23 lalis@inf.uth.gr
Γράφοι καταστάσεων με κώδικα int i=0; p1: i=1 p2: i=2 p3: if (i>0) { goto p3 } p1, i is 0 p2, i is 1 p3, i is 2 Σύμβαση: ο μετρητής εντολών (program counter) δείχνει στην επόμενη εντολή προς εκτέλεση Οι εντολές που εμφανίζονται σε μια γραμμή θεωρούμε ότι εκτελούνται ατομικά, και στην συνέχεια ο μετρητής εντολών αυξάνεται κατά μια θέση ή με βάση ένα άλμα Η εκτέλεση μιας εντολής αναμονής δεν αλλάζει τον μετρητή εντολών όσο ισχύει η συνθήκη αναμονής ΙΙΙ 24 lalis@inf.uth.gr
Παράδειγμα ασυνέπειας δεδομένων int i=0; : p1: tmp1=i p2: i=tmp1+1 p3: : q1: tmp2=i q2: i=tmp2+1 q3: Επιθυμητή ιδιότητα: Όταν οι διεργασίες φτάσουν στις εντολές p3 και q3, τότε η i να έχει την τιμή 2 ΙΙΙ 25 lalis@inf.uth.gr
Παράδειγμα ασυνέπειας δεδομένων #εντολής #εντολής i tmp1 tmp2 p1,q1 0,?,? p2,q1 0,0,? p1,q2 0,?,0 p3,q1 1,0,? p2,q2 0,0,0 p1,q3 1,?,0 p3,q2 1,0,1 p3,q2 1,0,0 p2,q3 1,0,0 ρ p2,q3 1,1,0 p3,q3 2,0,1 p3,q3 1,0,0 p3,q3 2,1,0 ΙΙΙ 26 lalis@inf.uth.gr
Παράδειγμα ατέρμονης αναμονής int rdy=0; int w=0; /* εικονική μεταβλητή κατάστασης αναμονής */ : /* prepare data */ p1: rdy=1; p2: if (w) { w=0; } p3: : q1: if (rdy) goto q4; q2: w=1; q3: if (w) { goto q3; } q4: /* use data */ Επιθυμητή ιδιότητα: τελικά η w θα είναι 0 (και το θα φτάσει στην εντολή q4) ΙΙΙ 27 lalis@inf.uth.gr
Παράδειγμα ατέρμονης αναμονής #εντολής #εντολής rdy w p1,q1 0,0 p2,q1 1,0 p3,q1 1,0 p2,q4 1,0 p1,q2 0,0 p2,q2 1,0 p1,q3 0,1 p3,q4 1,0 p3,q2 1,0 p2,q3 1,1 ρ p3,q3 1,1 p3,q3 1,0 ΙΙΙ 28 lalis@inf.uth.gr
Αλγόριθμος A1 int turn=; : p1: p2: if (turn!=) {goto p2;} p3: CS p4: turn=; goto p1; : q1: q2: if (turn!=) {goto q2;} q3: CS q4: turn=; goto q1; State Description rogram Counter IDL idle no wish to enter CS p1/q1 TRY trying to enter CS p2/q2 CS inside CS p3-p4/q3-q4 ΙΙΙ 29 lalis@inf.uth.gr
p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p3,q1,cs,idl p2,q2,try,try p4,q1,cs,idl p3,q2,cs,try p1,q1,idl,idl p4,q2,cs,try p2,q1,try,idl p1,q2,idl,try p2,q2,try,try p1,q3,idl,cs p2,q3,try,cs p2,q4,try,cs p1,q4,idl,cs ΙΙΙ 30 lalis@inf.uth.gr
Παρατήρηση Ο γράφος των καταστάσεων μεγαλώνει πολύ γρήγορα με το μέγεθος του κώδικα Μπορεί να γίνουν απλοποιήσεις, συγχωνεύοντας καταστάσεις και αγνοώντας καταστάσεις που δεν επηρεάζουν την απόδειξη της ιδιότητας που ενδιαφέρει Χρειάζεται προσοχή ώστε να μην απαλειφθούν / αποκρυφθούν ενδιάμεσες καταστάσεις που πιθανώς επηρεάζουν την απόδειξη της ορθότητας ΙΙΙ 31 lalis@inf.uth.gr
p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p3,q1,cs,idl p2,q2,try,try p4,q1,cs,idl p3,q2,cs,try p1,q1,idl,idl p4,q2,cs,try p2,q1,try,idl p1,q2,idl,try p2,q2,try,try p1,q3,idl,cs p2,q3,try,cs p2,q4,try,cs p1,q4,idl,cs ΙΙΙ 32 lalis@inf.uth.gr
p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p3-p4,q1,cs,idl p2,q2,try,try p3-p4,q2,cs,try p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p2,q2,try,try p1,q3-q4,idl,cs p2,q3-q4,try,cs ΙΙΙ 33 lalis@inf.uth.gr
Αμοιβαίος αποκλεισμός Σε καμία κατάσταση δεν επιτρέπεται το να βρίσκεται στο ΚΤ και το να βρίσκεται στο ΚΤ s : =CS =CS Σε όλες τις καταστάσεις δεν πρέπει να ισχύει ότι το βρίσκεται στο ΚΤ και το βρίσκεται στο ΚΤ s : ( (=CS) (=CS) ) ΙΙΙ 34 lalis@inf.uth.gr
p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p3-p4,q1,cs,idl p2,q2,try,try p3-p4,q2,cs,try p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p2,q2,try,try p1,q3-q4,idl,cs p2,q3-q4,try,cs ΟΚ ΙΙΙ 35 lalis@inf.uth.gr
Απουσία αδιεξόδου Δεν πρέπει να υπάρχει περίπτωση και να περιμένει το ένα το άλλο ενώ προσπαθούν να μπουν στο ΚΤ, και κανένα να μην καταφέρει τελικά να μπει στο ΚΤ Αν υπάρχει κατάσταση όπου και προσπαθούν να μπουν στο ΚΤ (εφόσον κάθε νήμα λαμβάνει τακτικά τον επεξεργαστή) τότε (για κάθε πιθανή εκτέλεση) υπάρχει μια επόμενη κατάσταση όπου ή είναι στο ΚΤ s : =TRY =TRY next*(s) : =CS =CS ΙΙΙ 36 lalis@inf.uth.gr
p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p3-p4,q1,cs,idl p2,q2,try,try p3-p4,q2,cs,try p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p2,q2,try,try p1,q3-q4,idl,cs p2,q3-q4,try,cs ΟΚ ΙΙΙ 37 lalis@inf.uth.gr
Απουσία λιμοκτονίας Δεν πρέπει να υπάρχει περίπτωση το να προσπαθεί να μπει στο ΚΤ, και να μην καταφέρει ποτέ να μπει στο ΚΤ Αν υπάρχει κατάσταση όπου προσπαθεί να μπει στο ΚΤ (εφόσον κάθε νήμα λαμβάνει τακτικά τον επεξεργαστή) τότε (για κάθε πιθανή εκτέλεση) υπάρχει μια επόμενη κατάσταση όπου είναι στο ΚΤ s : =TRY next*(s) : =CS ΙΙΙ 38 lalis@inf.uth.gr
p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p3-p4,q1,cs,idl p2,q2,try,try p3-p4,q2,cs,try p1,q1,idl,idl p2,q1,try,ncs p1,q2,idl,try p2,q2,try,try p1,q3-q4,idl,cs p2,q3-q4,try,cs ΟΚ ΙΙΙ 39 lalis@inf.uth.gr
Απουσία λιμοκτονίας (συνέχεια) Το μπορεί να μην ενδιαφερθεί να μπει στο ΚΤ ποτέ ή για ένα πολύ μεγάλο χρονικό διάστημα Αν υπάρχει κατάσταση όπου το να προσπαθεί να μπει στο ΚΤ και το δεν προσπαθεί να μπει στο ΚΤ, και το λάβει τον επεξεργαστή, τότε στην αμέσως επόμενη κατάσταση θα καταφέρει να μπει στο ΚΤ s : =TRY =IDL next(s,) : =CS ΙΙΙ 40 lalis@inf.uth.gr
p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p3-p4,q1,cs,idl p2,q2,try,try p3-p4,q2,cs,try p1,q1,idl,idl p2,q1,try,idl p1,q2,idl,try p2,q2,try,try p1,q3-q4,idl,cs p2,q3-q4,try,cs ΝΟΤ ΟΚ ΙΙΙ 41 lalis@inf.uth.gr
Αλγόριθμος B2 boolean want=false,want=false; : p1: p2: want=true; p3: if (want) {goto p3;} p4: CS p5: want=false; goto p1; : q1: q2: want=true; q3: if (want) {goto q3;} q4: CS q5: want=false; goto q1; State Description rogram Counter IDL idle no wish to enter CS p1/q1 TRY trying to enter CS p2-p3/q2-q3 CS inside CS p4-p5/q4-q5 ΙΙΙ 42 lalis@inf.uth.gr
Απουσία αδιεξόδου Δεν πρέπει να υπάρχει περίπτωση και να περιμένει το ένα το άλλο ενώ προσπαθούν να μπουν στο ΚΤ, και κανένα να μην καταφέρει τελικά να μπει στο ΚΤ Αν υπάρχει κατάσταση όπου και προσπαθούν να μπουν στο ΚΤ (εφόσον κάθε νήμα λαμβάνει τακτικά τον επεξεργαστή) τότε (για κάθε πιθανή εκτέλεση) υπάρχει μια επόμενη κατάσταση όπου ή είναι στο ΚΤ s : =TRY =TRY next*(s) : =CS =CS ΙΙΙ 43 lalis@inf.uth.gr
p1,q1 F,F,IDL,IDL p2,q1 F,F,TRY,IDL p1,q2 F,F,IDL,TRY p3,q1 T,F,TRY,IDL p2,q2 F,F,TRY,TRY p1,q3 F,T,IDL,TRY p3,q2 T,F,TRY,TRY p2,q3 F,T,TRY,TRY p3,q3 T,T,TRY,TRY ΝΟΤ ΟΚ ΙΙΙ 44 lalis@inf.uth.gr