1 / 20

מפרטים פורמאליים תרגיל בית מספר 5 שאלה 1 מערכת בקרה ליחידה צבאית

מפרטים פורמאליים תרגיל בית מספר 5 שאלה 1 מערכת בקרה ליחידה צבאית. אזהרה: פתרון זה אינו פתרון שלם לתרגיל הבית. הפתרון בא להדגים את הנקודות העדינות בפתרון. מפרטים פורמאליים - תירגול. שחר דג. התקשורת. CMD ! SHOOT_CMD ! cmd_src_id ! target // pikud -> artillery

sahara
Download Presentation

מפרטים פורמאליים תרגיל בית מספר 5 שאלה 1 מערכת בקרה ליחידה צבאית

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. מפרטים פורמאלייםתרגיל בית מספר 5שאלה 1מערכת בקרה ליחידה צבאית אזהרה: פתרון זה אינו פתרון שלם לתרגיל הבית. הפתרון בא להדגים את הנקודות העדינות בפתרון מפרטים פורמאליים - תירגול שחר דג

  2. התקשורת CMD ! SHOOT_CMD ! cmd_src_id ! target // pikud -> artillery CMD ! SHOOT_REQ ! pikud_id ! infantry_id ! target // infantry -> pikud CMD ! GO_TO ! infantry_id ! pikud_id ! target // pikud -> infantry STATUS ! MOVE_ACK ! Pikud_id ! infantry_id // infantry -> pikud STATUS ! SHOOT_OK ! cmd_src_id ! artillery_id ! target // artillery -> pikud STATUS ! NO_SHOOT ! cmd_src_id ! artillery_id ! target // artillery -> pikud STATUS ! SHOOT_OK ! pikud_id ! target // pikud -> infantry STATUS ! NO_SHOOT ! pikud_id ! target // pikud -> infantry STATUS ! POSITION ! pikud_id ! infantry_id ! infantry_position // infantry -> pikud STATUS ! OUT_OF_ACTIVITY ! pikud_id ! infantry_id // infantry -> pikud AMMU ! GET_AMMU ! artillery_id // pikud -> artillery AMMU ! ASK_AMMU ! artillery_id // artillery -> pikud מפרטים פורמאליים - תירגול שחר דג

  3. סוללת ארטילריה • סוללת ארטילריה. • מקבלת פקודות ירי. כל פקודת ירי מכילה לפחות את נקודת ציון (נ.צ.) עליו יש לירות • בתגובה על פקודת ירי מחזירה הסוללה את אחת מההודעות הבאות: • הירי בוצע בהצלחה. • לא ניתן לבצע את הירי (ניתן לנסות שנית יותר מאוחר). • באופן אקראי יגמר לסוללה החימוש. במקרה כזה הסוללה יכולה לבקש מהפיקוד תחמושת. אישור הפיקוד שקול להצטיידות מחודשת בתחמושת. מפרטים פורמאליים - תירגול שחר דג

  4. סוללת ארטילריה // the main loop artillery [ CMD , STATUS , AMMU ] ( id : nat ) : noexit := ( CMD ! SHOOT_CMD ? cmd_source: nat ? target: point; artillery_shoot [ CMD , STATUS , AMMU ]( id , target , cmd_source) [] i ; AMMU ! ASK_AMMU ! id ; AMMU ! GET_AMMU ! id ; artillery [ CMD , STATUS , AMMU ] ( id ) [] i; artillery [ CMD , STATUS , AMMU ] ( id ) ) • הנחות והסברים: • פקודת ירי לא מכילה מזהה של סוללת ארטילריה כדי שכל סוללה פנויה תוכל לענות. • ארטילריה לא מגיבה לפיקוד אם אין לה תחמושת • לארטילריה לא תיגמר התחמושת באמצע הירי • פה הנחנו כי אישור החימוש בא בפקודת קלט/פלט נפרדת, אבל באותה מידה יכולנו להניח כי העובדה שהפיקוד מבצע match לבקשת התחמושת פירושה הספקה מפרטים פורמאליים - תירגול שחר דג

  5. סוללת ארטילריה // actual shoot & status artillery_shoot [ CMD , STATUS , AMMU ] ( id : nat , target : point, cmd_source : nat) : noexit := ( i ; STATUS ! SHOOT_OK ! cmd_source ! id ! target; artillery [ CMD , STATUS , AMMU ] ( id ) [] i ; STATUS ! NO_SHOOT ! cmd_source ! id ! target; artillery [ CMD , STATUS , AMMU ] ( id ) ) כאן ה i גם מונע מהסביבה להתערב בהחלטה האם הירי הצליח או ניכשל וגם מייצג את פעולת הירי עצמה מפרטים פורמאליים - תירגול שחר דג

  6. פלוגת חי"ר • פלוגת חי"ר: • תקבל מהפיקוד נ.צ. אליו עליה לנוע. ותאשר את קבלת הפקודה. • תדווח לפיקוד על מיקומה. • תבקש מהפיקוד סיוע ארטילרי (של סוללה בודדת). • תקבל מהפיקוד משוב על ביצוע הירי. • יתכן שהפלוגה תצא מפעילות (מסיבה כלשהיא). היא תדווח לפיקוד על יציאה מפעילות, תפסיק להגיב לפקודות ולא תחזור לפעילות. מפרטים פורמאליים - תירגול שחר דג

  7. פלוגת חי"ר infantry [ CMD , STATUS ] ( id : nat, pikud_id : nat) : noexit := ( CMD ! GO_TO ! id ! pikud_id ? target: point; STATUS ! MOVE_ACK ! pikud_id ! infantry_id i ; // simulates the move infantry [ CMD , STATUS ] ( id , pikud_id) [] STATUS ! POSITION ! pikud_id ! id ! get_position() ; infantry [ CMD , STATUS ] ( id , pikud_id) [] let target = get_target() in CMD ! SHOOT_REQ ! pikud_id ! id ! target; infantry_wait_ack [ CMD , STATUS ] ( id , pikud_id, traget) [] i; STATUS ! OUT_OF_ACTIVITY ! pikud_id ! id; stop; [] i; infantry [ CMD , STATUS ] ( id , pikud_id); ) מפרטים פורמאליים - תירגול שחר דג

  8. פלוגת חי"ר • שימו לב שאין קלט של דברים שצריך לבדוק (למשל אני לא קורא את המזהה של היעד, אני מוציא את המזהה שלי, כך אני מראש מקבל רק פקודות שמיועדות אלי). • אנו יודעים מי הפיקוד שלנו ע"פ המזהה שלו ולא ע"פ השער דרכו מתקבל הפיקוד, גישה זו יכולה לחסוך שערים כי היא מאפשרת לכולם לדבר על אותו ערוץ פיקוד. • אנו מניחים כי הדיווח על המיקום לא בהכרח נעשה בצמידות לתזוזה. עוד אנו מניחים כי יש פונקציה חיצונית המחזירה את המיקום הנוכחי שלנו. לחילופין, יכולנו לשמור את המיקום בתור פרמטר של התהליך ואז כל פקודת "זוז" צריכה לשנות אותו. • אנו מניחים כי יש פונקציה המחשב את המטרה עליה אנו מבקשים ירי ארטילרי. כדי לא להסתבך, אנו זוכרים כי ביקשנו סיוע בעזרת תהליך נפרד ולא בעזרת משתנה (שימוש במשתנה, היה מצריך בדיקות כדי להחליט אם עלינו לקבל דיווח על ירי או לא). בקשת סיוע ארטילרי ללא ציון המטרה, היא קצת מוזרה. • אנו רואים כי יציאה מפעילות מצוינת ע"י stop ולא ע"י exit וזאת כי התהליך שלנו הוא אין סופי. • להמשך נניח כי בזמן שאנו מחכים לתוצאת הירי, לא נקבל פקודות תזוזה (למשל כדי לא להסתכן בפגיעה מהארטילריה שלנו) אבל באותה מידה יכולנו להסכים לקבל פקודות תזוזה מפרטים פורמאליים - תירגול שחר דג

  9. פלוגת חי"ר infantry_wait_ack [ CMD , STATUS ] ( id :nat , pikud_id : nat, target : point) : noexit := ( // may be SHOOT_OK or NO_SHOOT we really don’t care STATUS ? feedback: nat ! pikud_id ! target; infantry [ CMD , STATUS ] ( id , pikud_id) [] // we still report our position STATUS ! POSITION ! pikud_id ! id ! get_position(); infantry_wait_ack [ CMD , STATUS ] ( id , pikud_id, target) [] // and we can still get out of activity STATUS ! OUT_OF_ACTIVITY ! pikud_id ! id; stop ) מפרטים פורמאליים - תירגול שחר דג

  10. הפיקוד pikud [ CMD , STATUS , AMMU ] ( id : nat, infantry_ids :set, artillary_ids : set ) noexit ( i; CMD ! GO_TO ! get(infantry_ids) ! id ! target(); pikud[ CMD , STATUS , AMMU ] ( id, infantry_ids, artillary_ids ) [] STATUS ! POSITION ! id ? i_id: nat ? position: point; pikud[ CMD , STATUS , AMMU ] ( id, infantry_ids, artillary_ids ) [] STATUS ! OUT_OF_ACTIVITY ! id ? i_id: nat; pikud[ CMD , STATUS , AMMU ] ( id, del(infantry_ids, i_id), artillary_ids ) [] CMD ! SHOOT_REQ ! id ? i_id: nat ? target: point; CMD ! SHOOT_CMD ! id ! target; pikud[ CMD , STATUS , AMMU ] ( id, infantry_ids, artillary_ids ) [] STATUS ? status ! id ? a_id: nat ? target: point; STATUS ! status ! id ! target; pikud[ CMD , STATUS , AMMU ] ( id, infantry_ids, artillary_ids ) [] AMMU ! ASK_AMMU ? a_id: nat; AMMU ! GET_AMMU ! a_id; pikud[ CMD , STATUS , AMMU ] ( id, infantry_ids, artillary_ids ) [] i; pikud [ CMD , STATUS , AMMU ] ( id, infantry_ids, artillary_ids ) ) מפרטים פורמאליים - תירגול שחר דג

  11. הפיקוד • we assume that we have a "set" data type with get() operation that returns randomly an element from the set and del() operation that removes an element from the set • We should handle the infantry troops that stop their activity • When we get an artillery request from an infantry troop, we could check that infantry id is in the infantry_ids set • When we sent a shoot request, we could save the id of the artillery unit that responded to the request (this require waiting to reply in a separate process), instead we decided that if the target is the same, we don’t care who took the shoot. • When we get an ammunition request, we could check that artillery id is in the artillery_ids set • We don’t need to handle communication to/from the world מפרטים פורמאליים - תירגול שחר דג

  12. המערכת הרכבה של תהליך פיקוד עם 3 פלוגות חי"ר ו 3 סוללות ארטילריה. • SPECIFICATION military [CMD , STATUS , AMMU ] : NOEXIT // the entire specification • LIBRARY nat, set, point ENDLIB // external libraries • BEHAVIOR // how the system behaves • ( • artillery [ CMD , STATUS , AMMU ] ( 1 ) • ||| • artillery [ CMD , STATUS , AMMU ] ( 2 ) • ||| • artillery [ CMD , STATUS , AMMU ] ( 3 ) • ||| • infantry [ CMD , STATUS ] ( 4 , 0) • ||| • infantry [ CMD , STATUS ] ( 5 , 0) • ||| • infantry [ CMD , STATUS ] ( 6 , 0) • ) || • pikud [ CMD , STATUS , AMMU ] ( 0, {4, 5, 6}, {1, 2, 3} ) • WHERE // process definition, use same definition as before • process artillery … • process artillery_shoot … • process infantry … • process infantry_wait_ack • process pikud … • ENDSPEC מפרטים פורמאליים - תירגול שחר דג

  13. המערכת • כל היחידות (ארטילריה ורגלים) הן interleaved, כך יחידה אחת לא משפיעה על תפקוד שאר היחידות. • החיבור של היחידות עם הפיקוד הוא ע"י סנכרון מלא, מכיוון שכל יחידה חייבת תמיד תקשורת עם הפיקוד • לכל יחידה מספר זיהויי ייחודי, ככה אנו לא צריכים קווים נפרדים לתקשורת עם הארטילריה ועם החי"ר (היו מספר סטודנטים שנתנו לארטילריה ולחי"ר אותם מזהים, אבל השתמשו בשני קווי פיקוד נפרדים). מפרטים פורמאליים - תירגול שחר דג

  14. התערבות הרמטכ"ל מבלי לשנות את ההרכבה מסעיף 4, עליכם להראות, איך הרמטכ"ל יכול להתערב בעבודת הפיקוד ולאפשר ביצוע פקודות רק אם גם הוא מבקש לבצע אותן • ( • artillery [ CMD , STATUS , AMMU ] ( 1 ) • ||| • artillery [ CMD , STATUS , AMMU ] ( 2 ) • ||| • artillery [ CMD , STATUS , AMMU ] ( 3 ) • ||| • infantry [ CMD , STATUS ] ( 4 , 0) • ||| • infantry [ CMD , STATUS ] ( 5 , 0) • ||| • infantry [ CMD , STATUS ] ( 6 , 0) • ) • || • pikud [ CMD , STATUS , AMMU ] ( 0, {4, 5, 6}, {1, 2, 3} ) • || • ramatcal[ CMD ] () מפרטים פורמאליים - תירגול שחר דג

  15. מניעת התערבות הרמטכ"ל עליכם לשנות מעט ככל הניתן את ההרכבה מסעיף 4 על מנת שהרמטכ"ל לא יוכל להתערב בתקשורת עם סוללות הארטילריה ופלוגות החי"ר. • Hide [ CMD, STATUS, AMMU] in • ( • ( • artillery [ CMD , STATUS , AMMU ] ( 1 ) • ||| • artillery [ CMD , STATUS , AMMU ] ( 2 ) • ||| • artillery [ CMD , STATUS , AMMU ] ( 3 ) • ||| • infantry [ CMD , STATUS ] ( 4 , 0) • ||| • infantry [ CMD , STATUS ] ( 5 , 0) • ||| • infantry [ CMD , STATUS ] ( 6 , 0) • ) • || • pikud [ CMD , STATUS , AMMU ] ( 0, {4, 5, 6}, {1, 2, 3} ) • ) מפרטים פורמאליים - תירגול שחר דג

  16. פיקוד תקין יחד עם הרמטכ"ל עליכם לכתוב הרכבה חדשה של רמטכ"ל, תהליך פיקוד, 3 פלוגות חי"ר ו 3 סוללות ארטילריה כך שגם הרמטכ"ל וגם הפיקוד יוכלו לפקד על פלוגות החי"ר והארטילריה באופן אלטרנטיבי וללא הפרעות. (אין צורך לממש את תהליך הרמטכ"ל). במימוש הנוכחי, פלוגות החי"ר מחזיקות את המזהה של הפיקוד, לכן אם לרמטכ"ל יהיה מזהה שונה, הן לא תקבלנה ממנו פיקוד. אנו לא נטפל בבעיה זו כאן. מכיוון שאנו לא ממשים את תהליך הרמטכ"ל, לא נטפל בפרמטרים שהוא צריך לקבל. כמו כן לא נטפל באפשרות של סוללת ארטילריה לדווח על תוצאות הירי לפיקוד גם אם הבקשה המקורית התקבלה מהרמטכ"ל. המטרה פה היא להראות את ההרכבה בהנחה שהתהליכים השונים בנויים כך שהם יעבדו נכון גם עם ההרכבה החדשה. מפרטים פורמאליים - תירגול שחר דג

  17. פיקוד תקין יחד עם הרמטכ"ל • ( • artillery [ CMD , STATUS , AMMU ] ( 1 ) • ||| • artillery [ CMD , STATUS , AMMU ] ( 2 ) • ||| • artillery [ CMD , STATUS , AMMU ] ( 3 ) • ||| • infantry [ CMD , STATUS ] ( 4 , 0) • ||| • infantry [ CMD , STATUS ] ( 5 , 0) • ||| • infantry [ CMD , STATUS ] ( 6 , 0) • ) • || • ( • pikud [ CMD , STATUS , AMMU ] ( 0, {4, 5, 6}, {1, 2, 3} ) • ||| • ramatcal[ CMD , STATUS , AMMU ] () • ) מפרטים פורמאליים - תירגול שחר דג

  18. פיקוד תקין יחד עם הרמטכ"ל (הערות) כדי שגם הפיקוד וגם הרמטכ"ל יוכלו לפקד במקביל ובלי להפריע אחד לשני יש להרכיב אותם יחד ע"י |||. כל הרכבה מסונכרנת (ולו גם חלקית) היא שגיאה. מפרטים פורמאליים - תירגול שחר דג

  19. תנאי הוגנות עליכם לכתוב בלוגיקה טמפוראלית את התנאים הנדרשים לשם קבלת מערכת הוגנת ומגיבה (למשל במערכת הוגנת כל פלוגה שתבקש סיוע ארטילרי, בסופו של דבר תקבל אותו) • בעצם אפשר לחשוב על 3 תנאים עיקריים: • כל תקשורת תבוצע בסופו של דבר • כל יחידת חי"ר שתבקש סיוע ארטילרי מספיק פעמים, בסופו של דבר תקבל אותו • כל סוללת ארטילריה שתבקש תחמושת מספיק פעמים, בסופו של דבר תקבל אותה • המהדרים יוסיפו שלא כל הזמן נפנה לאותה יחידת חי"ר שימו לב שלא מספיק לכתוב תנאי מהסוג: ⃞R ⇒⃟A כאשר: R היא הבקשה ו A התשובה. יש לדרוש שהבקשה והתשובה יהיו לאותו גורם. תנאי טוב יותר יהיה: ⃞{⃞ ⃟(R(i) ⋀ i=I) ⇒⃟A(i)} מפרטים פורמאליים - תירגול שחר דג

  20. שגיאות נפוצות • כאשר פלוגת חי"ר מקבלת משוב על סיוע ארטילרי, היא צריכה לבדוק שזה המשוב לסיוע שהיא ביקשה. • כאשר פלוגת חי"ר מבקשת סיוע ארטילרי, הנקודה עליה היא מבקשת לירות צריכה להיות שונה מהמיקום שלה, אחרת מקבלים ירי ארטילרי על פלוגת החי"ר. • המימוש של פלוגת חי"ר מורכב משרשור סידרתי של כל הפעולות במקום מבחירה בין כל הפעולות. • אם לסוללת ארטילריה אין תחמושת, אז הדבר הבא שהיא תעשה יהיה לבקש תחמושת. • שימוש בתחביר של תכנות במקום בתחביר של לוטוס. • שימוש ב ||| כדי לחבר כמה פקודות ק/פ שיכולות להתרחש (כנראה במקום שימוש ב [ ]). • שגיאה של סגנון (וניפוח הקוד שלא לצורך) כאשר משתמשים בקלט + זקיף במקום בפקודת פלט (למשל כדי לבדוק שהפקודה מיועדת לנו אנו קולטים את קוד הפקודה + מזהה של היעד במקום לקלוט את קוד הפקודה והוציא את המזהה שלנו, כך נקבל רק פקודות שבאמת מיועדות לנו ללא צורך בבדיקות) • כאשר מרכיבים את כל התהליכים יחד, יש להגדיר לכל תהליך את השערים שלו והמשתנים שלו. מפרטים פורמאליים - תירגול שחר דג

More Related