במדריך זה, אנו הולכים ללמוד מושג חשוב באלגוריתמים של תזמון תהליכי CPU. שם המושג החשוב הוא כל הקודם זוכה. זהו האלגוריתם הבסיסי שעל כל תלמיד ללמוד כדי להבין את כל היסודות של אלגוריתמי תזמון תהליכי CPU.
קודם כל משרת סולל את הדרך להבנה של אלגוריתמים אחרים. לאלגוריתם זה עשויים להיות חסרונות רבים. אבל החסרונות האלה יצרו אלגוריתמים חדשים ויעילים מאוד. לכן, באחריותנו ללמוד על אלגוריתמי תזמון תהליכים של מעבד כל הקודם זוכה.
לאום פיט דיווידסון
קיצורים חשובים
- CPU - - - > יחידת עיבוד מרכזית
- FCFS - - - > כל הקודם זוכה
- AT - - - > זמן הגעה
- BT - - - > זמן פרץ
- WT - - - > זמן המתנה
- TAT - - - > זמן סיבוב
- CT - - - > זמן השלמה
- FIFO - - - > First In First Out
כל הקודם זוכה
קודם כל משרת אלגוריתם תזמון מעבד המכונה בקצרה FCFS הוא האלגוריתם הראשון של אלגוריתם תזמון תהליכי מעבד. באלגוריתם קודם כל מה שאנחנו עושים זה לאפשר לתהליך להתבצע בצורה ליניארית.
זה אומר שכל תהליך שנכנס לתהליך שנכנס ראשון לתור המוכן מבוצע ראשון. זה מראה שהאלגוריתם של 'כל הקודם זוכה' עוקב אחר עיקרון 'הראשון יוצא ראשון' (FIFO).
ניתן להפעיל את אלגוריתם 'קודם כל הקודם זוכה' באופן Pre Emptive ו Non Pre Emptive. לפני, ניכנס לדוגמאות, הבה נבין מהי גישה מקדימה וגישה לא מקדימה בתזמון תהליכי CPU.
גישה מקדימה
במקרה זה של Pre Emptive Process Scheduling, מערכת ההפעלה מקצה את המשאבים לתהליך לפרק זמן קבוע מראש. התהליך עובר ממצב ריצה למצב מוכן או ממצב המתנה למצב מוכן במהלך הקצאת משאבים. החלפה זו מתרחשת מכיוון שה-CPU עשוי להקצות עדיפות לתהליכים אחרים ולהחליף את התהליך הפעיל כעת בתהליך העדיפות הגבוהה יותר.
גישה לא מקדימה
במקרה זה של Non Pre Emptive Process Scheduling, לא ניתן למשוך את המשאב מתהליך לפני שהתהליך סיים לפעול. כאשר תהליך פועל מסתיים ועובר למצב המתנה, משאבים מועברים.
אפקט השיירה ב-'כל הקודם זוכה' (FCFS)
אפקט שיירה היא תופעה המתרחשת באלגוריתם התזמון בשם First Come First Serve (FCFS). אלגוריתם תזמון כל הקודם זוכה מתרחש בצורה לא מונעת.
הדרך הלא מונעת פירושה שאם תהליך או עבודה מתחילים בביצוע, מערכת ההפעלה חייבת להשלים את התהליך או העבודה שלה. עד שהתהליך או העבודה הם אפס, התהליך או העבודה החדשים או הבאים אינם מתחילים בביצועו. ההגדרה של תזמון Non Preemptive Scheduling במונחים של מערכת הפעלה פירושה שיחידת העיבוד המרכזית (CPU) תהיה מוקדשת לחלוטין עד סוף התהליך או העבודה שהתחילו תחילה והתהליך או העבודה החדשים מבוצעים רק לאחר סיום התהליך הישן יותר או עבודה.
ייתכנו כמה מקרים שעלולים לגרום ליחידת העיבוד המרכזית (CPU) להקצות יותר מדי זמן. הסיבה לכך היא שבאלגוריתם תזמון לא מקדימה, התהליכים או העבודות נבחרות בסדר סדרתי. בשל כך, לעבודות או תהליכים קצרים יותר מאחורי התהליכים או העבודות הגדולות יותר לוקח יותר מדי זמן להשלים את ביצוען. בשל כך זמן ההמתנה, זמן הפנייה, זמן ההשלמה גבוה מאוד.
אז כאן, מכיוון שהתהליך הראשון גדול או זמן ההשלמה גבוה מדי, אז אפקט השיירה הזה באלגוריתם כל הקודם זוכה מתרחש.
הבה נניח שלעבודה ארוכה יותר לוקח אינסוף זמן להשלים. לאחר מכן, התהליכים הנותרים צריכים לחכות לאותו זמן אינסופי. בשל אפקט השיירה הזה שנוצר על ידי הג'וב הארוך יותר, הרעב של תהליכי ההמתנה גדל במהירות רבה. זהו החיסרון הגדול ביותר של תזמון תהליכי FCFS CPU.
מאפיינים של תזמון תהליך מעבד FCFS
המאפיינים של תזמון תהליך מעבד FCFS הם:
- היישום פשוט.
- אינו גורם לסיבתיות בזמן השימוש
- הוא נוקט באסטרטגיה לא מקדימה ומונעת.
- הוא מפעיל כל הליך לפי סדר קבלתו.
- זמן הגעה משמש כקריטריון בחירה להליכים.
היתרונות של תזמון תהליכים של FCFS CPU
היתרונות של תזמון תהליך מעבד FCFS הם:
- על מנת להקצות תהליכים, הוא משתמש בתור First In First Out.
- תהליך תזמון המעבד של FCFS הוא פשוט קדימה וקל ליישום.
- במצב של תזמון מנע של FCFS, אין סיכוי לרעב של תהליך.
- מכיוון שאין שיקול של עדיפות התהליך, זהו אלגוריתם שוויוני.
חסרונות של תזמון תהליך מעבד FCFS
החסרונות של תזמון תהליך מעבד FCFS הם:
- לאלגוריתם FCFS תזמון מעבד יש זמן המתנה ארוך
- FCFS CPU תזמון מעדיף את המעבד על פני פעולות קלט או פלט
- ב-FCFS יש סיכוי להתרחשות של אפקט שיירה
- מכיוון ש-FCFS כל כך ישר קדימה, הוא לעתים קרובות לא יעיל במיוחד. תקופות המתנה ממושכות הולכות יד ביד עם זה. כל שאר ההזמנות נותרות ללא שימוש אם ה-CPU עסוק בעיבוד הזמנה אחת שגוזלת זמן.
בעיות באלגוריתם תזמון המעבד הראשון בא ראשון
אורך מחרוזת java
דוגמא
S. No Process ID Process Name Arrival Time Burst Time _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 P 1 A 0 9 2 P 2 B 1 3 3 P 3 C 1 2 4 P 4 D 1 4 5 P 5 E 2 3 6 P 6 F 3 2
גישה לא מקדימה
כעת, הבה נפתור בעיה זו בעזרת אלגוריתם התזמון בשם 'כל הקודם זוכה' בגישה לא מונעת.
תרשים גנט עבור דוגמה 1 לעיל הוא:
החזרת מערך java
Time Around Time = זמן סיום - זמן הגעה
זמן המתנה = זמן סיבוב - זמן פרץ
פתרון לשאלה שלמעלה דוגמה 1
כן לא | מזהה תהליך | זמן הגעה | זמן פרץ | זמן השלמה | זמן סיבוב | זמן המתנה | |
---|---|---|---|---|---|---|---|
1 | P 1 | א | 0 | 9 | 9 | 9 | 0 |
2 | P 2 | ב | 1 | 3 | 12 | אחד עשר | 8 |
3 | P 3 | ג | 1 | 2 | 14 | 13 | אחד עשר |
4 | P 4 | ד | 1 | 4 | 18 | 17 | 13 |
5 | P 5 | ו | 2 | 3 | עשרים ואחת | 19 | 16 |
6 | P 6 | ו | 3 | 2 | 23 | עשרים | 18 |
זמן ההשלמה הממוצע הוא:
CT ממוצע = ( 9 + 12 + 14 + 18 + 21 + 23) / 6
CT ממוצע = 97/6
CT ממוצע = 16.16667
זמן ההמתנה הממוצע הוא:
WT ממוצע = ( 0 + 8 + 11 + 13 + 16 + 18) /6
WT ממוצע = 66/6
WT ממוצע = 11
זמן הפנייה הממוצע הוא:
TAT ממוצע = ( 9 + 11 + 13 + 17 + 19 +20 ) / 6
מיזוג מיון java
TAT ממוצע = 89/6
TAT ממוצע = 14.83334
כך פותרים את ה-FCFS בגישה לא מקדימה.
כעת, הבה נבין כיצד ניתן לפתור אותם בגישה מקדימה
גישה מקדימה
כעת, הבה נפתור בעיה זו בעזרת אלגוריתם התזמון בשם 'כל הקודם זוכה' בגישה מקדימה.
ב-Pre Emptive Approach אנו מחפשים את התהליך הטוב ביותר שזמין
תרשים גנט עבור דוגמה 1 לעיל הוא:
עץ בינארי לעומת עץ חיפוש בינארי
כן לא | מזהה תהליך | זמן הגעה | זמן פרץ | זמן השלמה | זמן סיבוב | זמן המתנה | |
---|---|---|---|---|---|---|---|
1 | P 1 | א | 0 | 9 | 23 | 23 | 14 |
2 | P 2 | ב | 1 | 3 | 8 | 7 | 4 |
3 | P 3 | ג | 1 | 2 | 3 | 2 | 0 |
4 | P 4 | ד | 1 | 4 | חֲמֵשׁ עֶשׂרֵה | 14 | 10 |
5 | P 5 | ו | 2 | 3 | אחד עשר | 9 | 7 |
6 | P 6 | ו | 3 | 2 | 5 | 2 | 0 |
הבא → ← הקודם כדי להיפטר מהבעיה של בזבוז אותות ההתעוררות, דיקסטרה הציע גישה הכוללת אחסון כל קריאות ההשכמה. Dijkstra קובע כי במקום לתת קריאות השכמה ישירות לצרכן, היצרן יכול לאחסן את קריאת ההשכמה במשתנה. כל אחד מהצרכנים יכול לקרוא אותו בכל פעם שהוא צריך לעשות זאת. סמפור הוא המשתנים המאחסנים את כל קריאות ההשכמה המועברות מיצרן לצרכן. זהו משתנה שבו קריאה, שינוי ועדכון מתרחשים באופן אוטומטי במצב ליבה. לא ניתן ליישם את סמפור במצב המשתמש מכיוון שמצב מירוץ עלול להיווצר תמיד כאשר שני תהליכים או יותר מנסים לגשת למשתנה בו זמנית. זה תמיד צריך תמיכה ממערכת ההפעלה כדי להיות מיושם. על פי דרישת המצב, ניתן לחלק את סמפור לשתי קטגוריות.
נדון בכל אחד בפירוט. |