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