תכונות שמורה Invariant Properties גרא וייס המחלקה למדעי המחשב אוניברסיטת בן-גוריון
2 בדיקות מודל Checking( )Model מערכת דרישות מידול פירמול בדיקות מודל )Model Checking( מודל של המערכת תכונות פורמליות סימולציה דוגמה נגדית התכונות הוכחה
3 תזכורת: מריצות לתכונות s 0 ריצה! s1! s2! s 0 s 1 s 2 מסלול ) 2 L(s 0 )L(s 1 )L(s עקבות שפה פורמאלית מעל האלף-בית 2 AP תכונה
4 )semaphore( דוגמה רצה: מניעה הדדית מבוססת סמפור noncrit 1 noncrit 2 y = y + 1 wait 1 y = y + 1 wait 2 y > 0 y = y 1 y > 0 y = y 1 crit 1 crit 2 מסמל "המנעול בשימוש" מסמל ו = 1 y "המנעול חופשי" y = 0
5 מערכת המעברים ) 2 TS(PG 1 PG hn 1, n 2, y=1i hw 1, n 2, y=1i hn 1, w 2, y=1i hc 1, n 2, y=0i hw 1, w 2, y=1i hn 1, c 2, y=0i hc 1, w 2, y=0i hw 1, c 2, y=0i
6 תכונות זמן ליניארי Linear Time Properties הגדרה: תכונת זמן ליניארי P היא תת קבוצה של P 2 AP ω להשאיר - העקבות שהתוכנית עלולה התכונה מתארת מהן עקבות שגיאה בתוכנית "חוקיות" מבחינתנו ואילו עקבות נחשבות אנחנו מכוונים ללוגיקה שבה ניתן יהיה לתאר התנהגויות חוקיות של מערכות ושאפשר לבקש, למשל מ- SPIN, לבדוק אם מערכת מעברים נתונה מקיימת תכונה רצויה מערכת מקיימת תכונה אם כל העקבות שהיא עלולה להשאיר הן חוקיות נראה דרכים שונות לתאר תכונות
7 הסימונים TS P ו- s P נסמן ע"י TS P את העובדה שמערכת המעברים TS מקיימת את תכונת הזמן הליניארי P: Traces TS P אם ורק אם TS P באופן דומה, נסמן ב s S את העובדה שכל הריצות המתחילות במצב P: מקיימות את תכונת הזמן הליניארי s S Traces s P אם ורק אם s P
8 דוגמה: רמזורים מסונכרנים {red 1 } {green 2 } {red 1, green 2 } red 1 green 2 red, green green 1 red 2 {green 1 } {red 2 } green, red {green 1, red 2 } "הרמזור הראשון יהיה ירוק אינסוף פעמים" = P 2 AP כך ש green 1 A i עבור אינסוף i םי-. {red 1, green 2 }{green 1, red 2 }{red 1, green 2 }{green 1, red 2 } green green 1 1 green 1 green 1 {red 1, green 1 } {red 1, green 1 } {red 1, green 1 } {green 1, green 2 } {green 1, green 2 }{green 1, green 2 } כל המילים האינסופיות מהצורה 3 A 1 A 2 A מעל למשל, P מכילה את המילים:
9 דוגמה: רמזורים מסונכרנים {red 1 } {green 2 } {red 1, green 2 } red 1 green 2 red, green green 1 red 2 {green 1 } {red 2 } green, red {green 1, red 2 } "אף פעם לא מדליקים אור ירוק בשני הרמזורים ביחד" = P green 2 A i green 1 A i,i כל המילים האינסופיות מהצורה 3 A 1 A 2 A מעל 2 AP למשל, P מכילה את המילים: כך שלכל או red 1, green 2 green 1, red 2 red 1, green 2 green 1, red 2... green 1 green 1 green 1 green 1 {red 1, green 1 } {red 1, green 1 } {red 1, green 1 }
10 איך נגדיר מניעה הדדית? "תמיד נמצא לכל היותר אחד מהתהליכים בקטע הקריטי" נניח } 2 AP = {crit 1, crit הפסוקים האטומיים האחרים אינם רלוונטיים לתכונה הזאת תאור כתכונת זמן ליניארי: P mutex = A 0 A 1 crit 1, crit 2 A i for all i דוגמאות למילים אינסופיות ב- P: mutex crit 1 crit 2 ω crit 1 crit 1 ω דוגמאות למילים אינסופיות שאינן ב- P: mutex crit 1 crit 1, crit 2 ω crit 1, crit 2 crit 1, crit 2 ω
11? האם האלגוריתם שהצגנו מקיים P mutex hn 1, n 2, y=1i hw 1, n 2, y=1i hn 1, w 2, y=1i hc 1, n 2, y=0i {crit 1 } hw 1, w 2, y=1i hn 1, c 2, y=0i {crit 2 } hc 1, w 2, y=0i {crit 1 } hw 1, c 2, y=0i {crit 2 } crit 1 כן, מכיוון שאין מצב נגיש המכיל גם את וגם את crit 2
12 איך נגדיר מניעת הרעבה? "תהליך הרוצה להיכנס לקטע הקריטי ייכנס בסופו של דבר" נגדיר } 2 AP = {wait 1, crit 1, wait 2, crit כתיבה כתכונת זמן ליניארי: P nostarve = {A 0 A 1 j. wait i A j ( j. crit i A j ) for each i = 1,2} סימון: "קיימים אינסוף אינדקסים כך ש..." j. wait i A j ( k > 0. j > k. wait i A j )? האם האלגוריתם מקיים את התכונה P nostarve
13 איך נגדיר מניעת הרעבה? "תהליך הרוצה להיכנס לקטע הקריטי ייכנס בסופו של דבר" נגדיר } 2 AP = {wait 1, crit 1, wait 2, crit כתיבה כתכונת זמן ליניארי: P nostarve = A 0 A 1 j. wait 1 A j j. crit 1 A j A 0 A 1 j. wait 2 A j j. crit 2 A j סימון: "קיימים אינסוף אינדקסים כך ש..." j. wait 1 A j ( k > 0. j > k. wait 1 A j )? האם האלגוריתם מקיים את התכונה P nostarve
14 האם האלגוריתם מבטיח חוסר הרעבה? hn 1, n 2, y=1i hw 1, n 2, y=1i {wait 1 } hn 1, w 2, y=1i {wait 2 } hc 1, n 2, y=0i {crit 1 } hw 1, w 2, y=1i {wait 1, wait 2 } hn 1, c 2, y=0i {crit 2 } hc 1, w 2, y=0i {crit 1, wait 2 } hw 1, c 2, y=0i {wait 1, crit 2 } לא: wait 2 wait 1, wait 2 crit 1, wait 2 ω Traces TS P nostarve
15 עידון דרישות ושקילות עקבות כשבונים מערכת: במהלך הפיתוח מתחילים בהגדרת דרישות כלליות ומפרטים את הדרישות מבחינה פורמאלית: מתחילים במודל המגדיר ריצות ומעדנים אותו ככל שמבינים יותר איך המערכת צריכה לפעול עד שמגיעים למימוש מתמטית: ) H Traces TS L Traces(TS י ת רו נו ת של הגישה הפורמאלית: אפשר לבדוק תכונות בכל שלב של הפיתוח אפשר לוודא שהמימוש הוא עידון של הדרישות אפשר לוודא, מול הלקוח, כבר בשלב מוקדם, שהדרישות הובנו
16 דוגמה: אלגוריתם מניעה הדדית hn 1, n 2, y=1i hw 1, n 2, y=1i hn 1, w 2, y=1i hc 1, n 2, y=0i hw 1, w 2, y=1i hn 1, c 2, y=0i hc 1, w 2, y=0i hw 1, c 2, y=0i האלגוריתם מקיים את התכונה P mutex
17 דוגמה: עידון אלגוריתם המניעה ההדדית hn 1, n 2, y=1i hw 1, n 2, y=1i hn 1, w 2, y=1i hc 1, n 2, y=0i hw 1, w 2, y=1i hn 1, c 2, y=0i hc 1, w 2, y=0i hw 1, c 2, y=0i P mutex לא צריך לבדוק: גם הגרסה הזאת )הורדנו קשת( מקיימת את התכונה
18 שקילות עקבות ותכונות זמן ליניארי TS עבור מערכות מצבים TS ו בלי מצבים ללא מוצא: Traces TS Traces(TS ) אם ורק אם TS P TS P לכל תכונת זמן ליניארי P אם מתקיים: אז Traces(TS) = Traces(TS ) אם ורק אם TS ו TS מקיימות את אותן תכונות זמן ליניארי
19 דוגמה: שתי מכונות שתייה pay pay sprite select beer select 1 sprite beer select 2 AP = { pay, sprite, beer } אין תכונת זמן ליניארי שיכולה להבדיל בין שתי המכונות האלה
20 תכונות בטיחות properties( )safety תכונות בטיחות properties( )safety ¼ "שום דבר רע לא יקרה" תכונת בטיחות אופיינית: מתהליך אחד בקטע הקריטי( תכונת המניעה ה ה ד ד ית לעולם לא קורה )יותר הרע הדבר )deadlock( דוגמה טיפוסית נוספת: הימנעות מק פ או ן שתי התכונות האלה הן שמורות )invariants( נתון תנאי φ למצבים דורשים ש φ יתקיים לכל מצב נגיש φ crit 1 crit 2 דוגמה: עבור תכונת המניעה ההדדית דוגמה: תכונת הק פ או ן של הפילוסופים הסועדים φ wait 0 wait 1 wait 2 wait 3 wait 4
21 תכונות ש מ ור ה )invariants( תכונת זמן ליניארי P inv היא ש מ ור ה אם קיימת נוסחה φ כך ש- P inv = { A 0 A 1 j 0. A j φ } )invariant condition( נקרא תנאי השמורה φ TS P inv אם ורק אם TS של π לכל מסלול trace π P inv TS לכל מצב s L s השייך למסלול של φ s Reach(TS) לכל מצב L s φ חייב להתקיים בכל מצב התחלתי, נכונות φ נשמרת תחת כל מעבר )בתחום הנגיש( אינדוקציה: φ
22 בדיקת שמורות בדיקת שמורה עבור פסוק = φ האם התכונה מתקיימת בכל מצב נגיש? שימוש בגרסה של אלגוריתם סריקת גרף BFS( או )DFS בהנחה שמערכת המעברים סופית ביצוע חיפוש DFS אם מצאנו מצב s קדימה מסיקים ש φ אינו שמורה כך ש s φ אפשרות אחרת: חיפוש אחורה מתחילים מהמצבים בהם φ אינה מתקיימת )φ s( מחשבים את המצבים הקודמים (s) Pre באמצעות DFS או BFS אם הגענו למצב התחלתי ) s I( Pre מסיקים ש φ אינה שמורה
23 בדיקת שמורה באמצעות DFS קלט: פלט: מערכת מעברים סופית TS ונוסחה Á Á", מקיימת את השמורה "תמיד TS אם true אחרת false *( קבוצת המצבים בהם ביקרנו )* ;; := R set of states *( מחסנית מצבים "לטיפול" )* ²; := U stack of states *( כל המצבים ב R מקיימים את boolean b := true; )* Á for all s 2 I do od if s R then fi )* מתחילים DFS מכל מצב התחלתי *( visit(s)
24 בדיקת שמורה באמצעות DFS procedure visit(state s) )* פרוצדורה לביקור במצב *( push(s, U); )* דוחפים את המצב למחסנית *( R := R [ {s}; )* ומוסיפים אותו לקבוצת המצבים שכבר ביקרנו *( repeat s := top(u); if Post(s ) µ R then pop(u); *( בודקים אם s מקיימת את b := b Æ (s ² Á); )* Á else take s 2 Post(s ) n R; push(s, U); *( גילינו מצב נגיש חדש s R := R [ {s }; )* fi until ((U = ²) Ç :b) endproc
25 זמן סיבוכיות נניח שניתן למצוא s Post(s) בזמן θ( Post(s) ) הנחה תקפה כאשר מייצגים את Post(s) ע"י רשימות סמיכות )adjacency lists( TS סיבוכיות זמן בדיקת שמורה: O(N φ + M) N מסמל את מספר המצבים הנגישים Post(s) M = s S מסמל את מספר המעברים בחלק הנגיש של בדרך כלל לא מייצגים את רשימות הסמיכות באופן מפורש למשל: ניתן להשתמש בתיאור סינטקטי של התהליכים המקביליים כגרפי תוכנית Post(s) מתקבל מהכללים של יחס המעברים
26 אלגוריתם שנותן גם דוגמה נגדית *( קבוצת המצבים בהם ביקרנו )* ;; := R set of states *( מחסנית מצבים "לטיפול" )* ²; := U stack of states boolean b := true; )* כל המצבים ב R מקיימים את Á *( while (I R b ) do let s I R visit(s) od if b then return yes Else return no, reverse(u) Fi