שאלת מבחן במערכות הפעלה - האוניברסיטה הפתוחה 2015 - תזמון

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

ביל הציע לממש את מדיניות הזימון LJF – Longest Job First. מדיניות זו הפוכה בהתנהגותה ממדיניות SJF שלמדנו. כלומר, הניחו שכל התהליכים מגיעים יחד וזמני הביצוע ידועים מראש, ונריץ את התהליכים לפי זמן הביצוע בסדר יורד, כשכל תהליך רץ מתחילתו ועד סופו.

א. האם מדיניות LJF היא הגרועה ביותר מבין כל המדיניות בלי הפקעה, לפי מדד זמן השהיה הממוצע? הוכיחו או תנו דוגמה נגדית.
ב. סטיב טוען שקיימות מדיניות עם הפקעה גרועות יותר מ-LJF. האם סטיב צודק? הסבירו. אם כן, תנו דוגמה.

ג. נניח שהגיעו למערכת
תהליכים. נסמן את זמני הריצה שלהם ב- ואת זמני השהיה שלהם תחת SJF ב-. (שימו לב, זמן השהיה כולל את זמן הריצה). מהו זמן ההשהיה של התהליך ה- תחת LJF? הניחו שזמני הריצה של כל התהליכים שונים.
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
האוניברסיטה הפתוחהמועד 922015סמסטר א
תזמוןתזמון CPUSJFהחלפת הקשרLJFהפקעה
עבור סעיף א', בטאו את זמן השהיה הממוצע כסכום משוקלל והראו שכדי למקסם אותו יש לסדר את זמני הריצה בסדר יורד. עבור סעיף ב', חשבו כיצד הפקעה יכולה לעכב את סיומם של תהליכים קצרים עוד יותר מאשר ב-LJF. עבור סעיף ג', כתבו ביטויים אלגבריים לזמני ההשהיה בשתי המדיניות ומצאו קשר ביניהם.
א. כן, מדיניות LJF (Longest Job First) היא הגרועה ביותר מבין כל המדיניות ללא הפקעה (non-preemptive) לפי מדד זמן השהיה הממוצע (average turnaround time).
הוכחה:

נניח שישנם
תהליכים, , עם זמני ריצה . כל התהליכים מגיעים בזמן 0.
במדיניות ללא הפקעה, סדר הרצת התהליכים הוא תמורה
של .
זמן השהיה של התהליך שנמצא במקום ה-
בסדר ההרצה, , הוא זמן סיומו: .
סך כל זמני השהיה הוא
.
נשנה את סדר הסכימה. זמן הריצה של התהליך הראשון,
, נכלל בזמן השהיה של כל התהליכים. זמן הריצה של התהליך השני, , נכלל בזמן השהיה של התהליכים (החל מהשני ואילך). באופן כללי, זמן הריצה של התהליך במקום ה-, , נכלל בזמני השהיה של תהליכים.
לכן, סך זמני השהיה הוא:


.
כדי למקסם את הסכום
(ובכך למקסם את זמן השהיה הממוצע ), עלינו להתאים את המקדמים הגדולים ביותר לזמני הריצה הגדולים ביותר. המקדמים הם סדרה יורדת: . לכן, עלינו לסדר את זמני הריצה, , גם כן בסדר יורד.
מדיניות LJF עושה בדיוק את זה: היא מריצה את התהליכים בסדר יורד של זמני הריצה שלהם. כל מדיניות אחרת תבצע "החלפה" כלשהי בסדר זה, אשר לפי אי-שוויון הסדרות, תקטין את הסכום
.
לפיכך, LJF מניבה את זמן השהיה הממוצע הגרוע ביותר האפשרי.


ב. כן, סטיב צודק. קיימות מדיניות עם הפקעה (preemptive) הגורמות לזמן שהיה ממוצע גרוע יותר מ-LJF.
הסיבה היא שהפקעה מאפשרת "לעכב" באופן מלאכותי את סיומם של תהליכים קצרים, מעבר למה שמדיניות ללא הפקעה יכולה לעשות.

דוגמה:

נניח שני תהליכים המגיעים בזמן 0:


עם זמן ריצה .

עם זמן ריצה .

  • תחת LJF (ללא הפקעה):
רץ ראשון, ואחריו .
זמן השהיה של
הוא .
זמן השהיה של
הוא .
זמן שהיה ממוצע:
.

  • תחת מדיניות עם הפקעה "זדונית":
1. נריץ את (התהליך הארוך) במשך יחידות זמן, כאשר הוא מספר חיובי קטן מאוד.
2. נבצע החלפת הקשר (context switch) ונריץ את
עד סיומו (יחידת זמן 1).
3. נבצע החלפת הקשר חזרה ל-
ונריץ אותו למשך הזמן שנותר.
זמני הסיום יהיו בקירוב:
ו-. זמן השהיה הממוצע ישאף ל-11, שהוא גרוע יותר מ-10.5. לדוגמה, עבור :
  • רץ מ-0 עד .
  • רץ מ- עד . הוא מסיים בזמן . לכן, .
  • רץ מ- עד . הוא מסיים בזמן . לכן, .
זמן שהיה ממוצע: , שהוא גרוע יותר מ-LJF.

ג. נסמן את זמני הריצה השונים, המסודרים בסדר עולה: . כל תהליך עם זמן ריצה מתאים ל- כלשהו, כלומר .
תחת מדיניות SJF, התהליכים רצים בסדר
. זמן השהיה של תהליך (שזמן ריצתו ) הוא סכום זמני הריצה של כל התהליכים שרצו לפניו וזמן הריצה שלו עצמו. לפי הגדרת השאלה, זהו :



תחת מדיניות LJF, התהליכים רצים בסדר ההפוך: . התהליכים שרצים לפני תהליך (שזמן ריצתו ) הם כל התהליכים עם זמן ריצה ארוך משלו, כלומר .
לכן, זמן השהיה של תהליך
תחת LJF, נסמנו , הוא:



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



האיבר מופיע בשני הסכומים. לכן:



מאחר ש- ו-, קיבלנו: .
מכאן, זמן ההשהיה של התהליך ה-
תחת LJF הוא: