+ All Categories
Home > Documents > UNIX Chapter 11

UNIX Chapter 11

Date post: 20-Apr-2023
Category:
Upload: sce
View: 0 times
Download: 0 times
Share this document with a friend
31
מערכות הפעלה תרגול11 ניהול זכרוןShayke Bilu PhD Chapter 11 - Memory Management
Transcript

מערכות הפעלה

זכרוןניהול – 11תרגול

Shayke Bilu PhD Chapter 11 - Memory Management

Chapter 11 - Memory Management Shayke Bilu PhD

?מה בתכנית

ב זכרוןניהול- UNIX

דוגמא לשיטת ה-Best Fit

Chapter 11 - Memory Management Shayke Bilu PhD

UNIX -מנהל זיכרון

מעקב אחרי שטחי זכרון פנויים

הקצאת זיכרון עבור מערכת ההפעלה

הקצעת זכרון עבור האפליקציות

שחרור המחסנית של התהליך שחדל להתקיים

אין מנגנוני הגנה או מנגנוני תמיכה בזיכרון

הוירטואלי

(מערכת הפעלה לימודית)המימוש פשוט ומינימלי

Chapter 11 - Memory Management Shayke Bilu PhD

השטח הדינמי

UNIXהשטח שבשימוש על ידי

סגמנט המידע

maxaddr end

UNIXהשטח בשימוש של UNIX-ששטח

ויתר עליו

שטח גלובלי

שטח שמור שטח דינמי שטח סטטי

Chapter 11 - Memory Management Shayke Bilu PhD

רשימת הפנויים

memlist – רשימת הבלוקים הפנויים

רשימה מקושרת של בלוקים פנויים המוכנים

להקצאה

הראש נמצא בבלוק גלובלי

האיברים הם בלוקים פנויים עצמם

לצורך )ממוינת לפי כתובת ההתחלה של בלוק

(מיזוג

Chapter 11 - Memory Management Shayke Bilu PhD

רשימת הפנויים

נמצאים בכתובות , המוקצים והפנויים, כל השטחים

4ואורכם כפולות של 4שהן כפולות של

שטחים מוקצים לא יופיעו ברשימה

שני שטחים פנויים רצופים לא יופיעו ברשימה

כאשר מבקשים הקצאת שטח זכרון שאינו כפולה

יוקצה השטח באורך של הכפולה , בתים 4של

(9בתים במקום 12) 4הבאה של

הרשימה מאותחלת על ידי בלוק אחד בגודל כל

שטח הזכרון להקצאה

Chapter 11 - Memory Management Shayke Bilu PhD

רשימת הפנויים

memlist

Chapter 11 - Memory Management Shayke Bilu PhD

מדיניות הקצאת זכרון

מדיניותFirst Fit

ההקצאה מתבצעת אם קיים בלוק פנוי בגודל

המתאים

הבלוק המתאים הראשון ברשימה נבחר להקצאה

אינו מממשBest Fit – סריקה של כל הבלוקים

להתאמה טובה יותר

לא בודק האם יש הרעבה של תהליכים אחרים על

ידי תהליך מסויים בשימוש בזכרון

Chapter 11 - Memory Management Shayke Bilu PhD

mem.h –מבני נתונים

Chapter 11 - Memory Management Shayke Bilu PhD

קריאות מערכת הפעלה

הקצאת זכרון

char* getmem(int nbytes)

שחרור זכרון

freemem(char* block, int size)

Chapter 11 - Memory Management Shayke Bilu PhD

getmem() – getmem.c

Chapter 11 - Memory Management Shayke Bilu PhD

getmem() – getmem.c

4גודל הבלוק מחושב ככפולה של

השיגרה עוברת על רשימת הפנויים

אם גודל הבלוק הפנוי גדול או שווה לגודל הנדרש

הבלוק מוקצה

אם גודל הבלוק הפנוי עולה על הנדרש בלוק פנוי

חדש בגודל ההפרש נוצר ברשימת הפנויים

Chapter 11 - Memory Management Shayke Bilu PhD

freemem() – freemem.c

Chapter 11 - Memory Management Shayke Bilu PhD

freemem() – freemem.c

מעדכנים את גודל הבלוק ואת כתובת הבלוק להיות

4כפולה של

בודקים את גבולות הזכרון המותר בסגמנט

מחפשים מיקום מתאים לבלוק המשתחרר

ברשימת הפנויים על פי כתובת הבלוק

שטח שמור שטח דינמי שטח סטטי

block < end block > maxaddr

end maxaddr

Chapter 11 - Memory Management Shayke Bilu PhD

freemem() – freemem.c

Chapter 11 - Memory Management Shayke Bilu PhD

freemem() – freemem.c

בודקים תקינות הבלוק

אם הבלוק לא תקין מחזירים שגיאה

מוסיפים בלוק פנוי לרשימה

מנסים לאחד את הבלוק החדש עם בלוקים פנויים

נוספים אם זה אפשרי

Chapter 11 - Memory Management Shayke Bilu PhD

freemem() – בדיקת תקינות

q p

q->mlen

block < q + q->mlen

top

Chapter 11 - Memory Management Shayke Bilu PhD

freemem() – בדיקת תקינות

q p

block + size > p

Chapter 11 - Memory Management Shayke Bilu PhD

freemem() – בדיקת שילוב

q p

block

top

q->mlen size

q p

block

q->mlen size

Chapter 11 - Memory Management Shayke Bilu PhD

freemem() – בדיקת שילוב

q p

block

q->mlen size

q p

block

q->mlen size

Chapter 11 - Memory Management Shayke Bilu PhD

–שברור פנימי

Internal Fragmentation

מצב בו ישנם שטחי זכרון שהוצאו מרשימת הפנויים

כתוצאת ההקצאה אך בהכרח לא נמצאים בשימוש

ב-XINU לכן התהליך . 4כל הקצאה היא כפולה של

בתים אכן יקבל מצביע ויוכל 9המבקש הקצאה של

בתים מהמקום שהוחזר לו 9-להשתמש ב

הבתים 3-ו, 12למעשה ההקצאה היתה בגודל של

שהוקצו מעבר לדרישה אינם פנויים לשימוש

Chapter 11 - Memory Management Shayke Bilu PhD

דוגמה

/* 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בפועל היו

Chapter 11 - Memory Management Shayke Bilu PhD

–שברור פנימי

Internal Fragmentation

אלא גם XINU-בעית שברור קיימת לא רק ב

!!!במערכות הפעלה אמיתיות

Chapter 11 - Memory Management Shayke Bilu PhD

דוגמה

שנה את מדיניות הקצאת הזיכרון מ-First Fit ל-

Best Fit

שנה אתgetmem() כך שתתמוך במדיניות

החדשה

בדוק את המימוש על ידי סדרת פעולות הבאה:

בתים לתוך מצביע 15000הקצאה שלp

בתים עבור מצביע 4000שחרור שלp

בתים עבור מצביע 2000שחרור שלp+10000

בתים לתוך מצביע 1500הקצאה שלq

Chapter 11 - Memory Management Shayke Bilu PhD

Best Fit – getmem.c

Chapter 11 - Memory Management Shayke Bilu PhD

Best Fit – getmem.c

Chapter 11 - Memory Management Shayke Bilu PhD

Best Fit – getmem.c

עוברים על כל האברים ברשימת הפנויים

אם מצאנו בלוק שגודלו שווה לגודל הבלוק הנדרש

לא ממשיכים לסרוק עד סוף הרשימה ועוברים

להקצאה מיד

אם מצאנו בלוק בגודל שמתאים טוב יותר לגודל

best fit-הבלוק הנדרש מעדכנים את נתוני ה

(best, best_size )עם נתוני הבלוק שמצאנו

Chapter 11 - Memory Management Shayke Bilu PhD

Best Fit – getmem.c

Chapter 11 - Memory Management Shayke Bilu PhD

Best Fit – getmem.c

מבצעים הקצאה של בלוק חדש ועדכון של בלוק

פנוי

אין שינוי מהותי בחלק קוד זה

בודקים את הממימוש בעזרת תכנת בדיקה

memtest.c

Chapter 11 - Memory Management Shayke Bilu PhD

Best Fit – memtest.c

Chapter 11 - Memory Management Shayke Bilu PhD

Best Fit – memtest.c


Recommended