You are on page 1of 3

‫‪14.05.

2012‬‬
‫מערכות הפעלה ‪ -‬הרצאה ‪14‬‬

‫מצגת ‪Memory management, part 2 - 9‬‬

‫‪Page Replacement Algorithms‬‬


‫אם יש לנו מספיק זיכרון לכל התוכניות שרצות ואין אף פעם ‪ page fault‬אז לא צריך מנגנון החלפה‬
‫‪ -‬אבל זה לא קורה אף פעם…‪.‬‬
‫ההחלטה הזו היא אילוץ ‪ -‬כל הזכרון מלא ולמרות שכל הזכרון מלא‪ ,‬הדף שאני רוצה לא נמצא‪,‬‬
‫עכשיו צריך להחליט את מי מחליפים במקומו‪.‬‬
‫‪:Page fault forces choice -‬‬
‫החלטה את מי מחליפים במקרה שהזכרון מלא‪.‬‬
‫‪Modified page must first be saved -‬‬
‫ניהול דפים שהשתנו‪ .‬הבדלים בין דפים על הדיסק לבין אלו שבזיכרון‪.‬‬
‫‪Better not to choose an often used page -‬‬
‫אלה שהשתמשנו בהם בד"כ נצטרך אותם שוב‪.‬‬

‫‪Optimal page replacement algorithm‬‬


‫(הצצה לעתיד)‬
‫לא ריאלי ‪ -‬מניח שאנחנו יודעים סדר עתידי לגישה לדפים‪.‬‬
‫‪ -‬מחיקת דפים אליהם ניגש אחרונים בסדר הגישה לדפים‪.‬‬
‫ה‪ MMU‬אחראי לקביעת הבלוק הבא‪.‬‬

‫‪Optimal Vs. FIFO‬‬


‫‪ 7‬במקום ‪,page faults 4‬‬
‫‪ FIFO‬הוא אלגוריתם מאוד פשוט שלא מתחשב בכלום לכן נבדוק אלגוריתמים אחרים‬
‫שמתחשבים בזמני הגישה‪.‬‬

‫‪Page replacement:    NRU - Not Recently Used‬‬


‫מחלקים את הדפים בזיכרון ל ‪ classes 4‬בהתאם לביטים‪.referenced, modified :‬‬
‫הסיבה שדף יכול להמצא במחלקה ‪ B‬היא שפעם בכמה זמן ‪ reference bit‬מתאפס ע"י המערכת‪.‬‬
‫(אלו שדלוקים‪ ,‬בוודאות ניגשו אליהם לאחרונה‪ ,‬השאר אופסו במהלך ריצת המערכת)‬
‫סדר ההחלפה הוא לפי סדר הא"ב‪A,B,C,D :‬‬

‫‪Referenced=false‬‬ ‫‪Referenced=true‬‬

‫‪Modified=false‬‬ ‫‪A‬‬ ‫‪C‬‬

‫‪Modified=true‬‬ ‫‪B‬‬ ‫‪D‬‬


‫‪ - A .1‬לא ניגשו אליו‪ ,‬לא עודכן‪.‬‬
‫‪ - B .2‬לא ניגשו אליו‪ ,‬עודכן‪.‬‬
‫‪ - C .3‬ניגשו אליו‪ ,‬עודכן‪.‬‬
‫‪ - D .4‬ניגשו אליו‪ ,‬עודכן‪.‬‬

‫‪2nd chance FIFO replacement algorithm‬‬

‫שינוי קטן ל‪ FIFO‬הופך אותו לאחד האלג' הטובים ‪ -‬מוסיפים התייחסות ל ‪.reference bit‬‬
‫‪ .1‬אם הוא כבוי ‪ ,‬מוציאים אותו מביאים חדש (מבצעים החלפה)‪.‬‬
‫‪ .2‬אם הוא דלוק‪ ,‬מכבים אותו ומעבירים אותו לסוף התור‪.‬‬
‫‪If page’s referenced bit is on, give it a second chance:‬‬
‫‪Clear bit‬‬
‫‪Move to end of queue‬‬
‫‪Else‬‬
‫‪Remove page‬‬

‫‪LRU - Least Recently Used‬‬


‫‪ .1‬לדף שיש לו הרבה גישות לזכרון‪ ,‬יש סיכוי גבוה שניגש אליו שוב‪.‬‬
‫‪ .2‬מחליפים את הדף שניגשו אליו פחות‪.‬‬
‫‪ .3‬לא קל למימוש‪.‬‬

‫‪LRU    with bit tables‬‬


‫מוציאים את הדף עם הכי מעט אחדות‪.‬‬
‫קודם ממלאים באחדות את השורה ואח"כ אפסים בעמודה‪.‬‬

‫‪?Why is this algorithm correct‬‬

‫* הוכחה באינדוקציה‪( .‬בשקף)‬


‫* ניתן להוכיח על דרך השלילה‪.‬‬

‫ברוב המערכות‪ ,‬לא אפשרי ליישום‪ ,‬נדרש כמות מידע עצומה‪.‬‬

‫‪NFU - Not Frequently UsedApproximating LRU in software‬‬

‫נחזיק ‪ couter‬לכל דף‪ ,‬במקום לעדכן אותו בכל ‪( ref‬כמו ב ‪ ,)LRU‬נעלה אותו בכל טיק שעון‪.‬‬
‫בכל טיק שעון‪ ,‬מאפסים את כל ה‪ ref‬ביט‪.‬‬
‫להחלפה‪ ,‬נבחר את הדף עם ה‪ counter‬הכי נמוך‪.‬‬
‫בניגוד ל‪ ,LRU‬אם ניגשים פעמיים לאותו דף במהלך טיק של השעון‪ NRU ,‬לא סופר אותו‪.‬‬
‫הבעיה‪:‬‬
‫* צריך לבצע נרמול של הספירה מידי פעם (לא קריטי)‬
‫* יש דפים שניגשו אליהם בזמן אתחול המערכת‪ ,‬נניח שניגשו אליהם ‪ 7000‬פעם‪ ,‬ולמרות שאנחנו‬
‫לא הולכים להשתמש בהם הם לא יוחלפו‪ .‬נוצרת לנו בעיה של שכחה‪.‬‬
‫הפתרון ‪ -‬נוסיף‪ ,‬אלמנט של ‪ ,aging‬מתבצע בעזרת רגיסטרים‪.‬‬

‫‪NFU - the “aging” simulation version‬‬


‫* לכל דף‪ ,‬נחזיק רגיסטר‪.‬‬
‫* לפני העדכון נבצע ‪.shift right‬‬
‫‪shift-right    the counter before adding the reference bit‬‬
‫)‪add the reference bit at the left (Most Significant Bit‬‬

‫בדוגמא המועמדים לזריקה בשלב ‪ e‬הם‪:‬‬


‫‪ 3,5‬כי ה ‪ 1‬הראשון שלהם הכי ימני‪.‬‬
‫שובר שוויון‪ - :‬לפי הערך הבינארי‪ ,‬למשל‪.‬‬

‫מידול אלגוריתמים‪:‬‬
‫‪”Characterizing “page replacement‬‬
‫‪ - n‬מספר הדפים הוירטואליים‬
‫‪ - m‬מספר הדפים בזכרון הפיסי‪.‬‬
‫אינסוף ‪ -‬מייצג דפים שנשלם בכל מקרה‪.‬‬

‫אנחנו מנסים למצוא את ‪ m‬האופטימלי לקבלת ‪.page faults‬‬

‫אלגוריתם מחסנית ‪ -‬אלגוריתם שבו אם אני מגדיל את ‪ m‬אז כל הדפים שהיו בזכרון ב‪ m‬יותר‬
‫קטן נמצאים גם בזיכרון ב‪ m‬כיוון שכך הגדלה של הזכרון יכולה רק לעזור לי ולא מתקיימת‬
‫האנומליה של בלדי‪.‬‬
‫‪ FIFO‬הוא לא אלגוריתם מחסנית כי ראינו בדוגמא שהגדלנו את ‪ m‬והביצועים ירדו‪.‬‬
‫לעומת זאת האלגוריתם האופטמלי ו‪ LRU‬הם כן אלגוריתמי מחסנית‪.‬‬

‫‪Distance string: distance of referenced page from top of stack‬‬

‫‪Taking multiprogramming into account‬‬


‫לוקאלי ‪ -‬מחליפים רק זכרון של התהליך‬
‫גלובלי ‪ -‬הבדיקה מתבצעת באופן גלובלי‪.‬‬

‫למה לא לבצע גלובלי?‬


‫בגלל שיש ‪ ,context switch‬למשל ‪ A‬רץ‪ ,‬אז ברור שהדפים של ‪ B‬יתיישנו‪ ,‬אם נחליף אותם‬
‫בדפים של ‪ ,A‬בזמן ‪ ,context switch‬יתבצע ‪ swap‬גדול‪ ,‬שוב נצטרך להביא את כל הדפים של ‪.B‬‬

‫לכן נרצה לשמור לכל אחד על "קבוצת העבודה" שלו‪.‬‬

‫‪Thrashing‬‬
‫אם תהליך צריך ‪ 5‬דפים ויש רק ‪ 2‬אז הוא כל פעם יחליף את הדפים האלו וזה יביא להרבה ‪page‬‬
‫‪.faults‬‬

‫‪Working-Set Model: assumptions‬‬

‫‪ - woking set‬קבוצת הדפים שתהליך פנה אליה בדלתא (זמן) הדפים האחרונים‪.‬‬
‫ככל שמגדילים את הדלתא המתחילה באותה נקודה‪ ,‬קבוצת הדפים גדלה ‪ -‬זה לא נכון לגבי‬
‫נקודות התחלה שונות‪.‬‬
‫החלון צריך להיות מספיק גדול כדי לבטא את הקבוצות שרוצים להחזיק‪ ,‬מספיק קטן כדי לשכוח‬
‫את הישנים‪.‬‬

‫‪Dt = ∑ WS(t) = total size of all working sets in time t‬‬


‫‪If Dt > m => thrashing‬‬
‫‪Policy: if D > m, then suspend one of the processes.‬‬

‫‪The Working Set Page Replacement Algorithm‬‬

You might also like