1 / 59

מערכות הפעלה

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

cody
Download Presentation

מערכות הפעלה

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. יצירת תהליכים • התחול מהרשומה של התהליך החדש (שינויים ב- PROCTAB). • העברת הפרמטרים המיועדים לפונקציה של התהליך החדש. • הכנת התהליך החדש לסיום. • הכנת התהליך לקבלת שליטה ממנגנון החלפת תהליכים. מערכות הפעלה - תרגול 7

  4. מערכות הפעלה - תרגול 9

  5. מתחזה ל-ctxsw <di> SP <si> ctxsw stack operations INITF BP <bp> procaddr calls to ctxsw without parameters procaddr INITRET INITRET calls to procaddr with args args מערכות הפעלה - תרגול 9

  6. יצירת תהליך חדש – newpid() מערכות הפעלה - תרגול 9

  7. דוגמה – xexecl, xfork • ממשו קריאות xexecl (xexecl, xexecl2) ו-xfork שמדמות קריאות דומות ב-UNIX • ניזכר במשמעות הקריאות מערכות הפעלה - תרגול 9

  8. קריאת מערכת fork ב-UNIX • קריאת המערכת 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

  9. הרצת תכנית אחרת ב-UNIX • קריאת המערכת execl() • תחביר: int execl(const char *filename, const char * arg, …); • פעולה: טוענת תכנית חדשה לביצוע על-ידי התהליך הקורא • דוגמה main() { • execl(“/bin/date”, “date”, NULL); printf(“hello”); } מערכות הפעלה - תרגול 9

  10. xexecl • אין צורך בכניסה חדשה בטבלת התהליכים • לא צריך זיכרון נוסף • מבצעים create על תהליך עצמו: • עדכון פרמטר, INITRET והמצביע על הקוד לערכים של תכנית חדשה • עדכון תוכן להחלפת התהליכים • קריאה -ctxsw מערכות הפעלה - תרגול 9

  11. xexecl מערכות הפעלה - תרגול 9

  12. - xexeclמצב המחסנית המדמה ctxsw Low Addr pptr->pbase SP1 עבור SI, DI INITF עבור BP PF INITRET PARAM pptr->pbase + pptr->plen High Addr מערכות הפעלה - תרגול 9

  13. xexecl מערכות הפעלה - תרגול 9

  14. xexecl מערכות הפעלה - תרגול 9

  15. xexecl מערכות הפעלה - תרגול 9

  16. xexecl2 • לולאה שמעתיקה מספר לא קבוע של פרמטרים מהנקודה הפעילה של מחסנית אל התחתית • יתר הפרטים כמו ב-xexecl מערכות הפעלה - תרגול 9

  17. xexec2 מערכות הפעלה - תרגול 9

  18. Low Addr xexec2 SP עבור SI, DI INITF עבור BP PF INITRET PARAM1 … PARAMn High Addr מערכות הפעלה - תרגול 9

  19. xexecl2 מערכות הפעלה - תרגול 9

  20. xexec2 מערכות הפעלה - תרגול 9

  21. xexec2 מערכות הפעלה - תרגול 9

  22. xexec2 מערכות הפעלה - תרגול 9

  23. xfork • חיקוי XINU לקריאת fork • מייצרים תהליך חדש עבור תהליך הבן • מעתיקים תוכן המחסנית מתהליך האב אל תהליך הבן • מחשבים מצביע הקוד עבור תהליך הבן • מסמלצים קריאה ל-ctxsw • מחזירים pid של תהליך חדש לאב או 0 לבן מערכות הפעלה - תרגול 9

  24. retip – חישוב כתובת חזרה מערכות הפעלה - תרגול 9

  25. xfork מערכות הפעלה - תרגול 9

  26. xfork הכנת מחסנית עדכון bp עבור xmain הרצת תהליך הבן מערכות הפעלה - תרגול 9

  27. שאלות שצריך לשאול • האם צריך ליצור תהליך חדש עם pid חדש או מספיק לשנות תהליך קיים? • האם צריך להקצות מחסנית נוספת? • מה המחסנית אמורה להכיל? • איך התהליך יחזור מהקריאה? • האם דרושים משתנים נוספים כדי לבצע את המשימה? מערכות הפעלה - תרגול 9

  28. kill() • kill(pid) מסיימת את פעולתו של תהליך pid • בנוסף kill נקראת באופן אוטומטי בסיום קוד התהליך • היא משחררת את: • המחסנית של התהליך • רשומת התהליך בטבלת התהליכים • הוצאת רשומת התהליך מהתור בו היא נמצאת • עדכונים ספציפיים למצב התהליך. למשל, אם תהליך מחכה לסמפור : הגדלת המונה ב-1 • במקרה של סיום התהליך הנוכחי – ביצוע resched • סיום ריצת XINU כשמסתיימים כל התהליכים כולל תהליכי מערכת ההפעלה מערכות הפעלה - תרגול 2

  29. מערכות הפעלה - תרגול 2

  30. סיום התהליך – userret () מערכות הפעלה - תרגול 9

  31. מנהל זיכרון - XINU • מעקב אחרי שטחי זכרון פנויים • הקצאת זיכרון עבור מערכת ההפעלה • הקצעת זכרון עבור האפליקציות • שחרור המחסנית של התהליך שחדל להתקיים • אין מנגנוני הגנה או מנגנוני תמיכה בזיכרון הוירטואלי • המימוש פשוט ומינימלי (מערכת הפעלה לימודית) מערכות הפעלה - תרגול 7

  32. השטח הדינמי השטח שבשימוש על ידי XINU סגמנט המידע שטח סטטי שטח דינמי שטח שמור השטח בשימוש של XINU שטח גלובלי שטח ש-XINU ויתר עליו end maxaddr מערכות הפעלה - תרגול 7

  33. רשימת הפנויים • memlist– רשימת הבלוקים הפנויים • רשימה מקושרת של בלוקים פנויים המוכנים להקצאה • הראש נמצא בבלוק גלובלי • האיברים הם בלוקים פנויים עצמם • ממוינת לפי כתובת ההתחלה של בלוק (לצורך מיזוג) מערכות הפעלה - תרגול 7

  34. רשימת הפנויים • כל השטחים, המוקצים והפנויים, נמצאים בכתובות שהן כפולות של 4 ואורכם כפולות של 4 • שטחים מוקצים לא יופיעו ברשימה • שני שטחים פנויים רצופים לא יופיעו ברשימה • כאשר מבקשים הקצאת שטח זכרון שאינו כפולה של 4 בתים, יוקצה השטח באורך של הכפולה הבאה של 4 (12 בתים במקום 9) • הרשימה מאותחלת על ידי בלוק אחד בגודל כל שטח הזכרון להקצאה מערכות הפעלה - תרגול 7

  35. רשימת הפנויים memlist מערכות הפעלה - תרגול 7

  36. מדיניות הקצאת זכרון • מדיניות First Fit • ההקצאה מתבצעת אם קיים בלוק פנוי בגודל המתאים • הבלוק המתאים הראשון ברשימה נבחר להקצאה • אינו מממש Best Fit – סריקה של כל הבלוקים להתאמה טובה יותר • לא בודק האם יש הרעבה של תהליכים אחרים על ידי תהליך מסויים בשימוש בזכרון מערכות הפעלה - תרגול 7

  37. מבני נתונים – mem.h מערכות הפעלה - תרגול 7

  38. קריאות מערכת הפעלה • הקצאת זכרון char* getmem(int nbytes) • שחרור זכרון freemem(char* block, int size) מערכות הפעלה - תרגול 7

  39. getmem() – getmem.c מערכות הפעלה - תרגול 7

  40. getmem() – getmem.c • גודל הבלוק מחושב ככפולה של 4 • השיגרה עוברת על רשימת הפנויים • אם גודל הבלוק הפנוי גדול או שווה לגודל הנדרש הבלוק מוקצה • אם גודל הבלוק הפנוי עולה על הנדרש בלוק פנוי חדש בגודל ההפרש נוצר ברשימת הפנויים מערכות הפעלה - תרגול 7

  41. freemem() –freemem.c מערכות הפעלה - תרגול 7

  42. freemem() – freemem.c • מעדכנים את גודל הבלוק ואת כתובת הבלוק להיות כפולה של 4 • בודקים את גבולות הזכרון המותר בסגמנט • מחפשים מיקום מתאים לבלוק המשתחרר ברשימת הפנויים על פי כתובת הבלוק maxaddr end שטח סטטי שטח דינמי שטח שמור block > maxaddr block < end מערכות הפעלה - תרגול 7

  43. freemem() –freemem.c מערכות הפעלה - תרגול 7

  44. freemem() – freemem.c • בודקים תקינות הבלוק • אם הבלוק לא תקין מחזירים שגיאה • מוסיפים בלוק פנוי לרשימה • מנסים לאחד את הבלוק החדש עם בלוקים פנויים נוספים אם זה אפשרי מערכות הפעלה - תרגול 7

  45. freemem() – בדיקת תקינות q top p q->mlen block < q + q->mlen מערכות הפעלה - תרגול 7

  46. freemem() – בדיקת תקינות q p block + size > p מערכות הפעלה - תרגול 7

  47. freemem() – בדיקת שילוב p q top q->mlen size block p q q->mlen size block מערכות הפעלה - תרגול 7

  48. freemem() – בדיקת שילוב p q size q->mlen block p q q->mlen size block מערכות הפעלה - תרגול 7

  49. שברור פנימי –Internal Fragmentation • מצב בו ישנם שטחי זכרון שהוצאו מרשימת הפנויים כתוצאת ההקצאה אך בהכרח לא נמצאים בשימוש • ב-XINU כל הקצאה היא כפולה של 4. לכן התהליך המבקש הקצאה של 9 בתים אכן יקבל מצביע ויוכל להשתמש ב-9 בתים מהמקום שהוחזר לו • למעשה ההקצאה היתה בגודל של 12, ו-3 הבתים שהוקצו מעבר לדרישה אינם פנויים לשימוש מערכות הפעלה - תרגול 7

  50. דוגמה /* 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); • לאחר 333 הקצאות הלולאה תפסק (הוקצו רק 3300 בתים מתוך 4000 בתים פנויים) • בפועל היו 333 הקצאות של 12 (4000/12 = 333) מערכות הפעלה - תרגול 7

More Related