STOP 7F、0x00000008 (ダブルフォールト) エラーは、ESP レジスタで 1 ビット エラーが発生したために発生します

この記事では、特定のプロセッサ エラーが原因で、コンピューター上の STOP 0x0000007F 0x00000008エラー メッセージに対するソリューションを提供します。 このエラー メッセージは、コンピューターで実行されているプロセッサの Electric Service Provider (ESP) レジスタでシングルビット エラーが発生した場合に表示される場合があります。

適用対象: Windows Server 2012 R2
元の KB 番号: 842465

現象

1 つ以上の Intel Xeon プロセッサを実行しているコンピューター、または他のプロセッサを実行しているコンピューターで、Windows では、次の例のような Stop エラー メッセージが表示されることがあります。

STOP 0x0000007F (0x00000008、0x00000000、0x00000000、0x00000000) UNEXPECTED_KERNEL_MODE_TRAP

この問題が発生した場合は、次の条件に該当します。

  • Stop エラーの最初のパラメーターは "0x0000008" です。 (このエラーは二重エラーの例外です。
  • ESP レジスタの上半分で 1 ビット エラーが発生したため、ESP レジスタの値は現在のスレッドのスタック範囲外です。

原因

この問題は、コンピューター内の 1 つ以上のプロセッサが次の場合に発生します。

  • コンピューターの基本的な入力/出力システム (BIOS) によって適用されていないマイクロコードの更新が必要です。

  • 破損または欠陥があります。

  • 温度、電力、またはその他の条件で、指定した範囲外で動作しています。

解決方法

この問題を解決するには、次のいずれかのトラブルシューティング方法を使用します。

方法 1: プロセッサがマイクロコード更新プログラムの運用リビジョンを実行しているかどうかを確認する

マイクロコード更新プログラムは、プロセッサの内部的に実装されたロジックの誤り (バグ) を修正します。 マイクロコードの更新プログラムは、プロセッサ自体に永続的に格納することはできず、コンピューターが起動するたびにプロセッサに読み込む必要があります。 マイクロコードの更新は、コンピューターの BIOS またはUpdate.sys ドライバーによって適用できます。

コンピューターにインストールされている Intel プロセッサに現在適用されているマイクロコード更新プログラムのリビジョンを特定するには、次の手順に従います。

  1. Intel Web サイトから Intel Processor Frequency ID ユーティリティをダウンロードします。

  2. 現象が発生しているコンピューターに Intel Processor Frequency ID ユーティリティをインストールして実行します。

  3. 各プロセッサの次の CPU 情報を書き留めます。

    • CPU ファミリ
    • CPU モデル
    • CPU ステップ実行
    • CPU リビジョン

    CPU ファミリ、CPU モデル、CPU ステッピングの値は、特定の種類のプロセッサを識別します。 CPU リビジョンの値は、適用されるマイクロコード更新プログラムのリビジョンを識別します。

  4. コンピューターの製造元に問い合わせて、マイクロコード更新プログラムのリビジョンが特定のプロセッサで利用可能な最新のリビジョンであるかどうかを確認します。 リビジョンが最新でない場合は、最新のマイクロコード更新リビジョンを適用する最新の BIOS をコンピューターの製造元に依頼してください。

この記事で説明する現象は、CPU ファミリ、CPU モデル、CPU ステッピング値がそれぞれ 15、2、9 の Intel Xeon プロセッサで最も頻繁に発生し、ServerWorks のチップセットを使用するマザーボードにインストールされています。 (CPU ファミリ、CPU モデル、CPU ステッキング 16 進数の値はそれぞれ F、2、9 です)。これらのプロセッサでは、正しく機能するために、0x18 以降のリビジョン値が必要です。 (0x18は 10 進数の 24 に相当します)。

リビジョン値 0 は、コンピューターにインストールされているプロセッサの正しいマイクロコード更新プログラムがコンピューター BIOS にないことを示します。 使用しているプロセッサをサポートするマイクロコード更新リビジョンを使用して BIOS を更新する必要があります。

既知の問題を回避するために、最新のマイクロコード更新プログラムのリビジョンを適用することをお勧めします。

方法 2: プロセッサが破損しているか欠陥があるかどうかを判断する

影響を受けるコンピューターにインストールされているプロセッサに運用環境のマイクロコード更新プログラムのリビジョンが適用されており、この記事で説明されている現象が、同じプロセッサを実行している同じモデルのすべてのコンピューターで発生しない場合、プロセッサに欠陥がある可能性があります。

プロセッサが破損しているか欠陥があるかどうかを判断するには、プロセッサを、現象が発生していないコンピューターに移動します。

警告

プロセッサを変更する場合は、コンピューターの製造元から提供されている指示に従うか、適切な資格を持つハードウェア技術者に参加してプロセッサを変更します。

元のプロセッサを搭載した元のコンピューターで問題が引き続き発生するが、元のプロセッサを持つ他のコンピューターでは発生しない場合、問題はおそらく、破損したプロセッサまたは欠陥のあるプロセッサによって引き起こされない可能性があります。

代替プロセッサを使用して元のコンピューターで引き続き現象が発生しないが、元のプロセッサを持つ別のコンピューターで発生する場合、問題はおそらく、プロセッサの破損または欠陥が原因で発生します。 この場合は、コンピューターの製造元に問い合わせて、元のプロセッサを交換してください。

この記事で説明されている現象が発生しているコンピューターに 1 つのプロセッサが複数ある場合は、すべてのプロセッサを別のコンピューターに移動します。 結果がこれらのプロセッサの 1 つ以上に欠陥がある可能性があることを示す場合は、一度に 1 つずつプロセッサを移動して、欠陥がある可能性のあるプロセッサを判断します。

方法 3: プロセッサが指定した環境条件の範囲外で動作しているかどうかを判断する

過度の室内温度、不適切な換気、またはゴミの蓄積により、プロセッサなどの電子コンポーネントが不規則に動作する可能性があります。 ファンの誤動作や空気通路の遮断は、換気の問題を引き起こす可能性があります。 コンピューターの内部または空気通路がゴミの多い場合、または特定の場所にのみインストールされたときにコンピューターが症状を示す場合は、システムのオーバーヒートが要因になる可能性があります。 コンポーネントがクリーンで、ファンが正しく機能していること、および空気通路が妨げられないことを確認します。 さらに、コンピューターが配置されている部屋が適切に室内に入っていることを確認します。 部屋の温度は、コンピューターの製造元によって指定された動作範囲内である必要があります。

指定した値より高いまたは低い電圧、または変動する電圧により、プロセッサやその他の電子コンポーネントが不規則に動作する可能性があります。 正しくない、または一貫性のない主電源電圧、コンピューター内の電源の過負荷または不適切な機能、またはマザーボードの回路が正しく機能しない場合、プロセッサに正しくないまたは矛盾した電圧が供給される可能性があります。 これらの問題のいずれかが症状の原因であるかどうかを確認するには、適切な技術者に問い合わせてください。

詳細情報

STOP 0x0000007F エラーの詳細については、「 Windows ベースのコンピューターでの stop エラー 0x0000007F参照してください。

ESP レジスタは、スタック ポインター レジスタとも呼ばれます。 スタックは、スレッドの実行の現在の状態に関する情報を格納するために使用されるメモリ内のデータ構造です。 スレッドのスタックは、実行中の関数呼び出し、それらの関数に渡されるパラメーター、およびそれらの関数によって使用される変数を追跡するために使用されます。 ESP レジスタの値は、スタックの現在の先頭を指す必要があります。 ESP の値が正しくない場合は、正しくない情報または無効なアドレスを指している可能性があります。 ESP の値が無効なアドレスを指している場合は、ダブルフォールト例外が発生する可能性があります。

STOP エラーが ESP レジスタの単一ビット エラーの結果であるかどうかを確認するには、次の手順に従います。

  1. Windows 用 Microsoft デバッグ ツールをインストールします。

  2. WinDbg ツールを実行し、[ ファイル] を選択し、[ クラッシュ ダンプを開く ] を選択して、Stop エラー情報を含むメモリ ダンプ ファイルを見つけ、[OK] を選択 します

  3. コマンドを !analyze -v 実行して、ダンプ ファイルの自動分析を取得します。

  4. コマンドの出力を調べて、 !analyze -v 出力に二重障害状態が表示されているかどうかを確認します。 二重障害状態が存在する場合は、コマンドを .tss 28 実行して、二重障害時のシステム状態を表示します。 一般に、この値は EBP レジスタの値に比較的近い値です。

  5. コマンドを !thread 実行して、現在のスレッドのスタック範囲を表示します。 通常、ダブルフォールト例外は、ESP レジスタの値が、現在のスレッドのスタック用に予約されているアドレスの範囲外にある場合に発生します。

    この特定のスレッドが実行されている場合、ESP レジスタ値は常に Stack Base 値 (f5d2a000) と Limit 値 (f5d27000) の間にある必要があります。 一般に、ESP レジスタの値は Current 値 (f5d29c9c) に比較的近い値です。 (現在の値は、Stack Base 値と Limit 値の間でもあります。

    コマンドを実行して、スタック範囲の値を !pcr 確認することもできます。

    この値は NtTib.StackLimit 、スタック範囲の下限を表します。 この値は NtTib.StackBase 、ESP の最近の値を表します。 この値を NtTib.StackBase ESP レジスタの現在の値と比較して、現在の ESP レジスタ値に単一ビット エラーがあるかどうかを特定するのに役立ちます。

  6. コマンドを .formats esp ^ ebp 実行して、ESP レジスタと EBP レジスタ間の値の違いを表示します。 EBP レジスタのスタック ポインター値は、1 ビット エラーを除き、ESP レジスタのスタック ポインター値に近くなります。 このコマンドは、エラーを含む単一の高次ビットを頻繁に表示します。特にエラーがバイナリ形式で表示されている場合です。

    下位の有効桁数を無視する場合、ESP レジスタと EBP レジスタ間の 1 ビットの差は 000001000 000000 000000 0000000 000000000 00000000 です。 違いは 16 進数形式で 00080000 です。

    この単一ビット エラーにより、ESP レジスタに正しくない値が含まれます。 値が正しくないと、ダブルフォールト例外、バグ チェック、およびシステム クラッシュが発生します。

特定のハードウェアの詳細を取得するには、次の手順に従います。

  1. コマンドを !cpuinfo 使用して CPU のバージョン情報を取得します。

    クラッシュ ダンプ ファイルを分析するときに 、Update Signature の値が常に正確に報告されるとは限りませんが、[ 署名の更新] フィールドは通常、CPU に適用されるマイクロコード更新リビジョンを示します。

  2. このコマンドを !pcitree 使用して、既存の周辺機器接続インターフェイス (PCI) デバイスのベンダー識別子とデバイス識別子 (VenDev ID) を検索します。

    一覧表示されている PCI デバイスごとに、各行の最初の 8 桁の 16 進値 (DWORD) は VenDev ID です。 ベンダー ID は、実際にはこの値の 2 番目の 4 桁です。 たとえば、一覧に表示される最初のデバイスには、0x00141166の VenDev ID があります。 デバイス ID が0x0014され、ベンダー ID が0x1166。 ServerWorks のベンダー ID は0x1166。 そのため、この出力は、ServerWorks のチップセットを使用するマザーボードにインストールされているプロセッサから出力されます。

この資料に記載されているサードパーティ製品は、マイクロソフトと関連のない他社の製品です。 明示的か黙示的かにかかわらず、これらの製品のパフォーマンスや信頼性についてマイクロソフトはいかなる責任も負わないものとします。