top of page

דדלוק Deadlock

קיפאון, או deadlock, הוא מצב שבו שתי פעולות מחכות כל אחת לסיומה של האחרת, על כן הן לעולם אינן מסתיימות והמערכת נכנסת למצב של קיפאון. נתייחס ל-deadlock במערכות הפעלה: תהליך א׳ מבקש משאב מערכת (נגיד, זיכרון), אך המשאב תפוס על ידי תהליך ב׳, ולכן תהליך א׳ נכנס למצב המתנה. תהליך ב׳, מחכה גם הוא למשאב מערכת, נוסף על מה שכבר יש לו, (נגיד זמן מעבד) אך המשאב תפוס על ידי תהליך א׳. וכך שני התהליכים מחכים שכל אחד יסיים ושניהם לעולם לא יוכלו לסיים, עד שבסוף נמצא עצמנו עושים restart למחשב.


נוכל לחשוב איך אנחנו מייצרים deadlock בחיים שלנו. לדוגמה, אנחנו רוצים להחליף עבודה כי אנחנו מרגישים שלא טוב לנו בעבודה הנוכחית. המצב הנוכחי, בו לא טוב לנו בעבודה, דורש משאבי נפש. אנחנו מגיעים עייפים ומבואסים יותר הביתה. כדי לעשות מהלך של החלפת עבודה, אנחנו צריכים משאב זמן כדי לחפש עבודה חדשה. במקביל, יש גם תהליך ב׳ שהוא לדוגמה, ההורות. יש לנו ילדים, ואנחנו מקדישים להם את משאב הזמן. אבל בגלל המצב בעבודה, אנחנו מרגישים שאין לנו מספיק כוחות נפשיים פנויים כדי להקדיש להם כמו היינו רוצים. ואז אנחנו נכנסים לסוג של קיפאון. שינוי עבודה דורש להקדיש זמן, והזמן תפוס על ידי הילדים. אנחנו מקדישים לילדים זמן אבל מגיעים לזמן הזה בלי כוחות נפש שכן העבודה שלנו משתמשת בכל המשאב.


אז איך מתמודדים עם deadlock?


לפי ויקיפדיה יש שלוש גישות עיקריות:

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

פוסטים אחרונים

הצג הכול

קוד לגאסי והעברה בין דורית

חלק מהסיפור שמעצבן בקוד לגאסי זה העובדה שאנחנו לרוב ״יורשים״ אותו, ובעצם לא כתבנו אותו בעצמנו. לכן, כשאנחנו מנסים לצלול פנימה ולעבוד איתו, אנחנו יכולים להתקל במצבים מתסכלים בהם אנחנו לא מבינים למה לעז

רקורסיה, תנאי עצירה וקול פנימי

רקורסיה היא פונקציה שקוראת לעצמה עד לתנאי עצירה (ללא תנאי עצירה, מדובר ברקורסיה אין סופית). נסביר באמצעות דוגמה קלאסית - חישוב עצרת (זוכרים מה זה עצרת? 4!=1*2*3*4). הפונקציה תקרא לעצמה עד לתנאי העצירה

חלומות ו-obfuscation

ערפול, obfuscation, הוא מונח שמתאר כתיבת קוד באופן שמקשה על אדם אחר לקרוא ולהבין אותו. ‬למה בעצם לעשות זאת? obfuscation יכול לשמש כאמצעי אבטחה המגן על הקניין הרוחני ומקשה על ביצוע reverse engineering.

כשעזבתי את עבודתי כראש צוות בחברת הייטק והתחלתי את לימודי התואר השני בפסיכולוגיה קלינית, צצו לי מדי פעם נקודות חיבור בין העולמות. את נקודות חיבור אלו, העליתי על הכתב:

bottom of page