מערכות הפעלה
תרגול – 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 2025