1 / 31

מערכות הפעלה

מערכות הפעלה. תרגול 7 – ניהול זכרון. מה בתכנית?. ניהול זכרון ב- XINU דוגמא לשיטת ה- Best Fit. מנהל זיכרון - XINU. מעקב אחרי שטחי זכרון פנויים הקצאת זיכרון עבור מערכת ההפעלה הקצעת זכרון עבור האפליקציות שחרור המחסנית של התהליך שחדל להתקיים

elsu
Download Presentation

מערכות הפעלה

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. מערכות הפעלה תרגול 7 – ניהול זכרון

  2. מה בתכנית? • ניהול זכרון ב-XINU • דוגמא לשיטת ה-Best Fit מערכות הפעלה - תרגול 7

  3. מנהל זיכרון - XINU • מעקב אחרי שטחי זכרון פנויים • הקצאת זיכרון עבור מערכת ההפעלה • הקצעת זכרון עבור האפליקציות • שחרור המחסנית של התהליך שחדל להתקיים • אין מנגנוני הגנה או מנגנוני תמיכה בזיכרון הוירטואלי • המימוש פשוט ומינימלי (מערכת הפעלה לימודית) מערכות הפעלה - תרגול 7

  4. השטח הדינמי השטח שבשימוש על ידי XINU סגמנט המידע שטח סטטי שטח דינמי שטח שמור השטח בשימוש של XINU שטח גלובלי שטח ש-XINU ויתר עליו end maxaddr מערכות הפעלה - תרגול 7

  5. רשימת הפנויים • memlist– רשימת הבלוקים הפנויים • רשימה מקושרת של בלוקים פנויים המוכנים להקצאה • הראש נמצא בבלוק גלובלי • האיברים הם בלוקים פנויים עצמם • ממוינת לפי כתובת ההתחלה של בלוק (לצורך מיזוג) מערכות הפעלה - תרגול 7

  6. רשימת הפנויים • כל השטחים, המוקצים והפנויים, נמצאים בכתובות שהן כפולות של 4 ואורכם כפולות של 4 • שטחים מוקצים לא יופיעו ברשימה • שני שטחים פנויים רצופים לא יופיעו ברשימה • כאשר מבקשים הקצאת שטח זכרון שאינו כפולה של 4 בתים, יוקצה השטח באורך של הכפולה הבאה של 4 (12 בתים במקום 9) • הרשימה מאותחלת על ידי בלוק אחד בגודל כל שטח הזכרון להקצאה מערכות הפעלה - תרגול 7

  7. רשימת הפנויים memlist מערכות הפעלה - תרגול 7

  8. מדיניות הקצאת זכרון • מדיניות First Fit • ההקצאה מתבצעת אם קיים בלוק פנוי בגודל המתאים • הבלוק המתאים הראשון ברשימה נבחר להקצאה • אינו מממש Best Fit – סריקה של כל הבלוקים להתאמה טובה יותר • לא בודק האם יש הרעבה של תהליכים אחרים על ידי תהליך מסויים בשימוש בזכרון מערכות הפעלה - תרגול 7

  9. מבני נתונים – mem.h מערכות הפעלה - תרגול 7

  10. קריאות מערכת הפעלה • הקצאת זכרון char* getmem(int nbytes) • שחרור זכרון freemem(char* block, int size) מערכות הפעלה - תרגול 7

  11. getmem() – getmem.c מערכות הפעלה - תרגול 7

  12. getmem() – getmem.c • גודל הבלוק מחושב ככפולה של 4 • השיגרה עוברת על רשימת הפנויים • אם גודל הבלוק הפנוי גדול או שווה לגודל הנדרש הבלוק מוקצה • אם גודל הבלוק הפנוי עולה על הנדרש בלוק פנוי חדש בגודל ההפרש נוצר ברשימת הפנויים מערכות הפעלה - תרגול 7

  13. freemem() –freemem.c מערכות הפעלה - תרגול 7

  14. freemem() – freemem.c • מעדכנים את גודל הבלוק ואת כתובת הבלוק להיות כפולה של 4 • בודקים את גבולות הזכרון המותר בסגמנט • מחפשים מיקום מתאים לבלוק המשתחרר ברשימת הפנויים על פי כתובת הבלוק maxaddr end שטח סטטי שטח דינמי שטח שמור block > maxaddr block < end מערכות הפעלה - תרגול 7

  15. freemem() –freemem.c מערכות הפעלה - תרגול 7

  16. freemem() – freemem.c • בודקים תקינות הבלוק • אם הבלוק לא תקין מחזירים שגיאה • מוסיפים בלוק פנוי לרשימה • מנסים לאחד את הבלוק החדש עם בלוקים פנויים נוספים אם זה אפשרי מערכות הפעלה - תרגול 7

  17. freemem() – בדיקת תקינות q top p q->mlen block < q + q->mlen מערכות הפעלה - תרגול 7

  18. freemem() – בדיקת תקינות q p block + size > p מערכות הפעלה - תרגול 7

  19. freemem() – בדיקת שילוב p q top q->mlen size block p q q->mlen size block מערכות הפעלה - תרגול 7

  20. freemem() – בדיקת שילוב p q size q->mlen block p q q->mlen size block מערכות הפעלה - תרגול 7

  21. שברור פנימי –Internal Fragmentation • מצב בו ישנם שטחי זכרון שהוצאו מרשימת הפנויים כתוצאת ההקצאה אך בהכרח לא נמצאים בשימוש • ב-XINU כל הקצאה היא כפולה של 4. לכן התהליך המבקש הקצאה של 9 בתים אכן יקבל מצביע ויוכל להשתמש ב-9 בתים מהמקום שהוחזר לו • למעשה ההקצאה היתה בגודל של 12, ו-3 הבתים שהוקצו מעבר לדרישה אינם פנויים לשימוש מערכות הפעלה - תרגול 7

  22. דוגמה /* 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

  23. שברור פנימי –Internal Fragmentation בעית שברור קיימת לא רק ב-XINU אלא גם במערכות הפעלה אמיתיות!!! מערכות הפעלה - תרגול 7

  24. דוגמה • שנה את מדיניות הקצאת הזיכרון מ-First Fit ל-Best Fit • שנה את getmem() כך שתתמוך במדיניות החדשה • בדוק את המימוש על ידי סדרת פעולות הבאה: • הקצאה של 15000 בתים לתוך מצביע p • שחרור של 4000 בתים עבור מצביע p • שחרור של 2000 בתים עבור מצביע p+10000 • הקצאה של 1500 בתים לתוך מצביע q מערכות הפעלה - תרגול 7

  25. Best Fit – getmem.c מערכות הפעלה - תרגול 7

  26. Best Fit – getmem.c מערכות הפעלה - תרגול 7

  27. Best Fit – getmem.c • עוברים על כל האברים ברשימת הפנויים • אם מצאנו בלוק שגודלו שווה לגודל הבלוק הנדרש לא ממשיכים לסרוק עד סוף הרשימה ועוברים להקצאה מיד • אם מצאנו בלוק בגודל שמתאים טוב יותר לגודל הבלוק הנדרש מעדכנים את נתוני ה-best fit (best, best_size) עם נתוני הבלוק שמצאנו מערכות הפעלה - תרגול 7

  28. Best Fit – getmem.c מערכות הפעלה - תרגול 7

  29. Best Fit – getmem.c • מבצעים הקצאה של בלוק חדש ועדכון של בלוק פנוי • אין שינוי מהותי בחלק קוד זה • בודקים את הממימוש בעזרת תכנת בדיקה memtest.c מערכות הפעלה - תרגול 7

  30. Best Fit – memtest.c מערכות הפעלה - תרגול 7

  31. Best Fit – memtest.c מערכות הפעלה - תרגול 7

More Related