Download presentation
Presentation is loading. Please wait.
1
1 מפרטים פורמאליים תירגול מספר 12 מפרטים פורמאליים - תירגול שחר דג LOTOS שרשור התנהגויות ( << ) הפסקת התנהגות ( <] ) דוגמא דוגמא (ממבחן) NIM מילון הסלנג של שחר ללוטוס מדוברת
2
2 מפרטים פורמאליים - תירגול שחר דג שרשור התנהגויות (שקף 69) הרכבה סדרתית של התנהגויות כאשר התהליך הראשון מסתיים (ע"י exit), התהליך השני מתחיל העברת ערכים מהתהליך הראשון לשני (רשימת הערכים המוחזרת ע"י התהליך הראשון חייבת להיות זהה לרשימת הפרמטרים של התהליך השני) bevavior_1 >> accept variables in behavior_2
3
3 מפרטים פורמאליים - תירגול שחר דג שרשור התנהגויות (דוגמא) GetVal [ line1 ] >> accept val : nat in PrintVal [ line2 ] (val) process GetVal [ in ] () : exit ( nat ) := in ? val ; let NewVal = ProcessVal( val ) in exit ( NewVal ) endproc process PrintVal [ out ] ( val : nat) : exit := out ! val ; exit endproc
4
4 מפרטים פורמאליים - תירגול שחר דג disable (שקף 71) כאשר ההתנהגות השנייה מתחילה לפעול היא עוצרת את ההתנהגות הראשונה ההתנהגות השנייה תתחיל לפעול ע"י פקודת קלט / פלט אם ההתנהגות הראשונה הסתיימה (ע"י exit), ההתנהגות השנייה לא תתבצע bevavior_1 [> behavior_2 לדוגמא ניקח את תהליך הקובייה (throw) שהזכרנו בשקף של i ונראה איך ניתן לעצור אותה throw [ line ] [> control ! DISABLE הקובייהעצירה ע"י פלט שרשור עצירות (A [> B) >> (C [> D) >> …
5
5 מפרטים פורמאליים - תירגול שחר דג דוגמא – המעלית - הגדרת הבעיה כללי 1.מערכת מעליות מורכבת מבקר, שתי מעליות וחישן המייצר את מספרי הקומות 2.בחרום, ניתן לעצור את המערכת המעלית 1.לכל מעלית מספר מזהה 2.כל מעלית מחכה לקבל מהבקר נתונים עבור הנסיעה הבאה שלה. 3.הנתונים כוללים את מספר המעלית, קומת המוצא וקומת היעד. 4.בהתקבל הנתונים המעלית תיסע ללא עצירות לקומת המוצא ולאחר מכן תיסע ללא עצירות לקומת היעד. 5.בסיום הנסיעה המעלית תשלח לבקר הודעה שהמשימה הסתיימה. הבקר 1.הבקר מקבל מהעולם קלט על הנסיעות הנדרשות בפורמט קומת מוצא, קומת יעד. 2.הבקר לא מקבל קלט כשאין מעלית פנויה. 3.הבקר מפעיל לסירוגין ובאופן אקראי את שתי המעליות. 4.הבקר מקבל קלט אודות סיום המשימה מהמעליות
6
6 מפרטים פורמאליים - תירגול שחר דג דוגמא – המעלית – תהליך המעלית Process elevator [ cmd, floor ] (id : nat) : noexit := cmd ! id ? start : nat ? end : nat ; Go [cmd, floor ] ( id, start, end) where process Go [ cmd, floor ] ( id : nat, start : nat, end : nat) : noexit := floor ! start ; i ; floor ! end ; i ; cmd ! id ! END ; elevator [ cmd, floor ] ( id ) endproc מה עלולה להיות כאן הבעיה ? אם מונה הקומות כתוב גרוע (ללא אופציות פעולה) הוא עלול "להיתקע" ולתקוע את כל המערכת (למזלנו לא זה המצב) האם עדיף להשתמש ב: floor ? current [ current = start ] -> i ; במקום? לשני הביטויים בדיוק אותו אפקט.
7
7 מפרטים פורמאליים - תירגול שחר דג דוגמא – המעלית – תהליך הבקר Process controller [ cmd, usr ] (id1, id2 : nat, active1, active2: bool) : noexit := [not (active1 and active2) ] -> usr ? start : nat ? end : nat ; ( [ active1 = false ] -> cmd ! id1 ! start ! end ; controller [ cmd, usr ] (id1, id2, true, active2) [] [ active2 = false ] -> cmd ! id2 ! start ! end ; controller [ cmd, usr ] (id1, id2, active1, true) ) [] cmd ! id1 ! END ; controller [ cmd, usr ] (id1, id2, false, active2) [] cmd ! id2 ! END ; controller [ cmd, usr ] (id1, id2, active1, false) endproc
8
8 מפרטים פורמאליים - תירגול שחר דג דוגמא – המעלית – מונה הקומות Process counter [ floor ] (min, max, current : int, direction : UpDown) : noexit := [(current counter [ floor ] (min, max, current + 1, up) [] [current = max] -> counter [ floor ] (min, max, current - 1, down) [] [(current > min) & (direction = down)] -> counter [ floor ] (min, max, current - 1, down) [] [current = min] -> counter [ floor ] (min, max, current + 1, up) [] floor ! current ; counter [ floor ] (min, max, current, direction ) endproc שימו לב כי לולא פקודת הפלט, מונה הקומות היה סופר את הקומות בצורה מחזורית מלמטה למעלה וחזרה אנו יוצאים מתוך הנחה כי יש חוק גלובלי (למשל ב LTL) שדואג שאכן כל מי שרוצה לקבל ערך ממונה הקומות, בסופו של דבר יצליח
9
9 מפרטים פורמאליים - תירגול שחר דג דוגמא – המעלית – העולם ( controller [ cmd, usr ] (1, 2, false, false) | [ cmd ] | elevator [ cmd, floor ] ( 1 ) | [ cmd ] | elevator [ cmd, floor ] ( 2 ) ) | [ floor ] | counter [ floor ] (0, 15, 0, up) ) [> panic ! STOP מה לא בסדר במימוש הזה ?? מכיוון שתהליכי המעלית מסונכרנים על cmd ומכיוון ששתי המעליות אף פעם לא תסכמנה על הערך (כל אחת רוצה לשלוח את ה id שלה) נקבל קיפאון !! אז מה הפתרון ?על כך בשקף הבא...
10
10 מפרטים פורמאליים - תירגול שחר דג דוגמא – המעלית – העולם האמיתי ( controller [ cmd, usr ] (1, 2, false, false) | [ cmd ] | hide [floor] in ( (elevator [ cmd, floor ] ( 1 ) ||| elevator [ cmd, floor ] ( 2 )) | [ floor ] | counter [ floor ] (0, 15, 0, up) ) ) [> panic ! STOP שתי המעליות עובדות בצורה בלתי תלויה שתי המעליות מסונכרנות עם מונה הקומות והשער floor מוסתר (למנוע השפעה חיצונית) כל ההרכבה מסונכרנת על ערוץ cmd עם הבקר (אבל עכשיו המעליות בלתי תלויות( בחרום שליחת האות STOP על הערוץ panic תעצור את המערכת
11
11 מפרטים פורמאליים - תירגול שחר דג NIM (המשימה) ( חלק משאלה בבחינה ) נתון משחק לשני שחקנים. על השולחן מפוזרים N גפרורים. בכל תור כל שחקן לוקח לפי בחירתו בין 1 ל 3 גפרורים. מטרת כל שחקן לגרום ליריב לקחת את הגפרור האחרון מהשולחן. (למי שלא מכיר את המשחק אזי בכל תור לוקחים מספר גפרורים כך שעל השולחן ישארו *n+14 גפרורים, במידה ולא ניתן לעשות זאת, לוקחים גפרור אחד, והיריב יוכל לנצח במשחק) כתוב מערכת Lotos עם: תהליך Pile (המתאר את שולחן המשחק + הגפרורים שעליו) שני תהליכי Player עבור המשחק.
12
12 מפרטים פורמאליים - תירגול שחר דג NIM (הפתרון 1/2) pile[ line ]( turn: bool, matches : int) exit ( bool ):= line ! matches ! turn ; line ! turn ? move : int; ( // end of game [ move = 1 ∧ matches = 1] ( line ! END ! false;// stop first player line ! END ! true;// stop second player exit( ¬turn )// exit, return the winner ) [] // legal move - accept [ 1 ≤ move ≤ 3 ∧ matches > move] pile[ line ]( ¬turn, matches – move) [] // illegal move - ignore [move 3 ⋁ move > matches] pile[ line ]( turn, matches ) ) endproc
13
13 מפרטים פורמאליים - תירגול שחר דג NIM (הפתרון 2/2) pile[ line ]( false, N ) || ( player[ line ]( false ) ||| player[ line ]( true ) ) player[ line ]( who : bool) exit:= line ? matches : int ! who; line ! who ! calculate( matches ); player[ line ]( who ) [] line ! END ! who; exit endproc
14
14 מפרטים פורמאליים - תירגול שחר דג מילון הסלנג החדש ללוטוס מדוברת Slide #NameSyntax & Comments 7input ? : 8output ! 9Action prefixAction ; behavior Sequentiality 11Choicebehavior_1 [] behavior_2 Non deterministic choice 13Guard[ BooleanExpression ] -> behavior The guard must be true in order to perform the behavior 17processDefinition, Instantiation, The only way to iterate. 26SpecificationHow to combine all process to define the system.
15
15 מפרטים פורמאליים - תירגול שחר דג מילון הסלנג החדש ללוטוס מדוברת Slide #NameSyntax & Comments 36interleavingBehavior_1 ||| behavior_2 No true concurrency 40 Partial synchronization Behavior_1 | [ ] | behavior_2 44 Full synchronization Behavior_1 || behavior_2 The same as partial synchronization with all gates listed 63internal action i hide details from the environment, prevent the environment from influencing the selection in a choice 48Inactionstop Can be used to express that a process finished its execution 68exitexit (values list) a process terminates successfully & returns values
16
16 מפרטים פורמאליים - תירגול שחר דג מילון הסלנג החדש ללוטוס מדוברת Slide #NameSyntax & Comments 69 concatenation behavior_1 >> accept variables in behavior_2 when the first behavior exit the second one starts. the variable list must match. 71disablebehavior_1 [> behavior_2 when the second behavior starts it stops the first behavior
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.