Pentium F00F バグ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
f00f("foof"と発音する)は「f0 0f c7 c8」の略で、Intelの主要なPentium、Pentium MMX、Pentiumオーバードライブプロセッサにある、設計上の不具合として公開されている16進数で表現された命令である。
Intelはこの問題を「ロックされたCMPXCHG8B インストラクションでの不正なオペランド」と呼んでいる。
[編集] 内容
AT&T文法では、この命令は以下のように表現できる。
lock cmpxchg8b %eax
オペランドはレジスタでないといけないが、技術的にはeaxである必要はない。
cmpxchg8b命令は、edxとeaxにある値とあるメモリ領域にある8byte値を比較する命令として使われる。この例では4バイトレジスタをデスティネーションオペラントとして使っており、8バイトの戻り値を格納するには十分大きくない。
通常の環境下では、この命令は例外を引き起こすだけだが、lockプリフィックス(同じメモリアドレスに対して2つのプロセッサが競合しないように使われる)を使った場合、例外ハンドラが二度と呼ばれなくなり、プロセッサは割り込みの発行を止めてしまうので、復旧するにはシステムを再起動しなければならない。
この命令は特別な権限を要求しないので、当時、Intelのマイクロプロセッサが普及していたことから、重大な問題と考えられた。オペレーティングシステムベンダは発生条件を検知してクラッシュを防ぐ対策を実装する作業に追われた。
技術的に正しい例えかどうかわからないが、f00f命令はしばしばHCF命令、ないしkiller pokeとして考えられる。f00fバグは一般的に知られたので、この言葉は時々よく似たハードウェア設計ミス、例えばCyrix coma バグようなものを指すのにも使われる。
f00f命令を問題のあるシステム上で実行しても、ハードウェア的なダメージはずっと残るわけではない。もちろんファイルシステムやオペレーティングシステム、その他の状況にもよるが、ディスクバッファがフラッシュされていなかったり書込み操作中にドライブに割り込まれたり、とあるアトミックでない操作中に割り込まれたりしたならば、データを失うことはあり得る。
Pentium Pro以降のIntelプロセッサにはこのバグの影響はない。また、最新のIntel Pentium Processor Speficificationもアップデートされ、B2ステッピングではこの問題は修正されている。
[編集] 関連項目
- Pentium FDIV バグ
- Cyrix coma bug