תרגול 8 הרצאה 6.7 סנכרון Flashcards

(42 cards)

1
Q

מה מבטיח
mutex
condition varibales

A

mutex
אטומיות - כשנבצע קטע קוד קריטי לא יהיה אף חוט אחר שיריץ את אותו הקוד קריטי עד שנסיים
לא מביטחים סדר, יכול להיות שנתחיל את הקוד ויהיה 100 החלפות הקשר עד שנסיים

condition varibales
מבטיחים סדר

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

What is the futex system?

A

It is by the kernel to implement the primitive mutex and conditional variables

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

‏מהו תור מקבילי
ואיך צריך להגן עליו בעבודה עם חוטים

A

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

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

וסדר כדי להבטיח שחוט שרוצה להוציא איבר יעשה זאת רק אחרי שחוט אחר הכניס איבר והתור לא ריק

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

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

A

גם וגם
כזכור גם לתהליכים יכול להיות זכרון משותף כמו שלמדנו עם הקריאות מערכת הנכונות לא בחומר

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

האם אפשר לממש מנעולים בעזרת חומרה או בעזרת תוכנה

A

עקרונית אפשר בעזרת תכונה אבל זה מאוד מסובך ומועד לטעויות

לכן מסתמכים על החומרה - המעבדים היום כולם תומכנים במנגנונים כאלה

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

כמו שהגרין מבטל חריגות בזמן נעליה
מה המשתמש יעשה?

A

יבטל סיגנלים

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

איזה פקודות מעבד תומכות באטומיות כדי לממש מנעולים

A

xchg - מחלפיה שתי משתנים

cas - compere and swap מעבירים לה 2 ערכים אם הם שווים אז שמים בראשון את הערך החדש טוב לIF

tas - test and set - בודק משתנה ושם בוא 1

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

מתי משתמשים בspin ומתי בblock

A

ספין רק כאשר ההמתנה תהיה הרבה יותר קצרה מזמן החלפת ההקשר

אחרת נחסום וניתן להקשר להתחלף

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

מה הערך של סמפור אומר עליו

A

אם הערך חיובי
זה סופר את כמות המשאבים שיש לנו
לדוגמה כמות האיברים בתור

אם הערך שלילי
זה סופר את כמות המשימות שממתינות למאשבים לדוגמה כמות התהליכים שרוצים לקבל איבר מהתור

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

הסבר על הממשק עם סמפורים באופן תיאורתי

A

s = semaphore

wait(s)
value – כלומר מוריד אחד מהמשאבים
אם הערך נהיה שלילי נכנסים להמתנה
אם עדיין חיובי אז בעצם קיבלנו משאב ולא נכנס להמתנה

signal(s)
value ++
אם ההוספה עכשיו הפכה את הערך ל0 או שנשאר שלילי זה אומר שיש מישהו שמחכה מעירים אחד מהממתינים ובעצם נותנים לו את המשאב

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

הסבר על הממשק של סמפורים מבחינת פונק

A

סמפור הוא אובייקט של הגרעין
מדברים איתו ב
sem_wait() - wait
sem_post() - singal
sem_close()….
sem_getvalue()
.
.
.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

מה זה סמפור עם ערך מקסימלי 1

A

זה הופך להיות ספיןלוק
בעקרון - לא במציאות

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

מה ההבדל בין ספיןלוק לסמפור מבחינת הסיבוך שלהם

A

ספיןלוק הוא הרבה יותר פשוט
הוא חלק מהמימוש של הסמפור

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

האם שגרת הטיפול תוותר אי פעם כל המעבד
לדוגמה wait

A

לא

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

האם פסיקת חומרה יכולה לחתוך
טיפול בחריגה
קריאת מערכת
פסיקת חומרת אחרת?

A

כן היא תחתוך הכל

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

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

A

רק במקרה אחד וזה
Page fault

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

מה ההבדל בין פסיקת תוכנה לחומרה
תן דוגמה לכל אחד

A

פסיקת תוכנה (חריגה)
נוצרת עי המשתמש לדוגמה על חלוקה ב0

פסיקת חומרה
היא אסינכרונית
ומגיעה מהתקן חומרה חיצוני
כמו פסיקת שעון

18
Q

מה זה מסלול בקרה בגרעין

A

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

19
Q

איזה מסלולים יכולים להחתך במערכת מרובת מעבדים

A

כל המסלולים יכולים להחתך עם כולם
אם הגרעין ניתן להפקעה

20
Q

במערכת מעבד יחיד מי יכול לחתוך את הבאים

קריאת מערכת או חריגה

פסיקת חומרה

A

קריאת מערכת או חריגה
כל מסלול בקרה אחר יכול לחתוך

פסיקת חומרה
יכולה להחתך רק עי פסיקת חומרה אחרת

21
Q

למעט חריגת דף
מה אפשר להגיד שקריאת מערכת וחריגות לעולם לא עושים

A

לעולם לא יגרמו לעוד חריגה

22
Q

מה פסיקת חומרה לעולם לא תעשה

A

לא תקרא לקריאת מערכת

חוץ
מחריגת דף לא תגרום לעוד חריגה

23
Q

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

A

במעבד יחיד

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

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

ואילו במעבד מרובה מעבדים צריך גם להשתמש במנעול spinlock

24
Q

‏מה הבעיה בשימוש במנעולים בטיפול פסיקות חומרה במעבד יחיד

A

‏יכול להיות מצב שמסלול בקרה אחד נועל מנעול ואז מגיע פסיקה שניה שרוצה להשתמש במנעול הזה אז היא ממתינה ש, האחת תסתיים אבל היא לעולם לא תסתיים בגלל שהיא מחכה שתים תסתיים

25
מה זה אומר נטרול פסיקות מקומיות ואיך זה מתבצע ומה חשוב לעשות ולמה
זה אומר שאנו מכבים פסיקות תוכנה במעבד מסויים בודד ולא בכולם מכבים את דגל if ברגיסטר הדגלים rflags If==00 חשוב לגבות את תוכן הדגל לפני הקטע הקריטי ולטעון אותו בחזרה לאחריו יכול להיות שלא היה דלוק לפני זה פותר בעיות במקרים של טיפול מקונן בפסיקות
26
מהי הפונקציה schedule_tick()
שגרת הטיפול בפסיקת שעון
27
דוגמה למבנה נתונים שנגיש גם עי קריאות מערכת וגם מפסיקות חומרה
תור הריצה Runqueue נגיש לקריאות מערכת כמו wait אשר מוציאה תהליך בן מהתור ונגיש לפסיקות שעון שיכולות לשנות את המיקום של התהליך בתור
28
למה בשגרת הטיפול במערכת מרובת ליבות נעדיף להשתמש ב Spinlock ולא במנעול סמפור
Spinlock משתמש בbusy wait אשר יעלה יותר במקרים של המתנה מהירה מאוד כי כך נחסכת התקורה של יציאה וכניסה מהמתנה הוגנות לא יהיה מצב שתהליך מקבל פסיקת חומרה היא לא מצליחה לתפוס מנעול ואז התהליך יצא להמתנה על משהו שלא הוא גרם
29
מה טקטיקות ההגנה של מבני נתונים אשר נגישים לקריאות מערכת וחריגות
או להשאיר את מבנה הנתונים במצב תקין לפני קריאה ל Schedule() צריך גם לוודא בחזרה שלא שונה עי מסלול בקרה אחר לא אפשרי בדרך כלל או שימוש בסמפורים כדי להבטיח אטומיות בגישה למבנה הנתונים
30
דוגמה לשימוש בסמפורים להגנת מסנה נתונים שנגיש לקריאות מערכת וחריגות
Read() מחזיקה מנעול לכל קובץ שעליו היא עובדת אם תהליך ינסה לרכוש את המנעול והוא יהיה כבר נעול זה יכניס אותו לתור ההמתנה
31
האם Mutex מבטיח סדר?
לא
32
CREW ראשי תיבות ואיך נקרא בעברית
Concurrent readers, exclusive writer זאת בעיית הקוראים כותבים
33
האם CREW מתייחס רק לקבצים
לא לכל משאב שיש כמה גורמים שרוצים לקרוא ולכתוב אליו
34
מה העקרון המנחה בCERW שהיינו רוצים שיהיה
לאפשר להרבה לקרוא תוך כדי אבל אם מישהו אחד רוצה לכתוב אי אפשר לקרוא או לכתוב איתו ביחד
35
האם סמפורים משתמשים בBUSY WAITING
כן לחלק קריטי קטן אבל וזה הגיוני כי אמרנו שהם משתמשים בSPIN LOCK בשביל המימוש שלהם
36
מהו חוק אמדל
מוצא חסם עליון לכמה אפשר למהר תהליך בעזרת מקבול מחשב בהיתן כמות מסויימת של ליבות את המקסימום שאפשר להגיל יש נוסחא לזה
37
מה הממשק לניהול משתני תנאי פונק
חלק מpthreads pthread_cond_init מאתחל משתנה תנאי מקבל מצביע למשתנה תנאי ואת ההגדרות שלו pthread_cond_wait מקבל את משתנה התנאי ומנעול משחרר את המנעול ונכנס להמתנה על המשתנה תנאי בחזרה מהמתנה החוט יעבור להמתין על המנעול שהעביר משחרר מענול - רוכש את משתנה התנאי - רוכש שוב את המנעול pthread_cond_signal ישחרר חוט כלשהו שממתין לא בהכרח הוגן pthread_cond_broadcar ישחרר את כל החוטים הממתינים אחרי זה ינסו לתפוס את המנעול pthread_cond_destroy משחרר את משתנה התנאי יכשל אם יש עדיין חוטים הממתינים למשתנה תנאי
38
מה קורה אם שלחתי במשתנה תנאי signal או brodcast ואין מי שממתין
ילך לאיבוד
39
במימוש שלנו למשנתנה תנאי מה עלול לקרות בעייתי איך פותרים
יכול להיות שתהליך יקבל סינגל משתנה תנאי יתעורר ועד שהוא ירכוש את המנעול יהיה מהר תהליך אחר שיתפוס אותו ישנה את הערך של המבנה שהוא רוצה ואז ישחרר ואז התהליך שלנו יכרוש את המנעול אבל לא בטוח שהוא ירצה בכלל לעשות משהו כי יכול להיות שהמבנה נתונים השתנה כך שהוא מעדיף לחכות הפתרון הוא בדיקה של התנאי שאנחנו רוצים אחרי נעילת המנעול ואם לא מתקיים לדוגמה אין לי איברים בתור אז נצא שוב להמתנה
40
איזה גרסה לא חוסמת יש לנסיו קבלת סמפור
sem_trywait אם לא יכול אז לא יחסום ויכשל
41
איך אפשר לקרוא את ערך הסמפור_
sem_getvalue
42
במה שונה סמפור בינארי ממנעול
בסמפור כל אחד יכול לשלוח סיגנל גם אם לא עשה עליו המתנה לפי במנעולים רק הרוכש יכול לשחרר