Enterprise Infrastructure Intelligence ● Certified engineers online · Fast response guaranteed
서버/하드웨어

NMI 핸들링: 커널 아키텍처와 구현 원리

비마스킹 가능 인터럽트(NMI)는 소프트웨어 차단이 불가능한 최상위 하드웨어 인터럽트로, 하드웨어 오류나 시스템 락업 감지에 사용됩니다. 커널의 NMI 핸들러는 최소한의 처리만 수행하고 중첩 보호 및 컨텍스트 보존에 특별한 주의가 필요합니다.

2026.09.22  ·  22회  · 

NMI 핸들링의 핵심 원리

NMI는 EFLAGS 레지스터의 인터럽트 금지 플래그(IF)로도 마스킹될 수 없는 하드웨어 인터럽트입니다. 외부 하드웨어가 NMI 핀을 어설션하거나 시스템 버스/APIC 시리얼 버스에서 NMI 전달 모드로 메시지를 수신할 때 발생합니다. 프로세서는 즉시 인터럽트 벡터 2를 호출하여 NMI를 처리합니다.

핸들러 설계의 실무 제약

NMI 핸들러는 일반 인터럽트보다 엄격한 제약을 가집니다. 마스킹 가능한 인터럽트를 선점할 수 없으므로 시스템 전체 지연 시간에 심각한 영향을 미칠 수 있습니다. 따라서 최소한의 진단 처리(스택 추적, CPU 레지스터 수집)만 수행하고 덜 중요한 작업은 마스킹 가능 인터럽트 핸들러로 연기해야 합니다. x86-64에서는 외부 NMI 후 페이지 폴트나 브레이크포인트가 발생하면 IRET을 통해 NMI 컨텍스트가 손실되어 중첩 NMI가 발생할 수 있으므로 이를 방지하는 별도의 상태 관리가 필수입니다.

Linux 커널 구현 패턴

Linux 커널은 RCU를 사용한 동적 NMI 핸들러 등록 메커니즘을 제공합니다. set_nmi_callback()으로 핸들러를 등록하면 nmi_callback 함수 포인터에 저장되고, do_nmi()는 nmi_enter()로 선점을 비활성화한 후 핸들러를 호출합니다. 핸들러가 0을 반환하면 default_do_nmi()로 기계 특정 처리를 수행합니다. 핸들러 해제 후 데이터 구조를 안전하게 해제하려면 synchronize_rcu()를 사용하여 모든 CPU의 NMI 핸들러 실행을 완료할 때까지 대기해야 합니다.

WIKIDATA WORKSTATION
AI·렌더링에 최적화된
전문가용 워크스테이션
NVIDIA RTX GPU · 최대 192GB 메모리 · ECC 지원