Однобитная ошибка в ESP регистре процессора вызывает STOP
0x0000007F (0x00000008,...)
0x0000007F (0x00000008, 0x00000000, 0x00000000, 0x00000000)
UNEXPECTED_KERNEL_MODE_TRAP
Симптомы
Ошибка может возникать на компьютерах под управлением Windows,
оснащенных процессором Intel Xeon (или другими). При этом ошибка
следующего вида
STOP 0x0000007F (0x00000008, 0x00000000, 0x00000000,
0x00000000) UNEXPECTED_KERNEL_MODE_TRAP
При возникновении ошибки наблюдаются следующие признаки.
- Первый параметр в данном сообщении равен 0x0000008 (ошибка
является двойным исключением).
- Вследствие ошибки в одном из битов регистра ESP данный регистр
содержит адрес, находящийся за пределами стека текущего потока.
Данная проблема возникает в следующих случаях.
- Система BIOS компьютера не загрузила обновление микрокода,
необходимое для работы процессора компьютера.
- Процессор поврежден или неисправен.
- Нарушены условия эксплуатации процессора (процессор
эксплуатируется при недопустимой температуре, неверном напряжении
питания или с неверной частотой).
Решение
Способ 1
Определите, установлена ли на компьютере последняя версия
обновления микрокода.
Обновление микрокода исправляет ошибки во внутренней логике
процессора. Обновления микрокода не могут храниться в процессоре и
загружаются в процессор при каждой загрузке компьютера. Загрузка
обновлений микрокода выполняется системой BIOS или драйвером
Update.sys.
Если на компьютере установлен процессор, выпущенный компанией
Intel, то для определения версии обновления микрокода, загружаемого
в данный процессор загрузите программу определения частоты
процессора Intel с сайта
http://support.intel.com/support/processors/tools/frequencyid;
после чего установите и запустите программу.
Запишите следующие сведения:
- семейство;
- модель;
- степпинг;
редакция.
Номера семейства, модели и степпинга однозначно определяют тип
процессора. Редакция процессора позволяет определить версию
загруженного обновления микрокода.
Признаки, описанные в данной статье, наиболее часто наблюдаются на
процессорах Intel Xeon с номером семейства 15, номером модели 2 и
степпингом 9, которые установлены на системных платах, использующих
набор микросхем ServerWorks (шестнадцатеричные значения указанных
выше номеров семейства, модели и степпинга равны F, 2 и 9
соответственно). Чтобы эти процессоры работали правильно,
необходима редакция 0x18 или более поздняя (значение 0x18 это
шестнадцатеричное представление десятичного числа 24).
Если номер редакции равен 0, значит, система BIOS компьютера не
содержит обновление микрокода для установленных на компьютере
процессоров. В этом случае необходимо установить обновление для
BIOS, которое содержит обновление микрокода, поддерживающее
используемые процессоры.
Способ 2
Убедитесь, что процессор исправен
Если у вас есть такая возможность, то попробуйте установить ваш
процессор на компьютер, на котором указанная проблема не возникает
либо установите на компьютер на котором проблема наблюдается
процессор с компьютера на котором данной проблемы нет.
Внимание! Не производите действия по замене процессора без
должной квалификации.
Если после замены процессора на исходном компьютере проблема не
исчезнет, а на компьютере, на который установлен исходный
процессор, проблема не возникнет, то процессор, скорее всего,
исправен и не является причиной ошибки.
Если после замены процессора на исходном компьютере проблема
исчезнет, а на компьютере, на который установлен исходный
процессор, проблема возникнет, то причиной проблемы, скорее всего,
является неисправность процессора.
Способ 3
Проверьте, соблюдаются ли условия эксплуатации процессора.
Высокая температура в помещении, плохая вентиляция или накопление
пыли могут вызывать сбои в работе процессоров и других компонентов.
Проблемы с вентиляцией могут быть вызваны неработающими
вентиляторами или закупоркой вентиляционных каналов. Если
внутренняя часть или вентиляционные каналы компьютера заполнены
пылью или если описанные признаки наблюдаются только при установке
компьютера в определенных местах, причиной проблемы может быть
перегрев. Убедитесь, что компоненты компьютера очищены от пыли,
вентиляторы работают надлежащим образом, вентиляционные каналы
свободны, а место установки компьютера надлежащим образом
вентилируется.
Сбои в работе процессоров и других компонентов могут вызываться
выходом напряжения питания за допустимые пределы, а также
перепадами напряжения. Использование напряжения питания
ненадлежащего номинала или плохого качества, перегрузка или сбои
блока питания компьютера, а также сбои в работе компонентов
системной платы могут привести к тому, что напряжение питания
процессора выйдет за допустимые пределы или будет ненадлежащего
качества.
Дополнительно
Регистр ESP также называют регистром указателя стека. Стек это
находящаяся в памяти структура данных, в которой хранятся сведения
о текущем состоянии выполнения потока. Стек потока используется для
отслеживания функций, выполняющихся в настоящий момент, а также для
хранения параметров, передаваемых этим функциям, и переменных,
используемых данными функциями. Регистр ESP должен содержать адрес
вершины стека. Если данный регистр содержит ошибочное значение, он
может ссылаться на неверные данные или недействительный адрес. Если
регистр ESP ссылается на недействительный адрес, может возникнуть
двойное исключение.
Чтобы определить, вызвана ли рассматриваемая STOP-ошибка ошибкой в
одном из битов регистра ESP, выполните следующие действия.
1. Установите средство Microsoft
Debugging Tools for Windows.
2. Запустите средство WinDbg, откройте нужный файл дампа
памяти через меню File -> Open Crash Dump.
Информация, отображаемая при начальном анализе файла дампа, может
выглядеть следующим образом.
3. Чтобы автоматически проанализировать файл дампа,
выполните команду !analyze -v. Ниже показан пример выходных данных
команды !analyze -v.
4. Проанализируйте результаты работы команды !analyze -v и
определите, содержатся ли в них сведения о возникновении двойной
ошибки. Если будет обнаружена двойная ошибка, выполните команду
.tss 28, чтобы отобразить состояние системы в момент возникновения
данной ошибки. В приведенном ниже примере показаны значения
регистров процессора в момент возникновения двойного
исключения.
В данном примере в регистре ESP содержится значение f5da9948. Как
правило, адрес, хранящийся в регистре ESP, незначительно отличается
от адреса, хранящегося в регистре EBP. В данном примере в регистре
EBP содержится значение f5d2997c.
5. Выполните команду !thread, чтобы отобразить диапазон
адресов, выделенный под стек текущего потока. Как правило, двойное
исключение возникает в тех случаях, когда адрес, хранящийся в
регистре ESP, находится за пределами диапазона адресов,
зарезервированных для стека текущего потока. Ниже показан пример
выходных данных команды !thread.
В данном примере диапазон адресов, выделенных под стек,
отображается в следующей строке.
Stack Init f5d2a000 Current f5d29c9c Base f5d2a000
Limit f5d27000 Call 0
При работе потока значение регистра ESP должно находиться в
пределах между базовым (Base, f5d2a000) и минимальным (Limit,
f5d27000) адресами стека. Как правило, адрес, хранящийся в регистре
регистра ESP, незначительно отличается от текущего адреса (Current,
f5d29c9c). Текущий адрес также находится между базовым и
минимальным адресами. В данном примере в регистре ESP содержится
значение f5da9948. Этот адрес находится далеко за пределами
диапазона адресов, выделенных для стека.
Чтобы определить диапазон адресов, выделенных под стек, можно также
воспользоваться командой !pcr. Ниже показан пример выходных данных
команды !pcr.
Значение NtTib.StackLimit представляет собой младший адрес из
диапазона адресов, выделенных под стек. NtTib.StackBase это
последнее значение регистра ESP. Чтобы определить, возникла ли в
одном из битов регистра ESP ошибка, сравните текущее значение
регистра ESP со значением NtTib.StackBase.
6. Чтобы определить разницу между значениями регистров ESP и
EBP, выполните команду .formats esp ^ ebp. Если ошибка не
возникала, значение, хранящееся в регистре EBP, будет незначительно
отличаться от значения указателя стека, хранящегося в регистре ESP.
Как правило, использование этой команды позволяет обнаружить
старший бит регистра ESP, содержащий ошибку. Обнаружение данного
бита облегчается при отображении результатов в двоичном виде, как
показано в следующем примере.
Если не рассматривать младшие (менее значимые) биты, то значения
регистров ESP и EBP отличаются одним битом. Разность этих значений
равна 00000000 00001000 00000000 00000000 (в двоичном виде) или
00080000 (в шестнадцатеричном виде).
Это показывает, что в одном из битов регистра ESP возникла ошибка,
в результате чего данный регистр содержит неправильное значение,
которое приводит к появлению двойного исключения, системной ошибки
и аварийному завершению работы системы.
Для получения дополнительных сведений об используемом оборудовании
выполните следующие действия.
1. Выполните команду !cpuinfo, чтобы получить сведения о
процессоре. Ниже показан пример выходных данных команды
!cpuinfo.
Для всех перечисленных PCI-устройств первое шестнадцатеричное
значение в каждой строке (это значение состоит из 8 цифр и имеет
тип DWORD) представляет собой идентификатор производителя и
устройства (VenDev ID). Фактически идентификатор производителя
определяется последними четырьмя цифрами. Например, первое
устройство в приведенном выше списке имеет идентификатор VenDev ID,
равный 0x00141166. При этом идентификатор устройства (Device ID)
равен 0x0014, а идентификатор производителя (Vendor ID) 0x1166.
Идентификатор производителя для наборов микросхем ServerWorks равен
0x1166. Это означает, что выше приведен результат работы команды
!pcitree на компьютере с системной платой, использующей набор
микросхем ServerWorks.
|