정지 후 화재 발생(컴퓨팅)
Halt and Catch Fire (computing)컴퓨터 공학에서 Halt and Catch Fire(어셈블리 니모닉 HCF)는 컴퓨터의 중앙 처리 장치(CPU)가 의미 있는 동작을 중지하도록 하는 컴퓨터 기계 코드 명령을 가리키는 관용어입니다.일반적으로 컴퓨터를 재부팅해야 합니다.원래는 IBM System/360 컴퓨터(1964년 도입)의 가상 명령어를 언급하며, 명확하지 않은 수많은 명령어 니모닉에 대해 농담을 던졌습니다.
MC6800(1974년 도입)의 등장으로 프로그래머에 의해 설계상의 결함이 발견되었다.불완전한 opcode 디코딩으로 인해 2개의 부정한 opcode(0x9D와 0xDD)로 인해 프로세서의 프로그램카운터가 끝없이 증가하여 프로세서가 리셋될 때까지 잠깁니다.그 코드들은 비공식적으로 HCF로 명명되었다.MC6802의 설계 프로세스에서 엔지니어는 당초 이 명령을 삭제할 계획이었지만 테스트 목적으로 그대로 유지했습니다.그 결과, HCF는 실제 [1][2]명령으로 공식 인정되었습니다.나중에 HCF는 테스트 목적의 의도적인 명령이나 의도하지 않은 불법 명령 등 프로세서를 정지시킬 수 있는 명령어를 뜻하는 유머러스한 캐치올(catch-all)이라는 용어가 되었습니다.일부는 하드웨어 장애로 간주되며 시스템이 공유되면 악의적인 사용자가 이를 실행하여 서비스 거부 공격을 시작할 수 있습니다.
실제 명령의 경우, 이 표현의 의미는 CPU가 의도하지 않은 명령(코드의 버그)을 실행하는 대부분의 경우 컴퓨터는 여전히 복구할 수 있지만, HCF 명령의 경우 시스템을 재시작하지 않고는 회복할 수 없다는 것입니다.
"catch fire"라는 표현은 CPU 칩이 일부 버스 회로를 전환하여 과열 및 [3]연소시키는 속도를 과장한 것입니다.
오리진스
Konrad Zuse에 의해 제조된 Z1(1938)과 Z3(1941) 컴퓨터에는 실수로 [4]실행될 경우 하드웨어를 손상시키는 일련의 불법 명령이 포함되어 있었습니다.
이 용어는 IBM System/360의 불법 운영 코드와 관련이 있습니다.이 명령을 접한 프로세서는 버스 회선을 매우 빠르게 전환하기 때문에 과열될 [5][6]수 있습니다.
컴퓨터의 어셈블리 언어에서는 기계 코드 명령과 직접 동등한 니모닉이 사용됩니다.니모닉의 길이는 ADD, CMP(2개의 숫자를 비교하기 위한), JMP(프로그램의 다른 위치로 점프) 등 3글자입니다.그 HCF 명령어는 원래 가공의 어셈블리어 명령, IBM에서 개발 중에 그들의 시스템/360컴퓨터에서 사용하기 위해 XPR(Execute 프로그래머)과 CAI(부패 회계 정보)[7]과 셀프 Destruct을``"SDI"과 같은 다른 농담한 연상 기호 암기 법에 비슷한 많은 다른 재미 있는 세 글자 약어와 함께 의무가 있다고 말했다. 나는medially"[7] 및 "CRN"[8]을 참조하십시오.HCF를 포함한 이러한 니모닉 목록은 1980년 4월 [9]Creative Computing 플립사이드 패러디 호에서 "과다 확장 니모닉"으로 표시됩니다.
IBM System/360은 이미 ZAP(Zero and Add Packed), EDMK(EDIT와 MarK), TRT(TRANSlate와 Test), Read Backward(I/O 채널 명령)[10]와 같은 분명하지 않은 수많은 니모닉을 포함하였고 프로그래머들은 유머러스한 [11][12]맥락에서 비슷하게 암호적이지만 가공의 명령어를 만들기 시작했습니다.
1990년 USENET 논의에서 HCF는 1977년 [13][14]이전으로 거슬러 올라간다고 주장되었다.
마법이 프로그램될 수 있는 우주로 이송된 프로그래머에 관한 릭 쿡의 공상과학/판타지 소설, 마법의 컴파일(The Wizardry Compiled)에서 이들 중 하나는 "Halt, Selt and Catch Fire"를 위해 명령어를 HMCF로 지칭한다.
2015년 Zachtronics의 퍼즐 비디오 게임 TIS-100에서는 숨겨진 opcode로 기계를 [15]크래시시킨 HALT_AND_CATCH_FIRE라는 성과물이 있다.
최신 CPU의 경우
CPU 설계자는 IBM System/360 DIAGnose [10]명령과 같이 테스트 목적으로 문서화되지 않은 하나 이상의 기계 코드 명령을 통합합니다.
모토로라 6800
Motorola 6800 마이크로프로세서는 문서화되어 있지 않은 어셈블리 니모닉 HCF가 널리 알려진 최초의 프로세서입니다.동작 코드(opcode: 실행할 동작을 지정하는 기계어 명령의 일부)는 16진수 9D 및 DD이며, Gerry Wheeler가 1977년 12월호 바이트 매거진의 미기록 opcode에 [16]관한 기사에서 비공식[16] 니모닉 HCF가 보고되어 제공되었습니다.Wheeler는 M6800 프로세서에 대해 197개의 유효한 동작 코드가 M6800에 대해 보고되었으며, 따라서 256개의 8비트 조합이 가능한 경우 59개의 "잘못된 명령"이 존재해야 한다고 추측했습니다.그는 HCF를 "대단한 놀라움"이라고 표현하며, "음, 거의"라는 별명의 Catch Fire 부분에 대해 다음과 같이 말했습니다.
이 명령을 실행하면 오실로스코프를 사용해야만 작동 상태를 확인할 수 있습니다.사용자의 관점에서 머신은 정지하고 재기동하려는 대부분의 시도를 거부합니다.주소 버스에 인디케이터 램프가 있는 사람은 프로세서가 모든 메모리를 순차적으로 매우 빠르게 읽기 시작한다는 것을 알 수 있습니다.실제로 주소 버스는 16비트카운터로 바뀝니다.다만, 프로세서는 읽고 있는 내용에 주의하지 않습니다.그냥 [16]읽혀요
이 프로세스는 David Agans에 의해 다음과 같이 검토됩니다.
Motorola 6800 마이크로프로세서의 옛날에는 명령 코드 DD가 각 메모리 주소에서 순서대로 읽어내면서 프로세서가 무한 루프 상태가 되도록 했습니다.(다른 엔지니어들은 이를 Halt and Catch Fire [HCF]명령이라고 불렀지만 우리는 그것을 "Drop Dead"명령이라고 불렀습니다.)Drop Dead 모드는 하드웨어 타이밍을 검출하여 스코프의 로직 문제를 해결하는 데 매우 적합합니다.주소와 클럭 라인은 모두 사각파를 [17]순환시키는 등 매우 적합합니다.
즉, opcode 중 하나가 프로세서를 모드로 전환하여 명령 페치를 개입시키지 않고 연속된 주소에서 메모리 읽기 사이클을 수행합니다.이것에 의해, 주소 버스는 사실상 카운터가 되어, 모든 주소 라인의 동작을 신속히 검증할 수 있게 되었다.일단 프로세서가 이 모드로 들어가면 인터럽트에 응답하지 않기 때문에 리셋(즉, 「Drop Dead」와「Halt and Catch Fire」)에 의해서만 통상의 동작을 복원할 수 있었습니다.따라서 이러한 참조는 이 상태에서의 CPU 무응답 동작에 대한 것이지 불규칙한 [citation needed]동작에 대한 것은 아닙니다.
Motorola 6800에서는, 문서화되어 있지 않은 opcodes FD(9D/DD보다 2배 느린 사이클링) 또는 CD/ED(9D/DD보다 2배 느린 사이클링)[18]를 실행했을 때에, 그 외의 HCF와 같은 명령이 발견되었습니다.
니모닉 HCF는 Motorola 마이크로프로세서에 [2]내장된 최초의 셀프 테스트 기능으로 알려져 있습니다.
인텔 x86
x86 시리즈의 인텔 8086 이후의 프로세서에는 HLT(Halt) 명령어, opcode F4가 있어 명령어 실행을 중지하고 프로세서를 HALT 상태로 만들었습니다.인터럽트, 디버깅 예외, BINIT 신호, INIT 신호 또는 RESET 신호가 실행이 재개되어 프로세서를 항상 재부팅할 수 [19]있게 되었습니다.초기 인텔 DX4 칩 중 일부는 HLT 명령에서 문제가 발생하여 이 명령어를 사용한 후 재시작할 수 없었습니다.이것에 의해, 컴퓨터가 무효가 되어, HLT가 HCF 명령어로 바뀌었습니다.Linux 커널은 Linux에 HLT를 사용하는 대신 무한 루프를 실행하도록 지시하는 "no-hlt" 옵션을 추가했습니다.이것에 의해, 파손된 칩의 유저는 Linux [20]를 사용할 수 있게 되었습니다.
80286에는 문서화되어 있지 않은 opcode 0F 04가 있어 실행 시 CPU가 행업합니다.유일한 탈출구는 CPU [citation needed][21]리셋입니다.일부 구현에서는 opcode가 정지 [22]시퀀스로 BIOS를 통해 에뮬레이트되었습니다.
인텔 Pentium 제품 라인의 많은 컴퓨터가 잘못된 명령(F00F C7C8)을 실행하여 잠길 수 있습니다.이 때문에 컴퓨터가 행업합니다.이것은 Pentium F00F 버그로 불리게 되었습니다.컴파일러는 명령어를 작성하지 않지만 악의적인 프로그래머는 명령어를 코드에 삽입하여 컴퓨터의 전원을 껐다 켤 때까지 문제가 있는 컴퓨터를 동작시킬 수 있습니다.그 발견 이후, 컴퓨터의 잠금을 방지하기 위한 회피책이 개발되어 후속 인텔 프로세서에서 [23][24]버그가 해소되었습니다.
Black Hat USA 2017에서 Christopher Domas는 샌시프터라고 [27]불리는 자체 x86 프로세서 퍼저를 사용하여 특정 x86 프로세서 모델에서 현재 알려지지 않은 새로운 "Halt and Catch Fire" 명령을[25][26] 발견했음을 보여주었습니다.
기타 CPU
MOS Technology 6502에는 CPU를 [28][29]정지시키는 12개의 잘못된 명령이 있습니다.
Zilog Z80에서는 DI(인터럽트 비활성화)에 이어 HALT(인터럽트 대기)를 실행하면 CPU가 무한정 동결된 상태로 유지되며 발생할 수 없는 인터럽트를 기다립니다.Game Boy의 LR35902 시스템 온 칩에 있는 유사한 Sharp 프로세서 코어는 65C02의 유사한 WAI 명령과 같이 하나의 HALT에서 복구할 수 있는 부분 수정을 포함하고 있지만 인터럽트가 비활성화되어 있는 [a][30]두 개의 연속적인 HALT로 인해 동결됩니다.코어 자체에는 실행 [31]시 CPU를 완전히 잠그는 11개 이상의 opcode가 포함되어 있습니다.
Z80은 마스크 불가능한 [32][33]인터럽트도 지원합니다./NMI 신호는 원래 40핀 DIP [34][35]패키지의 핀 17에 있습니다.마스크 불가능한 인터럽트는 명령 시퀀스 DI/HALT를 실행한 후에도 CPU의 제어를 되찾기 때문에 그 쌍은 진정한 HCF를 나타내지 않습니다.HCF 상태는 /NMI 핀이 +5V 레일에 직접 연결되어 해당 신호를 생성할 수 없거나 /NMI에 서비스를 제공하는 인터럽트 루틴이 반환으로 종료되어 HALT 상태로 되돌리는 경우에만 발생합니다.
1980~1990년에 주로 샤프 포켓 컴퓨터에 사용된 Hitachi SC61860도 opcode 7B와 [36]함께 HCF 명령이 문서화되지 않았습니다.
「 」를 참조해 주세요.
메모들
- ^ 인터럽트가 비활성화되면 게임보이 CPU의 HALT 명령은 CPU를 일시 정지하지 않고 HALT 직후의 명령에서 CPU의 프로그램 카운터가 증가하는 것을 방지하며 HALT 뒤의 명령어를 효과적으로 2배(또는 멀티바이트 명령의 경우 첫 번째 바이트를 2배로 하여 origin을 분리)합니다.마지막 바이트를 새로운 싱글바이트명령어에 입력한다.HALT 뒤의 명령이 HALT 그 자체일 경우 (HALT가 싱글바이트명령어로서) CPU는 실질적으로 무한 시리즈 HALT를 인식하여 시스템이 행업합니다.
레퍼런스
- ^ "6800 Instruction Set" (PDF). Bryan's Old Computers. Archived (PDF) from the original on 2021-05-01. Retrieved 2022-04-09.
- ^ a b Daniels, R. Gary; Bruce, William (April 1985). "Built-In Self-Test Trends in Motorola Microprocessors". IEEE Design & Test. 2 (2): 64–71. doi:10.1109/MDT.1985.294865. S2CID 22719798.
To add insult to injury, we discovered that we had an illegal HACOF, an instruction that our customers found on the MC6800. It was an unused opcode-an illegal instruction. When executed inadvertently, the program counter would increment indefinitely. The problem, which was caused by incomplete opcode decoding, was a nuisance because Reset was the only means of terminating the instruction. ... During the design process, we figured out how to eliminate the HACOF instruction. About that time, the product engineers came to us with an idea. They said, 'You know what we'd really like? Some way to quickly test the RAM. If we could somehow point the program counter at the first RAM address and then just increment through the RAM, we could test it a lot faster.' Since the HACOF 'instruction' did precisely that—and we really didn't want to invest the effort needed to remove it—we replied, 'Have we got a deal for you!' HACOF thus became the first intentional built-in self-test feature on a Motorola microprocessor.
- ^ "Jargon File entry for the HCF assembly mnemonic". Archived from the original on 2012-05-20. Retrieved 2014-05-04.
- ^ 로하스, 라울(April–June 1997년)."콘라트 추제의 유산:건축은 Z1과 Z3"(PDF).IEEEAnnals 컴퓨팅의 역사의 19일(2):5–16[9–10].doi:10.1109/85.586067.그 2022-07-03에 원래에서Archived(PDF).. 페이지의 주 10: 자세한 것은 엔지니어가"마이크로 프로그램"디자인 마음에, 그렇지 않으면 짧은 회로는 하드웨어를 파괴할 수 있게 유지해야 하는 많은 2022-07-03 Retrieved.그 Z1의 역학적 디자인으로 더욱 더 이러한 측면의 Z3보다 민감했다.이후에도 완전히, 프로그래머가 위해 하드웨어를 손상하지 않기 위해 했던 지침의 시퀀슸다.어느 장면의 부주의로 인해 베를린 과학 기술 박물관과 교통의 재건축된 Z1약간의 해를 끼치고 있나 1994년에 지휘.(12페이지)재판을 받았다.
- ^ Clements, Alan (2006-10-28). Embedding Ethics in Computer Architecture. ASEE/IEEE Frontiers in Education Conference (36 ed.). p. 4. Archived from the original on 2022-04-30. Retrieved 2018-03-02.
- ^ Kohler, Eddie (2005-04-04). "CS111 - Lecture 1" (PDF). p. 2. Archived (PDF) from the original on 2018-03-02. Retrieved 2018-03-02.
- ^ a b Dunlap, Bryan. "A Proposed Instruction Set". Physics Department, The Ohio State University. Archived from the original on 2017-09-08. Retrieved 2016-06-20.
- ^ Cirsovius, Werner. "Far out op codes". Archived from the original on 2016-03-05. Retrieved 2015-05-28.
- ^ "Overextended Mnemonics". Creative Computing. 6 (4): 17 (hex) (flip–side). April 1980. Retrieved 2017-03-12.
- ^ a b IBM System/360 Principles of Operation (PDF). IBM. Archived (PDF) from the original on 2012-02-29. Retrieved 2014-07-02.
- ^ "Kevin Korb's Jokes: Assembler Opcodes that should exist". Archived from the original on 2015-06-05. Retrieved 2016-12-13.
- ^ "Forgotten Assembly Language Commands". Archived from the original on 2017-03-16. Retrieved 2016-12-13.
- ^ "제목: HCF 지침: 운영 원칙에서" 2017-02-24 Wayback Machine에서 아카이브, textfiles.com에서 아카이브
- ^ "apocrypal opcode 니모닉스, long" Wayback Machine, 1990-04-23, alt.folklore.computers, (Google Groups를 통해) 아카이브된 2019-05-31
- ^ "Steam Community: TIS-100: Achievements". Archived from the original on 2021-05-05. Retrieved 2021-05-11.
- ^ a b c Wheeler, Gerry (December 1977). "Undocumented M6800 Instructions". BYTE. Vol. 2, no. 12. pp. 46–47.
The mnemonics are, of course, assigned by me.
- ^ Agans, David J. (2002). Debugging: the 9 indispensable rules for finding even the most elusive software and hardware problems. New York, USA: American Management Association. p. 77. ISBN 978-0-81442678-4. OCLC 52043345. Archived from the original on 2014-07-26. Retrieved 2016-10-30.
- ^ Demeulemeester, Samuel (2019-07-17). "Investigating the HCF (Halt & Catch Fire) instruction on Motorola 6800". X86.FR – Doc TB's R&D Lab. Archived from the original on 2022-03-31. Retrieved 2022-04-09.
- ^ "x86 Instruction Set Reference: HLT". Archived from the original on 2014-07-14. Retrieved 2014-07-02.
- ^ Gortmaker, Paul (2003-03-21). "The Linux Boot Prompt-How To" (PDF). The Linux Documentation Project. Archived (PDF) from the original on 2015-07-06. Retrieved 2014-07-02.
- ^ "Re: Undocumented opcodes (HINT_NOP)". Archived from the original on 2004-11-06. Retrieved 2010-11-07.
- ^ "Re: Also some undocumented 0Fh opcodes". Archived from the original on 2003-06-26. Retrieved 2010-11-07.
- ^ Collins, Robert R. (1998-05-01). "The Pentium F00F Bug: Workarounds for a nasty problem". Dr. Dobb's Journal. Archived from the original on 2022-04-30. Retrieved 2014-08-12.
- ^ Pentium Processor Specification Update (PDF). Intel Corporation. January 1999. pp. 51–52. Order number 242480-041. Archived (PDF) from the original on 2016-03-04. Retrieved 2006-11-02.
- ^ "Breaking the x86 ISA (PDF)" (PDF). Christopher Domas. Archived (PDF) from the original on 2018-01-04. Retrieved 2017-12-09.
- ^ "Breaking the x86 ISA (video)". Christopher Domas. Archived from the original on 2021-12-21. Retrieved 2017-12-09.
- ^ "sandsifter: the x86 processor fuzzer". Christopher Domas. Archived from the original on 2017-10-25. Retrieved 2017-12-09.
- ^ Steil, Michael. "How MOS 6502 Illegal Opcodes really work". pagetable.com. Archived from the original on 2016-07-07. Retrieved 2016-08-01.
- ^ Offenga, Freddy. "6502 Undocumented Opcodes". NesDev. Archived from the original on 2016-08-08. Retrieved 2016-08-01.
- ^ "GameBoy CPU Manual" (PDF). Archived (PDF) from the original on 2018-06-23. Retrieved 2018-06-22.
- ^ "Game Boy CPU instruction set". Archived from the original on 2021-02-09. Retrieved 2021-03-11.
- ^ "Interrupt Mechanism - Development - SMS Power!". Archived from the original on 2016-04-04. Retrieved 2016-04-25.
- ^ Flammenkamp, Achim. "Interrupt Behaviour of the Z80 CPU". Archived from the original on 2016-04-20. Retrieved 2016-04-25.
- ^ "Pinouts - Z80 family". Archived from the original on 2016-05-08. Retrieved 2016-04-25.
- ^ Vis, Peter J. "Zilog Z80 Pinout". Archived from the original on 2016-10-11. Retrieved 2016-04-25.
- ^ "SC61860 (Aka ESR-H) Instruction Set". GitHub. 2022-03-20. Archived from the original on 2022-03-23. Retrieved 2022-03-23.