תיאום בין תהליכים: שיטות מתקדמות

Slides:



Advertisements
Similar presentations
While,B:=,0,true while,B:=,1,true N:=,B:=,0,true P1 N:=,B:=,1,true P1 while,end,0,false end,end,0,false P1 N:=,end,0,false P2 while,end,1,false end,end,1,false.
Advertisements

מבוא למדעי המחשב לתעשייה וניהול
Synchronization Operating Systems (234123) Spring 2013 Synchronization Dan Tsafrir (22/4/2013, 6/5/2013) Partially based on slides by Hagit Attiya OS (234123)
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 תהליכים - דייאט : חוטים  מוטיבציה  חוטי משתמש וחוטי מערכת  תמיכת מערכת ההפעלה  דוגמאות.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 תיאום בין תהליכים : שיטות מתקדמות  שימוש בחומרה למימוש מנעולים  מנגנוני מערכת הפעלה לתיאום : סמפורים, משתני תנאי.
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 תיאום בין תהליכים : יסודות  דוגמאות לבעיות תיאום  הגדרות : קטע קריטי, מנעולים  אלגוריתם קופת - חולים.
נובמבר סנכרון תהליכים וחוטים Process and Thread Synchronization חלק ראשון.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 סיכום הקורס.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 פסיקות  סוגי פסיקות  איך מערכת ההפעלה מטפלת בפסיקות  דוגמא : קלט בעזרת פסיקות.
מערכות הפעלה ( אביב 2008) חגית עטיה © 1 טיפול בקיפאון  בעיית הקיפאון  הימנעות מקיפאון  זיהוי קיפאון באמצעות מציאת מעגלים  אלגוריתם הבנקאי להתחמקות.
מערכות הפעלה תרגול 3 – תהליכים ב-Linux (1). מערכות הפעלה - תרגול 32 (c) ארז חדד 2003 תוכן התרגול מבוא לתהליכים ב-Linux API לעבודה עם תהליכים מבוא לניהול.
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 מערכות קבצים מבוזרות  מבוא : שקיפות ושמירת מצב.  דוגמה : Network File System.
נובמבר ניהול תהליכים במערכת מרובת מעבדים Process Management in Multiprocessor Systems.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
מערכות הפעלה תרגול 6 – חוטים ב-Linux.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 מערכות הפעלה קורס מס '
מערכות הפעלה תרגול 3 – תהליכים ב-Linux (1). מערכות הפעלה - תרגול 32 (c) ארז חדד 2003 תוכן התרגול מבוא לתהליכים ב-Linux API לעבודה עם תהליכים מבוא לניהול.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 תהליכים - דייאט : חוטים  מוטיבציה  חוטי משתמש וחוטי מערכת  תמיכת מערכת ההפעלה  דוגמאות.
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 תהליכים - דייאט : חוטים  מוטיבציה  חוטי משתמש וחוטי מערכת  תמיכת מערכת ההפעלה  דוגמאות ושימושים.
מערכות הפעלה ( אביב 2008) חגית עטיה © 1 וירטואליזציה.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
משטר סטטי שערים לוגיים Wired Drives – © Dima Elenbogen 2009, Moshe Malka :29.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
מערכות הפעלה ( אביב 2009) חגית עטיה © 1 וירטואליזציה.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
טיפול בקיפאון בעיית הקיפאון הימנעות מקיפאון
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 זימון תהליכים  מדיניות בסיסיות : RR, FCFS, SJF  הערכת זמן ריצה ושימוש בעדיפויות  ריבוי תורים ודוגמאות.
מערכות הפעלה תרגול 6 – חוטים ב-Linux. מערכות הפעלה - תרגול 62 (c) ארז חדד 2003 תוכן התרגול מבוא לחוטים ב-Linux כיצד גרעין Linux תומך בחוטים עבודה עם חוטים.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
מרץ 2002אלן אזאגורי ©1 סנכרון תהליכים וחוטים Process and Thread Synchronization חלק ראשון.
תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
ניהול זיכרון  מבוא : מטרות ניהול הזיכרון.  מנגנונים : מרחב כתובות וירטואלי / פיזי. ניהול טבלת הדפים. מדיניות החלפת דפים.
תהליכים - דייאט : חוטים  מוטיבציה  חוטי משתמש וחוטי מערכת  תמיכת מערכת ההפעלה  דוגמאות.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 טיפול בקיפאון  בעיית הקיפאון  הימנעות מקיפאון  זיהוי קיפאון באמצעות מציאת מעגלים  אלגוריתם להתחמקות מקיפאון.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 זימון תהליכים  מדיניות בסיסיות : RR, FCFS, SJF  הערכת זמן ריצה ושימוש בעדיפויות  ריבוי תורים ודוגמאות.
מרץ 2002אלן אזאגורי ©1 חוטים Threads. מרץ 2002 אלן אזאגורי ©2עמוד נושאים הגדרות –חוטים –חוטים לעומת תהליכים תמיכת מערכת ההפעלה בחוטים דוגמאות –Mach –Windows.
מערכות הפעלה תרגול 6 – חוטים ב-Linux. מערכות הפעלה - תרגול 62 (c) ארז חדד 2003 תוכן התרגול סינכרוניזציה בגרעין של Linux מבוא לחוטים ב-Linux כיצד גרעין.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 טיפול בקיפאון  בעיית הקיפאון  הימנעות מקיפאון  זיהוי קיפאון באמצעות מציאת מעגלים  אלגוריתם להתחמקות מקיפאון.
מערכות הפעלה קורס מס' מערכות הפעלה (אביב 2009) חגית עטיה ©
מערכות הפעלה תרגול 8 – סינכרוניזציה ב-Linux. מערכות הפעלה - תרגול 82 (c) ארז חדד 2003 תוכן התרגול מבוא לסינכרוניזציה ב-Linux סנכרון בין חוטי POSIX  mutex.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 סיכום הקורס.
מערכות הפעלה ( אביב 2008) חגית עטיה © 1 סיכום הקורס.
זימון תהליכים מדיניות בסיסיות: RR, FCFS, SJF קביעת עדיפויות
1 Formal Specifications for Complex Systems (236368) Tirgul Hazara.
תיאום בין תהליכים : יסודות  דוגמאות לבעיות תיאום  הגדרות : קטע קריטי, מנעולים  אלגוריתם קופת - חולים.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 תהליכים  מהו תהליך ?  מבני הנתונים לניהול תהליכים.  החלפת הקשר.  ניהול תהליכים ע " י מערכת ההפעלה.
נובמבר סנכרון תהליכים וחוטים Process and Thread Synchronization חלק שני.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
ניהול זיכרון  מבוא : מטרות ניהול הזיכרון.  מנגנונים : מרחב כתובות וירטואלי / פיזי. ניהול טבלת הדפים. מדיניות החלפת דפים.
1 מבוא למדעי המחשב הרצאה 21: Queue, Iterator & Iterable.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
שיתוף PDT בין חוטים PDT Thread A Process Descriptor File Object 1 File Object 2 File 1 File 2 pthread_create Thread B Process Descriptor ה PDT משותף לכל.
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
מבוא למדעי המחשב סיבוכיות.
טרנזיסטור כמתג דו מצבי ממסר - RELAY הפעלה רציפה , PWM
תרגול 4 – ניהול תהליכים, מבני נתונים למימוש תהליכים
Asynchronous programming
Marina Kogan Sadetsky –
פרק רביעי – תקשורת בין תהליכים פנימיים
תהליכים-דייאט: חוטים מוטיבציה חוטי משתמש וחוטי מערכת
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

תיאום בין תהליכים: שיטות מתקדמות שימוש בחומרה למימוש מנעולים מנגנוני מערכת הפעלה לתיאום: סמפורים, משתני תנאי

מימוש מנעולים: חסימת פסיקות lock_acquire(L): disableInterrupts() while LFREE do enableInterrupts() L = BUSY lock_release(L): L = FREE חסימת פסיקות מונעת החלפת חוטים ומבטיחה פעולה אטומית על המנעול למה מאפשרים פסיקות בתוך הלולאה? queue lock: מונע busy wait באמצעות ניהול תור של החוטים המחכים... בהמשך ההרצאה נדבר על ניהול תורים... February 03 חגית עטיה ©

חסימת פסיקות? בעיות במערכת עם מעבד יחיד: תוכנית מתרסקת כאשר הפסיקות חסומות. פסיקות חשובות הולכות לאיבוד. עיכוב בטיפול בפסיקות I/O גורם להרעת ביצועים. במערכות עם כמה מעבדים, לא די בחסימת פסיקות. חוטים יכולים לרוץ בו-זמנית (על מעבדים שונים) February 03 חגית עטיה ©

תמיכת חומרה במנעולים test&set(boolvar) lock_acquire(L): L = false – מנעול פנוי L = true – מנעול תפוס lock_acquire(L): while test&set(L) do nop lock_release(L): L = false test&set(boolvar) כתוב ערך true והחזר ערך קודם February 03 חגית עטיה ©

תמיכת חומרה מתקדמת compare&swap(mem,r1,r2) ממומש בארכיטקטורות IA32. אחרת החזר כישלון ממומש בארכיטקטורות IA32. load-linked / store conditional LL(mem) – קרא את הערך בכתובת הזיכרון mem. SC(mem,val) – אם לא היתה כתיבה ל-mem מאז ה- LL(mem) האחרון שלך, כתוב ערך val והחזר הצלחה (אחרת כשלון) ממומש בהרבה ארכיטקטורות חדישות HP’s Alpha, IBM’s PowerPC, MIPS4000 February 03 חגית עטיה ©

Spinlocks מימוש מנעול באמצעות busy waiting: מאוד בזבזני. בדוק האם המנעול תפוס (על-ידי גישה למשתנה). אם המנעול תפוס, בדוק שנית. גם בקופת-חולים... מאוד בזבזני. חוט שמגלה כי המנעול תפוס מבזבז זמן cpu. בזמן הזה החוט שמחזיק במנעול לא יכול להתקדם. priority inversion: אם לחוט הממתין עדיפות גבוהה.  הנזק אינו רק שחוט הממתין לא עושה עבודה משמעותית אלא גם שהחוט בעל המנעול לא מתקרב לשחרור המנעול. February 03 חגית עטיה ©

מנגנוני תיאום גבוהים יותר לנהל תור של החוטים הממתינים. ☼ נמצא במנגנוני תיאום עיליים: סמפורים משתני תנאי ... מוניטורים February 03 חגית עטיה ©

סמפור שני שדות: ערך שלם לא-שלילי תור של חוטים / תהליכים ממתינים [Dykstra, 1968] February 03 חגית עטיה ©

פעולות על סמפור wait(semaphore) signal(semaphore) מקטין את ערך המונה ב-1 ממתינים עד שערך המונה אינו שלילי. נקרא גם P(), proben signal(semaphore) מגדיל את ערך המונה ב-1 משחרר את אחד הממתינים. נקרא גם V(), verhogen February 03 חגית עטיה ©

יותר מידי חלב עם סמפורים קוד זהה לשני החוטים. סמפור OKToBuyMilk, בהתחלה 1. wait( OKToBuyMilk); if ( NoMilk ) { Buy Milk; // critical section } signal( OKToBuyMilk); אם ערך הסמפור > 0  ניתן להכנס לסמפור. אם ערך הסמפור ≤ 0  הסמפור תפוס, וערכו הוא מספר הממתינים מה המשמעות של ערך חיובי? February 03 חגית עטיה ©

סמפור בינארי וסמפור מונה ערך התחלתי =1; זה גם הערך המקסימלי. מאפשר גישה בלעדית למשאב (בדומה למנעול). סמפור מונה ערך התחלתי N>0. שולט על משאב עם N עותקים זהים. חוט יכול להיכנס לסמפור כל עוד יש עותק פנוי של המשאב. February 03 חגית עטיה ©

דוגמה: בעיית יצרן / צרכן שני חוטים רצים באותו מרחב זיכרון היצרן מיצר אלמנטים לטיפול (למשל, משימות) הצרכן מטפל באלמנטים (למשל, מבצע את המשימות) מערך חסום (מעגלי) מכיל את העצמים המיוצרים. n-1 cp pp c האלמנט המוכן הבא המקום הפנוי הבא מספר האלמנטים המוכנים ידוע גם כבעיית החוצץ החסום: bounded buffer problem. February 03 חגית עטיה ©

פתרון לבעיית יצרן / צרכן? global variable int c = 0; Producer: repeat wait until (c ≥ 1); buff[pp] = new item; pp = (pp+1) mod n; c = c + 1; until false; Consumer: repeat wait until (c ≥ 1); consume buff[cp]; cp = (cp+1) mod n; c = c - 1; until false; ואם ניגשים בו-זמנית ל-c??? February 03 חגית עטיה ©

יצרן / צרכן עם סמפורים semaphore freeSpace, initially N Semaphore availItems, intiailly 0 Producer: repeat wait( freeSpace); buff[pp] = new item; pp = (pp+1) mod n; signal( availItems); until false; מספר המקומות הפנויים מספר האיברים המוכנים Consumer: repeat wait( availItems); consume buff[cp]; cp = (cp+1) mod n; signal( freeSpace); until false; חוסר מבניות: החוט ה-"נועל" סמפור אינו אותו חוט ש-"משחרר" אותו February 03 חגית עטיה ©

דוגמה: קוראים/כותבים חוטים קוראים וחוטים כותבים מספר חוטים יכולים לקרוא בו-זמנית. כאשר חוט כותב, אסור שחוטים אחרים יכתבו ו/או יקראו. טבלת גישה Reader Writer   אפשר לוותר על חלק מהדוגמאות. February 03 חגית עטיה ©

קוראים / כותבים עם סמפורים semaphore sRead, initially 1 semaphore sWrite, Writer: wait(sWrite) [Write] signal(sWrite) מגן על מונה מספר הקוראים מניעה הדדית בין קוראים לבין כותבים Reader: wait(sRead) r:=r+1 if r=1 then wait(sWrite) signal( sRead) [Read] wait( sRead) r:=r-1 if r=0 then signal(sWrite) ל sRead יש תפקיד נוסף... שימוש יותר מובנה: החוט שנועל את sRead גם משחרר אותו, ומה לגבי sWrite? אם מימוש הסמפורים הוגן (fifo), האם הדוגמא מבטיחה הוגנות? February 03 חגית עטיה ©

מימוש (תיאורטי) של סמפורים? struct semaphore_t { int value; queue waitQ; } void wait(semaphore_t *s){ s->value--; if (s->value < 0){ enQ(self, &s->waitQ); block } void signal(semaphore_t *s){ s->value++; if (s->value <= 0){ P = deQ( &s->waitQ); wakeup(P) } } February 03 חגית עטיה ©

מימוש של סמפורים: תיקון struct semaphore_t { int value; queue waitQ; lock_t l; } void wait(semaphore_t *s){ lock(&s->l) ; s->value--; if (s->value < 0){ enQ(self, &s->waitQ); unlock(&s->l) ; block } else unlock(&s->l) ; void signal(semaphore_t *s){ lock(&s->l) ; s->value++; if (s->value <= 0){ P = deQ( &s->waitQ); wakeup(P) } unlock(&s->l) ; } February 03 חגית עטיה ©

היה busy-waiting? עדיין יש נעילה: על הגישה לתור השייך לסמפור. ...אבל הקטע הקריטי קצר: רק לשים / להוריד אלמנט מתור. אפשר לתכנת כך שתהיה עבודה בו-זמנית בשני הקצוות של תור לא-ריק.  ההשלכות של busy-waiting מוקטנות. February 03 חגית עטיה ©

גרף תלויות תהליכים P1… PN מבצעים חישוב תהליך PA ממתין לתוצאות כל החישובים לפני שיוכל להתחיל לפעול PA מחשב את ממוצע התוצאות. כיצד ניתן להבטיח שPA יתחיל לפעול רק לאחר שכל האחרים יסיימו? סדר הסיום לא ידוע מראש. PA P1 P2 P3 PN February 03 חגית עטיה ©

ייצוג גרף תלויות עם סמפורים תהליך PA ממתין על-פי מספר התהליכים בהם הוא תלוי. תהליך שמסיים מבצע signal. האם האלגוריתם יעבוד גם אם Pi כלשהו יסיים ויבצע signal לפני שPA קרא ל- wait? wait(s) wait(s) wait(s) wait(s) Go! PA P1 P2 P3 PN signal(s) signal(s) signal(s) signal(s) February 03 חגית עטיה ©

גרפי תלויות אחרים לפעמים המצב הוא הפוך. ייתכנו גם מצבים מורכבים בהרבה. N תהליכים ממתינים לתהליך אחד לפני שיוכלו להתחיל לפעול. ייתכנו גם מצבים מורכבים בהרבה. לא תמיד מספיק סמפור בודד. P1 P2 P3 PN PA P0 P8 P9 P10 P17 P1 P2 P3 P7 P18 P19 February 03 חגית עטיה ©

חסרונות של סמפורים לא מפרידים: קושי במימוש. נעילה. המתנה. ניהול משאבים. קושי במימוש. רעיון מודרני יותר: נקודות מפגש במשתני תנאי... February 03 חגית עטיה ©

פעולות על משתני תנאי wait(cond,&lock): signal(cond): broadcast(cond): שחרר את המנעול (חייב להחזיק בו). המתן לפעולת signal. המתן למנעול (כשחוזר מחזיק במנעול). signal(cond): הער את אחד הממתינים ל cond, אשר עובר להמתין למנעול. הולך לאיבוד אם אין ממתינים. broadcast(cond): הער את כל התהליכים הממתינים. עוברים להמתין למנעול. February 03 חגית עטיה ©

משתני תנאי: הערות כאשר תהליך מקבל signal הוא מפסיק להמתין ועובר למצב ready, אך לא בהכרח רץ. mesa-style. משתני תנאי הולכים נפלא עם מנעולים. wait(cond,&lock) קודם משחררת את המנעול lock. בניגוד לסמפורים, signal לא זוכר היסטוריה. signal(cond) הולך לאיבוד אם אין ממתינים על cond. February 03 חגית עטיה ©

דוגמא – מימוש תור ממתינים כאשר התור ריק. נעילה להגן על הגישה לנתונים. lock QLock ; condition notEmpty; Enqueue (item): lock_acquire( QLock) put item on queue signal(notEmpty,&QLock) lock_release( QLock) Dequeue (item): while stack empty wait(notEmpty ,&QLock) remove item from stack ממתינים כאשר התור ריק. נעילה להגן על הגישה לנתונים. קטע קריטי קצר. משתנה תנאי מאפשר לחכות עד שיתווסף איבר לתור, מבלי לבצע busy-wait. למה צריך while? משתני תנאי הולכים טוב עם מנעולי mutex. February 03 חגית עטיה ©

יצרן / צרכן עם משתני תנאי condition not_full, not_empty; lock bLock; producer: lock_acquire(bLock); while(buffer is full) wait(not_full,&bLock); add item to buffer ; signal(not_empty); lock_release(bLock); consumer: lock_acquire(bLock); while (buffer is empty) wait(not_empty,&bLock); get item from buffer signal(not_full); lock_release(bLock); February 03 חגית עטיה ©

משתני תנאי + מנעול  מוניטור ההקשר המקורי של משתני תנאי [C.A.R. Hoare, 1974] אובייקט (במובן של שפת-תכנות object-oriented), הכולל פרוצדורת אתחול וגישה. הגישה לאובייקט מקנה שליטה במנעול (באופן לא-מפורש) שליחת signal משחררת את המנעול ומעבירה את השליטה בו למקבל ה signal. תמיכה של שפת-תכנות (למשל ב Java). זהו רגע של היסטוריה. ההתנהגות שונה במקצת, וידועה בשם Hoare-style. February 03 חגית עטיה ©

מנגנוני תיאום ב POSIX אובייקטים לתיאום mutex locks (pthread_mutex) נמצאים בזיכרון המשותף. נגישים לחוטים של תהליכים שונים. mutex locks (pthread_mutex) יצירה, השמדה. lock, unlock, trylock. condition variables (pthread_cond) wait, signal, broadcast. trylock בודק אם המנעול פנוי. יש הרחבה לסמפורים אבל לא סטנדרטית. עוד בתרגול... February 03 חגית עטיה ©

מנגנוני תיאום ב-Windows NT כל רכיב במערכת ההפעלה הוא אובייקט ניתן להמתין ו/או לשחרר אובייקטים מיוחדים mutex– מנעול הוגן event – משתנה תנאי (עם אפשרות ל-broadcast כדי להעיר את כל הממתינים) semaphore – סמפור מונה, לא הוגן critical section – light-weight mutex המיועד לחוטים באותו תהליך February 03 חגית עטיה ©