- Retrocomputing Stack Exchange による、486DX4 マシンで NT 3.1 カーネルが再起動を引き起こす問題についての詳細な技術的議論
- 著者は Compaq ProSignia 3080 システムに Windows NT 3.1 をインストールし、性能向上のために Intel 486DX-33 を AMD enhanced 486DX4-SV8B に交換
- 著者はカーネルデバッグに入ろうとした際に問題に直面し、その結果、
kd> プロンプトが表示される代わりにマシンが再起動
- 著者はメモリ、システムファイル破損、ハードウェアウォッチドッグの動作、USB-to-serial アダプター通信など、いくつかの可能性を検証したが、いずれも原因ではなかった
- 著者は、Windows NT 3.1 カーネルが拡張 486 プロセッサ、特に CPUID 命令を提供するものと互換性がないことを発見
- 互換性の問題は、プロセッサ制御レジスタを拡張 CONTEXT 構造に保存する
KiSaveProcessorControlState 関数のバグにたどり着いた
- このバグにより、KPRCB のオフセット 19h にあるバイトをモデル番号の一部として扱う関数のせいで、CPUID capable 80-4-86 プロセッサが 80-260-86 プロセッサとして扱われる
- 著者は
cmp ds:word_FFDFF138, 5 命令をバイト比較にパッチし、NTOSKRNL.EXE 内で 2 回適用する必要がある修正を提案
- 著者の詳細な調査と提案された修正は、拡張 486 プロセッサで NT 3.1 カーネルに関する類似の問題に直面している他の人々に有用な資料を提供
1件のコメント
Hacker Newsのコメント