Download presentation
Presentation is loading. Please wait.
1
תהליכים מהו תהליך ? מבני הנתונים לניהול תהליכים. החלפת הקשר. ניהול תהליכים ע " י מערכת ההפעלה.
2
February 03 חגית עטיה © תהליך אבסטרקציה : יחידת הביצוע יחידת הזימון תוכנית בביצוע ( סדרתי = פקודה - אחת - אחר - השנייה ) נקרא גם job, task, sequential process
3
February 03 חגית עטיה © מה מאפיין תהליך תהליך לעומת תוכנית : תוכנית היא חלק ממצב התהליך תוכנית יכולה לייצר כמה תהליכים מרחב כתובות קוד התוכנית נתונים מחסנית זמן - ביצוע program counter רגיסטרים מספר תהליך (process id)
4
February 03 חגית עטיה © מרחב הכתובות של התהליך 0x00000000 0xFFFFFFFF address space code (text segment) static data (data segment) heap (dynamic allocated mem) stack (dynamic allocated mem) Program Counter Stack Pointer
5
February 03 חגית עטיה © מצבי התהליך כל תהליך נמצא באחד המצבים הבאים : מוכן (ready) רץ (running) מחכה (waiting) מתי מזמנים / מפנים תהליכים ? New Terminated Ready Running Waiting create kill I/O, page fault, etc. I/O done schedule preempt טווח קצר טווח בינוני / ארוך
6
February 03 חגית עטיה © מבני הנתונים של תהליך ב Linux, מכיל 95+ שדות ! בכל זמן, הרבה תהליכים פעילים במערכת לכל תהליך מצב Process control block (PCB) שומר את מצב התהליך כאשר אינו רץ. ב -Linux: Process Descriptor נשמר כאשר התהליך מפונה, נטען כאשר התהליך מתחיל לרוץ. Process id (PID) Execution state Program counter Stack pointer Registers Username Scheduling priority Memory limits
7
February 03 חגית עטיה © מצב המעבד וה -PCB כאשר תהליך רץ, המצב שלו נמצא במעבד : PC, SP, רגיסטרים משתני זיכרון כאשר המעבד מפסיק להריץ תהליך ( מעבירו למצב המתנה ), שומר את ערכי הרגיסטרים ב -PCB. כאשר המעבד מחזיר תהליך למצב ריצה, טוען את ערכי הרגיסטרים מתוך ה -PCB. Context Switch: העברת המעבד מתהליך אחד לשני.
8
February 03 חגית עטיה © Context switch
9
February 03 חגית עטיה © תורי מצבים מערכת ההפעלה מחזיקה תורים של תהליכים תור ready תור waiting, למשל ל -device מסוים Wait queue header cat pcbNetscape pcb head pointer tail pointer Ready queue header head pointer tail pointer Netscape pcbemacs pcbls pcb
10
February 03 חגית עטיה © ה -PCB ותורי המצבים ה -PCB הוא מבנה נתונים בזיכרון מערכת ההפעלה. כאשר התהליך נוצר, מוּקצה עבורו PCB ( עם ערכי התחלה ), ומשורשר לתור המתאים ( בדרך - כלל, ready ). ה -PCB נמצא בתור המתאים למצבו של התהליך. כאשר מצב התהליך משתנה, ה -PCB שלו מועבר מתור לתור. כאשר התהליך מסתיים, ה -PCB שלו משוחרר.
11
February 03 חגית עטיה © יצירת תהליך תהליך אחד ( האב ) יכול ליצור תהליך אחר ( הבן ) שדה ppid בביצוע ps ב -UNIX. בדרך - כלל, האב מגדיר או מוריש משאבים ותכונות לבניו. ב -UNIX, הבן יורש את שדה userID, ועוד. האב יכול להמתין לבנו, לסיים, או להמשיך לרוץ במקביל.
12
February 03 חגית עטיה © יצירת תהליכים ב -UNIX:fork() int main(int argc, char **argv) { char *name = argv[0]; int child_pid = fork(); if (child_pid == 0) { printf( “ Son of %s is %d\n ”, name, child_pid); return 0; } else { printf( “ My child is %d\n ”, child_pid); return 0; } } יוצר ומאתחל PCB. מיצר מרחב כתובות חדש, ומאתחל אותו עם העתק מלא של מרחב הכתובות של האב. מאתחל משאבי גרעין לפי משאבי האב ( למשל, קבצים פתוחים ) שם את ה -PCB בתור המוכנים חוזר פעמיים : לבן, עם ערך 0 לאב, עם מספר התהליך (pid) של הבן
13
February 03 חגית עטיה © איך מפעילים תוכנית חדשה ? int exec(char *prog, char **argv) עוצר את ביצוע התוכנית הנוכחית. טוען את prog לתוך מרחב הכתובות. מאתחל את מצב המעבד, וארגומנטים עבור התוכנית החדשה. מפנה את המעבד ( ה -PCB מועבר לתור המוכנים ). לא יוצר תהליך חדש !
14
February 03 חגית עטיה © דוגמא : UNIX shell int main(int argc, char **argv) { while (1) { char *cmd = get_next_command(); int child_pid = fork(); if (child_pid == 0) { manipulate STDIN/STDOUT/STDERR fd ’ s exec(cmd); panic( “ exec failed! ” ); } else { wait(child_pid); }
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.