Interested Article - F0 0F C7 C8

F0 0F C7 C8 — последовательность байтов , формирующих недействительную машинную команду процессоров семейства x86 . В процессорах Pentium MMX и Pentium OverDrive , вследствие аппаратной недоработки, команда, будучи выполненной на любом уровне привилегий, приводила к мёртвому зависанию процессора, что отрицательно сказывалось на надёжности системы в целом.

Описание

Инструкция представляет собой команду:

lock cmpxchg8b eax

Операндом может быть любой другой регистр помимо eax. cmpxchg8b используется для сравнения содержимого пары регистров eax и edx с 8 байтами содержимого некоторого участка памяти. При этом происходит попытка поместить 8-байтовый результат в 4-байтный регистр.

Сама по себе эта команда просто вызывает исключение , однако при сочетании с префиксом lock (он используется для предотвращения обращения двух процессоров к одному и тому же участку памяти одновременно) обработчик исключений не вызывается, процессор перестает обрабатывать прерывания и для приведения его в рабочее состояние требуется перезагрузка.

Для выполнения этой инструкции не требуется наличия особых привилегий , и, ввиду высокого уровня распространенности процессоров Intel , проблема была серьёзной. Хотя она не наносила никакого непоправимого урона аппаратному обеспечению, но могла также быть причиной потери данных в тех случаях, когда сбой процессора возникал во время выполнения операции записи на диск при неочищенном буфере, выполнении прерывания или другой неатомарной операции.

Методы решения

  • Для ядра Linux , совместно с Intel был разработан патч , устраняющий эту ошибку
  • Компания Microsoft также выпустила патчи для своих операционных систем семейства Windows (см. )
  • Для операционной системы OS/2 патч был выпущен фирмой IBM в виде специального базового драйвера CMPXCHG8.SYS, вызов которого можно было прописать в файл конфигурации системы config.sys
  • Начиная с процессора Pentium Pro ошибка была исправлена на аппаратном уровне.
  • Компания Intel производила бесплатную замену дефектных процессоров.

См. также

Ссылки

  • , детальное описание и способы решения
Источник —

Same as F0 0F C7 C8