מערכות הפעלה תרגול – 7ניהול זכרון מה בתכנית? ניהול זכרון בXINU- דוגמא לשיטת הBest Fit- 2 מערכות הפעלה -תרגול 7 ינואר 17 מנהל זיכרון XINU - מעקב אחרי שטחי זכרון פנויים הקצאת זיכרון עבור מערכת ההפעלה הקצעת זכרון עבור האפליקציות שחרור המחסנית של התהליך שחדל להתקיים אין מנגנוני הגנה או מנגנוני תמיכה בזיכרון הוירטואלי המימוש פשוט ומינימלי (מערכת הפעלה לימודית) 3 מערכות הפעלה -תרגול 7 ינואר 17 השטח הדינמי השטח שבשימוש על ידי XINU סגמנט המידע שטח שמור שטח ש- XINUויתר maxaddr עליו 4 שטח דינמי השטח בשימוש של XINU מערכות הפעלה -תרגול 7 שטח סטטי שטח גלובלי end ינואר 17 רשימת הפנויים – memlist רשימת הבלוקים הפנויים רשימה מקושרת של בלוקים פנויים המוכנים להקצאה הראש נמצא בבלוק גלובלי האיברים הם בלוקים פנויים עצמם ממוינת לפי כתובת ההתחלה של בלוק (לצורך מיזוג) 5 מערכות הפעלה -תרגול 7 ינואר 17 רשימת הפנויים כל השטחים ,המוקצים והפנויים ,נמצאים בכתובות שהן כפולות של 4ואורכם כפולות של 4 שטחים מוקצים לא יופיעו ברשימה שני שטחים פנויים רצופים לא יופיעו ברשימה כאשר מבקשים הקצאת שטח זכרון שאינו כפולה של 4בתים ,יוקצה השטח באורך של הכפולה הבאה של 12( 4בתים במקום )9 הרשימה מאותחלת על ידי בלוק אחד בגודל כל שטח הזכרון להקצאה 6 מערכות הפעלה -תרגול 7 ינואר 17 רשימת הפנויים memlist 7 מערכות הפעלה -תרגול 7 ינואר 17 מדיניות הקצאת זכרון מדיניות First Fit ההקצאה מתבצעת אם קיים בלוק פנוי בגודל המתאים הבלוק המתאים הראשון ברשימה נבחר להקצאה אינו מממש – Best Fitסריקה של כל הבלוקים להתאמה טובה יותר לא בודק האם יש הרעבה של תהליכים אחרים על ידי תהליך מסויים בשימוש בזכרון 8 מערכות הפעלה -תרגול 7 ינואר 17 מבני נתונים – mem.h 9 מערכות הפעלה -תרגול 7 ינואר 17 קריאות מערכת הפעלה הקצאת זכרון )char* getmem(int nbytes שחרור זכרון )freemem(char* block, int size 10 מערכות הפעלה -תרגול 7 ינואר 17 )(getmem.c – getmem 11 מערכות הפעלה -תרגול 7 ינואר 17 )(getmem.c – getmem גודל הבלוק מחושב ככפולה של 4 השיגרה עוברת על רשימת הפנויים אם גודל הבלוק הפנוי גדול או שווה לגודל הנדרש הבלוק מוקצה אם גודל הבלוק הפנוי עולה על הנדרש בלוק פנוי חדש בגודל ההפרש נוצר ברשימת הפנויים 12 מערכות הפעלה -תרגול 7 ינואר 17 )(freemem.c – freemem 13 מערכות הפעלה -תרגול 7 ינואר 17 )(freemem.c – freemem מעדכנים את גודל הבלוק ואת כתובת הבלוק להיות כפולה של 4 בודקים את גבולות הזכרון המותר בסגמנט maxaddr שטח שמור שטח דינמי block > maxaddr end שטח סטטי block < end מחפשים מיקום מתאים לבלוק המשתחרר ברשימת הפנויים על פי כתובת הבלוק 14 מערכות הפעלה -תרגול 7 ינואר 17 )(freemem.c – freemem 15 מערכות הפעלה -תרגול 7 ינואר 17 )(freemem.c – freemem בודקים תקינות הבלוק אם הבלוק לא תקין מחזירים שגיאה מוסיפים בלוק פנוי לרשימה מנסים לאחד את הבלוק החדש עם בלוקים פנויים נוספים אם זה אפשרי 16 מערכות הפעלה -תרגול 7 ינואר 17 )( – freememבדיקת תקינות p top q q->mlen block < q + q->mlen 17 מערכות הפעלה -תרגול 7 ינואר 17 )( – freememבדיקת תקינות p q block + size > p 18 מערכות הפעלה -תרגול 7 ינואר 17 – בדיקת שילובfreemem() q p top q->mlen size block p q q->mlen size block 17 ינואר 7 תרגול- מערכות הפעלה 19 – בדיקת שילובfreemem() p q size q->mlen block p q q->mlen 17 ינואר size block 7 תרגול- מערכות הפעלה 20 שברור פנימי – Internal Fragmentation 21 מצב בו ישנם שטחי זכרון שהוצאו מרשימת הפנויים כתוצאת ההקצאה אך בהכרח לא נמצאים בשימוש ב XINU-כל הקצאה היא כפולה של .4לכן התהליך המבקש הקצאה של 9בתים אכן יקבל מצביע ויוכל להשתמש ב 9-בתים מהמקום שהוחזר לו למעשה ההקצאה היתה בגודל של ,12ו 3-הבתים שהוקצו מעבר לדרישה אינם פנויים לשימוש מערכות הפעלה -תרגול 7 ינואר 17 דוגמה /* assume free memory is 4000 bytes */ for (i=0; i<400; i++) { arr[i] = getmem(10); if (arr[i] == NULL) break; } printf(“Only %d bytes out of 4000 allocated”, 10*i); בתים מתוך3300 הקצאות הלולאה תפסק (הוקצו רק333 לאחר ) בתים פנויים4000 )333 = 4000/12( 12 הקצאות של333 בפועל היו 17 ינואר 7 תרגול- מערכות הפעלה 22 שברור פנימי – Internal Fragmentation בעית שברור קיימת לא רק ב XINU-אלא גם במערכות הפעלה אמיתיות!!! 23 מערכות הפעלה -תרגול 7 ינואר 17 דוגמה שנה את מדיניות הקצאת הזיכרון מ First Fit-ל- Best Fit שנה את )( getmemכך שתתמוך במדיניות החדשה בדוק את המימוש על ידי סדרת פעולות הבאה: הקצאה של 15000בתים לתוך מצביע p שחרור של 4000בתים עבור מצביע p שחרור של 2000בתים עבור מצביע p+10000 הקצאה של 1500בתים לתוך מצביע q 24 מערכות הפעלה -תרגול 7 ינואר 17 Best Fit – getmem.c 25 מערכות הפעלה -תרגול 7 ינואר 17 Best Fit – getmem.c 26 מערכות הפעלה -תרגול 7 ינואר 17 Best Fit – getmem.c עוברים על כל האברים ברשימת הפנויים אם מצאנו בלוק שגודלו שווה לגודל הבלוק הנדרש לא ממשיכים לסרוק עד סוף הרשימה ועוברים להקצאה מיד אם מצאנו בלוק בגודל שמתאים טוב יותר לגודל הבלוק הנדרש מעדכנים את נתוני הbest fit- ( )best, best_sizeעם נתוני הבלוק שמצאנו 27 מערכות הפעלה -תרגול 7 ינואר 17 Best Fit – getmem.c 28 מערכות הפעלה -תרגול 7 ינואר 17 Best Fit – getmem.c מבצעים הקצאה של בלוק חדש ועדכון של בלוק פנוי אין שינוי מהותי בחלק קוד זה בודקים את הממימוש בעזרת תכנת בדיקה memtest.c 29 מערכות הפעלה -תרגול 7 ינואר 17 Best Fit – memtest.c 30 מערכות הפעלה -תרגול 7 ינואר 17 Best Fit – memtest.c 31 מערכות הפעלה -תרגול 7 ינואר 17
© Copyright 2024