Halt and Catch Fire

A Halt and Catch Fire ( HCF emlékeztető kód ) egy hipotetikus assembler utasítás, amelynek végrehajtása után a számítógép központi processzora leállítja a további parancsok végrehajtását, ezért szükséges a „hard” újraindítás a működőképesség helyreállításához .

Eredet

Az IBM System / 360 architektúrájú számítógépeknek tulajdonították néhány assembler utasítás létezését, amelynek végrehajtása a számítógépet működésképtelenné teszi . Az összeállítási utasítások mnemonikus megjelölése az utasítás fő funkciójának rövidítése szerint történt, például ADD (egy számhoz adjon másik számot) vagy CMP (számok összehasonlítása). Ezek között a parancsok között voltak olyan félreérthetően értelmezett parancsok, mint a ZAP (szó szerint „Shock”, valójában - Zero és Add Packed , „Reset the register and add to decimális szám”) [1] . Azok a programozók, akik ezzel az assemblerrel dolgoztak, elkezdtek kitalálni saját mnemonikus jelöléseiket, és humoros értelmezést tulajdonítottak nekik. Így például feltalálták az XPR parancsokat (Execute Programmer , "Execute a Programmer", CAI ( Sérült könyvelési információ , "Spoil accounting data") [2] , valamint "SDI" ( Self Destruct Immediately , "Immediately self destruct") [2] és CRN ( Convert to Roman Numerals , "Convert to Roman numerals") [3] . E humoros elnevezések között megjelent a HCF (Halt and Catch Fire , "Halt and catch fire") [4] [5] [6] parancs is . A HCF első említése valahol az 1970-es évek közepén jelent meg [4] [5] .

Eredeti értelemben a gyulladt jelentése nem szó szerinti gyújtást jelentett, hanem a funkcionalitás teljes elvesztését a következő "hard" újraindításig. De pletykák keringtek a hibás parancsokból eredő berendezések meghibásodásáról [7] . Van egy városi legenda : az 1960-as évek egyik számítógépén mindent megnöveltek , és megnövelték a mágneses memória sebességét , vékony vezetékekkel összevarrva. A megnövekedett áramok nem zavarták a normál működést, azonban a HLT művelet ( Halt , jelre vár külső eszközről ) úgy valósult meg, hogy "ha nincs jel, ugorj ugyanarra a címre." Ugyanazon cella ismételt leolvasása a megfelelő vezeték kiégéséhez vezetett.

Meglévő példák

A Motorola 6800 mikroprocesszor volt az első olyan processzor, amely a HCF-hez hasonló, dokumentálatlan utasítást tartalmazott [8] . A fejlesztő cég 197 műveletet ( opcode ) dokumentált, míg a processzorarchitektúra 256 lehetséges kombinációt tett lehetővé. Jerry Wheeler kutató megpróbálta sorra kiadni a maradék 59 „érvénytelen utasítást” a processzornak, ami nem várt eredményre vezetett: az egyik utasítás készenléti üzemmódba helyezte a processzort [8] :

Amikor az utasítást végrehajtották, csak egy oszcilloszkóppal lehetett megtudni, hogy mi történik . A felhasználó szemszögéből nézve a gép leáll, és minden újraindítási kísérletet leállít. A címbusz jelzői azt mutatják, hogy a processzor nagyon gyorsan kezdi el szekvenciálisan újraolvasni az összes memóriát. Ennek eredményeként a címbusz 16 bites számlálóvá változik. Viszont a processzor nem dolgozza fel amit olvas... csak olvas.

Eredeti szöveg  (angol)[ showelrejt] Amikor ezt az utasítást futtatja, az egyetlen módja annak, hogy oszcilloszkóppal lássa, mit csinál. A felhasználó szemszögéből a gép leáll, és dacol a legtöbb újraindítási kísérlettel. Azok a személyek, akiknek jelzőlámpái vannak a címbuszon, látni fogják, hogy a processzor nagyon gyorsan elkezdi beolvasni az összes memóriát egymás után. Valójában a címbusz 16 bites számlálóvá alakul. A processzor azonban nem veszi észre, hogy mit olvas… csak olvas.

Egy másik kutató, David Adans később megjegyezte: „A DD utasítás a processzort a memória címterének szekvenciális olvasásának végtelen hurkába helyezte (egyes mérnökök ezt az utasítást HCF-nek hívták, de mi Drop Dead utasításnak hívtuk ). A Drop Dead mód nagyszerű volt a hardverproblémák oszcilloszkóppal történő meghatározásához; szép négyzethullámokba illeszkedik a memóriacímek olvasása és a frekvenciagenerátor működése” [9] . Így ez az utasítás valójában egy nem dokumentált függvény volt a processzor diagnosztikai módba lépéséhez [10] .

Más processzorokban, nagyrészt tervezési hibák vagy nem dokumentált jellemzők miatt, a HCF utasításmódhoz hasonló hatás is lehetséges. Tehát az Intel 8086 család processzoraiban volt egy HLT utasítás ( Halt , "Stop"), amely leállította a további utasítások végrehajtását, és leállította a processzort, amelyből a megfelelő megszakítás érkezésekor ki lehetett lépni. , hibakeresési kivétel, BINIT, INIT vagy RESET [11] jellel . A 80486DX4 család néhány korai chipjénél olyan probléma volt, hogy a HLT módból nem lehetett kilépni, és a rendszert csak újra lehetett indítani. A probléma megkerülésére az operációs rendszer fejlesztői bevezették a no-hlt módot , amely egy végtelen várakozási ciklust indít el az adott utasítás végrehajtása helyett [12] .

A későbbi Intel Pentium termékcsalád hardverhibája volt az F00F C7C8 utasítás végrehajtásakor . Normál körülmények között egy ilyen utasítás megjelenése lehetetlen, azonban egy rosszindulatú programozó manuálisan beírhatta ezt az utasítást a végrehajtható kódba, ami a számítógép lefagyásához vezetett a következő újraindításig. A probléma megoldására az Intel kiadott egy mikrokódot, amely kijavítja a hibát, majd később a processzorverziók során megszabadult ettől a problémától [13] [14] .

Az 1980-as években egy másik széles körben használt processzor, a MOS 6502 12 érvénytelen utasítást tartalmaz, ami miatt lefagy [15] [16] .

A Z-80 processzornak van egy lefagyáshoz vezető utasítássorozata is: DI, HALT. A DiHalt bemutató partit róla nevezték el .

Jegyzetek

  1. IBM System/360 működési elvei . IBM . Letöltve: 2014. július 2. Az eredetiből archiválva : 2012. február 29.
  2. 1 2 Dunlap, Bryan A javasolt utasításkészlet (a hivatkozás nem érhető el) . Az Ohio Állami Egyetem fizikai tanszéke . Letöltve: 2016. június 20. Az eredetiből archiválva : 2017. szeptember 8.. 
  3. Far out op codes , Werner Cirsovius , < http://www.cirsovius.de/Firmen/Uni-Chaos/FUN/opcodes.html > . Letöltve: 2015. május 28. Archiválva : 2016. március 5. a Wayback Machine -nél 
  4. ↑ 1 2 "Tárgy: HCF utasítás: a működési elvekből" Archiválva 2017. február 24-én a Wayback Machine -nél , archiválva a textfiles.com címen
  5. ↑ 1 2 Apokrif opkód mnemonika, hosszú Archíválva az eredetiből 2011. január 22-én. , 1990.04.23., alt.folklore.computers , (a Google Csoportokon keresztül)
  6. Overextended Mnemonics , Creative Computing Vol . 6 (4): 17 (hex) (flip-side), 1980. április /2up > . Letöltve: 2017. március 12. 
  7. H.C.F. _ www.catb.org. Letöltve: 2017. szeptember 8. Archiválva az eredetiből: 2012. május 20.
  8. 12 Wheeler , Gerry. Dokumentáció nélküli M6800 utasítások  // BYTE  :  magazin. - 1977. - December ( 2. köt. , 12. sz.). - P. 46-47 .
  9. Agans, David J. Hibakeresés : a 9 nélkülözhetetlen szabály a legmegfoghatatlanabb szoftver- és hardverproblémák megtalálásához  . - New York: American Management Association, 2002. - P. 77. - ISBN 9780814426784 . Archiválva : 2014. július 26. a Wayback Machine -nél
  10. Daniels, R. Gary; Bruce, William. Beépített önteszt trendek a Motorola mikroprocesszorokban   // IEEE tervezés és tesztelés :magazin. - 1985. - április ( 2. köt. , 2. sz. ). - 64-71 . o . - doi : 10.1109/MDT.1985.294865 . "A HACOF így lett az első szándékosan beépített önteszt funkció a Motorola mikroprocesszoron."
  11. x86 utasításkészlet Hivatkozás: HLT (nem elérhető hivatkozás) . Letöltve: 2014. július 2. Az eredetiből archiválva : 2014. július 14. 
  12. Gortmaker, Paul A Linux rendszerindítási prompt – Hogyan . A Linux Documentation Project (2003. március 21.). Letöltve: 2014. július 2. Az eredetiből archiválva : 2015. július 6..
  13. Collins, Robert R. A Pentium F00F hiba: Megoldások egy csúnya problémára . Dr. Dobb's Journal (1998. május 1.). Letöltve: 2017. május 11. Az eredetiből archiválva : 2022. április 30.
  14. Pentium processzor specifikáció  frissítése . - Intel , 1999. - S. 51-52. Archiválva : 2016. március 4. a Wayback Machine -nál
  15. Steil, Michael Hogyan működnek a MOS 6502 Illegal Opcodes valójában ? pagetable.com . Letöltve: 2017. május 11. Az eredetiből archiválva : 2016. július 7.
  16. Offenga, Freddy 6502 Dokumentálatlan Opcodes . NesDev . Letöltve: 2017. május 11. Az eredetiből archiválva : 2016. augusztus 8..