Пошук несправностей в мікропроцесорних системах
8. Повідомлення Blue Screen of Death
Стоп-повідомлення про помилки (Blue Screen of Death, BSOD) виникають у системах сімейства Windows NT у тому випадку, якщо операційна система виявляє фатальний збій, у результаті якого вона не може продовжити своє нормальне функціонування.
Повідомлення STOP містять спеціальний код ідентифікації (наприклад, STOP: 0x000000D1, плюс якісь параметри) і текстовий ідентифікатор (наприклад, IRQL_NOT_LESS_OR_EQUAL), а також рекомендації користувачеві по можливих способах усунення причин збою. У ряді випадків у тексті Blue Screen of Death може згадуватися ім'я файлу або пристрою, пов'язаного із причинами збою, і адреса пам'яті, по якому виникла проблема.
Усього стоп-кодів біля 200, докладно з ними можна познайомитися в документі Error and Event Messages із складу Windows 2000 Server Resource Kit . Розглянемо найпоширеніші Blue Screen of Death:
KMODE_EXCEPTION_NOT_HANDLED - процес режиму ядра спробував виконати неприпустиму або невідому процесорну інструкцію. Може бути пов'язаний з несумісністю "заліза", несправністю устаткування, помилками в драйвері або системній службі;
NTFS_FILE_SYSTEM - збій при виконанні коду драйвера файлової системи ntfs.sys. Причиною може бути порушення цілісності даних на жорсткому диску (збійний кластер) або в пам'яті, пошкодження драйверів IDE або SCSI;
DATA_BUS_ERROR - в оперативній пам'яті виявлена помилка парності. Причина: дефектне або несумісне устаткування, наприклад, збій у мікросхемі кеш-пам’яті другого рівня, у відеопам'яті. Також збій може бути пов'язаний з некоректно працюючим або невірно сконфігурованим драйвером, зі збоєм на жорсткому диску;
IRQL_NOT_LESS_OR_EQUAL - процес режиму ядра спробував звернутися до області пам'яті, використовуючи неприпустимо високий для нього рівень IRQL (Interrupt Request Level). Може бути викликаний помилками в драйвері, системній службі, BIOS або несумісним драйвером, службою, програмним забезпеченням (наприклад, антивірусом);
PAGE_FAULT_IN_NONPAGED_AREA – дані, що запитувались, відсутні в пам'яті (наприклад, система шукає потрібні дані у файлі підкачування, але не знаходить їх). Звичайно пов'язаний зі збоєм устаткування (дефектна пам'ять), порушенням файлової системи, помилкою системної служби або антивірусу;
KERNEL_STACK_INPAGE_ERROR - не вдається прочитати з файлу підкачування у фізичну пам'ять сторінку пам'яті. Причини: дефектний сектор файлу віртуальної пам'яті, збій контролера жорстких дисків, недостатньо місця на диску, неправильне підключення жорсткого диска, конфлікт переривань, дефект ОЗП, вірус;
MISMATCHED_HAL - рівень апаратних абстракцій (HAL) і ядро системи не відповідають типу комп'ютера. Найчастіше пов'язаний із ситуацією, коли в однопроцесорну систему встановлюють другий процесор, забуваючи вручну обновити HAL і ntoskrnl. Може також бути викликаний розбіжністю версій hal.dll і ntoskrnl.exe;
KERNEL_DATA_INPAGE_ERROR - не вдається прочитати у фізичну пам'ять сторінку даних. Причини - дефектний сектор файлу віртуальної пам'яті, збій контролера жорстких дисків, збій оперативної пам'яті, вірус, збій дискового контролера, дефектна оперативна пам'ять;
INACCESSIBLE_BOOT_DEVICE - у процесі завантаження ОС не змогла одержати доступ до системного розділу. Причин цього розповсюдженого збою можуть бути:
- дефектний завантажувальний диск або дисковий контролер; несумісність устаткування;
- завантажувальний вірус;
- помилка у файловій системі, наприклад, у таблиці розділів (Partition Table);
- ушкодження або відсутність необхідного при завантаженні файлу, наприклад, NTLDR;
- відсутність драйвера контролера жорстких дисків або невідповідність поточного драйвера встановленому устаткуванню;
- включений в BIOS режим DMA;
- включений в CMOS Setup режим зміни букв дисководів DRIVE SWAPPING;
- конфлікт розподілу ресурсів між дисковим контролером і іншим пристроєм;
- ушкодження даних у системному реєстрі про драйвера; установка системи в розділ за межами перших 1024 циліндрів жорсткого диска; помилка у файлі boot.ini;
UNEXPECTED_KERNEL_MODE_TRAP - виникнення пастки (trap) ядром або фатальна помилка (типу ділення на нуль). Несправність устаткування або збій програмного забезпечення;
STATUS_SYSTEM_PROCESS_TERMINATED - збій у службі, що працює в режимі користувача. Збій може бути пов'язаний з некоректною роботою прикладних програм, драйверів, сторонніх системних служб;
STATUS_IMAGE_CHECKSUM_MISMATCH - ушкоджений або загублений файл драйвера або системної бібліотеки. Може бути викликаний збоєм файлової системи або випадковим видаленням системного файлу.
Виходячи із цих даних і варто планувати процес пошуку причин збоїти, що може включати:
- видалення застарілих або несумісних додатків;
- видалення драйверів, що не мають цифрового підпису;
- відновлення програмного забезпечення й драйверів устаткування;
- видалення несумісного устаткування;
- перевірка файлової системи;
- сканування антивірусом;
- перевірка системних файлів за допомогою утиліти sfc.exe (команда sfc /scannow);
- тестування або заміна пам'яті;
- установка останніх оновлень і патчів операційної системи й програмного забезпечення;
- зміна настройки CMOS Setup, наприклад, відключення кешування або режиму DMA;
- відновлення головного завантажувального запису (MBR) і системного завантажника Windows NT;
- перевірка правильності підключення дисків, дискових контролерів і SCSI-адаптерів;
- відмова від розгону; переустановка системи.
Останнім часом дуже часто оперативна пам'ять є причиною проблем багатьох користувачів. В особливо важких випадках операційна система видає Blue Screen of Death відразу ж після завантаження або безпосередньо в її процесі, і немає ніякої можливості зайнятися пошуком причин збою, провести діагностику або видалити проблемний драйвер.