Назад | Перейти на главную страницу

Что такое hlt_bug?

Я вижу, что об этом время от времени упоминают, когда ядро ​​проверяет процессоры. Я предполагаю, что это какая-то аппаратная ошибка процессора, связанная с инструкцией HLT, но я не могу найти никакой информации об этом. Так что же такое hlt_bug на самом деле?

Я не уверен в точных деталях, так как это проблема давно, возможно, еще когда машины на базе 386 были обычным явлением.

Команда HLT может вызываться только в «кольце 0», когда ЦП не находится в «реальном» режиме, поэтому в современной ОС она должна вызываться только ядром. Он предписывает процессору приостановить работу до получения следующего прерывания. В этот момент современные процессоры перейдут в состояние низкого энергопотребления, хотя, очевидно, это не так просто, как для процессоров с несколькими ядрами.

Если я правильно помню, ошибка заключалась в том, что некоторые процессоры 386 не просыпались в ответ на некоторые прерывания при определенных обстоятельствах. Проверка, существует ли эта ошибка, выполняется путем установки таймера, на который, как известно, затронутые процессоры реагируют, и таймера, на который они не реагируют - если первый раз, когда процессор просыпается в ответ на этот первый, более длительный период, таймер вы знать, что ошибка существует, потому что она должна была уже проснуться заранее и обслуживает другое, более короткое время, прерывание таймера. Поскольку инструкция HLT обычно никогда не вызывается вне ядра, вам не нужно об этом беспокоиться - я предполагаю, что единственное влияние флага «обнаружена ошибка hlt» - это остановить код управления питанием, вызывающий HLT для простаивающих процессоров с ошибкой. так может не проснуться.

Единственная ссылка, которую я нашел на эту ошибку в Интернете (помимо копий результатов загрузки ядра, исходных файлов bugs. * И этого вопроса (вау, вопросы на этих сайтах попали в базу данных Google быстро!)) после быстрого поиска будет обсуждаться вопрос о том, нужно ли сохранять эту проверку в ядре в наши дни, поскольку она вряд ли повлияет на какие-либо конфигурации оборудования, которые люди используют сегодня или собираются использовать в будущем.

Редактировать: это HOWTO перечисляет проблему HLT в некоторых микросхемах 486DX-100 (найдите на странице no-hlt для справки). Это может быть проблема, которую я припоминаю (а не проблема с некоторыми чипами 386), или это может быть совпадение, и в этой инструкции было две ошибки с пробуждением из-за низкого энергопотребления.

Я столкнулся с одним!

Моим первым компьютером был советский ЭВМ «Искра» (в основном IBM PC / XT с собственной шиной «железного занавеса», но полностью совместимый с программным обеспечением). В некоторых редких случаях он зависал, иногда на экране появлялся мусор. При более тщательном исследовании я обнаружил:

  1. В системе был процессор Siemens SAB 8086, работающий на частоте 8 МГц.

  2. Виновником была инструкция HLT (0xF4), которая убивала систему независимо от того, были ли прерывания отключены или включены.

Простая последовательность, такая как 0xFA, 0xF4, 0xC3 (cli, hlt, ret), НЕ изящно замораживала систему, как и следовало ожидать, а скорее создавала мусор на экране, а затем зависала.

Подобная последовательность 0xFB, 0xF4, 0xC3 (sti, hlt, ret) не просто незаметно выполнялась и возвращалась в оболочку, опять же - мусор на экране и либо замораживание, либо (редко) - возврат оболочки.

Просто 0xF4, 0xC3 (нормально прерывания все равно включены) - такая же фигня, гудки и зависания.

Я никогда не догадывался, куда передается управление, я мог бы написать загрузчик начальной загрузки, который заполняет память хуками (0xCC), тогда обработчик INT 03h сказал бы мне, откуда он взялся. Но тогда я об этом не думал. А может, это была не просто передача контроля, а что-то где-то развращение, кто знает? Я никогда не слышал о глючной инструкции HLT на процессорах Siemens, но это может быть так. Я не хочу обобщать, возможно, это был только ЭТО ОДИН случай или, возможно, партия с ошибками.

Ну и закончу рассказ - тогда я нашел другую машину той же модели, но ту, в которой был советский камень (КМ1810ВМ86М - добросовестно украденный (одолженный), а затем воспроизведенный ЦП Intel 8086). Я попытался поиграть с инструкцией HLT там, и ОНА РАБОТАЛА так, как должна, и как говорится в Справочнике программиста Intel 8086 ...

Какая ирония ... и что за рассказ! :)