Скачать презентацию תיאום בין תהליכים יסודות p p p Скачать презентацию תיאום בין תהליכים יסודות p p p

4c4ebc717ed42398132512001bb57c7c.ppt

  • Количество слайдов: 30

 תיאום בין תהליכים: יסודות p p p 1 דוגמאות לבעיות תיאום הגדרות: קטע תיאום בין תהליכים: יסודות p p p 1 דוגמאות לבעיות תיאום הגדרות: קטע קריטי, מנעולים אלגוריתם קופת-חולים © חגית עטיה מערכות הפעלה )אביב 4002(

 תיאום p תהליכים משתפים פעולה: n n גישה למשאבים משותפים, למשל זיכרון משותף תיאום p תהליכים משתפים פעולה: n n גישה למשאבים משותפים, למשל זיכרון משותף )בעיקר חוטים(. העברת נתונים מתהליך אחד לשני דרך התקן משותף. p חייבים לתאם את השיתוף: n מניחים שביצוע התהליכים משולב באופן שרירותי. למתכנת האפליקציה אין שליטה על זימון התהליכים. n 2 שימוש במנגנוני תיאום ). (synchronization © חגית עטיה מערכות הפעלה )אביב 4002(

 דוגמא: בנק הפועלים p מימשנו פונקציה למשיכת כסף מחשבון בנק. { ) int דוגמא: בנק הפועלים p מימשנו פונקציה למשיכת כסף מחשבון בנק. { ) int withdraw( account, amount ; ) balance = get_balance( account ; balance -= amount ; ) put_balance( account, balance ; return balance } p בחשבון יש 00005$, ושני בעלי החשבון ניגשים לכספומטים שונים ומושכים 00052$ בו-זמנית. 3 © חגית עטיה מערכות הפעלה )אביב 4002(

? בנק הפועלים: אין כסף תהליך נפרד מבצע כל פעולת משיכה p ( )על ? בנק הפועלים: אין כסף תהליך נפרד מבצע כל פעולת משיכה p ( )על אותו מעבד balance = get_balance(account); balance -= amount; // 50 K-25 K put_balance(account, balance); return balance; // = 25 K balance = get_balance(account); balance -= amount; // 25 K-25 K put_balance(account, balance); return balance; // = 0 . . 0$ בחשבון (2004 מערכות הפעלה )אביב © חגית עטיה 4

! בנק הפועלים: יש כסף תהליך נפרד מבצע כל פעולת משיכה p. ( )על ! בנק הפועלים: יש כסף תהליך נפרד מבצע כל פעולת משיכה p. ( )על אותו מעבד balance = get_balance(account); balance -= amount; // 50 K-25 K put_balance(account, balance); return balance; // = 25 K ? מי שמח עכשיו (2004 מערכות הפעלה )אביב © חגית עטיה 5

 עוד דוגמא p p שני חוטים מבצעים אותו קוד החלפת חוטים בכל מקום עוד דוגמא p p שני חוטים מבצעים אותו קוד החלפת חוטים בכל מקום shared in, out ; )( procedure echo ; ) read( in, keyboard ; out = in ; ) write( out , screen end echo race condition תוצאת הריצה אינה צפויה. 6 © חגית עטיה מערכות הפעלה )אביב 4002(

 יותר מידי חלב! משה: שעה יוסי: 0: 3 0 0: 3 5 הולך יותר מידי חלב! משה: שעה יוסי: 0: 3 0 0: 3 5 הולך לסופר מסתכל במקרר 1: 3 0 קונה חלב הולך לסופר 1: 3 5 חוזר הביתה קונה חלב 2: 3 0 7 מסתכל במקרר מכניס חלב למקרר חוזר הביתה 2: 3 5 © חגית עטיה מכניס חלב למקרר מערכות הפעלה )אביב 4002(

 פיתרון 1 להשאיר פתק לפני שהולכים לסופר if (no milk) then if (no פיתרון 1 להשאיר פתק לפני שהולכים לסופר if (no milk) then if (no note) then leave note buy milk remove note 8 © חגית עטיה מערכות הפעלה )אביב 4002(

1 בעיה עם פתרון if (no milk) then if (no note) then leave note 1 בעיה עם פתרון if (no milk) then if (no note) then leave note buy milk remove note (2004 מערכות הפעלה )אביב ! פעמיים חלב © חגית עטיה 9

2 פיתרון : משאירים פתקה לפני שבודקים את המקרר Thread A: leave note A 2 פיתרון : משאירים פתקה לפני שבודקים את המקרר Thread A: leave note A if (no note B) then if (no milk) then buy milk remove note A (2004 מערכות הפעלה )אביב Thread B: leave note B if (no note A) then if (no milk) then buy milk remove note B © חגית עטיה 10

2 בעיה עם פתרון leave note A leave note B if (no note B) 2 בעיה עם פתרון leave note A leave note B if (no note B) then if (no note A) then remove note B remove note A ! אין חלב (2004 מערכות הפעלה )אביב © חגית עטיה 11

☺ 3 פיתרון לא סימטרי Thread A: leave note A while (note B) do ☺ 3 פיתרון לא סימטרי Thread A: leave note A while (note B) do nop if (no milk) then buy milk remove note A Thread B: leave note B if (no note A) then if (no milk) then buy milk remove note B יקנה A , (race condition) אם שניהם משאירים פתק בו זמנית ! חלב לא הוגן n רק לשני תהליכים (2004 מערכות הפעלה )אביב © חגית עטיה 12

 לב הבעיה p שני תהליכים נגשים בו-זמנית לאותו משאב, ללא תיאום. n n לב הבעיה p שני תהליכים נגשים בו-זמנית לאותו משאב, ללא תיאום. n n למשל, בגישה למשתנים גלובליים. נוצר מרוץ ) , (race condition שתוצאתו אינה צפויה. p מנגנון לשליטה בגישות מקביליות למשאבים משותפים. n כך שנוכל לחזות באופן דטרמיניסטי את התוצאות. p לכל מבנה נתונים של מערכת הפעלה )וגם להרבה תוכניות משתמש מרובות-חוטים(. n 31 Buffers, queues, lists, hash tables © חגית עטיה מערכות הפעלה )אביב 4002(

 קטע קריטי הקוד שניגש למשאב המשותף מכונה קטע קריטי שארית הקוד קטע קריטי קטע קריטי הקוד שניגש למשאב המשותף מכונה קטע קריטי שארית הקוד קטע קריטי שימו לב: לא בהכרח אותו קוד לכל החוטים n 41 חוט אחד מגדיל מונה וחוט שני מקטין אותו. © חגית עטיה מערכות הפעלה )אביב 4002(

 קטע קריטי הקוד שניגש למשאב המשותף מכונה קטע קריטי עוטפים אותו בקוד כניסה קטע קריטי הקוד שניגש למשאב המשותף מכונה קטע קריטי עוטפים אותו בקוד כניסה וקוד יציאה )של הקטע הקריטי(. שארית הקוד כניסה ) (entry קטע קריטי יציאה ) (exit 51 © חגית עטיה מערכות הפעלה )אביב 4002(

 בחזרה לבעית החלב : נסתכל שוב על ההוראות לקנית חלב p Thread A: בחזרה לבעית החלב : נסתכל שוב על ההוראות לקנית חלב p Thread A: leave note A while (note B) do nop if (no milk) then buy milk remove note A קטע קריטי קוד יציאה (2004 מערכות הפעלה )אביב קוד כניסה Thread B: leave note B if (no note A) then if (no milk) then buy milk remove note B © חגית עטיה 16

 תכונות רצויות מניעה הדדית: חוטים לא מבצעים בו-זמנית את הקטע הקריטי. ) (mutual תכונות רצויות מניעה הדדית: חוטים לא מבצעים בו-זמנית את הקטע הקריטי. ) (mutual exclusion n n 71 חוטים מעוניינים מחכים בקטע הכניסה. כאשר החוט הנוכחי יוצא מהקטע הקריטי, יכולים להיכנס. © חגית עטיה מערכות הפעלה )אביב 4002(

 תכונות רצויות מניעה הדדית: חוטים לא מבצעים בו-זמנית את הקטע הקריטי. ) (mutual תכונות רצויות מניעה הדדית: חוטים לא מבצעים בו-זמנית את הקטע הקריטי. ) (mutual exclusion התקדמות: אם יש חוטים שרוצים לבצע את הקטע הקריטי, חוט כלשהו יצליח להיכנס. ) , no deadlock אין קיפאון( n 81 אלא אם חוט אחר נמצא בתוך הקטע הקריטי. © חגית עטיה מערכות הפעלה )אביב 4002(

 תכונות רצויות מניעה הדדית: חוטים לא מבצעים בו-זמנית את הקטע הקריטי. ) (mutual תכונות רצויות מניעה הדדית: חוטים לא מבצעים בו-זמנית את הקטע הקריטי. ) (mutual exclusion התקדמות: אם יש חוטים שרוצים לבצע את הקטע הקריטי, חוט כלשהו יצליח להיכנס. ) , no deadlock אין קיפאון( הוגנות: אם יש חוט שרוצה לבצע את הקטע הקריטי, לבסוף יצליח. ) , no starvation אין הרעבה( n 91 רצוי: החוט יכנס לקטע הקריטי תוך מספר צעדים חסום מערכות הפעלה )אביב 4002( עטיה © חגיתבסדר הבקשה ). (FIFO ) , (bounded waiting ואפילו

 מנעולים ) (locks p אבסטרקציה אשר מבטיחה גישה בלעדית למידע באמצעות שתי פונקציות: מנעולים ) (locks p אבסטרקציה אשר מבטיחה גישה בלעדית למידע באמצעות שתי פונקציות: n n ) – acquire (lock נחסם בהמתנה עד שמתפנה המנעול. ) – release (lock משחרר את המנעול. acquire p ו release מופיעים בזוגות: n n n 02 אחרי acquire החוט מחזיק במנעול. רק חוט אחד מחזיק את המנעול )בכל נקודת זמן(. יכול לבצע את הקטע הקריטי. © חגית עטיה מערכות הפעלה )אביב 4002(

 דוגמא לשימוש במנעולים . בחזרה לפונקציה למשיכת כסף מחשבון בנק int withdraw( account, דוגמא לשימוש במנעולים . בחזרה לפונקציה למשיכת כסף מחשבון בנק int withdraw( account, amount) { acquire ( lock ) ; balance = get_balance( account ); balance -= amount; קטע קריטי put_balance( account, balance); release ( lock ) ; return balance; } (2004 מערכות הפעלה )אביב © חגית עטיה 21

 המשך הדוגמא שני תהליכים מבצעים את פעולת המשיכה p מה קורה כשהאדום מבקש המשך הדוגמא שני תהליכים מבצעים את פעולת המשיכה p מה קורה כשהאדום מבקש ? את המנעול p מחוץ לקטע return מדוע ה ? הקריטי p acquire(lock); balance = get_balance(account); balance -= amount; // 50 K-25 K acquire(lock); put_balance(account, balance); release(lock); balance = get_balance(account); balance -= amount; // 25 K-25 K put_balance(account, balance); release(lock); return balance; // = 0 return balance; // = 25 K (2004 מערכות הפעלה )אביב ? האם זה נכון © חגית עטיה n 22

 מימוש מנעולים p אם היו לנו מנעולים, היה נפלא. . . p אבל מימוש מנעולים p אם היו לנו מנעולים, היה נפלא. . . p אבל מימוש מנעול מכיל קטע קריטי: n n n 32 קרא מנעול אם מנעול פנוי, אז כתוב שהמנעול תפוס. © חגית עטיה מערכות הפעלה )אביב 4002(

 דרכים לממש מנעולים p פתרונות תוכנה: n n אלגוריתמים. מבוססים על לולאות המתנה דרכים לממש מנעולים p פתרונות תוכנה: n n אלגוריתמים. מבוססים על לולאות המתנה ). (busy wait p שימוש במנגנוני חומרה: n n n פקודות מיוחדות שמבטיחות מניעה הדדית. לא תמיד מבטיחות התקדמות. לא מובטחת הוגנות. p תמיכה ממערכת ההפעלה: n n 42 מבני נתונים ופעולות שמהם ניתן לבנות מנגנונים מסובכים יותר. בדרך-כלל, מסתמכים על מגנוני חומרה. © חגית עטיה מערכות הפעלה )אביב 4002(

 אלגוריתם קופת-חולים p ידוע כאלגוריתם המאפיה ). (bakery ]8791 , [Lamport p שימוש אלגוריתם קופת-חולים p ידוע כאלגוריתם המאפיה ). (bakery ]8791 , [Lamport p שימוש במספרים: n n 52 חוט נכנס לוקח מספר. חוט ממתין שמספרו הקטן ביותר נכנס לקטע הקריטי. © חגית עטיה מערכות הפעלה )אביב 4002(

1 חלוקת מספרים: ניסיון Thread i: initially number[i]=0 number[i]=max{number[1], …, number[n]}+1; for all j 1 חלוקת מספרים: ניסיון Thread i: initially number[i]=0 number[i]=max{number[1], …, number[n]}+1; for all j i do wait until number[j]=0 or (number[j]>number[i]) critical section number[i]=0 // Exit critical section קוראים את המערך בו זמנית j- ו i חוט בוחרים את אותו מספר ! קיפאון (2004 מערכות הפעלה )אביב © חגית עטיה p p 26

 חלוקת מספרים: שבירת סימטריה Thread i: initially number[i]=0 number[i]=max{number[1], …, number[n]}+1; for all חלוקת מספרים: שבירת סימטריה Thread i: initially number[i]=0 number[i]=max{number[1], …, number[n]}+1; for all j i do wait until number[j]=0 or ((number[j], j)>(number[i], i)) // סדר לקסיקוגרפי critical section number[i]=0 . (thread id) משתמשים במספר החוט (2004 מערכות הפעלה )אביב © חגית עטיה 27

 בעיה עם האלגוריתם המתוקן Thread 0: number[i]=0 read{number[1], …, number[n]} // max=0 Thread בעיה עם האלגוריתם המתוקן Thread 0: number[i]=0 read{number[1], …, number[n]} // max=0 Thread 1: number[i]=0 number[i]=max{number[1], …, number[n]}+1 // =1 for(number[j], j)>(number[i], i)) // (1, 1) critical section number[i]=1 for all j i do wait until number[j]=0 or (number[j], j)>(number[i], i)) critical section ! אין מניעה הדדית (2004 מערכות הפעלה )אביב © חגית עטיה 28

3 חלוקת מספרים: ניסיון מחכה שכל החוטים יבחרו מספרים Thread i: initially number[i]=0; choosing[i]=true; 3 חלוקת מספרים: ניסיון מחכה שכל החוטים יבחרו מספרים Thread i: initially number[i]=0; choosing[i]=true; number[i]=max{number[1], …, number[n]}+1; choosing[i]=false; for all j i do wait until choosing[j]=false; for all j i do wait until number[j]=0 or ((number[j], j)>(number[i], i)); critical section number[i]=0 // Exit critical section (2004 מערכות הפעלה )אביב © חגית עטיה 29

 נכונות האלגוריתם p מבטיח מניעה הדדית. p הוגן )אין הרעבה(, כניסה לקטע הקריטי נכונות האלגוריתם p מבטיח מניעה הדדית. p הוגן )אין הרעבה(, כניסה לקטע הקריטי לפי סדר הגעה. p מסורבל n n הרבה פעולות, הרבה משתנים פונקציה של מספר החוטים דרכים אחרות לתיאום בין חוטים / תהליכים. . . עזרה מהחומרה. 03 © חגית עטיה מערכות הפעלה )אביב 4002(