קיפאון, או deadlock, הוא מצב שבו שתי פעולות מחכות כל אחת לסיומה של האחרת, על כן הן לעולם אינן מסתיימות והמערכת נכנסת למצב של קיפאון. נתייחס ל-deadlock במערכות הפעלה: תהליך א׳ מבקש משאב מערכת (נגיד, זיכרון), אך המשאב תפוס על ידי תהליך ב׳, ולכן תהליך א׳ נכנס למצב המתנה. תהליך ב׳, מחכה גם הוא למשאב מערכת, נוסף על מה שכבר יש לו, (נגיד זמן מעבד) אך המשאב תפוס על ידי תהליך א׳. וכך שני התהליכים מחכים שכל אחד יסיים ושניהם לעולם לא יוכלו לסיים, עד שבסוף נמצא עצמנו עושים restart למחשב.
נוכל לחשוב איך אנחנו מייצרים deadlock בחיים שלנו. לדוגמה, אנחנו רוצים להחליף עבודה כי אנחנו מרגישים שלא טוב לנו בעבודה הנוכחית. המצב הנוכחי, בו לא טוב לנו בעבודה, דורש משאבי נפש. אנחנו מגיעים עייפים ומבואסים יותר הביתה. כדי לעשות מהלך של החלפת עבודה, אנחנו צריכים משאב זמן כדי לחפש עבודה חדשה. במקביל, יש גם תהליך ב׳ שהוא לדוגמה, ההורות. יש לנו ילדים, ואנחנו מקדישים להם את משאב הזמן. אבל בגלל המצב בעבודה, אנחנו מרגישים שאין לנו מספיק כוחות נפשיים פנויים כדי להקדיש להם כמו היינו רוצים. ואז אנחנו נכנסים לסוג של קיפאון. שינוי עבודה דורש להקדיש זמן, והזמן תפוס על ידי הילדים. אנחנו מקדישים לילדים זמן אבל מגיעים לזמן הזה בלי כוחות נפש שכן העבודה שלנו משתמשת בכל המשאב.
אז איך מתמודדים עם deadlock?
לפי ויקיפדיה יש שלוש גישות עיקריות:
1. מניעה והתחמקות - גישה זו דורשת הרבה משאבים (צריך לבדוק כל הזמן שלא נכנסים לקיפאון) ולכן יכולה להתבטא בהקטנת תפוקה. או במונחי החיים שלנו, נהיה כ״כ עסוקים בלהמנע מ-deadlocks שזה יפגע ביכולת שלנו להנות מהחיים. 2. זיהוי והתאוששות - המערכת (כלומר אנחנו) מריצה אלגוריתמים שבודקים אם היתה כניסה למצב קיפאון, ואלגוריתמים לטיפול והתאוששות מאותו קיפאון. כלומר, אם נקביל לחיי הנפש שלנו, אנחנו צריכים להריץ מדי פעם אלגוריתם פנימי כדי לבדוק אם מתרחש deadlock ובהתאם לפעול לשחרור שלו. מעניין לחשוב האם בכלל יש לנו אלגוריתמים כאלה שיודעים לזהות, להתריע, ולטפל ב-deadlocks שלנו? באיזה שלב אנחנו מצליחים להפעיל אותם: עם הכניסה למצב של קיפאון או רק אחרי שהרבה מהמשאבים התכלו? 3. התעלמות - אם יהיה קיפאון, הוא לא יטופל עד שהמשתמש לא יעשה restart. כלומר, אנחנו צריכים מישהו חיצוני למערכת שיטלטל אותנו ויגיד - תסגרו את כל התוכניות הפתוחות ותתחילו מחדש. מעניין לחשוב מה המשמעות של restart בחיים שלנו? מה אנחנו מאבדים בכל פעם שאנחנו מגיעים למצב של קיפאון ואז ריסטרט? האם יש דברים שנמחקים? כמה משאבים נדרשים מאיתנו כדי ״לסגור״ הכל ולפתוח מחדש? האם בחיים שלנו ריסטרט זה בכלל אופציה?
Comments