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 (см. KB163852)
  • Для операционной системы OS/2 патч был выпущен фирмой IBM в виде специального базового драйвера CMPXCHG8.SYS, вызов которого можно было прописать в файл конфигурации системы config.sys
  • Начиная с процессора Pentium Pro ошибка была исправлена на аппаратном уровне.
  • Компания Intel производила бесплатную замену дефектных процессоров.

См. также

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.