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

  1. 본질: 인터럽트 (Interrupt)는 CPU (Central Processing Unit)가 하던 명령 흐름을 잠시 멈추고, 외부 장치나 내부 예외가 요구하는 더 급한 사건을 먼저 처리하게 만드는 비동기 제어 메커니즘이다.
  2. 가치: 이 메커니즘 덕분에 CPU는 Polling (폴링)처럼 장치 상태를 끝없이 확인하지 않고도 I/O (Input/Output) 응답, 타이머 기반 선점, 예외 복구를 동시에 처리할 수 있다.
  3. 판단 포인트: 좋은 인터럽트 설계는 "무조건 자주 깨우는 것"이 아니라, 인터럽트 지연시간과 처리량 사이의 균형을 맞추고 긴 작업은 뒤로 미루는 구조를 만드는 데 있다.

Ⅰ. 개요 및 필요성

인터럽트 (Interrupt)는 시스템 안에서 "지금 당장 확인해야 할 사건이 생겼다"는 사실을 CPU에 알려 실행 순서를 잠시 바꾸게 만드는 장치다. CPU가 디스크, 키보드, 네트워크 카드 같은 장치의 상태를 직접 반복 확인한다면, GHz 단위로 동작하는 프로세서가 ms 단위로 반응하는 장치를 기다리느라 수백만 사이클을 허비하게 된다. 인터럽트는 이런 낭비를 줄이기 위해, 사건이 생긴 쪽이 먼저 신호를 보내는 구조를 채택한다.

이 개념은 단순히 I/O 효율 개선에만 쓰이지 않는다. 0으로 나누기 같은 산술 오류, 페이지 부재 (Page Fault), 시스템 콜 (System Call), 주기적 타이머 틱도 모두 CPU의 정상 흐름을 잠시 중단시켜야 처리할 수 있다. 즉 인터럽트는 "외부 장치 응답 장치"인 동시에, 운영체제가 CPU의 시간을 다시 배분하고 보호 모드 진입을 수행하는 통로이기도 하다.

아래 그림은 왜 인터럽트가 필요한지를 시간 축으로 보여준다. 핵심은 CPU가 기다리는 쪽이 아니라, 장치가 준비되면 CPU를 깨우는 쪽으로 제어권이 바뀐다는 점이다.

┌────────────────────────────────────────────────────────────────────────────┐
│              폴링과 인터럽트의 차이: 누가 먼저 말을 거는가                │
├───────────────────────────────┬────────────────────────────────────────────┤
│ Polling                       │ Interrupt                                  │
├───────────────────────────────┼────────────────────────────────────────────┤
│ CPU: 준비됐나?                │ CPU: 다른 계산 수행 중                    │
│ CPU: 아직인가?                │ CPU: 계속 계산                            │
│ CPU: 아직인가?                │ 장치: 작업 완료, IRQ 발생                 │
│ CPU: 아직인가?                │ CPU: 필요한 순간에만 처리 시작            │
│                               │                                            │
│ 결과: CPU 시간 낭비           │ 결과: CPU 시간을 사건 발생 시에만 사용    │
└───────────────────────────────┴────────────────────────────────────────────┘

폴링이 단순해서 유용한 경우도 있지만, 사건 발생 시점이 불규칙한 일반적인 시스템에서는 인터럽트가 훨씬 효율적이다. 그래서 현대 컴퓨터 아키텍처에서 인터럽트는 성능, 응답성, 전력 효율을 동시에 지키는 기본 제어 방식으로 자리 잡았다.

  • 📢 섹션 요약 비유: 인터럽트는 택배가 왔는지 10초마다 현관을 열어보는 대신, 초인종이 울릴 때만 문으로 가는 방식과 같다. 덕분에 집주인은 기다리는 시간 대부분을 다른 생산적인 일에 쓸 수 있다.

Ⅱ. 아키텍처 및 핵심 원리

인터럽트는 단순한 "알람"이 아니라, 하드웨어 신호 수집, 우선순위 판정, 현재 상태 저장, 처리 루틴 분기, 복귀까지 이어지는 전체 제어 사슬이다. 보통 PIC (Programmable Interrupt Controller) 또는 APIC (Advanced Programmable Interrupt Controller)가 여러 장치의 요청을 정리해 CPU에 전달하고, CPU는 IVT (Interrupt Vector Table) 또는 IDT (Interrupt Descriptor Table)를 참조해 알맞은 ISR (Interrupt Service Routine)로 분기한다.

구성 요소역할핵심 설계 포인트
인터럽트 컨트롤러여러 요청을 모아 우선순위 결정어떤 요청을 먼저 CPU에 전달할지 결정
인터럽트 벡터 테이블인터럽트 번호와 ISR 주소 연결원인별로 즉시 올바른 코드로 점프
컨텍스트 저장PC (Program Counter), 상태 레지스터, 범용 레지스터 보존원래 프로그램을 깨뜨리지 않고 돌아오기 위함
ISR실제 사건 처리짧고 결정적으로 작성해야 함
복귀 명령인터럽트 이전 흐름 재개저장한 상태를 정확히 복원해야 함

이 처리 흐름은 다음과 같이 요약할 수 있다.

┌────────────────────────────────────────────────────────────────────────────┐
│                   인터럽트 처리 파이프라인: 멈춤이 아니라 우회            │
├────────────────────────────────────────────────────────────────────────────┤
│ 1. 장치/예외 발생                                                         │
│        │                                                                   │
│        ▼                                                                   │
│ 2. 컨트롤러가 IRQ (Interrupt Request) 정리                                 │
│        │                                                                   │
│        ▼                                                                   │
│ 3. CPU가 현재 명령 마무리                                                  │
│        │                                                                   │
│        ▼                                                                   │
│ 4. PC · 상태 정보 · 필요한 레지스터를 스택에 저장                          │
│        │                                                                   │
│        ▼                                                                   │
│ 5. 벡터 번호로 ISR 주소 조회                                               │
│        │                                                                   │
│        ▼                                                                   │
│ 6. ISR 실행 → 장치 확인, 승인 응답 (Acknowledge), 최소 처리                │
│        │                                                                   │
│        ▼                                                                   │
│ 7. 상태 복구 후 IRET (Interrupt Return)으로 원래 흐름 재개                 │
└────────────────────────────────────────────────────────────────────────────┘

여기서 중요한 것은 CPU가 인터럽트가 들어온 "즉시 아무 데서나" 끊기는 것이 아니라, 보통 현재 명령어를 마무리할 수 있는 경계에서 인터럽트 수용 여부를 판단한다는 점이다. 그다음 문맥을 저장하지 않으면 ISR이 레지스터 값을 덮어쓰면서 원래 프로그램의 계산이 망가진다. 결국 인터럽트의 핵심 원리는 우선 처리 + 원상 복구의 결합이다.

또 하나의 핵심은 마스킹 가능 여부다. NMI (Non-Maskable Interrupt)처럼 전원 이상이나 치명적 하드웨어 오류를 알리는 신호는 막을 수 없고, 일반 I/O 인터럽트는 일정 조건에서 잠시 마스킹할 수 있다. 이 구분 덕분에 시스템은 "정말 무조건 먼저 처리해야 하는 사건"과 "잠깐 기다릴 수 있는 사건"을 분리한다.

  • 📢 섹션 요약 비유: 인터럽트 구조는 병원 응급실 접수 체계와 같다. 접수대가 환자의 급한 정도를 먼저 분류하고, 의사는 진료 전에 기존 환자 기록을 덮어쓰지 않도록 차트를 정리한 뒤 응급 처치를 하고, 끝나면 다시 원래 진료 흐름으로 돌아간다.

Ⅲ. 비교 및 연결

인터럽트를 제대로 이해하려면 적어도 두 가지 경계를 함께 봐야 한다. 첫째는 Polling과의 차이이고, 둘째는 같은 인터럽트 안에서도 외부 하드웨어 사건과 내부 예외가 어떻게 다른지다. 이 차이를 봐야 인터럽트가 단순한 I/O 기법이 아니라 시스템 전체 제어 모델이라는 점이 분명해진다.

비교 축폴링 (Polling)인터럽트 (Interrupt)
사건 감지 방식CPU가 주기적으로 확인사건 발생 측이 CPU에 통지
CPU 이용률대기 중에도 CPU 사용평소에는 다른 작업 수행 가능
응답 특성폴링 주기에 좌우됨사건 발생 시 즉시 대응 가능
구현 난이도단순컨트롤러, 벡터, ISR 설계 필요
적합한 상황매우 단순하거나 짧은 대기불규칙 사건, 다장치 환경

외부 인터럽트는 키보드 입력, 네트워크 패킷 도착, 타이머 만료처럼 CPU 밖에서 오는 사건이다. 반면 내부 인터럽트 또는 예외는 잘못된 명령, 보호 위반, 페이지 부재처럼 CPU가 명령을 수행하는 과정에서 스스로 검출한 사건이다. 전자는 "밖에서 부르는 소리"에 가깝고, 후자는 "내가 하던 일 안에서 터진 문제"에 가깝다. 하지만 둘 다 현재 실행 흐름을 바꾸고 커널 또는 예외 처리 루틴으로 분기한다는 점에서 같은 제어 틀을 공유한다.

이 구조는 운영체제와도 직접 연결된다. 타이머 인터럽트가 있어야 선점형 스케줄링이 가능하고, 페이지 부재 인터럽트가 있어야 가상 메모리 시스템이 성립한다. 또 DMA (Direct Memory Access) 전송도 데이터 복사는 컨트롤러가 대신하되, 완료 사실은 보통 인터럽트로 CPU에 알린다. 즉 인터럽트는 CPU, I/O, 운영체제 메모리 관리가 만나는 접점이다.

인터럽트의 연결 구조

외부 장치 이벤트
    │
    ├─▶ 하드웨어 인터럽트 ─▶ I/O 응답
    │
CPU 내부 실행 이상
    │
    ├─▶ 내부 인터럽트/예외 ─▶ 오류 처리 · 페이지 부재 처리
    │
주기적 타이머 신호
    │
    └─▶ 타이머 인터럽트 ─▶ 스케줄러 호출 · 선점

이 비교에서 얻어야 할 메시지는 명확하다. 인터럽트는 폴링의 반대말 정도가 아니라, "사건 중심 제어(Event-driven control)"를 컴퓨터 전체에 적용하는 공통 프레임이다.

  • 📢 섹션 요약 비유: 폴링은 선생님이 학생 전원에게 한 명씩 "질문 있니?"라고 돌며 묻는 방식이고, 인터럽트는 질문이 있는 학생이 손을 드는 방식이다. 여기에 화재 경보처럼 무조건 먼저 처리해야 하는 신호까지 포함되면 교실 운영 규칙 전체가 인터럽트 철학으로 돌아가게 된다.

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

실무에서 중요한 질문은 "인터럽트를 쓸 것인가 말 것인가"보다 "어디까지를 인터럽트 안에서 처리할 것인가"다. 인터럽트 응답 자체는 빨라야 하지만, ISR이 오래 붙잡고 있으면 다른 인터럽트가 지연되고 시스템 전체 지터 (Jitter)가 커진다. 그래서 고속 네트워크, 스토리지, 실시간 제어 시스템은 보통 짧은 상반부 처리 후 후속 작업 지연 전략을 쓴다.

예를 들어 100Gbps 네트워크 카드가 패킷마다 인터럽트를 발생시키면 초당 수십만~수백만 번의 인터럽트가 발생할 수 있다. 이때 CPU는 실제 애플리케이션 처리보다 인터럽트 진입/복귀 오버헤드에 더 많은 시간을 쓰게 된다. 이를 Interrupt Storm (인터럽트 폭주)라고 하며, 이런 상황에서는 인터럽트 병합 (Coalescing), 큐 기반 분산, 심지어 일부 구간의 폴링 전환이 더 나은 선택이 된다.

아래 판단 흐름은 실무에서 자주 쓰는 사고방식을 요약한다.

┌────────────────────────────────────────────────────────────────────────────┐
│                   인터럽트 설계 의사결정: 빠른 응답 vs 낮은 오버헤드       │
├────────────────────────────────────────────────────────────────────────────┤
│ 사건 빈도가 낮고 즉시성이 중요한가?                                        │
│        │                                                                   │
│   예   ▼                                                                   │
│      인터럽트 우선                                                         │
│        │                                                                   │
│        ├─ ISR은 ACK, 상태 기록, 최소 복사까지만 수행                       │
│        └─ 나머지는 하반부/스레드로 이관                                    │
│                                                                            │
│ 아니오 │                                                                   │
│        ▼                                                                   │
│ 사건 빈도가 매우 높다면                                                     │
│        ├─ 인터럽트 병합 검토                                                │
│        ├─ 큐별 코어 분산 검토                                               │
│        └─ DMA 또는 하이브리드 폴링 검토                                     │
└────────────────────────────────────────────────────────────────────────────┘

체크리스트

  1. ISR 안에서 블로킹 호출, 긴 루프, 과도한 로그 출력이 없는가?
  2. 인터럽트 우선순위와 마스킹 정책이 실제 비즈니스 중요도와 일치하는가?
  3. 고빈도 장치에는 MSI-X (Message Signaled Interrupts eXtended) 같은 다중 벡터 분산이 가능한가?
  4. 실시간 시스템이라면 최악 응답 시간(Worst-case latency)을 측정했는가?
  5. 대량 전송이라면 인터럽트 단독보다 DMA와 결합하는 편이 더 적절하지 않은가?

안티패턴

  • 모든 작업을 ISR 안에서 끝내려는 설계
  • 고속 장치에 레거시 공유 인터럽트를 그대로 유지하는 설계
  • 인터럽트 수가 많아졌는데도 코어 친화성(Affinity)과 병합 설정을 전혀 조정하지 않는 운영

기술사 답안 관점에서는 "인터럽트는 응답성을 주지만, 남용하면 오히려 처리량을 갉아먹는다"는 균형 인식이 중요하다. 즉 인터럽트는 만능이 아니라, 짧고 급한 일에 강한 메커니즘으로 기억해야 한다.

  • 📢 섹션 요약 비유: 인터럽트는 매장 호출벨과 같다. 손님이 아주 가끔 부를 때는 직원이 바로 뛰어가면 되지만, 모든 손님이 1초마다 벨을 누르면 직원은 주문 처리보다 벨 끄는 데 더 바빠진다. 그래서 정말 급한 호출만 즉시 받고, 나머지는 묶어서 처리하는 운영 지혜가 필요하다.

Ⅴ. 기대효과 및 결론

인터럽트가 잘 설계되면 CPU 이용률이 높아지고, 운영체제는 선점형 스케줄링과 예외 복구를 안정적으로 수행하며, 장치 응답은 불필요한 지연 없이 처리된다. 특히 모바일과 서버 환경 모두에서 이벤트가 없을 때 CPU를 유휴 상태로 둘 수 있어 전력 효율도 좋아진다. 다시 말해 인터럽트는 성능 향상 기법이면서 동시에 시스템 질서를 만드는 통제 장치다.

하지만 인터럽트가 많다고 항상 좋은 것은 아니다. 인터럽트 진입과 복귀에는 고정 오버헤드가 있고, 우선순위 설계가 잘못되면 더 중요한 작업이 밀리거나 역으로 낮은 우선순위 사건이 굶주릴 수 있다. 따라서 인터럽트의 기대효과는 적절한 빈도, 짧은 ISR, 올바른 우선순위, DMA와의 역할 분담이 갖춰질 때 비로소 현실이 된다.

미래 방향은 명확하다. 레거시 핀 기반 IRQ보다 MSI (Message Signaled Interrupts)MSI-X (Message Signaled Interrupts eXtended) 같은 메시지 기반 인터럽트가 늘고, 멀티코어 환경에서는 인터럽트를 코어별로 분산하며, 가상화 환경에서는 하이퍼바이저를 거치는 오버헤드를 줄이는 방향으로 발전한다. 그래서 인터럽트는 "CPU를 자꾸 깨우는 신호"가 아니라, 시스템 전체가 중요한 사건을 질서 있게 처리하게 만드는 스케줄링 언어로 기억하는 편이 정확하다.

  • 📢 섹션 요약 비유: 좋은 인터럽트 체계는 회사의 긴급 연락 규칙과 같다. 진짜 비상 연락만 바로 전화하고, 덜 급한 일은 메신저나 회의로 넘겨야 조직 전체가 빠르면서도 소란스럽지 않게 움직인다.

📌 관련 개념 맵

개념연결 포인트
폴링 (Polling)인터럽트와 대비되는 상태 확인 방식으로, CPU 낭비 문제를 드러내는 비교 기준
인터럽트 구동 I/O (Interrupt-driven I/O)인터럽트를 I/O 처리 모델에 직접 적용한 대표 사례
인터럽트 벡터 (Interrupt Vector)어떤 ISR로 분기할지 결정하는 주소 지정 체계
ISR (Interrupt Service Routine)실제 인터럽트 사건을 처리하는 소프트웨어 루틴
DMA (Direct Memory Access)데이터 이동은 컨트롤러가 맡고 완료 통지는 인터럽트로 넘기는 협력 구조
타이머 인터럽트 (Timer Interrupt)운영체제 선점형 스케줄링을 가능하게 만드는 시간 기반 사건
예외 (Exception)CPU 내부 실행 오류나 보호 위반을 인터럽트형 제어로 처리하는 개념

📈 관련 키워드 및 발전 흐름도

폴링 (Polling) 기반 상태 확인
    │
    ▼
인터럽트 (Interrupt) 기반 사건 통지
    │
    ├─▶ 인터럽트 벡터 (Interrupt Vector)
    │        │
    │        ▼
    │    ISR (Interrupt Service Routine)
    │
    ├─▶ 인터럽트 구동 I/O (Interrupt-driven I/O)
    │        │
    │        ▼
    │    DMA (Direct Memory Access)와 역할 분담
    │
    ▼
APIC · MSI (Message Signaled Interrupts) · MSI-X 기반 멀티코어/고속 I/O 최적화

이 흐름은 "단순 확인 → 사건 통지 → 정확한 분기 → 실제 처리 → 고속 시스템 최적화"로 인터럽트 개념이 확장되는 과정을 보여준다.

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

  1. 인터럽트는 공부하던 로봇에게 "지금 문 앞에 손님이 왔어!" 하고 알려주는 초인종 같은 거예요.
  2. 로봇은 하던 책에 책갈피를 꽂고 잠깐 문을 열어 손님 일을 처리한 뒤, 다시 같은 자리로 돌아와 공부를 이어가요.
  3. 그래서 로봇은 계속 문만 쳐다보지 않고도 중요한 일이 생기면 바로바로 대응할 수 있어요.