מערכות הפעלה

Preview:

DESCRIPTION

מערכות הפעלה. תרגול 7 – יצירת תהליכים בדומה לנעשה ב- LINUX וניהול זכרון. מה בתכנית?. פונקציות אתחול של תהליך ניהול זיכרון ב- XINU דוגמה לניהול זיכרון - BestFit. יצירת תהליכים. התחול מהרשומה של התהליך החדש (שינויים ב- PROCTAB ). העברת הפרמטרים המיועדים לפונקציה של התהליך החדש. - PowerPoint PPT Presentation

Citation preview

מערכות הפעלה

יצירת תהליכים בדומה לנעשה –7תרגול וניהול זכרוןLINUXב-

7מערכות הפעלה - תרגול 205:13

מה בתכנית?

פונקציות אתחול של תהליך-ניהול זיכרון בXINU - דוגמה לניהול זיכרוןBestFit

יצירת תהליכים

התחול מהרשומה של התהליך החדש )שינויים(.PROCTABב-

העברת הפרמטרים המיועדים לפונקציה שלהתהליך החדש.

.הכנת התהליך החדש לסיום הכנת התהליך לקבלת שליטה ממנגנון

החלפת תהליכים.

7מערכות הפעלה - תרגול 305:13

9מערכות הפעלה - תרגול 405:13

9מערכות הפעלה - תרגול 505:13

args

INITRET

procaddr

<bp>

INITF<si>

<di>SP

BP

INITRET calls to procaddr with args

procaddr calls to ctxsw without parameters

ctxsw stack operationsמתחזה

ctxswל-

9מערכות הפעלה - תרגול 605:13

)(newpidיצירת תהליך חדש –

9מערכות הפעלה - תרגול 705:13

xexecl, xforkדוגמה –

ממשו קריאותxexecl )xexecl, xexecl2( UNIX שמדמות קריאות דומות ב-xforkו-

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

9מערכות הפעלה - תרגול 805:13

UNIX ב-forkקריאת מערכת קריאת המערכתfork)(

pid_t fork();

פעולה: מעתיקה את תהליך האב לתהליך הבןוחוזרת בשני התהליכים

status = fork();

if (status < 0)

// fork() failed – handle error (e.g. message & exit)

if (status == 0)

// son process – do son code

else

// father process – do father code

9מערכות הפעלה - תרגול 905:13

UNIXהרצת תכנית אחרת ב- קריאת המערכתexecl)(

:תחבירint execl(const char *filename, const char * arg, …);

פעולה: טוענת תכנית חדשה לביצוע על-ידי התהליךהקורא דוגמה

main() {execl(“/bin/date”, “date”, NULL);printf(“hello”);

}

9מערכות הפעלה - תרגול 1005:13

xexecl

אין צורך בכניסה חדשה בטבלת התהליכיםלא צריך זיכרון נוסף מבצעיםcreate:על תהליך עצמו

,עדכון פרמטרINITRET והמצביע על הקוד לערכים של תכנית חדשה

עדכון תוכן להחלפת התהליכים- קריאהctxsw

9מערכות הפעלה - תרגול 1105:13

xexecl

9מערכות הפעלה - תרגול 1205:13

- xexecl מצב המחסנית המדמהctxsw

PF

INITRET

PARAM

SP1

INITF

BPעבור

SI, DIעבור

pptr-<pbase

pptr-<pbase+ pptr-<plen

LowAddr

HighAddr

9מערכות הפעלה - תרגול 1305:13

xexecl

9מערכות הפעלה - תרגול 1405:13

xexecl

9מערכות הפעלה - תרגול 1505:13

xexecl

9מערכות הפעלה - תרגול 1605:13

xexecl2

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

התחתית-יתר הפרטים כמו בxexecl

9מערכות הפעלה - תרגול 1705:13

xexec2

9מערכות הפעלה - תרגול 1805:13

xexec2

PF

INITRET

PARAM1

SP

INITF

PARAMn

BPעבור

SI, DIעבור

High Addr

Low Addr

9מערכות הפעלה - תרגול 1905:13

xexecl2

9מערכות הפעלה - תרגול 2005:13

xexec2

9מערכות הפעלה - תרגול 2105:13

xexec2

9מערכות הפעלה - תרגול 2205:13

xexec2

9מערכות הפעלה - תרגול 2305:13

xfork

חיקויXINU לקריאת forkמייצרים תהליך חדש עבור תהליך הבן מעתיקים תוכן המחסנית מתהליך האב אל תהליך

הבןמחשבים מצביע הקוד עבור תהליך הבן-מסמלצים קריאה לctxsw מחזיריםpid לבן0 של תהליך חדש לאב או

9מערכות הפעלה - תרגול 2405:13

retipחישוב כתובת חזרה –

9מערכות הפעלה - תרגול 2505:13

xfork

9מערכות הפעלה - תרגול 2605:13

xfork

הכנתמחסנית

bpעדכון xmainעבור

הרצת תהליך הבן

9מערכות הפעלה - תרגול 2705:13

שאלות שצריך לשאול

האם צריך ליצור תהליך חדש עםpid חדש או מספיק לשנות תהליך קיים?

?האם צריך להקצות מחסנית נוספת?מה המחסנית אמורה להכיל?איך התהליך יחזור מהקריאה האם דרושים משתנים נוספים כדי לבצע את

המשימה?

2מערכות הפעלה - תרגול 2805:13

kill)(kill)pid( מסיימת את פעולתו של תהליך pid בנוסףkillנקראת באופן אוטומטי בסיום קוד התהליך :היא משחררת את

המחסנית של התהליךרשומת התהליך בטבלת התהליכיםהוצאת רשומת התהליך מהתור בו היא נמצאת עדכונים ספציפיים למצב התהליך. למשל, אם תהליך מחכה

1לסמפור : הגדלת המונה ב- במקרה של סיום התהליך הנוכחי – ביצועresched סיום ריצתXINU כשמסתיימים כל התהליכים כולל תהליכי

מערכת ההפעלה

2מערכות הפעלה - תרגול 2905:13

9מערכות הפעלה - תרגול 3005:13

)(userretסיום התהליך –

7מערכות הפעלה - תרגול 3105:13

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

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

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

לימודית(

7מערכות הפעלה - תרגול 3205:13

השטח הדינמי

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

סגמנט המידע

maxaddrend

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

ויתר עליו

שטח גלובלי

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

7מערכות הפעלה - תרגול 3305:13

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

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

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

מיזוג(

7מערכות הפעלה - תרגול 3405:13

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

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

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

בתים, יוקצה השטח באורך של 4כפולה של (9 בתים במקום 12 )4הכפולה הבאה של

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

7מערכות הפעלה - תרגול 3505:13

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

memlist

7מערכות הפעלה - תרגול 3605:13

מדיניות הקצאת זכרון מדיניותFirst Fit ההקצאה מתבצעת אם קיים בלוק פנוי בגודל

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

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

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

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

7מערכות הפעלה - תרגול 3705:13

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

7מערכות הפעלה - תרגול 3805:13

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

הקצאת זכרון

char* getmem)int nbytes(

שחרור זכרון

freemem)char* block, int size(

7מערכות הפעלה - תרגול 3905:13

getmem)( – getmem.c

7מערכות הפעלה - תרגול 4005:13

getmem)( – getmem.c

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

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

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

7מערכות הפעלה - תרגול 4105:13

freemem)( – freemem.c

7מערכות הפעלה - תרגול 4205:13

freemem)( – freemem.c

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

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

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

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

block > end block < maxaddr

end maxaddr

7מערכות הפעלה - תרגול 4305:13

freemem)( – freemem.c

7מערכות הפעלה - תרגול 4405:13

freemem)( – freemem.c

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

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

7מערכות הפעלה - תרגול 4505:13

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

q p

q-<mlen

block > q + q-<mlen

top

7מערכות הפעלה - תרגול 4605:13

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

q p

block + size < p

7מערכות הפעלה - תרגול 4705:13

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

block

top

q-<mlen size

q p

blockq-<mlen size

7מערכות הפעלה - תרגול 4805:13

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

blockq-<mlen size

q p

blockq-<mlen size

7מערכות הפעלה - תרגול 4905:13

שברור פנימי – Internal Fragmentation

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

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

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

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

7מערכות הפעלה - תרגול 5005:13

דוגמה

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

7מערכות הפעלה - תרגול 5105:13

שברור פנימי – Internal Fragmentation

אלא גם XINUבעית שברור קיימת לא רק ב-במערכות הפעלה אמיתיות!!!

7מערכות הפעלה - תרגול 5205:13

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

Best Fitל- שנה אתgetmem)( כך שתתמוך במדיניות

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

בתים לתוך מצביע 15000הקצאה של p בתים עבור מצביע 4000שחרור של p בתים עבור מצביע 2000שחרור של p+10000 בתים לתוך מצביע 1500הקצאה של q

7מערכות הפעלה - תרגול 5305:13

Best Fit – getmem.c

7מערכות הפעלה - תרגול 5405:13

Best Fit – getmem.c

7מערכות הפעלה - תרגול 5505:13

Best Fit – getmem.c

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

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

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

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

7מערכות הפעלה - תרגול 5605:13

Best Fit – getmem.c

7מערכות הפעלה - תרגול 5705:13

Best Fit – getmem.c

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

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

memtest.c

7מערכות הפעלה - תרגול 5805:13

Best Fit – memtest.c

7מערכות הפעלה - תרגול 5905:13

Best Fit – memtest.c

Recommended