Pentium-F00F-Bug
aus Wikipedia, der freien Enzyklopädie
Als F00F-Bug oder kurz F0-Bug wird ein Fehler in Mikroprozessoren der Typen Intel Pentium, Pentium MMX und Pentium OverDrive bezeichnet. Der Name bezieht sich auf die hexadezimale Darstellung des Assemblerbefehls, der den Fehler auslöst. Die offizielle Bezeichnung seitens Intel lautet invalid operand with locked CMPXCHG8B instruction (deutsch: „Ungültiger Operand mit gesperrter 8-Byte-Exchange-Vergleichsanweisung“).
[Bearbeiten] Beschreibung
Die namensgebende Anweisung (hexadezimal: 0xF00FC7C8) ist (in AT&T-Syntax): „lock cmpxchg8b %eax“ (wobei der Operand ein Register sein muss, aber nicht unbedingt EAX). Der Befehl „cmpxchg8b“ vergleicht den Inhalt der Register EDX und EAX mit einem 8-Byte-Wert im Speicher. In diesem Beispiel wird als Ziel ein 4-Byte-Register angegeben, was nicht ausreicht, um den 8 Byte großen Ergebniswert zu speichern.
Im Normalfall führt dieses Problem zu einer Exception; wird der Befehl aber mit dem Präfix „lock“ aufgerufen (welches eigentlich zur Realisierung von wechselseitigem Ausschluss gedacht ist), so wird der Exception-Handler nicht aufgerufen, das System bearbeitet keine Interrupts mehr und muss neu gestartet werden.
Der Befehl erfordert keine besonderen Rechte und galt seinerzeit wegen der großen Verbreitung von Intel-Prozessoren als kritisch. Zwar führte er nicht zu bleibenden Schäden, konnte aber unter bestimmten Umständen Datenverlust hervorrufen. Betriebssystemhersteller bauten daher Workarounds in ihre Produkte ein, die das Auftreten des Fehlers verhinderten.
Seit der Einführung des Pentium Pro ist kein Intel-Prozessor mehr von diesem Fehler betroffen gewesen.