59
הההההה ההההה ההההה7 ההההה ההההההה ההההה- ההההה הLINUX הההההה ההההה

מערכות הפעלה

  • Upload
    cody

  • View
    122

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: מערכות הפעלה

מערכות הפעלה

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

Page 2: מערכות הפעלה

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

מה בתכנית?

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

Page 3: מערכות הפעלה

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

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

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

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

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

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

Page 4: מערכות הפעלה

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

Page 5: מערכות הפעלה

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ל-

Page 6: מערכות הפעלה

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

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

Page 7: מערכות הפעלה

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

xexecl, xforkדוגמה –

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

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

Page 8: מערכות הפעלה

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

Page 9: מערכות הפעלה

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

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

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

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

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

}

Page 10: מערכות הפעלה

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

xexecl

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

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

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

Page 11: מערכות הפעלה

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

xexecl

Page 12: מערכות הפעלה

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

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

PF

INITRET

PARAM

SP1

INITF

BPעבור

SI, DIעבור

pptr-<pbase

pptr-<pbase+ pptr-<plen

LowAddr

HighAddr

Page 13: מערכות הפעלה

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

xexecl

Page 14: מערכות הפעלה

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

xexecl

Page 15: מערכות הפעלה

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

xexecl

Page 16: מערכות הפעלה

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

xexecl2

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

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

Page 17: מערכות הפעלה

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

xexec2

Page 18: מערכות הפעלה

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

xexec2

PF

INITRET

PARAM1

SP

INITF

PARAMn

BPעבור

SI, DIעבור

High Addr

Low Addr

Page 19: מערכות הפעלה

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

xexecl2

Page 20: מערכות הפעלה

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

xexec2

Page 21: מערכות הפעלה

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

xexec2

Page 22: מערכות הפעלה

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

xexec2

Page 23: מערכות הפעלה

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

xfork

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

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

Page 24: מערכות הפעלה

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

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

Page 25: מערכות הפעלה

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

xfork

Page 26: מערכות הפעלה

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

xfork

הכנתמחסנית

bpעדכון xmainעבור

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

Page 27: מערכות הפעלה

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

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

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

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

המשימה?

Page 28: מערכות הפעלה

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

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

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

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

מערכת ההפעלה

Page 29: מערכות הפעלה

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

Page 30: מערכות הפעלה

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

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

Page 31: מערכות הפעלה

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

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

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

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

לימודית(

Page 32: מערכות הפעלה

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

השטח הדינמי

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

סגמנט המידע

maxaddrend

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

ויתר עליו

שטח גלובלי

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

Page 33: מערכות הפעלה

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

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

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

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

מיזוג(

Page 34: מערכות הפעלה

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

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

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

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

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

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

Page 35: מערכות הפעלה

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

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

memlist

Page 36: מערכות הפעלה

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

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

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

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

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

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

Page 37: מערכות הפעלה

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

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

Page 38: מערכות הפעלה

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

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

הקצאת זכרון

char* getmem)int nbytes(

שחרור זכרון

freemem)char* block, int size(

Page 39: מערכות הפעלה

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

getmem)( – getmem.c

Page 40: מערכות הפעלה

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

getmem)( – getmem.c

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

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

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

Page 41: מערכות הפעלה

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

freemem)( – freemem.c

Page 42: מערכות הפעלה

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

freemem)( – freemem.c

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

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

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

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

block > end block < maxaddr

end maxaddr

Page 43: מערכות הפעלה

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

freemem)( – freemem.c

Page 44: מערכות הפעלה

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

freemem)( – freemem.c

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

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

Page 45: מערכות הפעלה

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

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

q p

q-<mlen

block > q + q-<mlen

top

Page 46: מערכות הפעלה

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

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

q p

block + size < p

Page 47: מערכות הפעלה

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

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

block

top

q-<mlen size

q p

blockq-<mlen size

Page 48: מערכות הפעלה

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

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

blockq-<mlen size

q p

blockq-<mlen size

Page 49: מערכות הפעלה

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

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

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

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

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

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

Page 50: מערכות הפעלה

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

Page 51: מערכות הפעלה

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

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

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

Page 52: מערכות הפעלה

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

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

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

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

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

Page 53: מערכות הפעלה

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

Best Fit – getmem.c

Page 54: מערכות הפעלה

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

Best Fit – getmem.c

Page 55: מערכות הפעלה

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

Best Fit – getmem.c

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

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

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

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

Page 56: מערכות הפעלה

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

Best Fit – getmem.c

Page 57: מערכות הפעלה

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

Best Fit – getmem.c

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

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

memtest.c

Page 58: מערכות הפעלה

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

Best Fit – memtest.c

Page 59: מערכות הפעלה

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

Best Fit – memtest.c