תרגול 6 החלפת הקשר Flashcards

1
Q

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

A

Rip
Rflags
Cs

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

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

A

בrflags
ביט9
If
Intterhpt flaf

בגלל זה שמכבים אותו זה כיאילו כיבינו את פסיקות התוכנה

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

כמה פרמטרים אפשר להעביר לפונק

A

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

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

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

איפה עושה זה? כלומר איפה שומר

איזה מקרואים עושים זו

A

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

מגובה על מחסנית הגרעין

Push_rega
Pop_regs

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

יתרונות וחסרונות של החלפת הקשר

A

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

הקטנת זמן התגובה לתהליכים אינטרקטיבים

פוגע בנציחות המעבד בגלל הoverhead של החלפת הקשר
בעיקר הtlb שהולך לפח

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

איך קורת החלפת הקשר יזומה

A

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

Read
Write
Exit
Sched_yield
פעולה שתגרום לשגיאה כמו seg fault

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

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

A

הפקעה

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

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

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

האם הגרעין ניתן להפקעה

A

כן
החלק מלינוקס 2.6

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

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

ולאיזה פונק היא קרואת

A

schedule()

היא תקרא לcontex_switch()

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

האם יש עוד פונקציות חוץ
מschedule()
שהו שער כניסה להחלפת הקשר

A

לא

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

איפה הרגיסטרים של תהליך נשמרים לפני החלפת ההקשר ממנו

ואיזה עוד פרט מידע צריך לשמור

A

במחסנית הגרעין ובpcb תחת שדה threads

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

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

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

ואיל עוקבים אחרי זה?

A

לכל תהליך מחסנית גרעין משלו

שומרים את הבסיס אליה במבנה בשם tss

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

האם יש tss אחד לכל המערכת

A

אחד לכל מעבד

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

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

A

Tss.sp0

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

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

Tss ראשי תיבות

A

Task state segment

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

איפה נשמר כתובת הבסיס לtss

A

Tr
Register

17
Q

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

A

בסיס בtss.sp0
ראש ב
Pcb.threads.rsp

18
Q

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

A

context_switch()
כללית ולא תלויית ארכיטקטורה

קוראת ל
__switch_to_asm()
אסמבלי כי ניגשת לרגיסטרים
תלויית ארכיטקטורה

__switch_to()
פונקצייתc
ספציפית לאריטקטורה כי ניגש למבנה tss

19
Q

fork()
do_fork()

A

מי קורא למי

fork
קוראת ל
do_fork

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

20
Q

הסבר את שלבי הפעולה של
do_fork

A

מקצה pcb חדש ומחסנית גרעין חדשה

קוראת לפונק copy_thread()
שממלאת את מחסנית הגרעין של תהליך הבן כדי שיראה כיאילו הוא בעצמו קרא ל
Fork
ואז ל
__switch_to-asm

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

מוסיפה את הבן לרשימת התהליכים הגלובלית
ולטבלת הערבול pid->pcb

מעבירה את הבן למצב task running ומכניסה אותו לrun queue

מחזירה את הpid של הבן שיחלחל בסוף לחזור לאב

21
Q

Struct pt_regs
מה שומר ולמה משומש

A

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

22
Q

Struct inactive_task_frame

A

בטיפוס כזה
שומרים את ערכי הרגיסטרים
לאחר קריאה ל
__switch-to-asm

23
Q

פונקציה task_pt_regs
מה עושה
מתי בשימוש

A

מקבלת מצביע לpcb
ומוצאת את המבנה
Pt_regs עם ערכי הרגיסטרים של התהליך

copy_theads()
משתמשת בו כדי למצוא את ערכי הרגיסטרים של האב והבן כדי להעתיק את ערכי האב לבן

24
Q

למה copy_threads
משנה את רגיסטר
Rax=0
לתהליך הבן

A

כי הבן מקבל 0 בחזרה מfork

25
Q

בקווים כללים מה עושה
Copy_thread
מה השלבים

A

מעתיקה את ערכי הרגיסטר של האב לבן
משנה את rax של הבן ל0
מצביעה בrsp לראש המחסנית הגרעין של הבן
ומעדכנת את כתובת החזרה (הפונק הבאה שתקרא בעת ret) לret_from_fork בבן בלבד

26
Q

מהי פונקציה
Ret_from_fork

A

הפונק שהבן יקרא אליה בחזרה מהfork טוענת את הרגיסטרים שclone threads שמרה בשבילו ומחזירה את הערך 0 שגם זה clone threads שמרה בשבילו

27
Q

מה קורה אם תהליך מסתיים ולא קורא בעצמו לexit

A

הmain שלו עטוף במציאות ב
__libc_start_main
והוא קורא לexit

28
Q

האם זכרון הpcb של הבן משוחרר בעת exit

A

לא
רק שהאב יעשה wait

29
Q

איזה פונק גרעין מפנה את הpcb של בן שעשו לוwait

A

Release_task()

30
Q

מה שלבי הפעולה של
do_exit()

A

משחררת משאבים בשימוש התהליך ולא הגרעין
סוגרת קבצים פתוחים, משחררת איזורי זכרון…

שומרת את ערך הסיום שלexit
בpcb->exit_code

מעדכנת את כל הבנים שלו שיהיו יתומים ויהיו בנים של init

משנה את המצב שלו לTASk_zombie

קוראת לschedule () אשר תוציא אותו מתור הריצה

בפועל מסתיים סופית שיקרא לswitch-to-asm

31
Q

למה החלפת הקשר בין חוטים יותר זולה לנו

A

כי המטמונים לא נמחקים ולא נצטרך לבזבז זמן במילוי מחדש שלהם

32
Q

setjmp & longjmp
מה אלו שתי הפונקציות האלה
למה משומשות

A

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

קופצים אחורה וקדימה בקוד

33
Q

not for exam

OmpSs
מה המוטיבציה

A

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

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

OmpSs
מגדירה משימה כTASK
#pragma omp task inout( arr[lo:hi] )
ואז אפשר לקרוא לפונק והמגנון ינהל את הריצה המקבילה שלהן
אסור שהן יהיו תלויות אחת בשניה

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

34
Q

not for exam
האם לתהליכם יש זכרון משותף k

A

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

Via system calls
1. shmget(key, sizem, attributes) // get
2. shmat(key, address, attributes) // attach
3. shmdt(address) // detach
4. shmctl(key, command, struct shmid_ds *buf) // control
5. shm_open // as file
6. shm_unlink // as file

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