תרגול 8 הרצאה 6.7 סנכרון Flashcards
מה מבטיח
mutex
condition varibales
mutex
אטומיות - כשנבצע קטע קוד קריטי לא יהיה אף חוט אחר שיריץ את אותו הקוד קריטי עד שנסיים
לא מביטחים סדר, יכול להיות שנתחיל את הקוד ויהיה 100 החלפות הקשר עד שנסיים
condition varibales
מבטיחים סדר
What is the futex system?
It is by the kernel to implement the primitive mutex and conditional variables
מהו תור מקבילי
ואיך צריך להגן עליו בעבודה עם חוטים
תור
שאפשר להכניס ולהוציא ממנו איברים
שאם התור ריק פעולת ההוצאות תמתין עד שיכנס איבר חדש
צריך כם להגן עם מנעולים וגם להבטיח סדר
מנעולים כדי שלא יהיו 2 חוטים שיכניסו או יוציאו בו זמנית
וסדר כדי להבטיח שחוט שרוצה להוציא איבר יעשה זאת רק אחרי שחוט אחר הכניס איבר והתור לא ריק
למי מיועד כל תהליכי הסנכון שאנחנו מדברים עליהם
חוטים או תהליכים
גם וגם
כזכור גם לתהליכים יכול להיות זכרון משותף כמו שלמדנו עם הקריאות מערכת הנכונות לא בחומר
האם אפשר לממש מנעולים בעזרת חומרה או בעזרת תוכנה
עקרונית אפשר בעזרת תכונה אבל זה מאוד מסובך ומועד לטעויות
לכן מסתמכים על החומרה - המעבדים היום כולם תומכנים במנגנונים כאלה
כמו שהגרין מבטל חריגות בזמן נעליה
מה המשתמש יעשה?
יבטל סיגנלים
איזה פקודות מעבד תומכות באטומיות כדי לממש מנעולים
xchg - מחלפיה שתי משתנים
cas - compere and swap מעבירים לה 2 ערכים אם הם שווים אז שמים בראשון את הערך החדש טוב לIF
tas - test and set - בודק משתנה ושם בוא 1
מתי משתמשים בspin ומתי בblock
ספין רק כאשר ההמתנה תהיה הרבה יותר קצרה מזמן החלפת ההקשר
אחרת נחסום וניתן להקשר להתחלף
מה הערך של סמפור אומר עליו
אם הערך חיובי
זה סופר את כמות המשאבים שיש לנו
לדוגמה כמות האיברים בתור
אם הערך שלילי
זה סופר את כמות המשימות שממתינות למאשבים לדוגמה כמות התהליכים שרוצים לקבל איבר מהתור
הסבר על הממשק עם סמפורים באופן תיאורתי
s = semaphore
wait(s)
value – כלומר מוריד אחד מהמשאבים
אם הערך נהיה שלילי נכנסים להמתנה
אם עדיין חיובי אז בעצם קיבלנו משאב ולא נכנס להמתנה
signal(s)
value ++
אם ההוספה עכשיו הפכה את הערך ל0 או שנשאר שלילי זה אומר שיש מישהו שמחכה מעירים אחד מהממתינים ובעצם נותנים לו את המשאב
הסבר על הממשק של סמפורים מבחינת פונק
סמפור הוא אובייקט של הגרעין
מדברים איתו ב
sem_wait() - wait
sem_post() - singal
sem_close()….
sem_getvalue()
.
.
.
מה זה סמפור עם ערך מקסימלי 1
זה הופך להיות ספיןלוק
בעקרון - לא במציאות
מה ההבדל בין ספיןלוק לסמפור מבחינת הסיבוך שלהם
ספיןלוק הוא הרבה יותר פשוט
הוא חלק מהמימוש של הסמפור
האם שגרת הטיפול תוותר אי פעם כל המעבד
לדוגמה wait
לא
האם פסיקת חומרה יכולה לחתוך
טיפול בחריגה
קריאת מערכת
פסיקת חומרת אחרת?
כן היא תחתוך הכל
האם יכול להיות ששגרת הטיפול בפסיקת חומרה תייצר חריגה או תקרא לקריאת מערכת
רק במקרה אחד וזה
Page fault