Тройная ошибка - Triple fault
На x86 компьютерная архитектура, а тройная ошибка особый вид исключение генерируется ЦПУ когда возникает исключение, когда ЦП пытается вызвать двойная ошибка обработчик исключений, который сам обрабатывает исключения, возникающие при попытке вызвать обычный обработчик исключений.
x86 процессоры, начиная с 80286 вызовет цикл отключения при обнаружении тройной неисправности. Обычно это вызывает материнская плата аппаратное обеспечение для инициации сброса ЦП, что, в свою очередь, вызывает перезагрузку всего компьютера.[1][2]
Возможные причины тройных неисправностей
Тройные неисправности указывают на проблему с Операционная система ядро или драйверы устройств. В современных операционных системах тройная ошибка обычно вызывается переполнением или недостаточным заполнением буфера в драйвере устройства, который записывает поверх таблица дескрипторов прерываний (IDT). Если IDT поврежден, при следующем прервать происходит, процессор не сможет вызвать ни необходимый обработчик прерывания, ни обработчик двойной ошибки, потому что дескрипторы в IDT повреждены.[нужна цитата ]
Виртуальные машины
В QEMU, тройной сбой создает дамп виртуальной машины в консоли с указателем инструкции, установленной на инструкцию, которая вызвала первое исключение.
Когда используешь Intel VT-x, тройная ошибка вызывает выход VM с причиной выхода 2. Причина выхода сохраняется в VMCS и может обрабатываться программным обеспечением VMM.
Другое использование
В Intel 80286 процессор был первым процессором x86, который представил теперь повсеместно защищенный режим. Однако 286 не смог вернуться к базовой 8086-совместимой "реальный режим "без перезагрузки процессора, что можно сделать только с помощью аппаратного обеспечения, внешнего по отношению к ЦП. На IBM AT и совместимых, документированный метод выполнения этого заключался в использовании специальной функции на Intel 8042 контроллер клавиатуры, который будет подтверждать вывод RESET процессора. Однако было обнаружено, что намеренный тройной сбой в работе ЦП приводит к тому, что переход происходит намного быстрее и чище, что позволяет многозадачным операционным системам переключаться вперед и назад с высокой скоростью.[3]
Некоторые ядра операционных систем, например Linux, по-прежнему используют тройные сбои как последнюю попытку в процессе перезагрузки, если ACPI перезагрузка не удалась. Это делается установкой регистра IDT в 0 и последующей выдачей прерывания.[1] Поскольку теперь длина таблицы равна 0, все попытки доступа к ней заканчиваются неудачей, и процессор генерирует тройную ошибку.
использованная литература
- ^ а б Коллинз, Роберт (2000). «Тройной сбой процессора». Повышение производительности и приемы программирования. В архиве из оригинала на 09.09.2017. Получено 2015-11-22.
- ^ Коллинз, Роберт (2000). «ЭЛЕГАНТНЫЙ СБРОС». В архиве из оригинала на 09.09.2017. Получено 2017-09-09.
- ^ Остерман, Ларри (2005-02-08). "Более быстрое сокращение ловушки системных вызовов". WebLog Ларри Остермана. Блоги MSDN. В архиве из оригинала на 09.09.2017. Получено 2010-07-23.