stringtranslate.com

Остановись и загорись (вычисления)

В компьютерной инженерии Halt and Catch Fire , известный под мнемоникой языка ассемблера HCF , представляет собой идиому, относящуюся к инструкции машинного кода компьютера, которая заставляет центральный процессор компьютера (ЦП) прекращать значимую работу, обычно требуя перезагрузки компьютера. Первоначально оно относилось к вымышленной инструкции в компьютерах IBM System/360 (представленной в 1964 году), высмеивая многочисленные неочевидные мнемоники команд.

С появлением MC6800 (представленного в 1974 году) программистами был обнаружен недостаток конструкции. Из-за неполного декодирования кода операции два недопустимых кода операции , 0x9D и 0xDD, приведут к бесконечному увеличению счетчика программ на процессоре, что блокирует процессор до сброса. Эти коды получили неофициальное название HCF. В процессе проектирования MC6802 инженеры изначально планировали удалить эту инструкцию, но оставили ее как есть для целей тестирования. В результате HCF была официально признана настоящей инструкцией. [1] [2] Позже HCF стал юмористическим всеобъемлющим термином для инструкций, которые могут заморозить процессор, включая преднамеренные инструкции для целей тестирования и непреднамеренные незаконные инструкции. Некоторые из них считаются аппаратными дефектами, и если система является общей , злоумышленник может запустить ее для запуска атаки типа «отказ в обслуживании» .

В случае реальных инструкций значение этого выражения заключается в том, что в большинстве случаев, когда ЦП выполняет непреднамеренную инструкцию (ошибку в коде), компьютер все равно может восстановиться, в случае инструкции HCF по определению система не может восстановиться без перезагрузки.

Выражение «загорится» — это шутливое преувеличение скорости, с которой чип ЦП будет переключать некоторые цепи шины, вызывая их перегрев и сгорание. [3]

Происхождение

Компьютеры Z1 (1938 г.) и Z3 (1941 г.), построенные Конрадом Цузе, содержали незаконные последовательности инструкций, которые при случайном выполнении повредили оборудование. [4]

Апокрифические истории связывают этот термин с нелегальным кодом операции в IBM System/360 . Процессор, встретив команду, начал очень быстро переключать линии шины , что потенциально могло привести к перегреву. [5] [6]

В языке ассемблера компьютера используются мнемоники, которые напрямую эквивалентны инструкциям машинного кода . Мнемоника часто состоит из трех букв, например ADD, CMP (для сравнения двух чисел) и JMP (переход в другое место программы). Инструкция HCF изначально была вымышленной инструкцией на языке ассемблера, которая, как утверждается, разрабатывалась в IBM для использования в компьютерах System/360 , наряду со многими другими забавными трехбуквенными аббревиатурами, такими как XPR (Выполнение программиста) и CAI (Поврежденная учетная информация), и похож на другие шуточные мнемоники, такие как «SDI» для «Немедленного самоуничтожения» [7] и «CRN» для «Преобразовать в римские цифры». [8] Список таких мнемоник, включая HCF, представлен как «Сверхрасширенная мнемоника» в апрельском пародийном выпуске Creative Computing за 1980 год. [9]

В современных процессорах

Разработчики ЦП иногда включают одну или несколько недокументированных инструкций машинного кода для целей тестирования, например инструкцию IBM System/360 DIAGnose. [10]

Моторола 6800

Микропроцессор Motorola 6800 стал первым, для которого стала широко известна недокументированная мнемосхема сборки HCF . Коды операций ( коды операций — части инструкций машинного языка, определяющие выполняемую операцию) в шестнадцатеричном формате 9D и DD были указаны и получили неофициальную мнемонику HCF в статье Джерри Уиллера в журнале BYTE в декабре 1977 года о недокументированных кодах операций. [11] Уиллер отметил, что Motorola сообщила о 197 действительных кодах операций для процессора M6800 и, таким образом, пришла к выводу, что из 256 возможных 8-битных комбинаций должно быть 59 недействительных инструкций. Он охарактеризовал HCF как «большой сюрприз» и сказал о части прозвища «Catch Fire»: «Ну, почти»:

Когда эта инструкция выполняется, единственный способ увидеть, что она делает, — это осциллограф . С точки зрения пользователя, машина останавливается и игнорирует большинство попыток перезапустить ее. Те, у кого есть индикаторные лампочки на адресной шине, увидят, что процессор начинает последовательно и очень быстро читать всю память. По сути, адресная шина превращается в 16-битный счетчик. Однако процессор не обращает внимания на то, что он читает... он просто читает. [11]

Другой автор писал в 2002 году:

В старые времена микропроцессора Motorola 6800 код инструкции DD заставлял процессор переходить в бесконечный цикл, считывая данные из каждого адреса памяти по порядку. (Другие инженеры называли это инструкцией «Остановить и загореться» [HCF], но мы запомнили этот код, назвав его инструкцией «Drop Dead».) Режим Drop Dead прекрасно подходил для определения аппаратного времени и решения логических проблем с помощью объем; все линии адреса и часов были красивыми, циклическими прямоугольными волнами. [12]

Поведение 6800 при обнаружении HCF было известно Motorola к 1976 году. Когда 6800 встречает инструкцию HCF, процессор никогда не находит ее конца, бесконечно увеличивая свой счетчик программ до тех пор, пока ЦП не будет сброшен. [13] Следовательно, адресная шина фактически становится счетчиком , позволяя быстро проверять работу всех адресных линий . Как только процессор перешел в этот режим, он не реагирует на прерывания , поэтому нормальную работу можно восстановить только путем перезагрузки (отсюда и прозвища «Drop Dead» и «Halt and Catch Fire»). Таким образом, эти ссылки относятся к невосприимчивому поведению ЦП в этом состоянии, а не к какой-либо форме неустойчивого поведения. [ нужна цитата ] . Motorola сохранила поведение HCF в варианте процессора 6802 (выпущенном в 1977 году) в качестве преднамеренного самотестирования 128 байт встроенной оперативной памяти 6802.

Другие инструкции, подобные HCF, были обнаружены позже на Motorola 6800 при выполнении недокументированных кодов операций FD (циклирование в два раза медленнее, чем 9D/DD) или CD/ED (циклирование на удобочитаемой очень низкой частоте на ограниченном количестве линий с высоким адресом). . [14]

HCF считается первой встроенной функцией самотестирования микропроцессора Motorola. [2]

Интел х86

Intel 8086 и последующие процессоры серии x86 имеют инструкцию HLT (остановить), код операции F4, которая останавливает выполнение инструкций и переводит процессор в состояние HALT. Разрешенное прерывание, исключение отладки, сигнал BINIT, сигнал INIT или сигнал RESET возобновляют выполнение, что означает, что процессор всегда можно перезапустить. [15] Некоторые из ранних чипов Intel DX4 имеют проблемы с инструкцией HLT и не могут быть перезапущены после использования этой инструкции, что отключает компьютер и превращает HLT в инструкцию HCF. В ядре Linux есть опция «no-hlt», указывающая Linux запускать бесконечный цикл вместо использования HLT, что позволяет пользователям этих сломанных чипов использовать Linux. [16]

80286 имеет недокументированный код операции 0F 04, вызывающий зависание процессора при выполнении. Единственный выход — перезагрузка процессора. [ нужна ссылка ] [17] В некоторых реализациях код операции эмулируется через BIOS как последовательность остановки . [18]

Многие компьютеры линейки Intel Pentium могут быть заблокированы при выполнении недопустимой инструкции (F00F C7C8), что приводит к зависанию компьютера. Это стало известно как ошибка Pentium F00F . Ни один компилятор не создает инструкцию, но злонамеренный программист может вставить ее в код, чтобы сделать зараженный компьютер неработоспособным до тех пор, пока машина не будет выключена и выключена . С момента ее обнаружения были разработаны обходные пути, предотвращающие блокировку компьютера, а в последующих процессорах Intel эта ошибка была устранена. [19] [20]

Во время конференции Black Hat USA 2017 Кристофер Домас показал, что он нашел новую инструкцию «Halt and Catch Fire» [21] [22] на нераскрытой модели процессора x86, используя свой собственный фаззер процессора x86 под названием sandsifter. [23]

Другие процессоры

Технология NMOS MOS Technology 6502 имеет 12 недопустимых инструкций, из-за которых счетчик программ не может получить следующую инструкцию, что приводит к блокировке ЦП и необходимости его перезагрузки. [24] [25]   Версия WDC CMOS 65C02 , а также 65C816 имеет инструкцию STP(stop, opcode $DB). При выполнении STPостанавливает внутренние часы процессора, в результате чего вся обработка прекращается, а также процессор не отвечает ни на какие входные сигналы, кроме RESB(сброс). Единственный способ отменить действие инструкции STP— переключить RESB.

В Zilog Z80 выполнение DI (отключение прерываний) с последующим HALT (ожидание прерывания) приводит к тому, что ЦП зависает на неопределенный срок в ожидании прерывания, которое не может произойти. Однако для выхода из этого состояния можно использовать немаскируемый сигнал прерывания, что делает эту пару не настоящим HCF. [26] [27] Сигнал /NMI находится на контакте 17 исходного 40-контактного DIP-корпуса. [28] [29] Пара приведет к состоянию HCF только в том случае, если либо вывод /NMI подключен непосредственно к шине +5 В, что делает генерацию этого сигнала невозможным, либо если процедура прерывания, обслуживающая /NMI, заканчивается с ошибкой return, переводя его обратно в состояние HALT.

Ядро процессора SM83 [a] [30] встроенной системы LR35902 Game Boy имеет аналогичную проблему, вызванную двумя последовательными остановками с отключенными прерываниями. [b] [31] Само ядро ​​содержит 11 кодов операций, которые полностью блокируют процессор при выполнении. [32]

Hitachi SC61860 , в основном использовавшийся в карманных компьютерах Sharp в 1980-х и 1990-х годах, имеет недокументированную инструкцию HCF с кодом операции 7B. [33]

Смотрите также

Примечания

  1. ^ ЦП SM83 похож на Z80, но не имеет прямого отношения к нему.
  2. ^ Когда прерывания отключены, инструкция HALT на ЦП Game Boy не приостанавливает ЦП, а, скорее, предотвращает увеличение счетчика программ ЦП на инструкции, следующей сразу за HALT, эффективно удваивая инструкцию после HALT (или, для многобайтовая инструкция, удваивающая первый байт и отделяющая исходный последний байт в новую однобайтовую инструкцию); если инструкция после HALT сама по себе является HALT, то (поскольку HALT является однобайтовой инструкцией) ЦП фактически видит бесконечную серию HALT, что приводит к зависанию системы.

Рекомендации

  1. ^ «Набор инструкций 6800» (PDF) . Старые компьютеры Брайана . Архивировано (PDF) из оригинала 1 мая 2021 г. Проверено 9 апреля 2022 г.
  2. ^ Аб Дэниелс, Р. Гэри; Брюс, Уильям (апрель 1985 г.). «Тенденции встроенного самотестирования в микропроцессорах Motorola». Проектирование и тестирование IEEE . 2 (2): 64–71. дои : 10.1109/MDT.1985.294865. S2CID  22719798. В довершение всего мы обнаружили, что у нас есть незаконная HACOF — инструкция, которую наши клиенты нашли на MC6800. Это был неиспользованный код операции — недопустимая инструкция. При случайном выполнении счетчик программы будет увеличиваться бесконечно. Проблема, вызванная неполным декодированием кода операции, была неприятной, поскольку Reset был единственным средством завершения инструкции. ... В процессе проектирования мы придумали, как исключить инструкцию HACOF. Примерно в это же время к нам пришла идея. Они сказали: «Знаете, чего нам действительно хотелось бы?» Какой-то способ быстро протестировать оперативную память. Если бы мы могли каким-то образом указать счетчику программ первый адрес ОЗУ, а затем просто увеличивать его по ОЗУ, мы могли бы протестировать его намного быстрее». Поскольку «инструкция» HACOF делала именно это – и мы действительно не хотели вкладывать усилия, необходимые для ее устранения, – мы ответили: «У нас есть для вас сделка!» Таким образом, HACOF стал первой встроенной функцией самотестирования микропроцессора Motorola.
  3. ^ «Запись в жаргонном файле для мнемоники сборки HCF» . Архивировано из оригинала 20 мая 2012 г. Проверено 4 мая 2014 г.
  4. ^ Рохас, Рауль (апрель – июнь 1997 г.). «Наследие Конрада Цузе: архитектура Z1 и Z3» (PDF) . IEEE Анналы истории вычислений . 19 (2): 5–16 [9–10]. дои : 10.1109/85.586067. Архивировано (PDF) из оригинала 3 июля 2022 г. Проверено 3 июля 2022 г. п. 10: Существует множество деталей, которые инженер, проектирующий «микропрограмму», должен учитывать, иначе короткое замыкание может вывести из строя оборудование. Z1 с его механической конструкцией был все же более чувствителен в этом отношении, чем Z3 . Даже после его завершения существовали последовательности инструкций, которых программисту приходилось избегать, чтобы не повредить оборудование. Одна из этих последовательностей была случайно опробована в Берлинском музее техники и транспорта , что привело к небольшому повреждению реконструированного Z1 в 1994 году.(12 страниц)
  5. ^ Клементс, Алан (28 октября 2006 г.). Внедрение этики в компьютерную архитектуру. Конференция ASEE/IEEE Frontiers in Education (36-е изд.). п. 4. Архивировано из оригинала 30 апреля 2022 г. Проверено 02 марта 2018 г.
  6. ^ Колер, Эдди (4 апреля 2005 г.). «CS111 — Лекция 1» (PDF) . п. 2. Архивировано (PDF) из оригинала 02 марта 2018 г. Проверено 02 марта 2018 г.
  7. ^ Данлэп, Брайан. «Предлагаемый набор инструкций». Физический факультет Университета штата Огайо . Архивировано из оригинала 8 сентября 2017 г. Проверено 20 июня 2016 г.
  8. ^ Цирсовиус, Вернер. «Далекие коды операций». Архивировано из оригинала 05 марта 2016 г. Проверено 28 мая 2015 г.
  9. ^ «Чрезмерно расширенная мнемоника». Творческие вычисления . 6 (4): 17 (шестигранник) (обратная сторона). Апрель 1980 года . Проверено 12 марта 2017 г.
  10. ^ Принципы работы IBM System/360 (PDF) . ИБМ . Архивировано (PDF) из оригинала 29 февраля 2012 г. Проверено 2 июля 2014 г.
  11. ^ аб Уиллер, Джерри (декабрь 1977 г.). «Недокументированные инструкции M6800». БАЙТ . Том. 2, нет. 12. С. 46–47 . Проверено 20 ноября 2023 г. Мнемотехника, конечно же, задана мной.
  12. ^ Аганс, Дэвид Дж. (2002). Отладка: 9 обязательных правил для обнаружения даже самых неуловимых проблем с программным и аппаратным обеспечением. Нью-Йорк, США: Американская ассоциация менеджмента. п. 77. ИСБН 978-0-81442678-4. OCLC  52043345. Архивировано из оригинала 26 июля 2014 г. Проверено 30 октября 2016 г.
  13. ^ Дэниэлс, Р. Гэри; Брюс, Уильям (апрель 1985 г.). «Тенденции встроенного самотестирования в микропроцессорах Motorola». IEEE Проектирование и тестирование компьютеров . 2 (2): 64. дои :10.1109/MDT.1985.294865. S2CID  22719798 . Проверено 28 августа 2023 г.
  14. ^ Демельмейстер, Самуэль (17 июля 2019 г.). «Исследование инструкции HCF (Halt & Catch Fire) на Motorola 6800». X86.FR — научно-исследовательская лаборатория Doc TB . Архивировано из оригинала 31 марта 2022 г. Проверено 9 апреля 2022 г.
  15. ^ «Справочник по набору инструкций x86: HLT» . Архивировано из оригинала 14 июля 2014 г. Проверено 2 июля 2014 г.
  16. ^ Гортмейкер, Пол (21 марта 2003 г.). «Подсказка по загрузке Linux: инструкции» (PDF) . Проект документации Linux. Архивировано (PDF) из оригинала 6 июля 2015 г. Проверено 2 июля 2014 г.
  17. ^ «Re: Недокументированные коды операций (HINT_NOP)» . Архивировано из оригинала 6 ноября 2004 г. Проверено 7 ноября 2010 г.
  18. ^ "Re: Также некоторые недокументированные коды операций 0Fh" . Архивировано из оригинала 26 июня 2003 г. Проверено 7 ноября 2010 г.
  19. ^ Коллинз, Роберт Р. (1 мая 1998 г.). «Ошибка Pentium F00F: обходные пути неприятной проблемы». Журнал доктора Добба . Архивировано из оригинала 30 апреля 2022 г. Проверено 12 августа 2014 г.
  20. ^ Обновление спецификаций процессора Pentium (PDF) . Корпорация Интел . Январь 1999 г., стр. 51–52. Номер заказа 242480-041. Архивировано (PDF) из оригинала 4 марта 2016 г. Проверено 2 ноября 2006 г.
  21. ^ «Взлом x86 ISA (PDF)» (PDF) . Кристофер Домас. Архивировано (PDF) из оригинала 4 января 2018 г. Проверено 9 декабря 2017 г.
  22. ^ «Взлом x86 ISA (видео)» . Кристофер Домас. Архивировано из оригинала 21 декабря 2021 г. Проверено 9 декабря 2017 г.
  23. ^ «Sandsifter: фаззер процессора x86» . Кристофер Домас. Архивировано из оригинала 25 октября 2017 г. Проверено 9 декабря 2017 г.
  24. ^ Стейл, Майкл. «Как на самом деле работают незаконные коды операций MOS 6502». pagetable.com . Архивировано из оригинала 7 июля 2016 г. Проверено 1 августа 2016 г.
  25. ^ Оффенга, Фредди. «6502 Недокументированные коды операций». НесДев . Архивировано из оригинала 8 августа 2016 г. Проверено 1 августа 2016 г.
  26. ^ «Механизм прерывания - Развитие - SMS Power!». Архивировано из оригинала 4 апреля 2016 г. Проверено 25 апреля 2016 г.
  27. ^ Фламменкамп, Ахим. «Поведение прерываний процессора Z80». Архивировано из оригинала 20 апреля 2016 г. Проверено 25 апреля 2016 г.
  28. ^ "Распиновка - семейство Z80" . Архивировано из оригинала 8 мая 2016 г. Проверено 25 апреля 2016 г.
  29. ^ Вис, Питер Дж. «Распиновка Zilog Z80». Архивировано из оригинала 11 октября 2016 г. Проверено 25 апреля 2016 г.
  30. ^ «Реверс-инжиниринг процессора Game Boy SM83» . Гитхаб . Архивировано из оригинала 29 октября 2022 г. Проверено 8 ноября 2022 г.
  31. ^ «Руководство по процессору GameBoy» (PDF) . Архивировано (PDF) из оригинала 23 июня 2018 г. Проверено 22 июня 2018 г.
  32. ^ «Набор инструкций процессора Game Boy» . Архивировано из оригинала 9 февраля 2021 г. Проверено 11 марта 2021 г.
  33. ^ «Набор инструкций SC61860 (также известный как ESR-H)» . Гитхаб . 20 марта 2022 г. Архивировано из оригинала 23 марта 2022 г. Проверено 23 марта 2022 г.