תרגול 7 חוטים Flashcards

1
Q

מה הscheduler
מזמן
תהליכים או חוטים

A

חוטים

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

מה משותף בין חוטים
ומה לא

A

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

לא משותף
רגיסטרים
ומחסנית

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

למה יצירת חוט יותר זול מייצירת תהליך

A

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

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

לייבא את

<pthreads.h>

בתהליך הקימפול
Gcc ... -pthreads ....
שמוסיף את הmacros הנחוצים ומקשר עם הספריה שצריל
</pthreads.h>

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

איך מייצרים קוד חדש

מה מקבל מה מחזיר

A

פונק
pthread_create

מקבל מצביע לשמירת מזהה החוט

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

מחזיר 0 בהצלחה אחרת קוד שגיאה

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

עד מתי חוט ירוץ יעל מה ירוץ

A

ירוץ על פונק שניתן לו
יסיים כשייסים את ריצת הפונ

או עד שיריץ
Pthread_exit
עם ערך סיום

או עד שיקבל
Pthread_cancel

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

Pthread_self()
מה זה

A

חוט מריץ את זה
ומקבל מזהה של עצמו
מזהה פנימי של pthreads זה לא מהזהה של החוט

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

Pthread_cancel

מקבל?עושה?מחזיר?
מה יהיה ערך סיום של חוט שעשו עליו את זה

A

מקבל מזהה חוט מסוג pthread_t
שולח לחוט סיגנל ייחודי

Pthread_canceled ערך סיום

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

Pthread_join()
מה מקבל
מי יכול להריץ

A

מקבל מזהה חוט לחכות לסיומו
ומצביע לשמירת ערך סיום שלו

כל חוט יכול להמתין לכל חוט

גורם לשחרור מידע הניהול ברמתpthread וגם ברמת הגרעין

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

מתי תהליך עם חוטים מסיים את ריצתו

A

כשכל החוטים שלו סיימו

פעולה לא חוקית באחד החוטים

קריאה לexit מאחד החוטים

חזרה מmain בחוט הראשי

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

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

A

Pthread_exit()

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

לאיזה תהליכים יש חוט ראשי

A

לכל התהליכים אפילו אם לא יצרו חוט יהיה ראשי
נוצר בקריאה לFORK

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

איזה קריאת מערכת מייצרת חוט חדש

A

clone()

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

איזה חוט יכול להרוג חוט אחר

A

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

17
Q

איך עובד
PID
בחוטים

A

לכל חוט יש
PID
שונה, אבל יש מזהה לכל החוטים תחת אותו תהליך וזה הPID של החוט הראשי שהוא בעצם המזהה של התהליך.
נקרא tpid
זה בעצם מה שקריאת המערכת getpid() מחזירה

18
Q

מה קורה אז כשעושים
kill(pid, signal)
על
PID
שהוא מזהה של החוט הראשי

A

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

19
Q

פקודת מערכת gettid()

A

מחזיר לנו בעצם את ה
PID
האמיתי של החוט
מבחינת המשתמש זה המזהה של התהליך

20
Q

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

A

מערכת ההפעלה מסתכלת על כל אחד מהם כתהליך נפרד

אבל זה אבסטרקטי למשתמש והוא חושב שכולם חלק מאותו תהליך ובעצם שהוא קורא ל
getpid לדוגמה
הוא מקבל את ה tpid
שברקע זה המזהה של החוט הראשי PID

21
Q

מה ההבדל בין
pthread_create()
clone()

A

pthread_create()
זוהי פונק משתמש שקוראת ברקע ל
clone
שהיא הממשק שמערכת ההפעלה מציעה ליצירת חוטים

22
Q

clone()
מה מקבלת

A

מצביע לפונקציה שצריכה להריץ

פרמטר להעביר לפונקציה

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

דגלים - מוסברים בכרטיסיה נפרדת

23
Q

איזה דגלים clone מקבלת

A

CLONE_VM הרם לשתף את מרחב הזכרון
CLONE_FILE האם לשתף את טבלת הקבצים הפתוחים
CLONE_FS האם לשתף מידע על מיקום נוכחי במערכת קבצים ועוד..
CLONE_PARENT האם התהליך החדש יהיה אותו אב כמו לקורא או שהוא יהיה בן של הקורא
CLONE_THREAD האם התהליך החדש הוא חלק מקבוצת החוטים כלומר אותו tgid

24
Q

מה CLONE_THREAD גורר?
דגל ודגל

A

CLONE_PARENT
יהיה להם את אותו אב משותף

25
Q

בתוך הגרעין
באיזה פונקציה משתמשת
sys_clone

A

do_fork()

26
Q

האם כל החוטים באותה קבוצה רצים על אותו מעבד

A

לא בהכרח
יכולים להתפצל

27
Q

מה האנגלוגיה לשימוש במנעולים

A

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

28
Q

מה זה mutex

A

מנעולים ב pthreads

29
Q

mutex ראשי תיבות

A

matual exlusion
מניעה הדדית

30
Q

איך נועלים מנעול בpthreads

ציין גם איך מאתחלים

A

pthread_mutex_t m;
pthread_mutex_init(m, mutex_type (typicly null))
pthread_mutex_lock(&m)
pthread_mutex_unlock(&m)

31
Q

מה קורה עם חוט מנסה לתפוס mutex נעול
ומה קורה שמנסה לתפוס spinlock

מה היתרון בכל אחד מהמקרים

A

הוא עובר להמתנה mutex
יתרון בזמני המתנה ארוכים

spinlock - busy waiting לא יוצא להמתנה
יתרון בזמני המתנה קצרים שלא נרצה לבזבז זמן על החלפת הקשר

32
Q

האם busy waiting
בspinlock
יגרור אי החלפת הקשר?

A

תהיה הפקעה לבסוף בסוף פיסת הזמן שהוקצתה להתליך

33
Q

איזה עוד פעולות אפשר לעשות על mutex חוץ מאתחול נעילה ושחרור?

A

pthread_mutex_trylock - מנסה לנעול את המנעול אם לא מצליח יחזיר שגיאה וכך לא נצא להמתנה

pthread_mutex_destory - פינוי בסוף השימוש
יכשל אם נעול

34
Q

איזה פעולות יצרו התנהגות לא מגודרת בmutexes

A

נעילה חוזרת של מנעול נעול
שחרור מנעול עי חוט שלא מחזיק בו
שחרור מנעול לא נעול

35
Q

מהי פקודת מכונה אטומית
בחד מעבדי
ומרובה מעבדי

איך אני יכול להפוך פקודת מכונה לאטומית

A

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

מעבד יחיד = כל פקודה היא אטומית

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

עי הוספת קידמת lock
לדוג
lock; inc x
(++ atomicly)

36
Q

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

באיזה פקודת מכונה היא משתמשת

A

test_and_set_bit()

BTS
שהיא פקודה בx64

37
Q
A