למה מסך כחול הוא ההוכחה הטובה ביותר לכך שהמחשב שלך תקין

2 באפריל 2007

תגיות: ,
אין תגובות

לצערנו מסכים כחולים הולכים ונעלמים מנוף חדרי השרתים וסביבות המשתמש. גם XPSP2 וגם W2K3SP2 יציבים מדי ולא מתעופפים להם בעליזות רבה כבימים ימימה (למגינת ליבם של חובבי היוניקס למיניהם שאוהבים עד היום לחיות בעבר ולנפנף במנטרה הזו). היציבות הזו גרמה לכך שאחד המיזמים של קבוצת השיווק במיקרוסופט נאלץ להיגנז, ואני מדבר כמובן על המיזם למכור שטח פרסומת על גבי המסכים הכחולים (עם חשיפה מובטחת). היציבות הזו גורמת נזק רב גם למפתחים, בעיקר בסביבה ארגונית. אם עד עכשיו יכולת לסמוך על מנהל ה IT שיעשה לפחות Reset אחד כל יום לשרת בגלל מסך כחול. כיום זה כבר לא משהו שאתה יכול לקבל כדבר מובטח מאליו. התוצאה היא שכל זליגות הזכרון הקטנות שהתעלמת מהם בפיתוח, מצטברות ומתגלות ומציפות לעין כל את הפשלות שעשית בפיתוח. הבעיה חמורה עד כדי כך שמתארגנת קבומת אינטרס של מפתחים תחת הכותרת Reset Every Day, על מנת לשכנע את מיקרוסופט לאפשר למפתחים לפגוע קצת ביציבות של המערכת. מצד שני התשובה של אנשי ה PR של מיקרוסופט, היא שלא צריך מאמץ מיוחד מצד מיקרוסופט כדי לפגוע ביציבות המערכת והמפתחים עושים את זה מספיק טוב לבד. למעשה, אומרים אנשי ה PR, אחת הסיבות העיקריות לכך שמיקרוסופט עשתה את דוט נט ואת ה CLR היתה כדי לשחרר את המפתחים מהצורך לבצע Reference count על האוביקטים שלהם. היוזמה הזו באה לאחר שמחקר מדעי הוכיח שמפתח ממוצע איננו מסוגל לספור מאפס עד שלוש ובחזרה לאפס ללא טעות. ההוכחה המדעית למחקר היא שה Bug הנפוץ ביותר בתוכנות שרתים ובמערכות לקוח עד ימינו אנו, הוא פניה לאוביקט שכבר נעשה לו Delete ו/או השארת אוביקט לנצח בזכרון גם לאחר שאף אחד לא צריך אותו יותר.

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

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

ולמה שמפתח יקרא לשגרה הזו ? ישנם המון סיבות וכולם מתועדות היטב ב WDK (וגם ב Debugging tools for windows). המכנה המשותף לכל הסיבות הללו הוא איתור בזמן ריצה של בעיה, שהיא כל כך קריטית ומשמעותית לסביבת העבודה של מערכת ההפעלה, שכל המשך פעולה של מערכת ההפעלה בתנאים הללו, יכול רק להחמיר את הנזק שיגרם, ולגרום לתוצאות גרועות עוד יותר. במקרה כזה, כל מה שנשאר למי שאיתר את הבעיה החמורה הזו, זה לסמן את הבעיה וללחוץ על כפתור האזעקה / המפלט / העצירה / ההשמדה עצמית, לפני שיגרם נזק גדול יותר. לאיסטרטגיה הזו קוראים Fall to a safe place והיא מקובלת מאד אצל כל מי שעוסק בתרחישי חירום.

כל מה שאתה צריך לעשות כדי לדעת מה בדיוק גרם ללחיצה על הכפתור האדום, הוא לקרוא את ה Dump לתוך כלי קריאת Dump – ים כמו WinDbg ולתת את פקודת הקסם "Analize -v!" וללכת ולחפש בתיעוד את הסיבה. גם אם לא תבין את הסיבה, המודול הגורם יוצבע בה בבירור ובדרך כלל לא צריך יותר מזה כל מנת לדעת מי הפושע.

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

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *