인터럽트 컨트롤러

CPU 외부의 하드웨어 장치들이 보내는 인터럽트 요청(IRQ)을 수집하고, 우선순위를 판단하여 CPU에 전달하는 중재 역할의 하드웨어입니다.

왜 필요한가?

CPU의 인터럽트 핀은 제한적인데, 인터럽트를 발생시키는 장치는 다수입니다. 여러 장치가 동시에 인터럽트를 보낼 수 있으므로, 이를 정리·우선순위 판단·전달하는 중재자가 필요합니다.

인터럽트 컨트롤러가 없다면?

[인터럽트 컨트롤러 없이]
키보드 ──→ CPU 핀1
디스크 ──→ CPU 핀2       ← CPU 핀 수가 부족하고
NIC   ──→ CPU 핀3          동시 요청 시 처리 불가
타이머 ──→ CPU 핀4
마우스 ──→ ???            ← 핀이 모자람

[인터럽트 컨트롤러 있을 때]
키보드 ─┐
디스크 ─┤                     INTR
NIC   ─┼→ 인터럽트 컨트롤러 ─────→ CPU (핀 1개로 충분)
타이머 ─┤    (우선순위 판단)
마우스 ─┘

핵심 역할

역할설명
IRQ 수집여러 장치의 인터럽트 요청을 한곳에서 수신
우선순위 판단동시에 여러 IRQ 발생 시 어떤 것을 먼저 전달할지 결정
CPU 전달INTR 핀을 통해 CPU에 인터럽트 발생 알림
벡터 번호 전달CPU가 IDT에서 핸들러를 찾을 수 있도록 벡터 번호 제공
마스킹특정 IRQ를 일시적으로 비활성화
EOI 처리ISR 완료 후 End of Interrupt 신호를 받아 다음 인터럽트 허용

PIC (8259A) — 레거시

항목내용
정식 명칭Programmable Interrupt Controller
지원 IRQ마스터 8개 + 슬레이브 8개 = 15개 (IRQ2는 캐스케이드용)
멀티코어미지원 (단일 CPU에만 전달)
우선순위고정 (IRQ 번호가 낮을수록 높음)
[PIC 8259A 캐스케이드 구조]

              마스터 PIC                    슬레이브 PIC
         ┌───────────────┐            ┌───────────────┐
IRQ0 ──→ │ 0: 타이머      │            │ 8: RTC        │ ←── IRQ8
IRQ1 ──→ │ 1: 키보드      │            │ 9: (가용)      │ ←── IRQ9
         │ 2: ←캐스케이드──│────────────│               │
IRQ3 ──→ │ 3: COM2       │            │10: (가용)      │ ←── IRQ10
IRQ4 ──→ │ 4: COM1       │            │11: NIC        │ ←── IRQ11
IRQ5 ──→ │ 5: LPT2       │            │12: PS/2 마우스 │ ←── IRQ12
IRQ6 ──→ │ 6: 플로피      │            │13: FPU        │ ←── IRQ13
IRQ7 ──→ │ 7: LPT1       │            │14: Primary IDE│ ←── IRQ14
         └───────┬───────┘            │15: Secondary  │ ←── IRQ15
                 │ INTR                └───────────────┘
                 ▼
                CPU

APIC — 현대 시스템

항목내용
정식 명칭Advanced Programmable Interrupt Controller
구성I/O APIC (장치 → 수신) + Local APIC (코어별 1개)
지원 IRQ수백 개 이상
멀티코어지원 (특정 코어에 인터럽트 라우팅 가능)
우선순위프로그래밍 가능
[APIC 구조]

하드웨어 장치                   I/O APIC              Local APIC (코어별)
┌─────────┐               ┌──────────────┐      ┌──────────────────┐
│ 키보드   │──IRQ──→       │              │      │ Local APIC (코어0)│
│ 디스크   │──IRQ──→       │   I/O APIC   │─────→│ Local APIC (코어1)│
│ NIC     │──IRQ──→       │  (라우팅 테이블│      │ Local APIC (코어2)│
│ 타이머   │──IRQ──→       │   기반 분배)  │─────→│ Local APIC (코어3)│
└─────────┘               └──────────────┘      └──────────────────┘
                                                         │
                                                    각 코어의 CPU가
                                                    ISR 실행

I/O APIC vs Local APIC

항목I/O APICLocal APIC
위치칩셋 (사우스브리지)각 CPU 코어 내부
개수시스템에 1~2개코어당 1개
역할외부 장치 IRQ 수신 → 적절한 코어로 라우팅코어에 인터럽트 전달, IPI 송수신
관리 대상외부 하드웨어 인터럽트타이머, IPI, 에러 인터럽트

PIC vs APIC 비교

항목PIC (8259A)APIC
IRQ 수15개수백 개 이상
멀티코어 지원불가가능 (코어별 분배)
우선순위고정프로그래밍 가능
인터럽트 분배단일 CPU만라우팅 테이블 기반 분배
IPI 지원불가가능 (코어 간 통신)
사용 환경레거시/단일 코어현대 멀티코어 시스템

MSI (Message Signaled Interrupts)

현대 PCIe 장치는 물리적 IRQ 핀 대신 메모리 쓰기 방식으로 인터럽트를 전달합니다.

항목전통적 IRQMSI/MSI-X
전달 방식물리적 핀 신호메모리 주소에 데이터 쓰기
IRQ 공유여러 장치가 IRQ 공유 가능장치별 고유 벡터
I/O APIC 필요필요불필요 (직접 Local APIC에 전달)
성능IRQ 공유 시 오버헤드빠름, 정확한 벡터 전달
[전통적 IRQ]
장치 ──IRQ 핀──→ I/O APIC → Local APIC → CPU

[MSI]
장치 ──메모리 쓰기──→ Local APIC → CPU (I/O APIC 우회)

인터럽트 처리 흐름에서의 위치

장치 이벤트 발생
    │
    ▼
인터럽트 컨트롤러 ← 여기서 중재
    │
    ├── 우선순위 판단
    ├── 마스킹 확인
    └── CPU(코어) 선택 (APIC)
    │
    ▼
CPU: INTR 수신 → IDT 조회 → ISR 실행
    │
    ▼
ISR 완료 → EOI 전송 → 인터럽트 컨트롤러가 다음 인터럽트 허용

CSLOG에서 보기