OS PyramidTechnion 234123 · Operating Systemsbasics → exam
Stage 5: CPU Scheduling
winter_2019-2020_examAQuestion 2corecritical25 pts

This question spans 3 stages — each part below is tagged with, and links to, the stage it belongs to.

הנחה: ללא קשר לתשובתך בשאלה הקודמת, בסעיפים שלמטה נניח שהאב נותר חי.

Full original question text (raw OCR)

נתון קטע הקוד הבא: 1 static int g_alarm = 0; 2 void alrm_handler(int signo) { 3 g_alarm = 1; 4 } 5 6 void son() { // assume executing as superuser 7 struct sched_param param; 8 param.sched_priority = 50; 9 sched_setscheduler(getpid(),SCHED_FIFO, &param); 10 11 kill(getppid(), SIG_ALRM); 12 sched_yield(); 13 14 printf("msg1\n"); 15 while(1) /*endless loop*/; 16 exit(0); 17 } 18 19 int main() { 20 signal(SIG_ALRM, alrm_handler); 21 int son_pid = fork(); 22 if(son_pid==0) 23 son(); 24 waitpid(son_pid); 25 printf("msg2\n"); 26 return 0; 27 } תזכורת: • sched_setscheduler מאפשרת לשנות את מדיניות הזימון של תהליכים ואת העדיפות שלהם. • כשתהליך בעל מדיניות זימון FIFO קורא ל- sched_yield, הוא מועבר לסוף תור העדיפות המתאים, ואז נקראת הפונקציה schedule. • קריאת המערכת ()waitpid ניתנת להפרעה ע"י סיגנלים (interruptible system call) הנחות: • במערכת קיימים רק שני תהליכים: האב והבן, לפי הקוד הנתון. • במערכת יש מעבד יחיד עם ליבה יחידה, אלא אם נאמר אחרת. סטודנטים קבלו את ההבהרה במבחן שתליך האב (כמו כל קוד אתם כותבים) מתחיל ריצתו עם עדיפות ברירת מחדל.

  1. 1· short_answer· 4 ptsCPU Scheduling

    (4 נק') אם מוחקים את שורה 12 (sched_yield), אז הקוד שנוצר ידפיס את אותו הפלט ביחס לתוכנית המקורית. נכון / לא נכון . נימוק:

    System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls
  2. 2· short_answer· 4 ptsProcesses & Signals

    (4 נק') המחרוזת msg2 לא תודפס כי בשורה 11 (kill) תהליך הבן הורג את תהליך האב. נכון / לא נכון. נימוק:

    System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls
  3. 3· short_answer· 4 ptsCPU Scheduling

    (4 נק') יתכן שהמחרוזת msg2 תודפס לפני המחרוזת msg1. נכון / לא נכון . נימוק:

    System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls
  4. 4· short_answer· 5 ptsCPU Scheduling

    (5 נק') אם מוחקים את שורה 15 (לולאת ה-while), אז סדר ההדפסה הינו בהכרח: msg1 msg2 נכון / לא נכון . נימוק:

    System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls
  5. 5· short_answer· 4 ptsCPU Scheduling

    (4 נק') בהנחה שהמעבד מרובה ליבות, אז סדר ההדפסה של התוכנית המקורית (עם לולאת ה- while) הינו בהכרח: msg1 msg2 נכון / לא נכון . נימוק:

    System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls
  6. 6· short_answer· 4 ptsSynchronization & Threads

    (4 נק') בהנחה שהמעבד מרובה ליבות, אם נוסיף לתוכנית המקורית את הטקסט הבא: g_alarm = 2; בשורה 13, אז יתכן race condition בהתייחס למשתנה g_alarm נכון / לא נכון. נימוק:

    System call trap and kernel entryfork/exec address-space semanticslibc syscall wrapper caching pitfalls

The exam question — original PDF

pages 5, 6, 7

Exactly as it appears on the exam paper.

loading page 5
loading page 6
loading page 7

Built from these components

Ordered basic → advanced. Master the earlier ones first.

L2System call trap and kernel entryL2nice value and dynamic priorityL3fork/exec address-space semanticsL3libc syscall wrapper caching pitfallsL3Local vs global interrupt disableL3Signal delivery and handler timingL3SCHED_FIFO / SCHED_RR real-time policiesL4SRT / 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.

Tutorial 2slide 10אחרי fork()parentint main() { int x = 0; pid_t p = fork(); if (p == 0) { x = 1; } else { x = 2; }}sonint main() { int...

אחרי fork()parentint main() { int x = 0; pid_t p = fork(); if (p == 0) { x = 1; } else { x = 2; }}sonint main() { int x = 0; pid_t p = fork(); if (p == 0) { x = 1; } else { x = 2; }}מערכות הפעלה - תרגול 210

Tutorial 2slide 15הדפסה מתואמת למסךשימוש ב-wait() יכול לפתור את הבעיה שראינו קודם כאשר מדפיסים למסך במקביל משני תהליכים:int main() { pi...

הדפסה מתואמת למסךשימוש ב-wait() יכול לפתור את הבעיה שראינו קודם כאשר מדפיסים למסך במקביל משני תהליכים:int main() { pid_t p = fork(); if (p > 0) { // parent waits for child wait(NULL); } printf(“hello”); return 0;}מערכות הפעלה - תרגול 215

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 25אתחול תהליכים בלינוקסמשתמשים מתחברים לעבודה בלינוקס דרך מסופים (terminal)

אתחול תהליכים בלינוקסמשתמשים מתחברים לעבודה בלינוקס דרך מסופים (terminal).מסוף = מסך + מקלדת (מקומי או מרוחק).התהליך init יוצר תהליך בן עבור כל מסוף, אשר טוען ומבצע את המשימות הבאות לפי הסדר:איתחול של המסוף.התחברות של המשתמש עם שם משתמש וסיסמא באמצעות תכנית login.אם אושרה כניסת המשתמש: קריאה לתוכנית shell(כמו tcsh או bash) המאפשרת למשתמש להעביר פקודות למערכת ההפעלה.מערכות הפעלה - תרגול 225

Tutorial 2slide 28מערכות הפעלה - תרגול 2281שאלה ממבחן

מערכות הפעלה - תרגול 2281שאלה ממבחן

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 35מדיניות זימון של תהליךלכל תהליך זמן-אמת יש מדיניות זימון (scheduling policy):SCHED_FIFO או SCHED_RR

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

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

עדיפויותCFS מאפשר למשתמש להגדיר עדיפויות לתהליכים וכך לחלק את זמן המעבד בצורה שונה בין התהליכים.העדיפות של התהליך מיוצגת ע"י הערך -20 ≤ nice ≤ +19 .ברירת המחדל היא nice=0 .תהליך "נחמד" יותר יהיה בעדיפות נמוכה יותר.לכל עדיפות יש משקל:מערכות הפעלה - תרגול 550

Tutorial 5slide 51קצת נוסחאותנניח שיש במערכת n תהליכים עם עדיפויות: P1, P2, …, Pnומשקלים: W1, W2, …, Wn

קצת נוסחאותנניח שיש במערכת n תהליכים עם עדיפויות: P1, P2, …, Pnומשקלים: W1, W2, …, Wn .נניח כי W0 הוא המשקל המתאים לעדיפות nice=0.אז זמן הריצה הווירטואלי של התהליך ה-i מתקדם לפי:VRi += (W0 / Wi) ∙ ∆Tכאשר ∆T הוא זמן הריצה לפי שעון אמיתי.זמן הריצה הווירטואלי זהה לזמן הריצה האמיתי עבור ברירת המחדל nice=0.ניתן להוכיח כי הקוונטום של התהליך ה-i הוא:Qi = (Wi / ΣWi) ∙ sched_latencyמערכות הפעלה - תרגול 551

Tutorial 8slide 1תרגול 8מנגנוני סנכרון: משתני תנאימנגנוני סנכרון: סמפוריםדוגמה: מימוש מנעול קוראים-כותביםסינכרון בגרעין לינוקס1מערכות ...

תרגול 8מנגנוני סנכרון: משתני תנאימנגנוני סנכרון: סמפוריםדוגמה: מימוש מנעול קוראים-כותביםסינכרון בגרעין לינוקס1מערכות הפעלה - תרגול 8

Tutorial 8slide 12שחרור חוטים ממתיניםint pthread_cond_signal(pthread_cond_t *cond); משחררת את אחד החוטים הממתינים (הגינות לא מובטחת)

שחרור חוטים ממתיניםint pthread_cond_signal(pthread_cond_t *cond); משחררת את אחד החוטים הממתינים (הגינות לא מובטחת).int pthread_cond_broadcast(pthread_cond_t *cond);משחררת את כל החוטים הממתינים.כל החוטים מפסיקים להמתין על משתנה התנאי ועוברים להמתין על המנעול. החוטים יחזרו לפעילות בזה אחר זה (בסדר כלשהו, לאו דווקא הוגן) לאחר שינעלו מחדש את ה-mutex.שימו לב: אם אין אף חוט שממתין באותו רגע על משתנה התנאי cond, הפעולות חסרות השפעה (הסיגנל הולך לאיבוד ואינו נזכר הלאה).ערך מוחזר: הפונקציות תמיד מצליחות ומחזירות 0.מערכות הפעלה - תרגול 812

Ask Gemini
winter_2019-2020_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.