מערכות הפעלה
Download
Report
Transcript מערכות הפעלה
מערכות הפעלה
תרגול - 6ניהול זיכרון
מה בתכנית?
ניהול זכרון בXINU-
דוגמא לשיטת הBest Fit-
2
מערכות הפעלה -תרגול 6
מנהל זיכרון XINU -
מעקב אחרי שטחי זכרון פנויים
הקצאת זיכרון עבור מערכת ההפעלה
הקצעת זכרון עבור האפליקציות
שחרור המחסנית של התהליך שחדל להתקיים
אין מנגנוני הגנה או מנגנוני תמיכה בזיכרון
הוירטואלי
המימוש פשוט ומינימלי (מערכת הפעלה לימודית)
3
מערכות הפעלה -תרגול 6
השטח הדינמי
השטח שבשימוש על ידי XINU
סגמנט המידע
שטח שמור
שטח ש-
XINUויתר maxaddr
עליו
4
שטח דינמי
השטח בשימוש של XINU
מערכות הפעלה -תרגול 6
שטח סטטי
שטח גלובלי
end
רשימת הפנויים
– memlist רשימת הבלוקים הפנויים
רשימה מקושרת של בלוקים פנויים המוכנים
להקצאה
הראש נמצא בבלוק גלובלי
האיברים הם בלוקים פנויים עצמם
ממוינת לפי כתובת ההתחלה של בלוק (לצורך
מיזוג)
5
מערכות הפעלה -תרגול 6
רשימת הפנויים
כל השטחים ,המוקצים והפנויים ,נמצאים בכתובות
שהן כפולות של 4ואורכם כפולות של 4
שטחים מוקצים לא יופיעו ברשימה
שני שטחים פנויים רצופים לא יופיעו ברשימה
כאשר מבקשים הקצאת שטח זכרון שאינו כפולה
של 4בתים ,יוקצה השטח באורך של הכפולה
הבאה של 12( 4בתים במקום )9
הרשימה מאותחלת על ידי בלוק אחד בגודל כל
שטח הזכרון להקצאה
6
מערכות הפעלה -תרגול 6
רשימת הפנויים
memlist
7
מערכות הפעלה -תרגול 6
מדיניות הקצאת זכרון
מדיניות First Fit
ההקצאה מתבצעת אם קיים בלוק פנוי בגודל
המתאים
הבלוק המתאים הראשון ברשימה נבחר להקצאה
אינו מממש – Best Fitסריקה של כל הבלוקים
להתאמה טובה יותר
לא בודק האם יש הרעבה של תהליכים אחרים על
ידי תהליך מסויים בשימוש בזכרון
8
מערכות הפעלה -תרגול 6
מבני נתונים – mem.h
9
מערכות הפעלה -תרגול 6
קריאות מערכת הפעלה
הקצאת זכרון
)char* getmem(int nbytes
שחרור זכרון
)freemem(char* block, int size
10
מערכות הפעלה -תרגול 6
)(getmem.c – getmem
11
מערכות הפעלה -תרגול 6
)(getmem.c – getmem
גודל הבלוק מחושב ככפולה של 4
השיגרה עוברת על רשימת הפנויים
אם גודל הבלוק הפנוי גדול או שווה לגודל הנדרש
הבלוק מוקצה
אם גודל הבלוק הפנוי עולה על הנדרש בלוק פנוי
חדש בגודל ההפרש נוצר ברשימת הפנויים
12
מערכות הפעלה -תרגול 6
)(freemem.c – freemem
13
מערכות הפעלה -תרגול 6
)(freemem.c – freemem
מעדכנים את גודל הבלוק ואת כתובת הבלוק להיות
כפולה של 4
בודקים את גבולות הזכרון המותר בסגמנט
maxaddr
שטח שמור
שטח דינמי
block > maxaddr
end
שטח סטטי
block < end
מחפשים מיקום מתאים לבלוק המשתחרר
ברשימת הפנויים על פי כתובת הבלוק
14
מערכות הפעלה -תרגול 6
)(freemem.c – freemem
15
מערכות הפעלה -תרגול 6
)(freemem.c – freemem
בודקים תקינות הבלוק
אם הבלוק לא תקין מחזירים שגיאה
מוסיפים בלוק פנוי לרשימה
מנסים לאחד את הבלוק החדש עם בלוקים פנויים
נוספים אם זה אפשרי
16
מערכות הפעלה -תרגול 6
– בדיקת תקינותfreemem()
q
top
p
q->mlen
block < q + q->mlen
6 תרגול- מערכות הפעלה
17
)( – freememבדיקת תקינות
p
block + size > p
18
מערכות הפעלה -תרגול 6
q
– בדיקת שילובfreemem()
q
p
top
q->mlen
size
block
p
q
q->mlen
size
block
6 תרגול- מערכות הפעלה
19
– בדיקת שילובfreemem()
p
q
size
q->mlen
block
p
q
q->mlen
size
block
6 תרגול- מערכות הפעלה
20
שברור פנימי –
Internal Fragmentation
21
מצב בו ישנם שטחי זכרון שהוצאו מרשימת הפנויים
כתוצאת ההקצאה אך בהכרח לא נמצאים בשימוש
ב XINU-כל הקצאה היא כפולה של .4לכן התהליך
המבקש הקצאה של 9בתים אכן יקבל מצביע ויוכל
להשתמש ב 9-בתים מהמקום שהוחזר לו
למעשה ההקצאה היתה בגודל של ,12ו 3-הבתים
שהוקצו מעבר לדרישה אינם פנויים לשימוש
מערכות הפעלה -תרגול 6
דוגמה
/* 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 בפועל היו
6 תרגול- מערכות הפעלה
22
שברור פנימי –
Internal Fragmentation
בעית שברור קיימת לא רק ב XINU-אלא גם
במערכות הפעלה אמיתיות!!!
23
מערכות הפעלה -תרגול 6
דוגמה
שנה את מדיניות הקצאת הזיכרון מ First Fit-ל-
Best Fit
שנה את )( getmemכך שתתמוך במדיניות
החדשה
בדוק את המימוש על ידי סדרת פעולות הבאה:
הקצאה של 15000בתים לתוך מצביע p
שחרור של 4000בתים עבור מצביע p
שחרור של 2000בתים עבור מצביע p+10000
הקצאה של 1500בתים לתוך מצביע q
24
מערכות הפעלה -תרגול 6
Best Fit – getmem.c
25
מערכות הפעלה -תרגול 6
Best Fit – getmem.c
26
מערכות הפעלה -תרגול 6
Best Fit – getmem.c
עוברים על כל האברים ברשימת הפנויים
אם מצאנו בלוק שגודלו שווה לגודל הבלוק הנדרש
לא ממשיכים לסרוק עד סוף הרשימה ועוברים
להקצאה מיד
אם מצאנו בלוק בגודל שמתאים טוב יותר לגודל
הבלוק הנדרש מעדכנים את נתוני הbest fit-
( )best, best_sizeעם נתוני הבלוק שמצאנו
27
מערכות הפעלה -תרגול 6
Best Fit – getmem.c
28
מערכות הפעלה -תרגול 6
Best Fit – getmem.c
מבצעים הקצאה של בלוק חדש ועדכון של בלוק
פנוי
אין שינוי מהותי בחלק קוד זה
בודקים את הממימוש בעזרת תכנת בדיקה
memtest.c
29
מערכות הפעלה -תרגול 6
Best Fit – memtest.c
30
מערכות הפעלה -תרגול 6
Best Fit – memtest.c
31
מערכות הפעלה -תרגול 6
אפריל 15