本文提供了停止0x0000007F的解决方案,0x00000008计算机上的错误消息,因为出现特定的处理器错误。 当计算机上运行的处理器的 ESP 寄存器中出现单位错误时,可能会显示此错误消息。
原始 KB 数: 842465
现象
在运行一个或多个 Intel Xeon 处理器或运行其他处理器的计算机上,Windows 可能会显示类似于以下示例的“停止”错误消息:
停止0x0000007F(0x00000008、0x00000000、0x00000000、0x00000000)UNEXPECTED_KERNEL_MODE_TRAP
出现此问题时,以下条件为 true:
- Stop 错误的第一个参数是“0x0000008”。 (此错误是双重错误异常。
- 由于 ESP 寄存器的上半部分出现单位错误,ESP 寄存器中的值超出了当前线程的堆栈范围。
原因
如果计算机中的一个或多个处理器出现此问题:
- 需要计算机的基本输入/输出系统(BIOS)未应用的微代码更新。
- 损坏或有缺陷。
- 在温度、电源或其他条件的指定范围内运行。
解决方法
若要解决此问题,请使用以下故障排除方法之一。
方法 1:确定处理器是否正在运行微代码更新的生产修订版
微代码更新在处理器内部实现的逻辑中更正了错误或 bug。 微代码更新不能永久存储在处理器本身中,并且每次计算机启动时都必须加载到处理器中。 微代码更新可由计算机的 BIOS 或Update.sys驱动程序应用。
若要确定当前应用于计算机上安装的 Intel 处理器的微代码更新的修订,请执行以下步骤:
-
在遇到症状的计算机上安装并运行 Intel 处理器识别实用工具。
-
记下每个处理器的以下 CPU 信息:
- CPU 系列
- CPU 模型
- CPU 单步执行
- CPU 修订
CPU 系列、CPU 模型和 CPU 单步执行值标识特定类型的处理器。 CPU 修订值标识应用的微代码更新的修订。
-
请与计算机制造商联系,以确定微码更新的修订是否是可用于特定处理器的最新修订版。 如果修订不是最新的,请向计算机制造商询问将应用最新微代码更新修订的更新 BIOS。
本文中所述的症状最常出现在 CPU 系列、CPU 型号和 CPU 单步执行值为 15、2 和 9 的 Intel Xeon 处理器上,以及分别安装在使用 ServerWorks 芯片集的主板上。 (CPU 系列、CPU 模型和 CPU 单步执行十六进制值分别为 F、2 和 9)。这些处理器需要0x18或更高版本的修订值才能正常工作。 (0x18等效于十进制值 24。)
修订值为 0 表示计算机 BIOS 没有计算机中安装的处理器的正确微代码更新。 必须使用支持所使用的处理器的微代码更新修订版更新 BIOS。
Intel 建议应用最新的微代码更新修订,以帮助避免已知问题。
方法 2:确定处理器是否损坏或有缺陷
如果受影响的计算机中安装的处理器应用了生产微代码更新修订,并且本文中所述的症状不会发生在运行同一处理器的同一模型的所有计算机上,则处理器可能会有缺陷。
若要确定处理器是否损坏或有缺陷,请将处理器移动到没有出现任何症状的计算机。
警告
如果更改处理器,请按照计算机制造商提供的说明进行操作,或与适当限定的硬件技术人员联系以更改处理器。
如果症状继续发生在具有更换处理器的原始计算机上,但不发生在具有原始处理器的另一台计算机上,则问题可能不是由损坏或有缺陷的处理器引起的。
如果症状不会继续发生在原始计算机上具有更换处理器,但确实发生在具有原始处理器的另一台计算机上,则问题可能是由损坏或有缺陷的处理器引起的。 在这种情况下,请与计算机制造商联系以替换原始处理器。
如果遇到本文中所述症状的计算机具有多个处理器,请将所有处理器移动到另一台计算机。 如果结果指示其中一个或多个处理器可能有缺陷,则一次移动处理器以确定可能有缺陷的处理器或处理器。
方法 3:确定处理器是否在指定的环境条件范围内运行
过度的室内温度、不良通风或灰尘积累可能导致电子组件(如处理器)的行为不正常。 故障风扇或阻塞的空气通道可能会导致通风问题。 如果计算机的内部或空气通道是尘土飞扬的,或者如果计算机仅在特定位置安装时出现症状,系统过热可能是一个因素。 确保组件干净,风扇正常运行,空气通道不受阻碍。 此外,请确保计算机所在的房间充分通风。 房间的温度必须位于计算机制造商指定的操作范围内。
高于或低于指定或波动的电压可能导致处理器和其他电子组件的行为不正常。 主电压不正确或不一致、计算机中过载或电源功能不当,或者主板线路运行不当可能会导致向处理器提供不正确的或不一致的电压。 请与相应的技术人员联系,以验证这些问题是否可能是症状的原因。
详细信息
ESP 寄存器也称为堆栈指针寄存器。 堆栈是内存中的数据结构,用于存储有关线程执行当前状态的信息。 线程的堆栈用于跟踪正在进行的函数调用、传递给这些函数的参数以及这些函数使用的变量。 ESP 寄存器中的值应指向堆栈的当前顶部。 如果 ESP 中的值不正确,则可能指向不正确的信息或无效的地址。 如果 ESP 中的值指向无效的地址,则可能会发生双重故障异常。
若要确定 Stop 错误是否是 ESP 寄存器中单位错误的结果,请执行以下步骤:
-
安装适用于 Windows 的Microsoft调试工具。
-
运行 WinDbg 工具,选择“文件**”**,选择“打开故障转储”以找到包含停止错误信息的内存转储文件,然后选择“确定”。
-
!analyze -v运行以下命令以获取转储文件的自动分析。 -
检查命令的
!analyze -v输出,以查看输出是否显示双重故障条件。 如果存在双故障条件,请.tss 28运行该命令,在双故障时显示系统状态。 通常,此值相对接近 EBP 寄存器的值。 -
!thread运行命令以查看当前线程的堆栈范围。 当 ESP 寄存器的值超出为当前线程的堆栈保留的地址范围之外时,通常会发生双故障异常。运行此特定线程时,ESP 寄存器值必须始终位于堆栈基值 (f5d2a000) 和限制值 (f5d27000) 之间。 通常,ESP 寄存器的值相对接近当前值 (f5d29c9c9c9c)。 (当前值也在堆栈基值和 Limit 值之间。
还可以通过运行
!pcr命令来检查堆栈范围值。该值
NtTib.StackLimit表示堆栈范围的下限。 该值NtTib.StackBase表示 ESP 的最近值。 该值NtTib.StackBase可能与 ESP 寄存器的当前值进行比较,以帮助确定当前 ESP 寄存器值中是否存在单位错误。 -
.formats esp ^ ebp运行该命令以显示 ESP 和 EBP 寄存器之间的值差异。 EBP 寄存器中的堆栈指针值将接近 ESP 寄存器中的堆栈指针值,但单位错误除外。 此命令经常显示包含错误的单个高阶位,尤其是在以二进制格式显示错误时。如果忽略较低的最小有效数字,ESP 和 EBP 寄存器之间的单位差异为 0000000000000000000000000000(二进制格式)。 区别是十六进制格式的 00080000。
此单位错误导致 ESP 寄存器包含不正确的值。 不正确的值会导致双重故障异常、bug 检查和系统崩溃。
若要获取有关特定硬件的详细信息,请执行以下步骤:
-
!cpuinfo使用命令获取 CPU 版本信息。尽管在分析故障转储文件时,更新签名值可能并不总是准确报告,但“更新签名”字段通常表示应用于 CPU 的微代码更新修订。
-
!pcitree使用命令查找现有外围连接接口(PCI)设备的供应商和设备标识符(VenDev ID)。对于列出的每个 PCI 设备,每行的第一个 8 位十六进制值 (DWORD) 是 VenDev ID。 供应商 ID 实际上是此值的第二个 4 位数字。 例如,列出的第一个设备具有 0x00141166 的 VenDev ID。 设备 ID 0x0014,供应商 ID 0x1166。 ServerWorks 的供应商 ID 0x1166。 因此,此输出来自安装在使用 ServerWorks 芯片集的主板上的处理器。
本文中提到的第三方产品由 Microsoft 以外的其他公司提供。 Microsoft 不对这些产品的性能或可靠性提供任何明示或暗示性担保。