1 / 31

מערכות הפעלה

מערכות הפעלה. תרגול 6 – יצירת תהליכים בדומה לנעשה ב- LINUX. מה בתכנית?. יצירת תהליך אתחול של תהליך התפצלות של תהליך. החלפת הקשר. החלפת הקשר נעשת בעזרת פונקציה ctxsw

urania
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. מערכות הפעלה תרגול 6 – יצירת תהליכים בדומה לנעשה ב-LINUX

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

  3. החלפת הקשר • החלפת הקשר נעשת בעזרת פונקציה ctxsw • הפונקציה שומרת את הרגיסטרים של התהליך המתחלף )נזכר בכניסת ה-*pregs בטבלת proctab) ומחליפה אותם ברגיסטרים של התהליך הנכנס • מתבצעת בכל פעם שיש קריאה ל-resched מערכות הפעלה - תרגול 7

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

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

  6. _ctxsw …………. pop di pop si popf ; restore interrupt state pop bp ret _ctxsw endp מתחזה ל-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

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

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

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

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

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

  12. קריאת מערכת 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

More Related