נובמבר 20021 סנכרון תהליכים וחוטים Process and Thread Synchronization חלק ראשון.

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

Processes and threads. תהליכים ותתי תהליכים תהליכים –כל תוכנית שרצה היא תהליך (process) –ניתן להתפצל מתהליך אחד למספר תהליכים, בעזרת הפקודה fork(). הרבה.
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.
מבוא למדעי המחשב לתעשייה וניהול
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
Pointers הרצאה קריטית. השאלות הפתוחות מה זה ה- & שמופיע ב scanf מדוע כשמעבירים מחרוזת ל scanf אין צורך ב & האם ניתן להכריז על מערך שגדלו אינו ידוע בתחילת.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 תיאום בין תהליכים : שיטות מתקדמות  שימוש בחומרה למימוש מנעולים  מנגנוני מערכת הפעלה לתיאום : סמפורים, משתני תנאי.
מערכות הפעלה ( אביב 2004) חגית עטיה © 1 תיאום בין תהליכים : יסודות  דוגמאות לבעיות תיאום  הגדרות : קטע קריטי, מנעולים  אלגוריתם קופת - חולים.
מתמטיקה בדידה תרגול 3.
תיאום בין תהליכים: שיטות מתקדמות
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
1 2 קצת מידע על הבעייה נהגתה ונפתרה על ידי דייקסטרה חומרים בעברית – דוד הראל, אלגוריתמיקה.
יפעת קוליקנט, מכון ויצמן למדע1 פרק 7, אלגוריתם Ra לפתרון בעית הקטע הקריטי במערכות מבוזרות.
תכנות תרגול 4 שבוע : לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
רקורסיות נושאי השיעור מהן רקורסיות פתרון רקורסיות : שיטת ההצבה שיטת איטרציות שיטת המסטר 14 יוני יוני יוני 1514 יוני יוני יוני 1514.
תכנות תרגול 2 שבוע : שבוע שעבר כתבו תוכנית המגדירה שלושה משתנים מאתחלת אותם ל 1 2 ו 3 ומדפיסה את המכפלה שלהם את ההפרש שלהם ואת הסכום שלהם.
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
מערכות הפעלה תרגול 6 – חוטים ב-Linux.
חורף - תשס " ג 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,
בהסתברות לפחות למצא בעיה במודל PAC עבור בהסתברות ε הפונקציה f טועה מודל ONLINE 1. אחרי כל טעות הפונקציה משתפרת 2. מספר הטעיות קטן.
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
משטר סטטי שערים לוגיים Wired Drives – © Dima Elenbogen 2009, Moshe Malka :29.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מערכות הפעלה תרגול 6 – חוטים ב-Linux. מערכות הפעלה - תרגול 62 (c) ארז חדד 2003 תוכן התרגול מבוא לחוטים ב-Linux כיצד גרעין Linux תומך בחוטים עבודה עם חוטים.
מרץ 2002אלן אזאגורי ©1 סנכרון תהליכים וחוטים Process and Thread Synchronization חלק ראשון.
Multi-Cycle MIPS דוגמאות. דוגמה 1 נתון קטע הקוד הבא: begin:addi $v0, $zero, -1 loop:add $a0, $a0, $a0 addi$v0,$v0,1 bne $a0, $zero, loop הניחו כי בתחילת.
תהליכים - דייאט : חוטים  מוטיבציה  חוטי משתמש וחוטי מערכת  תמיכת מערכת ההפעלה  דוגמאות.
מבוא כללי למדעי המחשב תרגול 3. לולאות while לולאות while while (condition) { loop body } במקרה של קיום התנאי מתבצע גוף הלולאה ברגע שהתנאי לא מתקיים נצא.
ערכים עצמיים בשיטות נומריות. משוואה אופינית X מציין וקטור עצמי מציינת ערך עצמי תואם לוקטור.
Ray 7 דוגמא אלגוריתם 1.קבל דוגמאות 2. פלט f a עבור הדוגמה a המינימלית החיובית ?
מערכות הפעלה תרגול 6 – חוטים ב-Linux. מערכות הפעלה - תרגול 62 (c) ארז חדד 2003 תוכן התרגול סינכרוניזציה בגרעין של Linux מבוא לחוטים ב-Linux כיצד גרעין.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
מערכות הפעלה תרגול 8 – סינכרוניזציה ב-Linux. מערכות הפעלה - תרגול 82 (c) ארז חדד 2003 תוכן התרגול מבוא לסינכרוניזציה ב-Linux סנכרון בין חוטי POSIX  mutex.
מערכות הפעלה ( אביב 2006) חגית עטיה © 1 סיכום הקורס.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
תיאום בין תהליכים : יסודות  דוגמאות לבעיות תיאום  הגדרות : קטע קריטי, מנעולים  אלגוריתם קופת - חולים.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
תחשיב היחסים (הפרדיקטים)
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א.
נובמבר סנכרון תהליכים וחוטים Process and Thread Synchronization חלק שני.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
Safari On-line books. מה זה ספארי ספארי זו ספריה וירטואלית בנושא מחשבים היא כוללת יותר מ כותרים כל הספרים הם בטקסט מלא ניתן לחפש ספר בנושא מסוים.
Points on a perimeter (Convex Hull) קורס – מבוא לעבוד מקבילי מבצעים – אריאל פנדלר יאיר ברעם.
1 Lecture 9: Synchronization  concurrency examples and the need for synchronization  definition of mutual exclusion (MX)  programming solutions for.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
שיתוף PDT בין חוטים PDT Thread A Process Descriptor File Object 1 File Object 2 File 1 File 2 pthread_create Thread B Process Descriptor ה PDT משותף לכל.
Programming Arrays.
FAA FAA (int s, int val) { temp = s; s = s + val; return temp; }
Computer Architecture and Assembly Language
Formal Specifications for Complex Systems (236368) Tutorial #1
מבוא למדעי המחשב סיבוכיות.
SQL בסיסי – הגדרה אינדוקטיבית
פרק רביעי – תקשורת בין תהליכים פנימיים
בחירת חומר גלם כתב: עמרי שרון.
תרגול 8 תחומי הכרה פונקציות
סוגי משתנים קרן כליף.
Shell Scripts בסביבת UNIX
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Presentation transcript:

נובמבר סנכרון תהליכים וחוטים Process and Thread Synchronization חלק ראשון

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

נובמבר עמוד מוטיבציה הנחות –קריאה/כתיבה של משתנה היא אטומית –פעולה אריתמטית על המשתנה אינה אטומית מי זוכה?לפעמים A ולפעמים B האם תמיד יש זוכה?לא האם שניהם עשויים לזכות?כן, כאשר הפקודה kill אסינכרונית int c = 0; // Global variable Thread A: while (c < 10) c = c + 1; kill B; print “A wins”; Thread B: while (c > -10) c = c - 1; kill A; print “B wins”;

נובמבר עמוד בעית יצרן/צרכן הגדרות –שני חוטים (יצרן וצרכן) רצים באותו מרחב זיכרון –מערך חסום (מעגלי) מכיל את העצמים המיוצרים –ליצרן מצביע (pp) למקום הפנוי הבא במערך –לצרכן מצביע (cp) למקום הבא המכיל את העצם המוכן הבא –מספר העצמים המוכנים הוא c 0n-1 cppp c

נובמבר עמוד בעית יצרן/צרכן (המשך) בעיות –עדכון בו זמנית (לא מוגן) של c –לכן ערכו של c יכול להיות גבוה (נמוך) מן הערך הנכון int c = 0; // Global variable Producer: repeat while (c>=n) nop; buf[pp] = new item; pp = (pp+1) mod n; c = c + 1; until false; Consumer: repeat while (c<1) nop; consume buf[cp]; cp = (cp+1) mod n; c = c - 1; until false;

נובמבר עמוד בעית החלב את/ה: מסתכל במקרר הולך לסופר קונה חלב חוזר הביתה מכניס חלב למקרר שותף: מסתכל במקרר הולך לסופר קונה חלב חוזר הביתה מכניס חלב למקרר בעיה: יותר מדי חלב!

נובמבר עמוד בעית החלב פיתרון 1  פיתרון: להשאיר פיתקה בעיה: כל אחד קפץ לחדר לכתוב פתק ולא שם לב לכך שהשני השאיר פתק מסתכל במקרר אם אין חלב אם אין פתקה השאר פתקה קנה חלב הורד פתקה

נובמבר עמוד בעית החלב פיתרון 2  פיתרון: לאחר השארת הפיתקה, בודקים האם גם השותף השאיר פיתקה בעיה: קיים תסריט בו אף אחד לא יקנה חלב! Thread A: leave note A if (no note B) then 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

נובמבר עמוד בעית החלב פיתרון 3  פיתרון: שבירת הסימטריה במקרה של "תחרות" (שניהם משאירים פתק בו זמנית), A יקנה חלב! חסרונות –רק לשני תהליכים –לא הוגן Thread A: leave note A X:while (note B) do nop if (no milk) then buy milk remove note A Thread B: leave note B Y:if (no note A) then if (no milk) then buy milk remove note B

נובמבר עמוד הגדרות בגים בתכניות מקביליות –בד"כ התכנית עובדת נכון –קיים תסריט בו התכנית לא עובדת נכון לרוב בגלל שבירה איזושהי הנחת אטומיות שאינה מתקיימת מרוץ (Race Condition) –גישות בו-זמניות (כולל כתיבה) לאותו משתנה גלובלי בדוגמת בעית החלב –השארת פיתקה –בדיקה האם השותף השאיר פיתקה

נובמבר עמוד הגדרות (המשך) מניעה הדדית – mutual exclusion –מנגנונים המבטיחים שרק חוט אחד מבצע סדרת פעולות מסוימות בזמן נתון אטומיות ביחס לחוטים אחרים קטע קריטי – critical section –קטע קוד שרק חוט אחד מבצע בזמן נתון לא קריטי יציאה קריטי

נובמבר עמוד הגדרות (המשך) אטומיות – Atomicity –בביצוע סדרת פקודות ע"י חוט אחד,חוטים אחרים אינם יכולים לראות תוצאות חלקיות - סדרת הפקודות נראית כמו פעולה אחת שאיננה ניתנת לחלוקה ("פעולה אטומית") –ניתן להשיג בעזרת מנגנון של מניעה הדדית דוגמא –העברת כספים מחשבון לחשבון –לא נאפשר לחוטים אחרים לראות מצב בו הכסף נמשך מחשבון א' אך לא הגיע לחשבון ב' Thread A: account1:= account1 – sum; account2:= account2 + sum; Thread B: if (account1+account2<min) then …

נובמבר עמוד תכונות של פתרון לבעיית הקטע הקריטי חובה –רק חוט אחד בקטע קריטי (מניעה הדדית) –אם יש בקשות להיכנס לקטע קריטי, אזי חוט אחד ייכנס (אין קיפאון – deadlock) רצוי –חוט המבקש להיכנס לקטע קריטי בסופו של דבר יצליח (אין הרעבה – starvation) –עבור כל זוג חוטים, אם הם יתחרו n פעמים להיכנס לקטע קריטי, הם יזכו מספר דומה של פעמים (fairness)

נובמבר עמוד 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 אלגוריתם קופת חולים (bakery) לפיתרון בעית הקטע הקריטי (1) שימוש במספרים –חוט נכנס לוקח מספר –חוט שמספרו הקטן ביותר נכנס לקטע הקריטי ניסיון ראשון

נובמבר עמוד אלגוריתם קופת חולים (bakery) לפיתרון בעית מניעה הדדית (1) בעיה –חוט i ו-j קוראים את המערך בו זמנית –שניהם "בוחרים" את אותו מספר קיפאון!

נובמבר עמוד אלגוריתם קופת חולים (bakery) לפיתרון בעית מניעה הדדית (2) נשתמש במס' הזהות של התהליך כדי לשבור סימטריה 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)) // lexicographical // comparison critical section number[i]=0 // Exit critical section

נובמבר עמוד אלגוריתם קופת חולים (bakery) לפיתרון בעית מניעה הדדית (2) בעיה –חוט i ו-j קוראים את המערך בו זמנית (i>j) –חוט i כותב את המספר, בודק את ערכו כנגד number ונכנס לקטע הקריטי (number[j] עדיין 0!) –חוט j ממשיך וגם הוא נכנס לקטע הקריטי! אין מניעה הדדית! –התהליך עם מספר זהות גבוה (i) מזדרז להיכנס לקטע הקריטי לפני ש-j הספיק לכתוב את number[j]

נובמבר עמוד אלגוריתם קופת חולים (bakery) לפיתרון בעית מניעה הדדית (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

נובמבר עמוד אלגוריתם קופת חולים (bakery) לפיתרון בעית מניעה הדדית (3) אין הרעבה (ולכן אין קיפאון) והפתרון הוגן –הוכחה בתרגול פיתרון מסורבל –הרבה פעולות, הרבה משתנים הפיתרון לא יעבוד בסביבות מרובות מעבדים –Out of order execution קיימים אלגוריתמים אחרים בהמשך נלמד על פתרונות אחרים

נובמבר עמוד מנעולים (locks) מבטיחים גישה בלעדית למידע באמצעות שתי פונקציות –lock_acquire(lock) – פעולה חוסמת (אם המנעול תפוס) –lock_release (lock) – משחרר את המנעול

נובמבר עמוד מנעולים (locks) – דוגמא דוגמא – בעית יצרן/צרכן האם ניתן לוותר על הגנה של קריאת c ב-?while –מה קורה במקרה של יותר מצרכן אחד? Producer: repeat while (c>n) nop; buf[pp] = new item; pp = (pp+1) mod n; lock_acquire(c_lock) c = c + 1; lock_release(c_lock) until false; Consumer: repeat while (c<1) nop; consume buf[cp]; cp = (cp+1) mod n; lock_acquire(c_lock) c = c - 1; lock_release(c_lock) until false;

נובמבר עמוד lock_release(L): disableInterrupts() L := FREE enableInterrupts() מימוש מנעולים אטומיות –מובטחת ע"י חסימת פסיקות Busy wait –ניתן למנוע ע"י ניהול תור החוטים המחכים למה חשוב לאפשר פסיקות בתוך הלולאה? ומה קורה במערכות מרובות מעבדים? –חסימת פסיקות אינה מבטיחה אטומיות... –דורש תמיכה מהחומרה לפקודות "חזקות" יותר lock_acquire(L): disableInterrupts() while L  FREE do enableInterrupts() disableInterrupts() L := BUSY enableInterrupts()

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

נובמבר עמוד מימוש מנעולים תמיכת חומרה compare&swap compare&swap(mem, r1, r2) –אם בזיכרון (mem) ערך זהה לרגיסטר r1, כתוב ערך r2 והחזר הצלחה –אחרת החזר ערך כישלון ניתן לממש מונה אטומי lock_acquire(L): r1 = false r2 = true while not compare&swap(L, r1, r2)) do nop lock_release(L): L := false

נובמבר עמוד מימוש מנעולים מודרני load-linked & store conditional ממומש ברוב הארכיטקטורות החדישות –Compaq’s Alpha, IBM’s PowerPC, MIPS4000 צמד פקודות –LL(mem) – קרא את ערך הזיכרון –SC(mem, val) – אם לא היתה כתיבה ל-mem מאז ה- LL(mem) האחרון, כתוב ערך val והחזר הצלחה (אחרת כשלון) יותר כח מאשר ל-compare&swap –ניתן לזהות כתיבות עוקבות של אותו ערך

נובמבר עמוד מימוש מנעולים load-linked & store conditional lock_acquire(L): success = false repeat LL(L) if not L then success = SC(L, true) until success lock_release(L): L := false

נובמבר עמוד load-linked & store conditional מתי חשוב לזהות כתיבות עוקבות של אותו ערך? –ברשימה מקושרת, הוצאת האיבר הראשון remove_first(head): element = NULL A:if head  NULL then LL(head) next_head = head->next element = head if not SC(head, next_head) goto A; return element