Professional Documents
Culture Documents
מערכות הפעלה
מערכות הפעלה
סביבה זהה (קבצים פתוחים , file descriptors ,ספרית עבודה נוכחית)
פרמטרים :אין
ערך מוחזר:
במקרה של כישלון -1 :לאב (אין בן)
ערך מוחזר:
אם אין בנים ,או שכל הבנים כבר סיימו וכבר בוצע להם )( - waitחזרה
מיד עם ערך -1
אם יש בן שסיים ועדיין לא בוצע לו )( – ) zombie( waitחזרה מייד עם
ה pid-של הבן הנ" ל ועם סטטוס הסיום שלו .מאקרו-ים שונים מאפשרים
לקבל מתוך הסטטוס מידע על הבן .למשל )WEXITSTATUS (status
יתן את ערך הסיום של בן שסיים (הערך שהעביר כארגומנט ל.) exit()-
אחרת – המתנה עד שבן כלשהו יסיים
exec(login) exec(login)
exec(shell)
exec(command)
exit()
2003 ) ארז חדדc( 3 תרגול- מערכות הפעלה 18
ניהול תהליכים בגרעין ()1
לכל תהליך ב Linux-קיים בגרעין מתאר תהליך
( ,)process descriptorשהוא רשומה מסוג
( task_structקובץ גרעין )include/linux/sched.h
המכילה:
מצב התהליך
עדיפות התהליך
מזהה התהליך () pid
מצביע לטבלת איזורי הזיכרון של התהליך
מצביע לטבלת הקבצים הפתוחים של התהליך
מצביעים למתארי תהליכים נוספים (רשימה מקושרת )
מצביעים למתאר תהליך האב ו"קרובי משפחה" נוספים
מסוף איתו התהליך מתקשר
ועוד..
( ) cארז חדד 2003 מערכות הפעלה -תרגול 3 19
ניהול תהליכים בגרעין ()2
מצב התהליך נמצא בשדה , stateשהוא משתנה בגודל
32ביט המתפקד כמערך ביטים
בכל זמן שהוא ,בדיוק אחד מהביטים ב state-דלוק בהתאם
למצב התהליך באותו זמן
Linuxמגדירה את המצבים הבאים לכל תהליך:
– TASK_RUNNING התהליך רץ או מוכן לריצה ,כלומר נמצא
בטווח הקצר
– TASK_INTERRUPTIBLE התהליך ממתין לאירוע כלשהו
(טווח בינוני/ארוך) אך ניתן להפסיק את המתנת התהליך
ולהחזירו למצב TASK_RUNNINGבאמצעות שליחת אות
( ) Signalכלשהו לתהליך .זהו מצב ההמתנה הנפוץ.
( ) cארז חדד 2003 מערכות הפעלה -תרגול 3 20
ניהול תהליכים בגרעין ()3
– TASK_UNINTERRUPTIBLE התהליך ממתין לאירוע
כלשהו (בדומה ל ) TASK_INTERRUPTIBLE -אך פרט
לאירוע לו הוא ממתין ,לא ניתן "להעיר" את התהליך
מצב המתנה נדיר לשימוש – למשל כאשר התהליך מבקש לגשת
לחומרה ומערכת ההפעלה צריכה לסרוק אחר החומרה ללא הפרעה
– TASK_STOPPED ריצת התהליך נעצרה בצורה מבוקרת
על-ידי תהליך אחר (בדרך-כלל debuggerאו ) tracer
– TASK_ZOMBIE ריצת התהליך הסתיימה ,אך תהליך האב
של התהליך שסיים עדיין לא ביקש מידע על סיום התהליך
באמצעות קריאה כדוגמת )( . waitהתהליך קיים כמתאר בלבד
את ערך השדה stateניתן לשנות בהצבה ישירה או על-
ידי המאקרו set_task_stateאו set_current_state
(קובץ גרעין ) include/linux/sched.h
( ) cארז חדד 2003 מערכות הפעלה -תרגול 3 21
ניהול תהליכים בגרעין ()4
לכל תהליך יש מחסנית נוספת הקרויה , kernel mode stack
כלומר "מחסנית גרעין"
מחסנית זו משמשת את גרעין מערכת ההפעלה בטיפול באירועים
במהלך ריצת התהליך
פסיקות בכלל
קריאות מערכת בפרט
מחסנית הגרעין של כל תהליך מאוחסנת באיזור הזיכרון של הגרעין
כאשר במהלך ריצת התהליך מתבצע מעבר בין user modeו-
, kernel modeמתבצעת החלפת מחסניות (שינוי ערכי ssו) esp-
בין המחסנית הרגילה של התהליך ומחסנית הגרעין
ערכי ss:espהמצביעים למחסנית הרגילה נשמרים על-ידי המעבד במחסנית
הגרעין מיד עם המעבר ל kernel mode-ומשוחזרים במעבר החוזר לuser -
mode
( ) cארז חדד 2003 מערכות הפעלה -תרגול 3 22
ניהול תהליכים בגרעין ()5
מחסנית הגרעין מאוחסנת יחד עם מתאר התהליך
בקטע זיכרון אחד בגודל ,8KBהמתחיל בכתובת
שהיא כפולה של )213( 8KB
0x015fbfff { union task_union
Kernel Mode
;struct task_struct task
Stack
;]unsigned long stack[2048
;}
swapper init
0
PID
216 26800 pidhash_next
pidhash_pprev
…
1023
p_(o)pptr
P1 P2 P3
p_ysptr
p_osptr
P4 p_cptr
list_head