os - deadlock Flashcards
מה הוא משאב בלעדי?
מוצר הדורש גישה אקסקלוסיבית (לדוגמה: מדפסת). משאב הניתן לחילוץ: משאב שניתן לקחת מתהליך בלי לגרום לתהליך להיפגע. משאב שלא ניתן לחילוץ: לקיחת המשאב מהתהליך תגרום לו להיכשל.
סדר הפעולות הנדרש לשימוש במשאב
בקשת המשאב, שימוש בו ושחרורו.
קיפאון (deadlock)
קבוצת תהליכים נמצאת במצב קיפאון, אם כל תהליך בקבוצה מחכה לאירוע הנמצא בשליטתו של תהליך אחר בקבוצה.
ארבעת התנאים לקיפאון
מניעה הדדית: כל משאב מוקצה לתהליך אחד לכל היותר.
החזקה והמתנה: תהליך המחזיק משאב יכול לדרוש משאב אחר מבלי לשחרר את המשאב שהוא מחזיק.
אין חילוץ כפוי: רק התהליך המחזיק במשאב יכול לשחרר אותו, לא ניתן לקחת משאב מתהליך מבלי לעורר בעיה.
מעגל המתנה: חייב להתקיים מעגל שבו כל תהליך מחזיק במשאב הנדרש על ידי תהליך אחר במעגל.
האם תהליך יחיד יכול להיות בקיפאון?
לא
מה ההסתברות לצאת מקיפאון
0
pid נחשב למשאב אקסקלוסיבי
כיצד fork מתמודדת עם משאב זה?
Fork מחזירה כישלון במקום להמתין בעת ניסיון לייצר בן חדש, כיוון ש-pid נחשב למשאב אקסקלוסיבי. המתנה של כמה תהליכים שמנסים לעשות fork גורמת לקיפאון.
דרכים להתמודדות עם קיפאון
התעלמות מהבעיה
גילוי והחלמה
התחמקות
מניעה
התמודדת עם קיפאון באמצעות התעלמות מהבעיה
ניח שהבעיה אינה קיימת. טיפול בקיפאון דורש מאמץ חישובי רב, וכשהוא קורה לעיתים נדירות ניתן להתעלם מהבעיה- שיטת בת היענה
התמודדות עם קיפאון באמצעות גילוי והחלמה
בגישה זו מבצעים מעת לעת ניסיונות לגילוי מצבי קיפאון, ואם הם מתגלים, מתבצעות פעולות להחלמה ולהשבת הסדר במערכת
התמודדות עם קיפאון באמצעות התחמקות
שיטה זו לא מונעת לגמרי מצבי קיפאון, אך היא מנסה להקטין את ההסתברות לכך באמצעות מדיניות מבוקרת להקצאת משאבים: אלגוריתם הבנקאים: בכל נקודת זמן, האלגוריתם דואג להשאיר את המערכת במצב שאין בו סכנה להיקלע לקיפאון. לכל תהליך יש מספר משאבים מקסימלי שהוא רשאי לדרוש. כאשר התהליך מסיים להשתמש במשאביו, הוא מחזיר את כולם למערכת ההפעלה. למערכת ההפעלה מותר לא להיענות לבקשה באופן זמני, אם הבקשה עלולה להוביל למצב לא בטוח (מצב העלול להוביל לקיפאון). מצב בטוח הוא מצב שבו התהליכים אינם קפואים ויש דרך להשלים את כל הבקשות של התהליכים, כך שכולם יסתיימו בוודאות ללא קיפאון. אלגוריתם הבנקאים מתאים למערכת סגורה, שבה כל התהליכים, צורכיהם וכמות המשאבים ידועים מראש. בנוסף, אם אלגוריתם הבנקאי גילה מצב לא בטוח, הוא ימנע מתהליכים לרוץ במשך הרבה זמן. (חסרונות)
התמודדות עם קיפאון באמצעות מניעה
ישה זו מונעת קיום מצבי קיפאון באמצעות שינוי מדיניות הקצאת המשאבים של המערכת כך שלפחות אחד מארבעת התנאים ההכרחיים לקיום קיפאון לא יוכל להתממש
התמודדות עם קיפאון באמצעות מניעה של ״מניעה הדדית״
רור כי אם כל משאב היה ניתן לחלוקה, לא יתכן קיפאון. ניתן על ידי שדונים (spoolers) להפוך משאבים, כגון מדפסת, לניתנים לחלוקה, על ידי כך שהשדון יהפוך למשאב, והוא יהיה זה שינהל את סדר הבקשות אל המשאב המקורי. אפשרות זאת אינה תמיד קיימת, לדוגמה: קטע קריטי. בכל מקרה, יש לפעול בצורה הבאה: צריך לנסות להפוך משאבים בלעדיים הניתנים לחלוקה למשאבים שכן ניתנים לחלוקה, ואין לדרוש משאב אלא אם כן הוא הכרחי לחלוטין.
התמודדות עם קיפאון באמצעות מניעה של ״החזקה והמתנה״
ניסיון למנוע את ההמתנה. על מערכת ההפעלה לספק את כל צרכיו של תהליך מראש, אך דבר זה גורם לבזבוז משאבים עצום, ובכלל לא תמיד ניתן לחזות את צרכיו של תהליך מראש. דרך פעולה אחרת היא שתהליך שרוצה לבקש משאב- עליו להחזיר את כל המשאבים שבבעלותו ואז לבקש את כל המשאבים שהוא צריך ביחד. דבר זה עלול לגרום לסדרה אינסופית של הקצאות ושחרורים.
התמודדות עם קיפאון באמצעות חילוץ כפוי (מניעה)
כל משאב הניתן לחילוץ יחולץ. לא מומלץ להשתמש בשיטה זאת עבור תהליכים שלא ניתנים לחילוץ, כיוון שהוא עלול לגרום לנזק חמור לתהליך