מערכות הפעלה תרגול – 6יצירת תהליכים בדומה לנעשה ב- LINUX מה בתכנית? יצירת תהליך אתחול של תהליך התפצלות של תהליך 2 מערכות הפעלה -תרגול 7 ינואר 17 החלפת הקשר החלפת הקשר נעשת בעזרת פונקציה ctxsw הפונקציה שומרת את הרגיסטרים של התהליך המתחלף )נזכר בכניסת ה *pregs-בטבלת )proctabומחליפה אותם ברגיסטרים של התהליך הנכנס מתבצעת בכל פעם שיש קריאה לresched- 3 מערכות הפעלה -תרגול 7 ינואר 17 יצירת תהליכים איתחול רשומה של התהליך החדש (שינויים ב- .)PROCTAB העברת פרמטרים המיועדים לפונקציה של התהליך החדש. הכנת התהליך החדש לסיום. הכנת התהליך לקבלת שליטה ממנגנון החלפת תהליכים. 4 מערכות הפעלה -תרגול 7 ינואר 17 5 מערכות הפעלה -תרגול 9 ינואר 17 מתחזה ctxsw-ל _ctxsw …………. pop di pop si popf ; restore interrupt state pop bp ret _ctxsw endp 17 ינואר SP <di> <si> INITF BP ctxsw stack operations <bp> procaddr INITRET args 9 תרגול- מערכות הפעלה procaddr calls to ctxsw without parameters INITRET calls to procaddr with args 6 יצירת תהליך חדש – )(newpid 7 מערכות הפעלה -תרגול 9 ינואר 17 )(kill ) kill(pidמסיימת את פעולתו של תהליך pid בנוסף killנקראת באופן אוטומטי בסיום קוד התהליך היא משחררת את: המחסנית של התהליך רשומת התהליך בטבלת התהליכים הוצאת רשומת התהליך מהתור בו היא נמצאת עדכונים ספציפיים למצב התהליך .למשל ,אם תהליך מחכה לסמפור :הגדלת המונה ב1- במקרה של סיום התהליך הנוכחי – ביצוע resched סיום ריצת XINUכשמסתיימים כל התהליכים כולל תהליכי מערכת ההפעלה 8 מערכות הפעלה -תרגול 2 ינואר 17 9 מערכות הפעלה -תרגול 2 ינואר 17 סיום התהליך – )( userret 10 מערכות הפעלה -תרגול 9 ינואר 17 דוגמה – xexecl, xfork מימוש קריאות )xexecl, xexecl2( xexecl ו xfork-שמדמות קריאות דומות בUNIX- ניזכר במשמעות הקריאות 11 מערכות הפעלה -תרגול 9 ינואר 17 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 17 ינואר 9 תרגול- מערכות הפעלה 12 הרצת תכנית אחרת בUNIX- קריאת המערכת )(execl תחביר: ;)… int execl(const char *filename, const char * arg, פעולה :טוענת תכנית חדשה לביצוע על-ידי התהליך הקורא דוגמה { )(main ;)execl(“/bin/date”, “date”, NULL ;)”printf(“hello } 13 מערכות הפעלה -תרגול 9 ינואר 17 xexecl אין צורך בכניסה חדשה בטבלת התהליכים לא צריך זיכרון נוסף מבצעים createעל תהליך עצמו: עדכון פרמטר INITRET ,והמצביע על הקוד לערכים של תכנית חדשה עדכון תוכן להחלפת התהליכים קריאה ctxsw- 14 מערכות הפעלה -תרגול 9 ינואר 17 xexecl 15 מערכות הפעלה -תרגול 9 ינואר 17 ctxsw מצב המחסנית המדמה- xexecl Low Addr pptr->pbase SP1 SI, DI עבור INITF BP עבור PF INITRET High Addr 17 ינואר pptr->pbase + pptr->plen PARAM 9 תרגול- מערכות הפעלה 16 xexecl 17 מערכות הפעלה -תרגול 9 ינואר 17 xexecl 18 מערכות הפעלה -תרגול 9 ינואר 17 xexecl 19 מערכות הפעלה -תרגול 9 ינואר 17 xexecl2 לולאה שמעתיקה מספר לא קבוע של פרמטרים מהנקודה הפעילה של מחסנית אל התחתית יתר הפרטים כמו בxexecl- 20 מערכות הפעלה -תרגול 9 ינואר 17 xexec2 21 מערכות הפעלה -תרגול 9 ינואר 17 Low Addr SP SI, DI עבור xexec2 INITF BP עבור PF INITRET PARAM1 … PARAMn High Addr 17 ינואר 9 תרגול- מערכות הפעלה 22 xexecl2 23 מערכות הפעלה -תרגול 9 ינואר 17 xexec2 24 מערכות הפעלה -תרגול 9 ינואר 17 xexec2 25 מערכות הפעלה -תרגול 9 ינואר 17 xexec2 26 מערכות הפעלה -תרגול 9 ינואר 17 xfork חיקוי XINUלקריאת fork מייצרים תהליך חדש עבור תהליך הבן מעתיקים תוכן המחסנית מתהליך האב אל תהליך הבן מחשבים מצביע הקוד עבור תהליך הבן מסמלצים קריאה לctxsw- מחזירים pidשל תהליך חדש לאב או 0לבן 27 מערכות הפעלה -תרגול 9 ינואר 17 – retipחישוב כתובת חזרה 28 מערכות הפעלה -תרגול 9 ינואר 17 xfork 29 מערכות הפעלה -תרגול 9 ינואר 17 xfork הכנת מחסנית עדכון bp עבור xmain הרצת תהליך הבן 30 מערכות הפעלה -תרגול 9 ינואר 17 שאלות שצריך לשאול האם צריך ליצור תהליך חדש עם pidחדש או מספיק לשנות תהליך קיים? האם צריך להקצות מחסנית נוספת? מה המחסנית אמורה להכיל? איך התהליך יחזור מהקריאה? האם דרושים משתנים נוספים כדי לבצע את המשימה? 31 מערכות הפעלה -תרגול 9 ינואר 17
© Copyright 2024