Interested Article - Halt and Catch Fire

Halt and Catch Fire (мнемонический код HCF ) — гипотетическая ассемблерная команда, при выполнении которой центральный процессор компьютера перестает выполнять дальнейшие команды, из-за чего для восстановления работоспособности необходимо выполнить «жесткую» перезагрузку .

История возникновения

Существование некой ассемблерной команды, выполнение которой приводило бы компьютер в состояние неработоспособности, приписывалось компьютерам архитектуры IBM System/360 . Мнемоническое обозначение ассемблерных команд выполнялось по аббревиатуре основной выполняемой функции команды, например ADD (добавить к числу другое число) или CMP (сравнить числа). В числе этих команд были неоднозначно интерпретируемые команды типа ZAP (буквально «Ударить током», на самом деле — Zero and Add Packed , «Обнулить регистр и добавить к нему упакованное десятичное число») . Программисты, работавшие с этим ассемблером, стали придумывать собственные мнемонические обозначения и приписывать им юмористическое толкование. Так, например, были придуманы команды XPR ( Execute Programmer , «Казнить программиста»), CAI ( Corrupt Accounting Information , «Испортить бухгалтерские данные») , а также «SDI» ( Self Destruct Immediately , «Немедленно самоуничтожиться») и CRN ( Convert to Roman Numerals , «Преобразовать в римские числа») . Среди этих юмористических обозначений также появилась команда HCF (Halt and Catch Fire , «Зависнуть и загореться») . Первые упоминания о HCF появились где-то в середине 1970-х годов .

В первоначальном смысле значение catch fire подразумевало не буквальное воспламенение, а полную потерю функционирования до следующей «жёсткой» перезагрузки. Но были слухи и о поломках аппаратуры от неверных команд . Существует городская легенда : на одном компьютере 1960-х годов всё повышали и повышали быстродействие магнитной памяти , прошитой тонкими проволочками. Обычной работе повышенные токи не мешали, однако операция HLT ( Halt , ожидание сигнала от внешнего устройства ) была реализована как «если сигнала не было, прыгнуть на тот же адрес». Многократное чтение одной и той же ячейки приводило к перегоранию соответствующей проволочки.

Существующие примеры

Микропроцессор Motorola 6800 стал первым процессором, в котором была обнаружена недокументированная инструкция, действия которой были схожи с HCF . Компанией-разработчиком было документировано 197 операций ( опкодов ), тогда как архитектура процессора допускала 256 возможных комбинаций. Исследователь Джерри Вилер попробовал по очереди подать процессору оставшиеся 59 «недействительных команд», что привело к неожиданным результатам: одна из инструкций перевела процессор в нерабочий режим :

Когда инструкция исполнялась, выяснить, что происходит, можно было только осциллографом . С пользовательской точки зрения машина останавливается и пресекает все попытки перезапустить. Индикаторы на адресной шине показывают, что процессор начинает очень быстро последовательно перечитывать всю память. В итоге адресная шина превращается в 16-битный счётчик. Тем не менее, процессор не обрабатывает то, что читает… он только читает.

Другой исследователь, Девид Аданс, на это позднее отметил: «Инструкция DD переводила процессор в бесконечный цикл последовательного чтения адресного пространства памяти (некоторые инженеры называли эту инструкцию HCF, но мы ее называли инструкцией Drop Dead [Упасть замертво]). Режим Drop Dead отлично подходил для выявления проблем с аппаратной частью с помощью осциллографа; чтение адресов памяти и работа частотного генератора укладывались в красивые прямоугольные волны» . Таким образом, данная инструкция являлась фактически недокументированной функцией ввода процессора в диагностический режим .

В других процессорах, во многом из-за ошибок проектирования либо недокументированных возможностей, также возможен эффект, похожий на режим команды HCF. Так в процессорах семейства Intel 8086 существовала инструкция HLT ( Halt , «Остановка»), которая прекращала выполнение дальнейших инструкций и переводила процессор в режим остановки, из которого можно было выйти при получении соответствующего прерывания, исключения отладки, по сигналу BINIT, INIT или RESET . В некоторых ранних чипах семейства 80486DX4 существовала проблема, из-за которой выход из режима HLT был невозможен, и систему оставалось только перезагрузить. Чтобы обойти эту проблему, разработчики ОС вводили режим no-hlt , который запускал бесконечный цикл ожидания вместо исполнения данной инструкции .

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

У другого широко применявшегося в 1980-е годы процессора MOS 6502 существует 12 недействительных команд, которые приводят к его зависанию .

Процессор Z-80 также имеет последовательность команд, приводящую к зависанию: DI, HALT. В честь неё была названа демопати DiHalt .

Примечания

  1. . IBM . Дата обращения: 2 июля 2014. 29 февраля 2012 года.
  2. Dunlap, Bryan . Physics Department, The Ohio State University . Дата обращения: 20 июня 2016. Архивировано из 8 сентября 2017 года.
  3. , Werner Cirsovius, из оригинала 5 марта 2016 , Дата обращения: 28 мая 2015 . Дата обращения: 11 мая 2017. Архивировано 5 марта 2016 года.
  4. от 24 февраля 2017 на Wayback Machine , Archived at textfiles.com
  5. 22 января 2011 года. , 23/04/1990, alt.folklore.computers , (via Google Groups)
  6. , , 6 (4): 17 (hex) (flip-side), April 1980 , Дата обращения: 12 марта 2017
  7. . www.catb.org. Дата обращения: 8 сентября 2017. 20 мая 2012 года.
  8. Wheeler, Gerry. (англ.) // : magazine. — 1977. — December ( vol. 2 , no. 12 ). — P. 46—47 .
  9. Agans, David J. (англ.) . — New York: American Management Association, 2002. — P. 77. — ISBN 9780814426784 . 26 июля 2014 года.
  10. Daniels, R. Gary; Bruce, William. Built-In Self-Test Trends in Motorola Microprocessors (англ.) // (англ.) : magazine. — 1985. — April ( vol. 2 , no. 2 ). — P. 64—71 . — doi : . «HACOF thus became the first intentional built-in self-test feature on a Motorola microprocessor.»
  11. . Дата обращения: 2 июля 2014. Архивировано из 14 июля 2014 года.
  12. Gortmaker, Paul . The Linux Documentation Project (21 марта 2003). Дата обращения: 2 июля 2014. 6 июля 2015 года.
  13. Collins, Robert R. . Dr. Dobb's Journal (1 мая 1998). Дата обращения: 11 мая 2017. 30 апреля 2022 года.
  14. (неопр.) . — Intel , 1999. — С. 51—52. 4 марта 2016 года.
  15. Steil, Michael . pagetable.com . Дата обращения: 11 мая 2017. 7 июля 2016 года.
  16. Offenga, Freddy . NesDev . Дата обращения: 11 мая 2017. 8 августа 2016 года.
Источник —

Same as Halt and Catch Fire