OS PyramidTechnion 234123 · Operating Systemsbasics → exam
Stage 5: CPU Scheduling
OS-Winter-2020-2021-examAQuestion 2core25 pts

נתון התרשים המופשט של מצבי התהליכים: [Diagram of Running, Ready, Waiting states with arrows] עבור כל אחד מהמעברים תנו תרחיש המוביל למעבר: נתון שהמערכת עובדת עם זמן תהליכים מסוג (RR (Round Robin: תזכורת: מאז גרעין 2.6 בלינוקס משתמשים בזמן תהליכים הנקרא (CFS (Completely Fair Scheduler אשר מזמן את התהליך בעל זמן הווירטואלי הקטן ביותר. נתונה מערכת זימון תהליכים כפי שלמדנו בתרגול ורצה על מחשב עם מעבד יחיד וכל התהליכים מגיעים בזמן 0: בהנחה שיש במערכת את התהליכים הבאים, ואורך הקוונטום הוא 2ms: [Table with Process A, B details] איזה תהליך ירוץ בכל אחד מהזמנים הנתונים: [Table to fill] בהנחה שיש במערכת את התהליכים הבאים, ואורך הקוונטום הוא 2ms: [Table with Process A, B, C details] איזה תהליך ירוץ בכל אחד מהזמנים הנתונים (נא להמשיך את הטבלה עד 17ms) נתון הקוד של 2 תהליכים ומדיניות הזימון שלהם (אפשר להניח ששניהם מגיעים בו זמנית): [Code for Process A (SCHED_FIFO) and Process B (SCHED_OTHER (CFS))]

Full original question text (raw OCR)

נתון התרשים המופשט של מצבי התהליכים: [Diagram of Running, Ready, Waiting states with arrows] עבור כל אחד מהמעברים תנו תרחיש המוביל למעבר: נתון שהמערכת עובדת עם זמן תהליכים מסוג (RR (Round Robin: תזכורת: מאז גרעין 2.6 בלינוקס משתמשים בזמן תהליכים הנקרא (CFS (Completely Fair Scheduler אשר מזמן את התהליך בעל זמן הווירטואלי הקטן ביותר. נתונה מערכת זימון תהליכים כפי שלמדנו בתרגול ורצה על מחשב עם מעבד יחיד וכל התהליכים מגיעים בזמן 0: 4. (2 נק') בהנחה שיש במערכת את התהליכים הבאים, ואורך הקוונטום הוא 2ms: Process Scheduling policy Priority level Expected runtime A SCHED_RR 30 5 ms B SCHED_FIFO 31 6 ms איזה תהליך ירוץ בכל אחד מהזמנים הנתונים: process Time 0 1 2 3 4 5 6 7 8 stamp (ms) דוגמא למילוי: process A B A A B B Time 0 1 2 3 4 5 6 7 8 stamp (ms) הסבר: 5. (2 נק') בהנחה שיש במערכת את התהליכים הבאים, ואורך הקוונטום הוא 2ms: Process Scheduling policy Priority level Expected runtime A SCHED_RR 30 5 ms B SCHED_RR 31 6 ms C SCHED_RR 30 6 ms איזה תהליך ירוץ בכל אחד מהזמנים הנתונים (נא להמשיך את הטבלה עד 17ms) process Time 0 1 2 3 4 5 stamp (ms) 17 הסבר: נתון הקוד של 2 תהליכים ומדיניות הזימון שלהם (אפשר להניח ששניהם מגיעים בו זמנית): Process A SCHED FIFO int main() { while(1); } printf("Hello World"); return 0; Process B SCHED_OTHER (CFS) int main() { printf("Hello from CFS"); while(1); return 0; }

  1. 1.a· short_answer· 1 ptsCPU Scheduling

    Running → Ready

    libc syscall wrapper caching pitfallsSCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  2. 1.b· short_answer· 1 ptsCPU Scheduling

    Ready → Running

    libc syscall wrapper caching pitfallsSCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  3. 1.c· short_answer· 1 ptsCPU Scheduling

    Running → Waiting

    SRT / preemptive Gantt construction
  4. 1.d· short_answer· 1 ptsCPU Scheduling

    Waiting → Ready

    SRT / preemptive Gantt construction
  5. 2.a· short_answer· 2 ptsCPU Scheduling

    מה היתרון בשימוש ב quantum גדול (מספיק יתרון אחד)?

    libc syscall wrapper caching pitfallsSCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  6. 2.b· short_answer· 2 ptsCPU Scheduling

    מה היתרון בשימוש ב quantum קטן (מספיק יתרון אחד)?

    libc syscall wrapper caching pitfallsSCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  7. 2.c· short_answer· 2 ptsCPU Scheduling

    במידה והמערכת עמוסה (מכילה הרבה תהליכים מוכנים לריצה), מדוע עדיף להוסיף תהליכים חדשים בסוף התור?

    libc syscall wrapper caching pitfalls
  8. 3· short_answer· 3 ptsCPU Scheduling

    עבור זמן תהליכים CFS, איזה בעיה פותרת ה min_granularity ?

    libc syscall wrapper caching pitfallsSCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  9. 4· trace· 2 ptsCPU Scheduling

    איזה תהליך ירוץ בכל אחד מהזמנים הנתונים: [Table to fill]

    libc syscall wrapper caching pitfallsSCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  10. 5· trace· 2 ptsCPU Scheduling

    איזה תהליך ירוץ בכל אחד מהזמנים הנתונים (נא להמשיך את הטבלה עד 17ms) [Table to fill]

    libc syscall wrapper caching pitfallsSCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  11. 6· short_answer· 2 ptsCPU Scheduling

    האם תודפס ההודעה "Hello from CFS"? (הסבר)

    libc syscall wrapper caching pitfallsSCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  12. 7· short_answer· 2 ptsCPU Scheduling

    אילו היינו משנים את מדיניות הזימון של תהליך A ל SCHED_RR במקום SCHED_FIFO, האם התשובה לסעיף הקודם היתה משתנה?

    SCHED_FIFO / SCHED_RR real-time policiesSRT / preemptive Gantt construction
  13. 8· short_answer· 4 ptsCPU Scheduling

    לדני יש מחשב בעל 2 מעבדים ורוצה לממש "איזון עומסים" במערכת זימון תהליכים שלו, כך שהתהליך יכול לבחור לאיזה מעבד לעבור דרך קריאת מערכת חדשה. להזכירכם: "איזון עומסים" או load balancing היא פעולה בה מעבירים תהליכים בין מעבד אחד לשני כדי לאזן את העומס על שני המעבדים. לדני עלתה 3 אופציות לממש את העברת תהליכים רגילים, בעלי מדיניות זימון CFS, ממעבד A למעבד B: • להשאיר את התהליך עם אותו vruntime שצבר עד כה. • לתת לתהליך vruntime = min_vruntime הזמן הוירטואלי המינימלי בין הזמנים הוירטואלים של התהליכים הרצים על המעבד B. • לתת לתהליך vruntime = max_vruntime הזמן הווירטואלי המקסימלי בין הזמנים הוירטואלים של התהליכים הרצים על המעבד B. מה לדעתכם האופציה העדיפה ביותר? ולמה?

    libc syscall wrapper caching pitfalls

The exam question — original PDF

pages 4, 5, 6, 7, 8

Exactly as it appears on the exam paper.

loading page 4
loading page 5
loading page 6
loading page 7
loading page 8

Built from these components

Ordered basic → advanced. Master the earlier ones first.

L2Voluntary vs preemptive context switchL2Latency vs throughput process classificationL3libc syscall wrapper caching pitfallsL3SCHED_FIFO / SCHED_RR real-time policiesL3Non-preemptible kernel implicationsL4SRT / preemptive Gantt construction

Review the material

Read these before you answer — each verified slide teaches a component this question tests, and nothing from an unrelated topic is included. Tutorial slides show the actual slide image.

Lecture 4–5slide 39SRTF (Shortest-Remaining-Time First)

SRTF (Shortest-Remaining-Time First) • Assume different jobs may arrive at different times • SJF is not optimal – As it’s not preemptive, and – A short job might arrive while a very long job is running => recall: convoy effect • SRTF is just like SJF but – Is allowed to use preemption – Hence, it’s “optimal” (assuming a zero context-switch cost etc.) • Whenever a new job arrives, or an old job terminates – SRTF schedules the job with the shortest remaining time – Thereby making an optimal decision 39 OS (234123) - scheduling

Lecture slide — text above is the material (no raster available).
Tutorial 2slide 18קריאת המערכת exit()שאלה: למה בכלל לקרוא ל-exit(status) , אם אפשר פשוט לרשום return status בסוף פונקציית ה-main?תשובה:...

קריאת המערכת exit()שאלה: למה בכלל לקרוא ל-exit(status) , אם אפשר פשוט לרשום return status בסוף פונקציית ה-main?תשובה: main היא לא באמת הפונקציה הראשית של התכנית...main() נקראת ע"י __libc_start_main() שאוספת את ערך החזרה של main() וקוראת ל-exit().int __libc_start_main(…) { …… exit(main(…));}מסקנה: הפונקציה exit תמיד נקראת לסיום סטנדרטי של התוכנית.מערכות הפעלה - תרגול 218

Tutorial 2slide 22קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו

קריאות המערכת getpid(), getppid()pid_t getpid();קריאת מערכת המחזירה לתהליך הקורא את ה-pid של עצמו.pid_t getppid();קריאת מערכת המחזירה את ה-PID של תהליך האב של התהליך הקורא.שאלה: מה המשמעות של getppid() == 1 עבור תהליך משתמש טיפוסי?תשובה: תהליך האב הוא init. קורה למשל אם תהליך הבן יתום.מערכות הפעלה - תרגול 222

Tutorial 2slide 24דוגמת קודמסכמתprintf("pid = %d\n", getpid());pid_t pid = fork();if (pid == 0) { printf("child pid = %d\n", getpid());...

דוגמת קודמסכמתprintf("pid = %d\n", getpid());pid_t pid = fork();if (pid == 0) { printf("child pid = %d\n", getpid()); char* args[] = {"/bin/date", NULL}; execv(args[0], args); printf("This should not be printed\n");} else { wait(NULL); printf("parent pid = %d\n", getpid());}פלט לדוגמה:pid = 8919child pid = 8920Sun Oct 29 00:31:32 IDT 2017parent pid = 8919מערכות הפעלה - תרגול 224

Tutorial 5slide 2TL;DRזַמָּן התהליכים ((scheduler הוא הרכיב במערכת ההפעלה שאחראי על בחירת התהליך הבא שירוץ על המעבד

TL;DRזַמָּן התהליכים ((scheduler הוא הרכיב במערכת ההפעלה שאחראי על בחירת התהליך הבא שירוץ על המעבד.אנחנו נלמד, בתור דוגמה, את אלגוריתם הזימון של לינוקס.אבל לפני שנלמד דוגמה "אמיתית" ומורכבת, נרצה להבין את הגישות הבסיסיות בזימון תהליכים כדי לפתח אינטואיציה.מערכות הפעלה - תרגול 52זימון תהליכים בלינוקסCFS = completely fair schedulerאלגוריתם זימון של תהליכים רגיליםSCHED_FIFO, SCHED_RRאלגוריתם זימון של תהליכי זמן אמת

Tutorial 5slide 9דוגמת FCFSaverageResponseTime = (10 + 20 + 30) / 3 = 20כעת נסיר את הנחה 1 ("כל התהליכים רצים למשך אותו זמן")

דוגמת FCFSaverageResponseTime = (10 + 20 + 30) / 3 = 20כעת נסיר את הנחה 1 ("כל התהליכים רצים למשך אותו זמן"). לכל תהליך זמן ריצה משלו.תוכלו לחשוב על דוגמה שבה FCFS אינו יעיל?מערכות הפעלה - תרגול 59כל התהליכים רצים למשך אותו זמן.כל התהליכים מגיעים באותו זמן (t=0).אם תהליך התחיל לרוץ, אז הוא ירוץ עד לסיומו ללא הפסקות.התהליכים משתמשים רק במעבד ולא מבצעים I/O.זמן הריצה של כל התהליכים ידוע מראש.

Tutorial 5slide 10אפקט השיירה (convoy effect)averageResponseTime = (100 + 110 + 120) / 3 = 110אלגוריתם FCFS עלול לסבול מ"אפקט השיירה": ...

אפקט השיירה (convoy effect)averageResponseTime = (100 + 110 + 120) / 3 = 110אלגוריתם FCFS עלול לסבול מ"אפקט השיירה": מצב שבו תהליך אחד ארוך מעכב הרבה תהליכים קצרים. מערכות הפעלה - תרגול 510

Tutorial 5slide 15אלגוריתם SRTFSRTF = shortest remaining time firstנקרא גם: STCF = shortest time to completion firstאופן פעולה: כמו SJF...

אלגוריתם SRTFSRTF = shortest remaining time firstנקרא גם: STCF = shortest time to completion firstאופן פעולה: כמו SJF, אבל עם הפקעות.בכל פעם שתהליך חדש מגיע למערכת, SRTF מחשב למי מבין התהליכים (כולל התהליך החדש) נותר הכי פחות זמן לרוץ, ובוחר את התהליך הזה לריצה.תחת ההנחות החדשות, ניתן להוכיח כי SRTF אופטימלי במדד זמן התגובה הממוצע.בתוספת הנחה כי זמן החלפת הקשר הוא אפסי.מערכות הפעלה - תרגול 515כל התהליכים רצים למשך אותו זמן.כל התהליכים מגיעים באותו זמן (t=0).אם תהליך התחיל לרוץ, אז הוא ירוץ עד לסיומו ללא הפסקות.התהליכים משתמשים רק במעבד ולא מבצעים I/O.זמן הריצה של כל התהליכים ידוע מראש.

Tutorial 5slide 23נהוג לסווג תהליכים לשני סוגיםתהליך אינטראקטיבי I/O Boundמעוניין בזמן המתנה נמוך

נהוג לסווג תהליכים לשני סוגיםתהליך אינטראקטיבי I/O Boundמעוניין בזמן המתנה נמוך.latency sensitive.דוגמה: נגן סרטים שמחליף 60 פריימים בשנייה.בדרך-כלל מוותר על המעבד מרצונו אחרי פרק זמן קצר בגלל המתנה לפעולות I/O.תהליך חישוביCPU Boundמעוניין בזמן תגובה נמוך.throughput sensitive.דוגמה: סקריפט python שמנתח נתונים ע"י חישובים אלגבריים.בדרך-כלל לא מוותר על המעבד מרצונו אלא מופקע.מערכות הפעלה - תרגול 523

Tutorial 5slide 35מדיניות זימון של תהליךלכל תהליך זמן-אמת יש מדיניות זימון (scheduling policy):SCHED_FIFO או SCHED_RR

מדיניות זימון של תהליךלכל תהליך זמן-אמת יש מדיניות זימון (scheduling policy):SCHED_FIFO או SCHED_RR .נקבעת ע"י המשתמש באמצעות קריאות מערכת sched_setscheduler() .מדיניות הזימון – תשפיע על כמה זמן ריצה כל תהליך יקבל ואופן עבודת התור.מערכות הפעלה - תרגול 535

Tutorial 6slide 10מהי החלפת הקשר?מערכות הפעלה - תרגול 610

מהי החלפת הקשר?מערכות הפעלה - תרגול 610

Tutorial 6slide 11מהי החלפת הקשר?לכל תהליך יש "הקשר ביצוע" (execution context) המכיל את כל המידע הדרוש לביצוע התהליך

מהי החלפת הקשר?לכל תהליך יש "הקשר ביצוע" (execution context) המכיל את כל המידע הדרוש לביצוע התהליך.מחסניות, רגיסטרים, תכולת זיכרון, קבצים פתוחים, ..."החלפת הקשר" = עצירת הביצוע של התהליך הנוכחי ושמירת ההקשר שלו.טעינת ההקשר של התהליך הבא לביצוע.הקשר התהליך הנוכחי מתחלף – מכאן שם הפעולה "החלפת הקשר".מערכות הפעלה - תרגול 611

Tutorial 6slide 13שני סוגים של החלפת הקשרהחלפת הקשר כפויה(== הפקעה)הגרעין מפקיע (כלומר, לוקח בכוח) את המעבד מהתהליך, למשל בעקבות:פסיקת ...

שני סוגים של החלפת הקשרהחלפת הקשר כפויה(== הפקעה)הגרעין מפקיע (כלומר, לוקח בכוח) את המעבד מהתהליך, למשל בעקבות:פסיקת שעון (מטופלת בשגרה scheduler_tick) אשר מגלה כי הזמן שהוקצב לתהליך הנוכחי אזל.אירוע אסינכרוני אשר מעיר תהליך בעל עדיפות טובה יותר מהתהליך הרץ כרגע.לדוגמה: פסיקת דיסק או שחרור מנעול שתהליך המתין לו.החלפת הקשר יזומההתהליך מוותר מרצונו על המעבד, למשל באמצעות:קריאת מערכת חוסמת (כמו wait(), read(), …) אשר מוציאה את התהליך להמתנה.קריאת מערכת exit() אשר מסיימת את התהליך.קריאת מערכת sched_yield() – קריאת מערכת ייעודית לוויתור על המעבד.מערכות הפעלה - תרגול 613

Tutorial 6slide 35הפונקציה __switch_to_asm (3) popq %r15 popq %r14 popq %r13 popq %r12 popq %rbx popq %rbp jmp __switch_to מערכות הפעלה...

הפונקציה __switch_to_asm (3) popq %r15 popq %r14 popq %r13 popq %r12 popq %rbx popq %rbp jmp __switch_to מערכות הפעלה - תרגול 635שחזור הרגיסטרים ממחסנית הגרעין של next.אלו הרגיסטרים ש-next שמר כאשר הוא קרא להחלפת הקשר בעבר.קפיצה (jmp) במקום קריאה (call) לפונקציה. למה?כתובת החזרה מהפונקציה __switch_to() כבר שמורה על המחסנית של next.

Ask Gemini
OS-Winter-2020-2021-examA · Q2 — question + its material already loaded
Pick a shortcut above or ask anything about this question.
The exam text, the skills it tests, and the exact slides are already in context.