310 likes | 508 Views
מערכות הפעלה. תרגול 7 – ניהול זכרון. מה בתכנית?. ניהול זכרון ב- XINU דוגמא לשיטת ה- Best Fit. מנהל זיכרון - XINU. מעקב אחרי שטחי זכרון פנויים הקצאת זיכרון עבור מערכת ההפעלה הקצעת זכרון עבור האפליקציות שחרור המחסנית של התהליך שחדל להתקיים
E N D
מערכות הפעלה תרגול 7 – ניהול זכרון
מה בתכנית? • ניהול זכרון ב-XINU • דוגמא לשיטת ה-Best Fit מערכות הפעלה - תרגול 7
מנהל זיכרון - XINU • מעקב אחרי שטחי זכרון פנויים • הקצאת זיכרון עבור מערכת ההפעלה • הקצעת זכרון עבור האפליקציות • שחרור המחסנית של התהליך שחדל להתקיים • אין מנגנוני הגנה או מנגנוני תמיכה בזיכרון הוירטואלי • המימוש פשוט ומינימלי (מערכת הפעלה לימודית) מערכות הפעלה - תרגול 7
השטח הדינמי השטח שבשימוש על ידי XINU סגמנט המידע שטח סטטי שטח דינמי שטח שמור השטח בשימוש של XINU שטח גלובלי שטח ש-XINU ויתר עליו end maxaddr מערכות הפעלה - תרגול 7
רשימת הפנויים • memlist– רשימת הבלוקים הפנויים • רשימה מקושרת של בלוקים פנויים המוכנים להקצאה • הראש נמצא בבלוק גלובלי • האיברים הם בלוקים פנויים עצמם • ממוינת לפי כתובת ההתחלה של בלוק (לצורך מיזוג) מערכות הפעלה - תרגול 7
רשימת הפנויים • כל השטחים, המוקצים והפנויים, נמצאים בכתובות שהן כפולות של 4 ואורכם כפולות של 4 • שטחים מוקצים לא יופיעו ברשימה • שני שטחים פנויים רצופים לא יופיעו ברשימה • כאשר מבקשים הקצאת שטח זכרון שאינו כפולה של 4 בתים, יוקצה השטח באורך של הכפולה הבאה של 4 (12 בתים במקום 9) • הרשימה מאותחלת על ידי בלוק אחד בגודל כל שטח הזכרון להקצאה מערכות הפעלה - תרגול 7
רשימת הפנויים memlist מערכות הפעלה - תרגול 7
מדיניות הקצאת זכרון • מדיניות First Fit • ההקצאה מתבצעת אם קיים בלוק פנוי בגודל המתאים • הבלוק המתאים הראשון ברשימה נבחר להקצאה • אינו מממש Best Fit – סריקה של כל הבלוקים להתאמה טובה יותר • לא בודק האם יש הרעבה של תהליכים אחרים על ידי תהליך מסויים בשימוש בזכרון מערכות הפעלה - תרגול 7
מבני נתונים – mem.h מערכות הפעלה - תרגול 7
קריאות מערכת הפעלה • הקצאת זכרון char* getmem(int nbytes) • שחרור זכרון freemem(char* block, int size) מערכות הפעלה - תרגול 7
getmem() – getmem.c מערכות הפעלה - תרגול 7
getmem() – getmem.c • גודל הבלוק מחושב ככפולה של 4 • השיגרה עוברת על רשימת הפנויים • אם גודל הבלוק הפנוי גדול או שווה לגודל הנדרש הבלוק מוקצה • אם גודל הבלוק הפנוי עולה על הנדרש בלוק פנוי חדש בגודל ההפרש נוצר ברשימת הפנויים מערכות הפעלה - תרגול 7
freemem() –freemem.c מערכות הפעלה - תרגול 7
freemem() – freemem.c • מעדכנים את גודל הבלוק ואת כתובת הבלוק להיות כפולה של 4 • בודקים את גבולות הזכרון המותר בסגמנט • מחפשים מיקום מתאים לבלוק המשתחרר ברשימת הפנויים על פי כתובת הבלוק maxaddr end שטח סטטי שטח דינמי שטח שמור block > maxaddr block < end מערכות הפעלה - תרגול 7
freemem() –freemem.c מערכות הפעלה - תרגול 7
freemem() – freemem.c • בודקים תקינות הבלוק • אם הבלוק לא תקין מחזירים שגיאה • מוסיפים בלוק פנוי לרשימה • מנסים לאחד את הבלוק החדש עם בלוקים פנויים נוספים אם זה אפשרי מערכות הפעלה - תרגול 7
freemem() – בדיקת תקינות q top p q->mlen block < q + q->mlen מערכות הפעלה - תרגול 7
freemem() – בדיקת תקינות q p block + size > p מערכות הפעלה - תרגול 7
freemem() – בדיקת שילוב p q top q->mlen size block p q q->mlen size block מערכות הפעלה - תרגול 7
freemem() – בדיקת שילוב p q size q->mlen block p q q->mlen size block מערכות הפעלה - תרגול 7
שברור פנימי –Internal Fragmentation • מצב בו ישנם שטחי זכרון שהוצאו מרשימת הפנויים כתוצאת ההקצאה אך בהכרח לא נמצאים בשימוש • ב-XINU כל הקצאה היא כפולה של 4. לכן התהליך המבקש הקצאה של 9 בתים אכן יקבל מצביע ויוכל להשתמש ב-9 בתים מהמקום שהוחזר לו • למעשה ההקצאה היתה בגודל של 12, ו-3 הבתים שהוקצו מעבר לדרישה אינם פנויים לשימוש מערכות הפעלה - תרגול 7
דוגמה /* 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); • לאחר 333 הקצאות הלולאה תפסק (הוקצו רק 3300 בתים מתוך 4000 בתים פנויים) • בפועל היו 333 הקצאות של 12 (4000/12 = 333) מערכות הפעלה - תרגול 7
שברור פנימי –Internal Fragmentation בעית שברור קיימת לא רק ב-XINU אלא גם במערכות הפעלה אמיתיות!!! מערכות הפעלה - תרגול 7
דוגמה • שנה את מדיניות הקצאת הזיכרון מ-First Fit ל-Best Fit • שנה את getmem() כך שתתמוך במדיניות החדשה • בדוק את המימוש על ידי סדרת פעולות הבאה: • הקצאה של 15000 בתים לתוך מצביע p • שחרור של 4000 בתים עבור מצביע p • שחרור של 2000 בתים עבור מצביע p+10000 • הקצאה של 1500 בתים לתוך מצביע q מערכות הפעלה - תרגול 7
Best Fit – getmem.c מערכות הפעלה - תרגול 7
Best Fit – getmem.c מערכות הפעלה - תרגול 7
Best Fit – getmem.c • עוברים על כל האברים ברשימת הפנויים • אם מצאנו בלוק שגודלו שווה לגודל הבלוק הנדרש לא ממשיכים לסרוק עד סוף הרשימה ועוברים להקצאה מיד • אם מצאנו בלוק בגודל שמתאים טוב יותר לגודל הבלוק הנדרש מעדכנים את נתוני ה-best fit (best, best_size) עם נתוני הבלוק שמצאנו מערכות הפעלה - תרגול 7
Best Fit – getmem.c מערכות הפעלה - תרגול 7
Best Fit – getmem.c • מבצעים הקצאה של בלוק חדש ועדכון של בלוק פנוי • אין שינוי מהותי בחלק קוד זה • בודקים את הממימוש בעזרת תכנת בדיקה memtest.c מערכות הפעלה - תרגול 7
Best Fit – memtest.c מערכות הפעלה - תרגול 7
Best Fit – memtest.c מערכות הפעלה - תרגול 7