Что показано на синем экране смерти (BSOD)
Операционная система Windows имеет два основных уровня: уровень ядра и пользовательский уровень. Пользовательский уровень не может непосредственно обращаться к аппаратному обеспечению и ограничен в рамках определенного адресного пространства.
Пользовательский уровень работает режиме 3 (наименьший приоритет). Если программа пользовательского уровня приводит к возникновению ошибки, операционная система Windows завершает выполнение программы и генерирует сообщение об ошибке. Поскольку программа работает в собственном адресном пространстве, оно не будет оказывать влияние на другие программы. В пользовательском режиме работают следующие компоненты:
· служба регистрации;
· подсистема безопасности;
· программа и подсистема Win32;
· программа и подсистема OS/2;
· программа и подсистема POSIX.
В архитектуру Windows были внесены некоторые изменения, поскольку процессы режима ядра работают намного быстрее (режим 0). Драйвера видеоадаптеров и печати были переданы из пользовательского режима в режим ядра. Последний является привилегированным режимом центрального процессора и предоставляет непосредственный доступ к оперативной памяти и аппаратному обеспечению компьютера. Ошибки уровне ядра обычно невозможно восстановить, поэтому требуется перезагрузка компьютера.
“Синий экран смерти” (BSOD) — это встроенный механизм перехвата ошибок, который используется для остановки работы всех системных, чтобы избежать повреждения системы и данных. Это означает, что драйвер печати или видеоадаптера, содержащий ошибку, может привести к аварийному завершению работы Windows. В режиме ядра работают следующие компоненты:
· различные диспетчеры, службы управления вводом/выводом данных, объекты, модули безопасности, система IPC (interprocess communication), графическая оболочка, диалоговые окна и виртуальная память;
· микроядро, которое предоставляет базовые функции операционной системы;
· уровень аппаратных абстракций (HAL);
· драйверы устройств.
Тем не менее, что за информация отображается на экране BSOD (или экране STOP)? Далее приводится основная структура информации BSOD; реальное содержимое окна BSOD зависит от конкретной программной ошибки, поэтому некоторые из описанных разделов могут отсутствовать.
Раздел 1: индикаторы статуса порта отладки
DSR CTS SND
—————————————————————
Раздел 2: информация об ошибке
*** STOP: 0x0000000A (0×00000002, 0×00000000, 0xDB30442D)
IRQL_NOT_LESS_OR_EQUAL *** Address db30442d has base at db300000 — matrxmil.SYS
CPUID: GenuineIntel 5.2.4 irql:if SYSVER 0xF0000565
—————————————————————
Раздел 3: информация о драйверах
Dll Base DateStmp — Name Dll Base DateStmp — Name
80100000 2cd348a4 — ntoskrnl.exe 80400000 2cd348b2 — hal.dll
80010000 2cd348b5 — ncrc810.sys 80013000 2cda574d — SCSIPORT.SYS
и так далее…
—————————————————————
Раздел 4: сборка ядра и дамп стека
Address dword dump Build [1381] — Name
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx —
matrxmil.SYS
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx —
ntoskrnl.exe
xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx —
ntoskrnl.exe
и так далее…
—————————————————————
Раздел 5: данные порта отладки
Restart and set the recovery options in the system control panel
or the /CRASHDEBUG system start option if this message reappears,
contact your system administrator or technical support group
Если система была запущена с параметрами /debug или /crashdebug, то будет использоваться следующее сообщение:
Kernel Debugger Using: Com2 (Port 0x2f8), Baud Rate 9600)
Beginning Dump of physical memory
Physical memory dump complete. Contact your system administrator or
technical support group
Раздел 1
Этот раздел отображается только в том случае, если система была запущена с параметрами /debug или /crashdebug. Для определения того, запущен ли системный отладчик, достаточно обратить внимание на меню загрузчика при загрузке Windows. Возле пункта меню запуска Windows будет отображаться строка [debugger enabled]. Для включения режима отладки с помощью параметра /debug необходимо выполнить следующие действия.
1. Поменяйте атрибуты файла BOOT.INI:
attrib c:\boot.ini – r – s
2. Отредактируйте этот файл и в строку запуска Windows NT добавьте параметр /debug (для того, чтобы сообщить системе о необходимости загрузки в оперативную память отладчика ядра при загрузке Windows) или /crashdebug (чтобы система загрузила отладчик, однако записала его выходные данные в файле подкачки). Дополнительными параметрами являются /Debugport, сообщающий системе, какой порт COM необходимо использовать (по умолчанию COM2) и /Baudrate — для указания скорости передачи данных (по умолчанию указана скорость 19200 бит/с, но лучше использовать 9600 бит/с). Например:
[operating systems]
multi(0)disk(0)rdisk(0)partition(0)\WINDOWS="Windows NT" /debug /debugport=com3 /baudrate=9600
3. Сохраните отредактированный файл.
4. Верните прежние атрибуты файла BOOT.INI:
attrib c:\boot.ini +r +s
Трехсимвольные аббревиатуры являются сигналами (например, RTS — это Ready To Send, DSR — Data Send Ready, CTS —Clear To Send, а SND означает, что данные передаются на последовательный порт).
Раздел 2
Этот раздел содержит код ошибки (или код BugCheck) с максимум четырьмя, определенными разработчиком, параметрами (они определяются в вызове функции KeBugCheckEx()). В данном случае код BugCheck имеет значение 0x0000000A IRQL_NOT_LESS_OR_EQUAL. Это означает, что системный процесс пытался получить доступ к выгружаемой памяти на уровне процесса, приоритет которого слишком высок. Обычно такая ошибка вызывается драйвером устройства.
Например, значение BugCheck, равное 0×00000077 или 0x0000007A, означает, что содержимое файла подкачки не может быть загружено в память. Второе шестнадцатеричное значение поможет диагностировать причину возникновения проблемы. Возможные значения приводятся далее.
Значения BugCheck
0xC000009A |
Ошибка STATUS_INSUFFICIENT_RESOURCES, вызывается недостатком невыгружаемого пула |
0xC000009A |
Ошибка STATUS_DEVICE_DATA_ERROR, обычно вызывается сбойным блоком на жестком диске |
0xC000009D |
Ошибка STATUS_DEVICE_NOT_CONNECTED, вызывается испорченным, неплотно прилегающим кабелем или терминатором; может вызываться тем, что контроллер не обнаруживает диск |
0xC000016A |
Ошибка STATUS_DISK_OPERATION_FAILED, вызывается сбойным блоком на диске |
0xC0000185 |
Ошибка STATUS_IO_DEVICE_ERROR, вызывается неправильной установкой терминаторов или кабелей на устройствах SCSI |
Раздел 3
В этом разделе перечислены все драйвера, которые были загружены в момент аварийного завершения работы. Раздел разделен на две области, в каждой из который указывается три столбца. Первый столбец является временным штампом (в секундах с 1-го января 1970 гг.). Это значение может быть преобразовано в действительное время с помощью утилиты CVTIME.EXE (в свое время в операционной системе VMS для этого использовалась утилита f$cvtime).
Раздел 4
Этот раздел содержит информацию о номере сборки операционной системы и дамп стека, включающий в себя адреса, используемые поврежденным модулем. В верхних строках может содержаться информация о сбойном драйвере или коде, однако не всегда, поскольку обработчики ловушки ядра могут выполняться в последнюю очередь для сохранения информации об ошибке.
Раздел 5
Содержимое раздела зависит от наличия параметра /debug. Впрочем, в разделе содержится лишь информация о необходимости обращения к администратору/службе поддержки и о том, создан ли файл .DMP.