인터럽트 처리와 ISR 설계: 하드웨어·소프트웨어 인터럽트의 동작

하드웨어·소프트웨어 인터럽트의 차이와 x86 벡터, ISR 설계, APIC·MSI, 인터럽트 지연 시간 관리 방식을 정리한다.

2026-08-14 · 최초 발행 2026-01-16

CPU가 이벤트에 반응하는 경로

인터럽트는 프로세서가 실행 중인 작업을 잠시 멈추고, 즉시 다뤄야 할 이벤트를 처리하도록 알리는 신호다. 외부 장치의 완료 신호뿐 아니라 오류와 결함 같은 예외 상황, 사용자 프로그램의 커널 서비스 요청, 타이머 기반 스케줄링도 이 경로를 사용한다.

장치 상태를 계속 확인하는 폴링과 달리, 인터럽트는 이벤트가 발생했을 때 처리 흐름을 시작한다. CPU가 I/O 완료를 기다리지 않아도 되는 이유이기도 하다.

목적 처리 대상
비동기 이벤트 처리 외부 장치의 완료 신호
예외 상황 대응 오류, 결함 등 예외적 상황
시스템 호출 지원 사용자 프로그램의 커널 서비스 요청
시분할 구현 타이머 인터럽트 기반 스케줄링
I/O 효율성 I/O 완료 대기 없이 다른 작업 수행
인터럽트 방식작업 수행인터럽트 신호CPU장치폴링 방식상태 확인상태 응답반복 확인CPU장치
특성 폴링 인터럽트
CPU 효율 낮음 (계속 확인) 높음 (이벤트 시만 처리)
응답 시간 폴링 주기에 의존 즉각적
구현 복잡도 낮음 높음
전력 소비 높음 낮음
적합한 상황 빈번한 이벤트 비정기적 이벤트

발생 원인에 따라 나뉘는 인터럽트

하드웨어 인터럽트는 외부 장치 또는 내부 하드웨어 이벤트로 비동기 발생한다. 키보드·마우스, 네트워크 카드, 디스크 컨트롤러, 타이머의 요청은 인터럽트 컨트롤러를 거쳐 CPU로 전달된다.

CPU인터럽트 컨트롤러 (PIC/APIC)외부 인터럽트키보드/마우스네트워크 카드디스크 컨트롤러타이머우선순위 결정인터럽트 마스킹IRQ 관리인터럽트
유형 설명 예시
마스크 가능 (Maskable) CLI 명령으로 비활성화 가능 I/O 장치 인터럽트
마스크 불가능 (NMI) 항상 처리됨, 비활성화 불가 하드웨어 오류, 전원 이상
에지 트리거 신호 전이 시점에 감지 대부분의 IRQ
레벨 트리거 신호 레벨 유지 동안 감지 공유 인터럽트 라인

소프트웨어 인터럽트는 프로그램이 명시적으로 실행한 명령이나 예외 조건 때문에 동기적으로 발생한다.

유형 원인 예시
트랩 (Trap) 의도적 명령 (INT n) 시스템 호출, 디버거 브레이크포인트
폴트 (Fault) 복구 가능한 오류 페이지 폴트, 세그먼트 폴트
어보트 (Abort) 복구 불가능한 오류 기계 체크 예외, 더블 폴트

x86에서는 인터럽트 벡터가 처리 대상을 구분한다.

벡터 번호 유형 설명
0 폴트 나누기 오류
1 폴트/트랩 디버그 예외
2 인터럽트 NMI
3 트랩 브레이크포인트
6 폴트 잘못된 명령 코드
8 어보트 더블 폴트
13 폴트 일반 보호 폴트
14 폴트 페이지 폴트
32-255 인터럽트 사용자 정의, IRQ

IRQ 수신부터 원래 실행으로 복귀하기까지

장치가 IRQ를 요청하면 인터럽트 컨트롤러는 이를 CPU에 전달한다. CPU는 현재 명령을 마친 뒤 컨텍스트를 저장하고, 인터럽트 벡터를 받아 IDT에서 ISR 주소를 찾는다. 핸들러가 처리를 끝내면 PIC에 EOI를 보내고 IRET로 기존 컨텍스트를 복원한다. 이후 스케줄러가 실행 상태를 검사한다.

스케줄러인터럽트 핸들러CPU인터럽트 컨트롤러장치스케줄러인터럽트 핸들러CPU인터럽트 컨트롤러장치인터럽트 요청 (IRQ)인터럽트 신호 (INT)현재 명령 완료컨텍스트 저장 (레지스터, FLAGS)인터럽트 플래그 비활성화인터럽트 확인 (ACK)인터럽트 벡터 전송IDT 참조, ISR 호출인터럽트 처리EOI (End of Interrupt)IRET (컨텍스트 복원)스케줄링 검사

처리 중 확인할 지점은 다음과 같다.

  • CPU는 각 명령어 사이클 끝에서 인터럽트 핀을 확인하며, 마스크 가능 인터럽트는 IF(Interrupt Flag)도 확인한다.
  • 컨텍스트에는 프로그램 카운터(PC/EIP), 상태 레지스터(FLAGS/EFLAGS), 필요할 경우 스택 포인터와 범용 레지스터가 포함된다.
  • 벡터 번호는 인터럽트 컨트롤러가 전달하거나 프로세서 내부에서 예외 벡터로 결정한다.
  • IDT(Interrupt Descriptor Table)로 핸들러 주소를 조회하며, 필요하면 특권 레벨 확인과 스택 전환이 뒤따른다.
  • ISR은 원인을 파악해 장치 상태를 읽거나 데이터를 전송한다.
  • 처리가 끝나면 PIC에 EOI 신호를 보내고 IRET로 이전 실행 상태를 되돌린다.

ISR은 긴 일을 붙잡지 않는다

ISR(Interrupt Service Routine)은 특정 인터럽트를 처리하는 함수다. 이 경로에 오래 머물면 다른 인터럽트도 지연될 수 있으므로, 즉시 처리할 일과 나중에 처리할 일을 나누는 설계가 필요하다.

YesNoISR 진입컨텍스트 추가 저장(필요한 레지스터)인터럽트 원인 파악빠른 처리 가능?즉시 처리하단부 스케줄링(Softirq/Tasklet)장치 상태 갱신ACK 전송컨텍스트 복원IRET
원칙 설명 이유
최소 실행 시간 가능한 짧게 유지 다른 인터럽트 지연 방지
비차단 슬립, 블로킹 호출 금지 인터럽트 컨텍스트는 스케줄 불가
최소 락 사용 스핀락만 짧게 사용 데드락, 지연 방지
재진입 고려 동일 ISR 중첩 실행 대비 안정성 확보
상단부/하단부 분리 긴급 작업만 ISR에서 처리 응답성 향상

Linux 커널에서는 하드웨어 인터럽트 수신, 최소한의 긴급 처리, 하단부 스케줄링을 상단부(Top Half)에서 수행한다. 이후 작업은 Softirq, Tasklet, Workqueue로 넘길 수 있다.

하단부 (Bottom Half)상단부 (Top Half)하드웨어 인터럽트 수신최소한의 긴급 처리하단부 스케줄링SoftirqTaskletWorkqueue
메커니즘 실행 컨텍스트 특징
Softirq 인터럽트 컨텍스트 정적, 고성능, 복잡
Tasklet 인터럽트 컨텍스트 동적, softirq 기반, 동일 타입 직렬화
Workqueue 프로세스 컨텍스트 슬립 가능, 가장 유연

PIC에서 APIC으로 확장된 전달 구조

인터럽트 컨트롤러는 여러 인터럽트 소스를 관리하고 CPU에 전달하는 하드웨어다. 전통적인 8259A PIC에서는 마스터 8개와 슬레이브 8개를 결합해 IRQ 15개를 다루며, IRQ 0이 최고 우선순위이고 IRQ 7이 최저 우선순위다. 단일 CPU만 지원한다는 한계도 있다.

APIC(Advanced PIC)는 멀티프로세서 시스템을 위한 인터럽트 컨트롤러다. I/O APIC은 장치 요청의 라우팅과 우선순위 관리를 맡고, 각 CPU의 Local APIC은 인터럽트 수신과 IPI 처리를 담당한다.

Local APIC (CPU 1)Local APIC (CPU 0)I/O APIC외부 장치IPI장치 1장치 2장치 3인터럽트 라우팅우선순위 관리인터럽트 수신IPI 처리인터럽트 수신IPI 처리
기능 설명
인터럽트 라우팅 특정 CPU로 인터럽트 전달
로드 밸런싱 인터럽트 부하 분산
IPI 프로세서 간 인터럽트
타이머 로컬 APIC 타이머

PCI/PCIe 장치가 쓰는 MSI와 MSI-X

MSI(Message Signaled Interrupts)는 PCI/PCIe 장치가 메모리 쓰기로 인터럽트를 발생시키는 방식이다. 물리적 인터럽트 라인이 필요한 전통적 방식과 비교해 벡터 운용 방식과 확장성이 다르다.

특성 전통적 인터럽트 MSI MSI-X
인터럽트 라인 물리적 핀 필요 불필요 불필요
벡터 수 공유 최대 32개 최대 2048개
지연 시간 높음 낮음 낮음
확장성 제한적 양호 우수

ISR 시작 전까지 생기는 지연

인터럽트 지연 시간(Interrupt Latency)은 인터럽트가 발생한 시점부터 ISR 실행이 시작될 때까지의 시간이다. 신호 전파, CPU 인식, 컨텍스트 저장, 벡터 조회가 이 시간에 포함된다.

인터럽트 지연 시간인터럽트 발생신호 전파CPU 인식컨텍스트 저장벡터 조회ISR 시작
방법 설명
인터럽트 비활성화 최소화 CLI/STI 구간 단축
빠른 ISR 상단부 처리 최소화
캐시 최적화 ISR 코드를 캐시에 유지
선점 지원 PREEMPT_RT 패치 적용
인터럽트 친화성 IRQ를 특정 CPU에 바인딩

하드웨어 인터럽트는 외부 장치와의 비동기 통신을, 소프트웨어 인터럽트는 시스템 호출과 예외 처리를 맡는다. ISR을 짧게 유지하고 상단부와 하단부를 분리하는 방식은 시스템 응답성과 처리량에 직접 연결된다. APIC과 MSI는 멀티코어 환경의 인터럽트 처리를 확장하는 기반이다.

인터럽트운영체제ISRCPUAPIC