3# שבוע `א תהליכים חלק : `א הפעלה קורס מערכות תכנות מערכת ומבוא

Transcription

3# שבוע `א תהליכים חלק : `א הפעלה קורס מערכות תכנות מערכת ומבוא
‫שבוע ‪#3‬‬
‫תהליכים חלק א'‬
‫קורס מערכות הפעלה א'‪:‬‬
‫תכנות מערכת ומבוא לתכנות מקבילי‬
‫מכללת הדסה ‪ -‬מכללה חרדית‬
‫צבי מלמד‬
‫‪[email protected]‬‬
‫הרצאות הקורס מבוססות במידה רבה ביותר על ההרצאות של ד"ר יורם ביברמן‬
‫© כל הזכויות שמורות לד"ר יורם ביברמן ולצבי מלמד‬
‫©צבי מלמד‬
‫‪1‬‬
‫הנושאים בהרצאה זאת )שבוע ‪(#3‬‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫מבוא‬
‫מושג התהליך‬
‫התהליך‬
‫מתי תהליך נוצר‬
‫מתי תהליך מסתיים‬
‫מצב התהליך‬
‫הערות לגבי לגבי מצבי התהליך‬
‫‪ – PCB‬גוש בקרת תהליך‬
‫מתזמנים ‪schedulers‬‬
‫החלפת הקשר ‪context switch‬‬
‫פעולות על תהליכים‬
‫יצירת תהליך‬
‫©צבי מלמד‬
‫‪2‬‬
‫מבוא‬
‫במערכות ‪) time-sharing‬נקראות גם‪:(multi-tasking :‬‬
‫•‬
‫המחשב מריץ מספר תכניות המצויות בו זמנית בזיכרון‬
‫•‬
‫אשלית מקבילות על ידי הרצת כל תכנית לסירוגין למשך זמן קצר == שיתוף‬
‫זמן‪.‬‬
‫•‬
‫זה אכלא! אבל‪ ...‬נדרש הרבה בכדי לאפשר זאת ‪ -‬שהתכניות לא תפגענה זו‬
‫בזו‪:‬‬
‫– פעולות כגון הקצאת זכרון‪ ,‬ביצוע קו"פ‪ ,‬ייצור תוכנית נוספת להרצה –‬
‫צריכות להתבצע על ידי מערכת ההפעלה‬
‫•‬
‫התוצאה‪ :‬מושג התהליך ≈ תכנית מורצת‪ .‬או יחידת העבודה‪' ,‬ישות'‪ ,‬במערכת‬
‫שיתוף זמן מודרנית‪.‬‬
‫•‬
‫גרעין מערכת ההפעלה אחראי על ניהול התהליכים‪ ,‬הקצאת הזיכרון הראשי‪,‬‬
‫ניהול הציוד‪ ,‬ומשימות קריטיות נוספות‬
‫©צבי מלמד‬
‫‪3‬‬
‫מושג התהליך‬
‫•‬
‫•‬
‫•‬
‫•‬
‫במערכת אצווה )‪ (batch‬הריצו ג'ובים אחד אחרי השני‪ .‬בהסתיים ג'וב מסוים ‪-‬‬
‫מערכת ההפעלה בחרה את הג'וב הבא מבין הממתינים‬
‫‪ ‬כשהג'וב המורץ מבצע ק\פ המעבד מושבת ‪‬‬
‫השיפור‪:‬‬
‫– מערכת ריבוי תכניות )‪ (multiprogramming‬בזיכרון יוחזקו כמה‬
‫תכניות\ג'ובים במקביל‪.‬‬
‫– כאשר ג'וב א' מבצע ק\פ‪ ,‬יריץ המעבד את ג'וב ב'‪.‬‬
‫– ג'וב מוותר על המעבד מרצונו הטוב‬
‫שיפור נוסף‪:‬‬
‫– לאחר ‪ X‬יחידות זמן שבהם רץ ג'וב א' ‪ -‬המעבד יעבור לבצע את‬
‫ג'וב\תהליך\משימה ב' – גם ללא פניה לקו"פ‬
‫– או – מפסיקים את פעולתו של א' בגלל עדיפות גבוהה יותר של ג'וב ב'‬
‫– לשיטה זאת אנו קוראים‪ :‬שיתוף זמן )‪.(time sharing‬‬
‫©צבי מלמד‬
‫‪4‬‬
‫התהליך‬
‫• תהליך =≈ תכנית בהרצה‬
‫• מבחינת מערכת ההפעלה‪ :‬ישות שניתן להקצות לה משאבים‬
‫• תהליכים כמו "אנשים" ‪ :‬נולדים‪ ,‬חיים‪ ,‬עשויים להוליד‬
‫מספר ילדים‪ ,‬מתים‪.‬‬
‫• שלא כמו אנשים‪:‬‬
‫– "זכר ונקבה ברא אותם" – לא את התהליכים‪ ..‬יש רק‬
‫הורה אחד‬
‫– אין עולם הבא‪...‬‬
‫©צבי מלמד‬
‫‪5‬‬
‫התהליך‬
‫• לכל תהליך מרחב כתובות‬
‫)‪ (address space‬שלו –‬
‫אליהן‪ ,‬ורק אליהן‪ ,‬הוא רשאי‬
‫לפנות‬
‫©צבי מלמד‬
‫‪6‬‬
‫מרחב הכתובות )‪ (address space‬של התהליך‬
‫‪ - text segment .1‬פקודות התכנית )בשפת מכונה( = ]בד"כ מוגן מפני כתיבה[‬
‫‪ - Stack .2‬מחסנית )פרמטרי התוכנית‪ ,‬קריאות לפונקציות ומשתנים לוקליים(‬
‫‪ heap .3‬ערמה )להקצאה דינאמית(‬
‫‪ – data section .4‬משתנים סטטיים וגלובליים‬
‫‪ (block started by symbol) bss .5‬משתנים גלובליים וסטטיים שאינם מאותחלים‬
‫)וע"כ אינם נשמרים ב ַ קובץ המכיל את התכנית(‬
‫‪ .6‬מרכיבים נוספים )נכיר בהמשך(‬
‫‪ .7‬מידע נוסף על התהליך )רשימת קבצים שפתח‪ ,‬עדיפות‪ ,‬זמן ריצה‪ ,‬מצב האוגרים‬
‫ב‪ context switch-‬האחרון‪] - ( .. ,‬מתוחזק על ידי מערכת ההפעלה[‬
‫©צבי מלמד‬
‫‪7‬‬
‫מרחב הכתובות של התהליך ‪ -‬הערות‬
‫• לוגית ‪ -‬רציף בזיכרון‪,‬‬
‫• פיזית – אינו רציף‪ .‬מחולק לדפים‪ .‬מנגנון ‪Paging‬‬
‫• כשתהליך מוליד תהליכים ילדים – כל אחד מהם נולד עם עותק‬
‫זהה של אביו‪ .‬זהה אך נפרד!‬
‫©צבי מלמד‬
‫‪8‬‬
‫מתי תהליך נוצר‬
‫•‬
‫בתהליך העליה )‪ (boot‬של מערכת ההפעלה‪ ,‬היא מייצרת את‬
‫התהליך )כמעט( הראשון במערכת‪ ,INIT, pid=1 :‬אשר רץ לנצח‪.‬‬
‫•‬
‫כשעושים ‪ :login‬תהליך ‪ INIT‬מייצר בן = ה‪ .login shell :‬אשר‬
‫עובר 'מוטציה' ונהפך מעותק של ‪ INIT‬ל‪shell :‬‬
‫•‬
‫הקלדת פקודה‪ :‬ה‪ shell -‬מייצר תהליך שמריץ את התכנית‬
‫)פקודה =≈ תוכנית ‪ +‬ארגומנטים(‪.‬‬
‫•‬
‫תהליכים נוספים נוצרים על ידי מערכת ההפעלה או תוכניות‬
‫משתמש ממגוון סיבות )לספק שירותים‪ ,‬הפעלה מקבילית‪ ..‬וכו'(‬
‫•‬
‫‪ script‬מייצר סדרתית תהליכים‪ ,‬על פי הפקודות והריצה בקובץ‬
‫ה‪script-‬‬
‫©צבי מלמד‬
‫‪9‬‬
‫מתי תהליך מסתיים‬
‫•‬
‫•‬
‫תהליך נולד ומת ב‪Kernel-mode -‬‬
‫תהליך מסתיים במקרים הבאים‪:‬‬
‫‪ (1‬הוא סיים את פעולתו )בהצלחה או בגלל שנכשל( וביצע קריאת מערכת )(‪.exit‬‬
‫‪ (2‬הוא מועף ע"י מערכת ההפעלה בגלל בעית ריצה‪:‬‬
‫‪ (a‬חלוקה באפס‬
‫‪ (b‬חריגה מהזיכרון‬
‫‪ (c‬עבר עת מכסת הזמן שהוקצתה לו‬
‫‪ (d‬ניסה להגדיל קובץ מעבר למותר‬
‫‪ (e‬ניסה לבצע פקודה מיוחסת )‪ (priviledged‬ב‪user-mode-‬‬
‫‪ (3‬מערכת ההפעלה "צוותה עליו" להסתיים 'שלא בעוונותיו'‪ :‬חסימה הדדית‪.‬‬
‫‪ (4‬אביו החליט )מסיבות השמורות עימו( להרגו‪.‬‬
‫‪ (5‬המשתמש עשה ‪.logout‬‬
‫©צבי מלמד‬
‫‪10‬‬
‫מצבי התהליך‬
‫מצב התהליך ≈ מה התהליך עושה עתה‪.‬‬
‫מצבים אפשריים של תהליך‪:‬‬
‫‪ - New .1‬חדש – התהליך נוצר )'נולד'(‪ .‬מוקצים לו מבני הנתונים‬
‫הדרושים שיאפשרו לו 'חיים' =לרוץ במערכת‪.‬‬
‫‪ .2‬התהליך רץ במצב משתמש )‪ =(running, user mode‬הוא זכה‬
‫במעבד‪ ,‬ורץ‬
‫‪ .3‬רץ במצב גרעין )‪ – (running, kernel mode‬בוצעה בקשת שירות =‬
‫קריאת מערכת )שגרמה לשינוי(‪ .‬הבקרה עוברת לקטע קוד של מערכת‬
‫ההפעלה‪.‬‬
‫‪ .4‬חסום\ישן )‪ - (blocked/sleeping‬התהליך ממתין לאירוע כלשהו )יוזן‬
‫לו נתון‪ ,‬יישלח לו סיגנל(‪ .‬למצב זה נעבור ממצב ג'‪.‬‬
‫©צבי מלמד‬
‫‪11‬‬
‫מצבי התהליך‬
‫‪ .5‬תהליך מוכן להרצה )‪ – (ready‬התהליך ממתין שהמעבד יוקצה לו‪.‬‬
‫•‬
‫המעבר למצב זה ממצב ד' – "קרה כבר" האירוע שהתהליך חיכה לו‬
‫•‬
‫מעבר ממצב ב' – הסתיים קוואנטום הזמן‪ ,‬והמעבד הוקצה לתהליך אחר‬
‫•‬
‫)בגירסאות לינוקס לפני ‪ 2.6‬לא היה אפשרי "לגזול" את המעבד(‬
‫‪ .6‬סיים ‪– zombie‬ביצע ‪) exit‬ק‪.‬מ‪ (.‬וממתין שאביו יתעניין בגורלו‪ ,‬ורק‬
‫אז הוא יעלם סופית מהמערכת‪) .‬המעבר לכאן ממצב ג'(‪.‬‬
‫•‬
‫האב מקבל הודעה )‪ (Signal‬שהבן שלו מת‬
‫•‬
‫האב מוציא קריאה )(‪ wait‬או )(‪ – waitpid‬בכדי לקבל נתונים על מצב‬
‫הבן שסיים )או יסיים( לרוץ‪ .‬מערכת ההפעלה אינה "מחסלת" את‬
‫התהליך‪ ,‬כי אולי האב זקוק לנתונים אלו‪.‬‬
‫©צבי מלמד‬
‫‪12‬‬
‫מצבי התהליך‬
‫‪ .6‬מושהים ‪ - suspend‬בשל עומס על המערכת‪ ,‬תהליך 'חסום'‬
‫או 'מוכן' מוּצא מהזיכרון לדיסק )אשר מהווה מעין הרחבה‬
‫של הזיכרון(‪.‬‬
‫•‬
‫מבחינים בין התהליכים החסומים )‪ (Blocked‬והמוכנים‬
‫)‪ :(Ready‬האם הם בזכרון הראשי או מושהים‬
‫•‬
‫עירור ‪ - activation‬הכנסה של תהליך מושהה לזיכרון‬
‫©צבי מלמד‬
‫‪13‬‬
‫דיאגרמת מצבי תהליך – ‪process state chart‬‬
‫עד כאן –‬
‫יום ד' ‪16.11.11‬‬
‫©צבי מלמד‬
‫‪14‬‬
‫הערות לגבי לגבי מצבי התהליך‬
‫•‬
‫•‬
‫•‬
‫•‬
‫•‬
‫תהליכים מוכנים‪ :‬נחלק למוכנים במצב גרעין לעומת מוכנים‬
‫במצב משתמש‪.‬‬
‫למעשה את התהליכים הממתינים\חסומים אנו מחלקים‬
‫לקבוצות‪ ,‬קבוצות )תורים‪ ,‬תורים( ע"פ האירוע לו התהליכים‬
‫ממתינים )ק"פ מציוד א'‪ ,‬קלט מהעכבר‪ ,‬נתונים מהרשת(‪.‬‬
‫כל תור מכיל רשימת מתארים )‪ (PCB‬של התהליכים הממתינים‬
‫"אצלו"‪.‬‬
‫חלק מהטיפול בפסיקה הוא‪ ,‬במידת הצורך‪ ,‬העברת התהליך‬
‫המתאים מהתור בו הוא המתין לתור אחר )הפסיקה מטופלת בלי‬
‫קשר לתהליך שמורץ באותו רגע(‬
‫תהליך נולד ומת במצב גרעין‪.‬‬
‫©צבי מלמד‬
‫‪15‬‬