핵심 인사이트 (3줄 요약)

  1. 본질: NMI (Non-Maskable Interrupt)는 CPU 내부의 인터럽트 활성화 플래그(Interrupt Enable Flag) 상태와 무관하게 무조건 즉시 실행되는, 최상위 우선순위의 하드웨어 인터럽트다.
  2. 가치: 시스템이 심각한 소프트웨어 오류로 멈추거나 인터럽트가 금지된 무한 루프에 빠졌을 때도 작동하여, 하드웨어 장애(ECC Uncorrectable Error)나 워치독 타이머(Watchdog)를 통해 시스템을 안전하게 복구하거나 종료한다.
  3. 판단 포인트: 일반적인 주변 장치 제어에는 사용하지 않으며, 전원 장애(Power Failure), 메모리 오류, 시스템 락업(Lock-up) 감지 등 '최후의 보루' 성격의 이벤트에만 한정하여 할당해야 한다.

Ⅰ. 개요 및 필요성

1. NMI (Non-Maskable Interrupt)의 정의

NMI는 "마스크(차단)할 수 없는 인터럽트"라는 뜻이다. 일반적인 인터럽트(Maskable Interrupt)는 CPU가 아주 중요한 작업을 할 때 잠시 무시할 수 있지만, NMI는 어떤 상황에서도 무시할 수 없다. 하드웨어 핀(Pin) 레벨에서 CPU 코어에 직접 연결되어, 신호가 들어오는 즉시 현재 실행 중인 모든 명령어를 중단하고 전용 핸들러로 점프한다.

2. 왜 NMI가 필요한가?

  • 소프트웨어 통제 불능 상태 대응: 커널이 스핀락(Spinlock)에 걸려 모든 인터럽트를 끄고 무한 루프를 돌고 있다면, 일반적인 방법으로는 시스템을 살릴 수 없다. 이때 NMI만이 유일하게 개입하여 상태를 분석하거나 리셋할 수 있다.
  • 치명적 하드웨어 오류 알림: 메모리 칩의 물리적 파손이나 전원 공급 장치의 전압 강하 등, 한순간의 지체도 허용되지 않는 긴급 상황을 CPU에 알리는 통로다.
  • 디버깅 및 프로파일링: 시스템의 현재 상태를 강제로 덤프(Dump)하거나, 특정 시점의 레지스터를 확인하기 위한 'Panic Button' 역할을 수행한다.

3. NMI vs 일반 인터럽트 (IRQ)

항목일반 인터럽트 (IRQ)비마스크 인터럽트 (NMI)
차단 가능 여부가능 (CLI/SEI 명령어 등)불가능 (하드웨어 고정)
우선순위상대적으로 낮음 (가변적)최상위 (Hard-wired)
주요 용도키보드, 네트워크, 타이머전원 장애, 메모리 오류, 워치독
수행 결과작업 완료 후 복귀상태 저장 후 시스템 종료 또는 리셋
  • 📢 섹션 요약 비유: 일반 인터럽트가 "사장님, 결재 바랍니다"라고 말하는 비서라면, NMI는 "불이야! 당장 나가세요!"라고 외치는 화재 경보기와 같다. 사장님이 바빠도 불이 나면 즉시 뛰어나가야 한다.

Ⅱ. 아키텍처 및 핵심 원리

1. NMI의 하드웨어 경로

NMI는 인터럽트 컨트롤러(NVIC/GIC)를 거치지 않거나, 거치더라도 전용 통로를 통해 CPU 코어의 NMI 전용 핀에 직접 연결된다.

 [ External Events ]           [ Interrupt Controller ]        [ CPU Core ]
 ┌─────────────────┐           ┌──────────────────┐          ┌────────────┐
 │ Peripheral IRQs │ ────────▶ │ Maskable Logic   │ ────────▶│  IRQ Pin   │
 └─────────────────┘           │ (Enable/Disable) │          └────────────┘
                               └──────────────────┘                 ▲
                                                                    │
 [ Critical Events ]                                                │
 ┌─────────────────┐           ┌──────────────────┐          ┌──────┴─────┐
 │ Power Fail /    │ ────────▶ │   NMI Logic      │ ────────▶│  NMI Pin   │
 │ Watchdog / Error│           │ (Always Enabled) │          └────────────┘
 └─────────────────┘           └──────────────────┘          (무조건 실행)

2. NMI의 발생 조건 (Trigger Sources)

  • Watchdog Timeout: 소프트웨어가 일정 시간 응답하지 않을 때 타이머가 NMI를 발생시킴.
  • Parity / ECC Error: 메모리에서 고칠 수 없는 다중 비트 에러가 발견되었을 때.
  • Bus Timeout: 버스 마스터가 응답하지 않아 시스템 전체가 멈출 위험이 있을 때.
  • External NMI Button: 개발자가 강제로 시스템을 멈추고 디버깅하기 위해 누르는 물리 버튼.

3. NMI 핸들러의 제약 사항

NMI는 시스템이 매우 불안정한 상태에서 실행되므로, 핸들러 작성 시 극도의 주의가 필요하다.

  • Re-entrancy 금지: NMI 처리 중에 또 NMI가 발생하면 시스템이 완전히 꼬일 수 있다. (대부분의 CPU는 NMI 처리 중에는 다음 NMI를 하드웨어적으로 보류함)

  • 최소한의 작업: 복잡한 함수 호출이나 메모리 할당은 피해야 한다. 현재 레지스터 값을 저장하고 시스템을 종료하거나 리셋하는 것이 주 목적이다.

  • 📢 섹션 요약 비유: NMI 핸들러는 비상 탈출구와 같다. 복도가 무너지고 있는 긴급 상황이므로, 가구(데이터)를 챙기기보다는 몸부터 빠져나가는 것이 우선이다.


Ⅲ. 비교 및 연결

1. x86 vs ARM에서의 NMI

아키텍처마다 NMI를 부르는 명칭과 처리 방식이 조금씩 다르다.

아키텍처명칭특징
x86NMI전용 NMI 핀 사용, LINT1 등을 통해 전달
ARM (Cortex-M)NMINVIC의 0번 예외로 할당, 무조건 선점
ARM (Cortex-A)FIQ / SErrFast Interrupt나 System Error를 NMI 대용으로 사용

2. 운영체제 커널과의 연결 (Kernel Panic)

리눅스나 윈도우 커널은 NMI가 발생하면 이를 **'심각한 결함'**으로 간주한다. NMI 핸들러는 현재 모든 코어의 CPU 레지스터 상태를 수집하여 kdumpBlue Screen에 기록한다. 이는 사후 분석(Post-mortem)을 통해 시스템이 왜 죽었는지 밝혀내는 유일한 단서가 된다.

3. 워치독 타이머 (Watchdog)와의 협력

워치독은 1차로 인터럽트를 발생시키고, 그래도 응답이 없으면 2차로 NMI를, 마지막으로 하드웨어 리셋을 수행하는 계층적 구조(Multi-stage)를 가진다. NMI 단계에서 시스템 로그를 남길 수 있는 마지막 기회를 준다.

  • 📢 섹션 요약 비유: x86의 NMI가 고전적인 경보 벨이라면, ARM의 NMI는 디지털로 관리되는 정밀한 비상 통제 시스템과 같다.

Ⅳ. 실무 적용 및 기술사 판단

1. NMI를 이용한 '데드락(Deadlock)' 탐지

실무에서 멀티코어 시스템이 멈췄을 때 원인을 찾는 가장 강력한 도구가 NMI다.

  • 한 코어가 락을 잡고 안 놓아주면 다른 코어들이 모두 멈춘다(Soft Lock-up).
  • 이때 주기적으로 발생하는 NMI 타이머가 각 코어의 PC(Program Counter)를 확인하여, 한 곳에서 너무 오래 머물러 있다면 데드락으로 판단하고 로그를 출력한다.

2. 안티패턴: 'NMI 핸들러 내의 뮤텍스(Mutex) 사용'

NMI 핸들러 내부에서 뮤텍스나 세마포어를 기다리는 것은 자살 행위다. NMI는 현재 어떤 락이 잡혀있는지 모르는 상태에서 강제 개입한 것이므로, 핸들러가 락을 기다리게 되면 영원히 빠져나오지 못하는 '자기 교착 상태'에 빠진다. 오직 Lock-free 코드만 사용해야 한다.

3. 기술사 시험 대비 핵심 키워드

  • Non-Maskable: 어떤 소프트웨어 설정으로도 끌 수 없음.
  • Priority 0: 시스템 내 최상위 우선순위 예외.
  • Watchdog / Power Fail: 대표적인 발생 원인.
  • Context Saving: 최후의 상태를 기록하는 용도.

4. 실무 판단: NMI 핀의 하드웨어 설계

NMI 핀은 노이즈에 극도로 예민해야 한다. 만약 회로 설계 실수로 NMI 핀에 노이즈(Glitch)가 끼어들면, 시스템이 아무 이유 없이 계속 리셋되거나 멈추는 지옥 같은 디버깅 상황이 연출된다. 반드시 강력한 풀업(Pull-up) 저항디바운싱(Debouncing) 처리를 하드웨어적으로 보강해야 한다.

  • 📢 섹션 요약 비유: NMI 핀 설계는 '핵버튼'을 설계하는 것과 같다. 아무 때나 눌려도 안 되지만, 정작 눌러야 할 때는 백 번 중의 백 번 모두 확실히 작동해야 한다.

Ⅴ. 기대효과 및 결론

1. 기대효과

  • 시스템 신뢰성(Reliability) 확보: 소프트웨어가 망가져도 하드웨어가 시스템을 통제할 수 있는 최후의 수단 제공.
  • 장애 분석 효율화: 시스템이 죽기 직전의 상황을 기록하여 버그 수정의 결정적 근거 확보.
  • 안전 표준 준수: ISO 26262(자동차)나 DO-178C(항공) 등에서 요구하는 고신뢰성 하드웨어 요구 사항 충족.

2. 한계 및 미래 기술 방향

  • 가상화의 한계: 가상 머신(VM) 내부에서 NMI를 완벽하게 흉내 내는 것은 어렵다. 하이퍼바이저가 NMI를 가로채어 VM에 전달하는 과정에서 지연이 발생할 수 있기 때문이다. 이를 보완하기 위한 Hardware-assisted NMI Virtualization 기술이 발전하고 있다.
  • 보안 위협: 최근에는 NMI를 이용해 CPU의 보안 영역(Enclave)을 공격하거나 사이드 채널 공격을 감행하는 기법이 보고되고 있다. 이에 대응하여 NMI 발생 시 보안 컨텍스트를 즉시 폐쇄하는 하드웨어 가드 기술이 연구 중이다.

3. 결론

NMI는 시스템 아키텍처에서 가장 강력하면서도 위험한 권한이다. 평상시에는 아무 일도 하지 않는 것처럼 보이지만, 위기의 순간에 시스템의 질서를 바로잡는 '최종 조정자'다. 설계자는 NMI의 무소불위 권력을 이해하고, 이를 통해 어떻게 시스템의 마지막 자존심(데이터 로그)을 지켜낼 것인지 고민해야 한다.

  • 📢 섹션 요약 비유: NMI는 컴퓨터의 '생존 본능'이다. 이성이 마비되어(소프트웨어 정지) 아무것도 할 수 없을 때, 몸이 스스로를 보호하기 위해 작동하는 마지막 반사 신경과 같다.

📌 관련 개념 맵

개념연결 포인트
Maskable IRQNMI와 대조되는, 소프트웨어로 끄고 켤 수 있는 일반 인터럽트
Watchdog TimerNMI를 발생시키는 가장 흔한 하드웨어 파수꾼
ISR (Interrupt Service Routine)NMI 발생 시 실행되는 최후의 비상 대응 코드
Bus ErrorNMI를 유발하는 치명적인 하드웨어 통신 장애
Blue Screen / Kernel PanicNMI 처리의 최종 결과물로서의 장애 보고서

👶 어린이를 위한 3줄 비유 설명

  1. 컴퓨터에도 선생님의 말을 무시할 수 있는 '귓속말' 인터럽트가 있지만, 'NMI'는 절대로 무시할 수 없는 아주 큰 소리에요.
  2. 컴퓨터가 너무 바빠서 정신을 못 차리고 있을 때, "그만! 위험해!"라고 외치며 강제로 멈추게 하는 비상벨 같은 거예요.
  3. 이 비상벨 덕분에 컴퓨터가 불이 나거나 완전히 망가지기 전에 안전하게 쉴 수 있답니다.