O erro de paragem 7F, 0x000000008 (falha dupla) ocorre devido a um erro de um bit no registo ESP

Informações de Suporte Internas da Microsoft

BUG #: 103863 (Windows SE)

Resumo

Este documento discute por que razão o Windows pode apresentar uma mensagem de erro "STOP 0x0000007F, 0x000000008" no seu computador devido a um erro específico do processador. Esta mensagem de erro pode ser exibida quando ocorre um erro de um bit no registo ESP de um processador que está a ser em execução no computador. O artigo descreve métodos para ajudá-lo a resolver este erro.

Sintomas

Num computador que esteja a executar um ou mais processadores Intel Xeon, ou que esteja a executar outros processadores, o Windows pode apresentar uma mensagem de erro stop que é semelhante à seguinte:

STOP 0x0000000F (0x000000008, 0x00000000000000000000000F (0x0000000000000000000000) UNEXPECTED_KERNEL_MODE_TRAP

Quando este problema ocorre, as seguintes condições são verdadeiras:

  • O primeiro parâmetro do erro stop é "0x0000008". (Este erro é uma exceção de dupla falha.)

  • Devido a um erro de um bit na metade superior do registo ESP, o valor no registo ESP está fora da gama de pilhas do fio atual.

Causa

Este problema ocorre se um ou mais dos processadores do computador:

  • Requerer uma atualização de microcódigo que não seja aplicada pelo sistema básico de entrada/saída do computador (BIOS).

  • Estão danificados ou defeituosos.

  • Estão a funcionar fora dos intervalos especificados para temperatura, energia ou outras condições.

Resolução

Para resolver este problema, utilize um dos seguintes métodos de resolução de problemas.

Método 1: Determinar se o processador está a executar a revisão de produção da atualização do microcódigo

Uma atualização de microcódigo corrige a errata, ou bugs, na lógica interna de um processador. As atualizações de microcódigo não podem ser permanentemente armazenadas no próprio processador e devem ser carregadas no processador sempre que o computador começar. As atualizações de microcódigo podem ser aplicadas pelo BIOS do computador ou pelo controlador Update.sys. Para identificar a revisão da atualização do microcódigo que é atualmente aplicada a um processador Intel que está instalado no seu computador, siga estes passos:

  1. Descarregue o Utilitário de ID de frequência do processador Intel a partir do seguinte web site da Intel:

  2. Instale e execute o utilitário de ID de frequência do processador Intel no computador que está a sentir sintomas.

  3. Anote as seguintes informações do CPU para cada processador:

    • Família CPU

    • Modelo CPU

    • Passos do CPU

    • Revisão da CPU

    Os valores da Família CPU, do Modelo CPU e do CPU Stepndos identificam o tipo específico de processador. O valor de Revisão do CPU identifica a revisão da atualização do microcódigo que é aplicada.

  4. Contacte o fabricante do computador para determinar se a revisão da atualização do microcódigo é a revisão mais atual que está disponível para um determinado processador. Se a revisão não for a mais atualizada, peça ao fabricante de computadores um BIOS atualizado que aplique a revisão mais atual da atualização do microcódigo.

Os sintomas descritos neste artigo têm sido observados com mais frequência em processadores Intel Xeon que têm os valores de cpu family, CPU Model e CPU Stepping de 15, 2 e 9 respectivamente e que são instalados em placas-mãe que usam chipsets ServerWorks. (A família da CPU, o modelo cpu e os valores hexadecimais de passo da CPU são F, 2 e 9 respectivamente.) Estes processadores requerem um valor de revisão de 0x18 ou posterior para funcionar corretamente. (0x18 equivale a um valor decimal de 24.) Um valor de revisão de 0 indica que o computador BIOS não tem a atualização correta do microcódigo para os processadores instalados no computador. Tem de atualizar o BIOS com uma revisão da atualização do microcódigo que suporta os processadores que está a utilizar. A Intel recomenda que aplique as mais recentes revisões de atualização de microcódigo para ajudar a evitar problemas conhecidos.

Método 2: Determinar se um processador está danificado ou defeituoso

Se os processadores instalados nos computadores afetados tiverem a revisão da atualização do microcódigo de produção aplicada, e os sintomas descritos neste artigo não ocorrerem em todos os computadores do mesmo modelo que estão a executar os mesmos processadores, os processadores podem estar defeituosos. Para determinar se um processador está danificado ou defeituoso, mova o processador para um computador que não esteja a sentir nenhum sintoma.Aviso Se alterar os processadores, siga as instruções fornecidas pelo fabricante do computador ou engate técnicos de hardware devidamente qualificados para alterar os processadores. Se os sintomas continuarem a ocorrer no computador original com o processador de substituição, mas não no outro computador com o processador original, o problema provavelmente não é causado por um processador danificado ou defeituoso. Se os sintomas não continuarem a ocorrer no computador original com o processador de substituição, mas ocorrerem no outro computador com o processador original, o problema é provavelmente causado por um processador danificado ou defeituoso. Neste caso, contacte o fabricante do computador para substituir o processador original. Se o computador que está a experimentar os sintomas descritos neste artigo tiver mais que um processador, mova todos os processadores para o outro computador. Se os resultados indicarem que um ou mais destes processadores podem estar defeituosos, mova os processadores um de cada vez para determinar o processador ou processadores que possam estar defeituosos.

Método 3: Determinar se um processador está a operar fora de uma gama especificada de condições ambientais

A temperatura ambiente excessiva, a má ventilação ou a acumulação de pó podem fazer com que os componentes eletrónicos, como os processadores, se comportem de forma errática. Ventoinhas avariadas ou passagens de ar bloqueadas podem causar problemas de ventilação. Se o interior ou as passagens de ar do computador estiverem empoeirados, ou se o computador apresentar sintomas quando é instalado apenas num determinado local, o sobreaquecimento do sistema pode ser um fator. Certifique-se de que os componentes estão limpos, que as ventoinhas estão a funcionar corretamente e que as passagens de ar não estão obstruídas. Além disso, certifique-se de que a sala onde o computador está localizado está adequadamente ventilada. A temperatura da sala deve estar na gama de funcionamento especificada pelo fabricante do computador. A tensão superior ou inferior à especificada, ou que flutua, pode fazer com que os processadores e outros componentes eletrónicos se comportem de forma errática. Uma tensão de alimentação principal incorreta ou inconsistente, uma alimentação de alimentação sobrecarregada ou incorretamente funcional no computador, ou circuitos de motherboard que funcionam incorretamente podem causar tensão incorreta ou inconsistente ao processador. Contacte os técnicos apropriados para verificar se algum destes problemas pode ser a causa dos sintomas.Para obter informações sobre como contactar o fabricante de computadores, visite o seguinte web site da Microsoft:

Mais Informações

Para obter informações adicionais sobre erros "STOP 0x00000007F", clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:

Causas gerais de erros STOP 0x000000FO registo ESP também é conhecido como o registo de ponteiro de pilha. Uma pilha é uma estrutura de dados na memória que é usada para armazenar informações sobre o estado atual da execução de um fio. A pilha de um fio é usada para acompanhar as chamadas de função em andamento, de parâmetros que são passados para essas funções, e de variáveis que são usadas por essas funções. Espera-se que o valor no registo ESP aponte para o topo atual da pilha. Se o valor em ESP estiver incorreto, pode apontar para informações incorretas ou para um endereço inválido. Se o valor em ESP aponta para um endereço inválido, poderá ocorrer uma exceção por dupla falha. Para determinar se o erro stop é o resultado de um erro de um bit no registo ESP, siga estes passos:

  1. Instale as ferramentas de depurar da Microsoft para windows. Para descarregar as ferramentas, visite o seguinte Web site da Microsoft:

  2. Executar a ferramenta WinDbg, clicar em Ficheiro, clique em Open Crash Dump para localizar o ficheiro de despejo de memória que contém as informações de erro de stop e, em seguida, clique em OK. A análise inicial do cheque de bugs parece normalmente semelhante à seguinte:******************************************************************************** ** Bugcheck Analysis ** ********************************************************************************Use !analyze -v to get detailed debugging information.BugCheck 7F, {8, 0, 0, 0}Probably caused by : ntkrnlmp.exe ( nt!KiUnlockDispatcherDatabase+1c )Followup: MachineOwner

  3. Executar o comando !analyze -v para obter uma análise automatizada do ficheiro de despejo. Segue-se um exemplo da saída do comando !analyze -v:0: kd> !analyze -v******************************************************************************** ** Bugcheck Analysis ** ********************************************************************************UNEXPECTED_KERNEL_MODE_TRAP (7f)This means a trap occurred in kernel mode, and it is a trap of a kindthat the kernel isn't permitted to have/catch (bound trap) or thatis always instant death (double fault). The first number in thebugcheck params is the number of the trap (8 = double fault, etc)Consult an Intel x86 family manual to learn more about what thesetraps are. Here is a *portion* of those codes:If kv shows a taskGate use .tss on the part before the colon, then kv.Else if kv shows a trapframe use .trap on that valueElse .trap on the appropriate frame will show where the trap was taken (on x86, this will be the ebp that goes with the procedure KiTrap)Endifkb will then show the corrected stack.Arguments:Arg1: 00000008, EXCEPTION_DOUBLE_FAULTArg2: 00000000Arg3: 00000000Arg4: 00000000Debugging Details:------------------BUGCHECK_STR: 0x7f_8TSS: 00000028 -- (.tss 28)eax=ffdff4dc ebx=f5d299dc ecx=8046f1c0 edx=00000000 esi=853e7a60 edi=00000102eip=8046a86c esp=f5da9948 ebp=f5d2997c iopl=0 nv up ei pl zr na po nccs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246nt!KiUnlockDispatcherDatabase+0x1c:8046a86c 59 pop ecxResetting default scopeDEFAULT_BUCKET_ID: DRIVER_FAULTLAST_CONTROL_TRANSFER: from 80450bb3 to 8046a86cSTACK_TEXT: f5d2997c 80450bb3 00000003 f5d299f8 00000001 nt!KiUnlockDispatcherDatabase+0x1cf5d29d48 80466389 00000003 0076fe84 00000001 nt!NtWaitForMultipleObjects+0x385f5d29d48 77f9323e 00000003 0076fe84 00000001 nt!KiSystemService+0xc90076fe5c 77e7a059 00000003 0076fe84 00000001 ntdll!ZwWaitForMultipleObjects+0xb0076feac 77dee9fb 0076fe84 00000001 00000000 KERNEL32!WaitForMultipleObjectsEx+0xea0076ff08 77deea48 0076fed4 0076ff5c 00000000 USER32!MsgWaitForMultipleObjectsEx+0x1530076ff24 6d095a7c 00000002 0076ff5c 00000000 USER32!MsgWaitForMultipleObjects+0x1d0076ff7c 780085bc 00283a90 0062f5ac 0062ffdc IisRTL!SchedulerWorkerThread+0xa70076ff90 8042fa31 85400680 0076ff88 ffffffff MSVCRT!_endthreadex+0xc100283ab8 ffffffff 00000000 00000000 00000000 nt!KiDeliverApc+0x1a100283ab8 ffffffff 00000000 00000000 00000000 0xffffffff0000096c 00000000 00000000 00000000 00000000 0xffffffffFOLLOWUP_IP: nt!KiUnlockDispatcherDatabase+1c8046a86c 59 pop ecxSYMBOL_STACK_INDEX: 0FOLLOWUP_NAME: MachineOwnerSYMBOL_NAME: nt!KiUnlockDispatcherDatabase+1cMODULE_NAME: ntIMAGE_NAME: ntkrnlmp.exeDEBUG_FLR_IMAGE_TIMESTAMP: 3ee650b3STACK_COMMAND: .tss 28 ; kbBUCKET_ID: 0x7f_8_nt!KiUnlockDispatcherDatabase+1cFollowup: MachineOwner

  4. Examine a saída do comando !analisar -v para ver se a saída apresenta uma condição de dupla falha. Se existir uma condição de dupla falha, verifique o comando .tss 28 para visualizar o estado do sistema no momento da dupla falha. Por exemplo, a seguinte saída mostra os valores nos registos do processador no momento em que ocorreu uma exceção por dupla falta:0: kd> .tss 28eax=ffdff4dc ebx=f5d299dc ecx=8046f1c0 edx=00000000 esi=853e7a60 edi=00000102eip=8046a86c esp=f5da9948 ebp=f5d2997c iopl=0 nv up ei pl zr na po nccs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00010246nt!KiUnlockDispatcherDatabase+0x1c:8046a86c 59 pop ecx No exemplo anterior, o valor do registo ESP é f5da9948. Geralmente, este valor está relativamente próximo do valor do registo EBP. No exemplo anterior, o valor do registo EBP é f5d2997c.

  5. Executar o comando !thread para ver a gama de pilhas do fio atual. Uma exceção de dupla falha ocorre normalmente quando o valor do registo ESP está fora do intervalo de endereços reservados para a pilha para o fio atual. Segue-se um exemplo da saída do comando !thread:0: kd> !threadTHREAD 853e7a60 Cid 904.96c Teb: 7ffdc000 Win32Thread: a21a5c48 RUNNINGNot impersonatingOwning Process 85400680Wait Start TickCount 578275 Elapsed Ticks: 0Context Switch Count 38423 LargeStackUserTime 0:00:02.0031KernelTime 0:00:06.0640Start Address KERNEL32!BaseThreadStartThunk (0x77e5b700)Win32 Start Address MSVCRT!_threadstartex (0x78008532)Stack Init f5d2a000 Current f5d29c9c Base f5d2a000 Limit f5d27000 Call 0Priority 8 BasePriority 8 PriorityDecrement 0 DecrementCount 0ChildEBP RetAddr Args to Child00000000 8046a86c 00000000 00000000 00000000 nt!_KiTrap08+0x41f5d2997c 80450bb3 00000003 f5d299f8 00000001 nt!KiUnlockDispatcherDatabase+0x1cf5d29d48 80466389 00000003 0076fe84 00000001 nt!NtWaitForMultipleObjects+0x385f5d29d48 77f9323e 00000003 0076fe84 00000001 nt!_KiSystemService+0xc90076fe5c 77e7a059 00000003 0076fe84 00000001 ntdll!ZwWaitForMultipleObjects+0xb0076feac 77dee9fb 0076fe84 00000001 00000000 KERNEL32!WaitForMultipleObjectsEx+0xea0076ff08 77deea48 0076fed4 0076ff5c 00000000 USER32!MsgWaitForMultipleObjectsEx+0x1530076ff24 6d095a7c 00000002 0076ff5c 00000000 USER32!MsgWaitForMultipleObjects+0x1d0076ff7c 780085bc 00283a90 0062f5ac 0062ffdc IisRTL!SchedulerWorkerThread+0xa70076ffb4 77e5b382 00283ab8 0062f5ac 0062ffdc MSVCRT!_threadstartex+0x8f0076ffec 00000000 78008532 00283ab8 00000000 KERNEL32!BaseThreadStart+0x52 Na saída anterior, as seguintes informações indicam os valores da gama de pilhas:

    Stack Init f5d2a000 Atual f5d29c9c Base f5d2a000 Limite f5d27000 Chamada 0Quando este fio em particular estiver em execução, o valor de registo ESP deve estar sempre entre o valor Base da Pilha (f5d2a000) e o valor Limite (f5d27000). Geralmente, o valor do registo ESP é relativamente próximo do valor Corrente (f5d29c9c). (O valor atual também está entre o valor Base da Pilha e o valor Limite.) No exemplo anterior, o valor do registo ESP é f5da9948. Este valor está consideravelmente fora do alcance exigido. Também poderá verificar os valores da gama de pilhas executando o comando !pcr. Segue-se um exemplo da saída do comando !pcr: 0: kd> !pcrPCR Processor 0 @ffdff000NtTib.ExceptionList: f5d29d38 NtTib.StackBase: f5d29df0 NtTib.StackLimit: f5d27000 NtTib.SubSystemTib: 00000000 NtTib.Version: 00000000 NtTib.UserPointer: 00000000 NtTib.SelfTib: 7ffdc000 SelfPcr: ffdff000 Prcb: ffdff120 Irql: 00000000 IRR: 00000000 IDR: ffffffff InterruptMode: 00000000 IDT: 80036400 GDT: 80036000 TSS: 80474850 CurrentThread: 853e7a60 NextThread: 00000000 IdleThread: 80470600 DpcQueue: O valor NtTib.StackLimit representa o limite inferior da gama de pilhas. O valor NtTib.StackBase representa um valor recente de ESP. O valor NtTib.StackBase pode ser comparado com o valor atual do registo ESP para ajudar a identificar se existe um erro de um bit no valor atual do registo ESP.

  6. Executar o comando .formats esp ^ ebp para mostrar as diferenças de valores entre os registos ESP e EBP. O valor do ponteiro de pilha no registo EBP estará próximo do valor do ponteiro de pilha no registo ESP, exceto no erro de um bit único. Este comando revela frequentemente a única bit de alta ordem que contém o erro, especialmente quando o erro é apresentado em formato binário, como é no seguinte exemplo:0: kd> .formats esp ^ ebpEvaluate expression: Hex: 00080034 Decimal: 524340 Octal: 00002000064 Binary: 00000000 00001000 00000000 00110100 Chars: ...4 Time: Tue Jan 06 17:39:00 1970 Float: low 7.34757e-040 high 0 Double: 2.59058e-318 Se ignorar os dígitos mais baixos e menos significativos, a diferença de um bit entre os registos ESP e EBP é 00000000 00001000 0000000000 000000000 em formato binário. A diferença é 00080000 em formato hexadecimal. Este erro de bit único faz com que o registo ESP contenha um valor incorreto. O valor incorreto causa uma exceção de dupla falha, uma verificação de erros e uma falha no sistema.

Para obter mais informações sobre o seu hardware específico, siga estes passos:

  1. Utilize o comando !cpuinfo para obter informações sobre a versão CPU. Segue-se um exemplo da saída do comando !cpuinfo. 0: kd> !cpuinfoTargetInfo::ReadMsr is not available in the current debug sessionCP F/M/S Manufacturer MHz Update Signature Features 0 15,2,9 GenuineIntel 2790>0000000000000000<00002fff 1 15,2,9 GenuineIntel 2790 0000000000000000 00002fff Embora o valor de Assinatura de Atualização nem sempre possa ser relatado com precisão quando analisa um ficheiro de despejo de falhas, o campo Signature atualização indica geralmente a revisão da atualização do microcódigo que é aplicada ao CPU. No exemplo anterior, este valor é de 0 (00000000000000000000). A revisão atualmente suportada é de 0x18 (00000018000000000000), como mostra a seguinte produção do exemplo:0: kd> !cpuinfoCP F/M/S Manufacturer MHz Update Signature FeaturesTargetInfo::ReadMsr is not available in the current debug session 0 15,2,9 GenuineIntel 2994>0000001800000000<00033fff 1 15,2,9 GenuineIntel 2994 0000001800000000 00033fff 2 15,2,9 GenuineIntel 2994 0000001800000000 00033fff 3 15,2,9 GenuineIntel 2994 0000001800000000 00033fff

  2. Utilize o comando !pcitree para encontrar os identificadores de fornecedor e dispositivo (IDs VenDev) para dispositivos existentes de Interface de Ligação Periférica (PCI). Segue-se um exemplo da saída do comando !pcitree: 0: kd> !pcitreeBus 0x0 (FDO Ext 85dceed8) 0600 00141166 (d=0, f=0) devext 85dcf348 Bridge/HOST to PCI 0600 00141166 (d=0, f=1) devext 85e110e8 Bridge/HOST to PCI 0600 00141166 (d=0, f=2) devext 85e11ee8 Bridge/HOST to PCI 0100 00c09005 (d=2, f=0) devext 85e11ce8 Mass Storage Controller/SCSI 0100 00c09005 (d=2, f=1) devext 85e11ae8 Mass Storage Controller/SCSI 0300 47521002 (d=3, f=0) devext 85e11788 Display Controller/VGA 0200 16a614e4 (d=4, f=0) devext 85e11428 Network Controller/Ethernet 0880 a0f00e11 (d=5, f=0) devext 85dcdee8 Base System Device/'Other' base system device 0601 02011166 (d=f, f=0) devext 85dcdb88 Bridge/PCI to ISA 0101 02121166 (d=f, f=1) devext 85dcd988 Mass Storage Controller/IDE 0c03 02201166 (d=f, f=2) devext 85dcd628 Serial Bus Controller/USB 0600 02251166 (d=f, f=3) devext 85dcd2c8 Bridge/HOST to PCI 0600 01011166 (d=11, f=0) devext 85e100e8 Bridge/HOST to PCI 0600 01011166 (d=11, f=2) devext 85e10ee8 Bridge/HOST to PCIBus 0x2 (FDO Ext 85dcecd8) 0104 00460e11 (d=2, f=0) devext 85e0f9a8 Mass Storage Controller/RAIDBus 0x5 (FDO Ext 85dce9d8)No devices have been enumerated on this bus.Total PCI Root busses processed = 3 Para cada dispositivo PCI listado, o primeiro valor hexadecimal de 8 dígitos (DWORD) em cada linha é o ID VenDev. O ID do Fornecedor é, na verdade, o segundo 4 dígitos deste valor. Por exemplo, o primeiro dispositivo listado no exemplo anterior tem um ID VenDev de 0x00141166. O ID do dispositivo é 0x0014 e o ID do fornecedor é 0x1166. O ID do Fornecedor para ServerWorks é 0x1166. Portanto, esta saída é de um processador que é instalado numa placa-mãe que utiliza chipsets ServerWorks.

Os produtos de terceiros referidos neste artigo são fabricados por empresas independentes da Microsoft. A Microsoft não faz qualquer garantia, implícita ou não, no que diz respeito ao desempenho ou fiabilidade destes produtos.

Precisa de mais ajuda?

Aumente os seus conhecimentos
Explore as formações
Seja o primeiro a obter novas funcionalidades
Aderir ao Microsoft insiders

As informações foram úteis?

Obrigado pelos seus comentários!

Obrigado pelo seu feedback! Parece que poderá ser benéfico reencaminhá-lo para um dos nossos agentes de suporte do Office.

×