ロックされたCMPXCHG8Bインストラクションでの不正なオペランド
読み:ロックされたコンペアエクスチェンジはちビーインストラクションでのふせいなオペランド
外語:Invalid Operand with Locked CMPXCHG8B Instruction
オーバードライブプロセッサを含むPentiumとMMX Pentiumに存在するエラッタ(設計上の欠陥等によるエラー)の一つ。
概要
次の4バイトの命令列が実行されると、プロセッサーがハングアップする。
F0h、0Fh、C7h、C8h〜CFh
最初のF0hがLOCK命令で、次の命令を実行中にバスをロックする。全ての命令に対して使えるものではなく、使えない命令に対して使用された場合は無効命令例外を発行する。
次の命令(0Fh C7h)はcmpxchg8b命令で、この命令の最初のパラメーターにはレジスターを与えることができないので、そのような命令に対しては無効命令例外を発行するはずだが、例外が発行されずにCPUがハングアップする。
発生確率など
LOCK命令のバグは、ごく普通のアプリケーションを使う範囲ではまず遭遇することはない。
またソフトウェアの回避法も無い訳ではないが、これは当然ソフトウェア側でバグを考慮していないと回避できない。cmpxchg8b命令に不都合があるわけではなく、あくまでも無効命令例外の不都合である。ゆえに普通の(バグの無い)ソフトでは、まず起こり得ない。
OS側の対応
Windows NTではNT 4.0 SP4以降で標準対応し、NT 3.51では修正モジュールが配布された。
MS-DOS/Windows 3.1以前/Windows 95では対応しない。
Windows 98ではシステム設定→全般→詳細設定で、設定変更が必要である。
Linuxではカーネル2.0.32および2.1.64以降、FreeBSDでは2.2.6-RELEASE以降のリリースで対策が取られている。
再検索