2009年3月16日

STOP:0x0000007F

【0x0000007F UNEXPECTED_KERNEL_MODE_TRAP】

■エラー原因
・最も一般的な原因はハードウェアの問題
・メモリ (RAM) の破損など、低レベルのハードウェア障害
・メモリ モジュールの不一致
・マザーボードの不良
・コンピュータのプロセッサを、想定クロック速度を超えた値で実行しようとしている
(たとえば、150 MHz のプロセッサを 187 MHz で実行するように設定している)
・0による割り算が発生した時やCPUが無効な命令を実行しようとした時など、例外的な処理が発生した
・原因のひとつにドライバーソフトの不具合


■原因の特定方法
原因を推定するには、STOP 画面の最初の行に表示されているパラメータを調べる
**STOP 0x0000007F (0x000000XX, 0x00000000, 0x00000000, 0x00000000) UNEXPECTED_KERNEL_MODE_TRAP
最も重要なのは、最初のパラメータ (0x0000000X) で、このパラメータには複数の値がある場合がある
トラップの原因は、このパラメータの値によって異なるが、x86 プラットフォームだけで発生するため、Intel x86 マイクロプロセッサのリファレンス マニュアルに記載されている
中でも最も一般的なものは次のとおり
0x00000000 0 除算エラー
0x00000004 オーバーフロー
0x00000005 境界チェックの失敗
0x00000006 無効なオペコード
0x00000008 二重フォールト

A 0 除算エラー
・0 除算エラーは、DIV 命令が実行された場合にその除数がゼロ (0) であるときに発生
・メモリの破損 (またはその他のハードウェアの問題) やソフトウェアの障害が原因

B オーバーフロー

・オーバーフロー命令は、オーバーフロー (OF) フラグが設定されている場合にプロセッサが割り込みハンドラの呼び出しを実行したときに発生

C 境界チェックの失敗

・この失敗は、プロセッサが BOUND 命令の実行中に、指定された範囲を超えるオペランドを見つけたときに生成される
・BOUND 命令は、符号付き配列のインデックスを特定の範囲内に収めるために使用される

D 無効なオペコード

・このエラーは、プロセッサが無効な命令を実行しようとしたときに生成される
・通常、命令ポインタが破損し、誤った場所を指している場合に発生
・この原因として最もよくあるのが、ハードウェアのメモリの破損

E 二重フォールト

・ある例外に対するハンドラを呼び出そうとしているときに別の例外が発生すると、二重フォールトが発生
・通常、2 つの例外は順番に処理されますが、順番に処理できない例外が発生することがある
・この場合、プロセッサから二重フォールトが送信される
・主な原因は、ハードウェアとカーネルのスタック オーバーフローの 2 つ
・ハードウェアの問題は、通常、CPU、RAM、またはバスに関連するもの
・カーネルのスタック オーバーフローは、カーネル モードのドライバの不良による場合がほとんど

■トラブルシューティング
ソフトウェアまたはハードウェアが特定のトラップの原因になっている可能性がある場合
・ハードウェア メーカーによって提供される診断ソフトウェアを実行し、コンピュータの RAM をテストする
・不良と報告された RAM を交換する
・コンピュータのすべての RAM の速度が同じであることを確認する
・コントローラ、カード、またはその他の周辺機器を取り外すか、交換する
・コンピュータのマザーボードを交換する

想定されているクロック速度を超えてプロセッサを実行している場合
・想定されているクロック速度に戻す

更新されたハードウェア ドライバと BIOS のいずれか、または両方がハードウェアの製造元にあるかどうかを確認