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

  1. 본질: ISR (Interrupt Service Routine)은 장치가 보낸 인터럽트에 대해 CPU (Central Processing Unit)가 즉시 실행하는 짧고 우선순위 높은 처리 루틴이다.
  2. 가치: ISR은 Polling (폴링)처럼 계속 장치를 감시하지 않고도 필요한 순간에만 반응하게 만들어, 반응 시간은 줄이고 CPU 낭비는 줄인다.
  3. 판단 포인트: 좋은 ISR은 "많이 처리하는 ISR"이 아니라 "꼭 필요한 최소 작업만 빠르게 끝내고 나머지는 뒤로 미루는 ISR"이다.

Ⅰ. 개요 및 필요성

ISR (Interrupt Service Routine)은 하드웨어나 예외 이벤트가 발생했을 때 정상 실행 흐름을 잠시 멈추고 우선 처리하도록 설계된 특수 루틴이다. 컴퓨터는 키보드 입력, 디스크 완료, 네트워크 패킷 도착, 타이머 만료처럼 예측하기 어려운 사건을 계속 만난다. 이 모든 사건을 CPU가 직접 반복 확인하면 정작 계산해야 할 시간을 감시에 써 버리므로, 비동기 이벤트를 다루는 구조가 필요해진다.

이때 인터럽트는 "문제가 생기면 장치가 먼저 CPU를 호출한다"는 모델을 제공하고, ISR은 그 호출에 대한 즉각적인 행동 규칙이 된다. 특히 운영체제 커널은 ISR을 통해 장치 상태를 확인하고, 인터럽트 원인을 해제하고, 후속 작업을 스케줄링한다. 즉 ISR은 입출력 시스템에서 반응성과 효율을 동시에 만드는 첫 번째 접점이다.

아래 그림은 왜 ISR이 등장했는지를 보여준다. 핵심은 CPU가 장치를 기다리는 구조에서, 장치가 필요할 때만 CPU를 깨우는 구조로 역할이 바뀌었다는 점이다.

┌───────────────────────────────┬────────────────────────────────┐
│ Polling (폴링)                │ Interrupt + ISR               │
├───────────────────────────────┼────────────────────────────────┤
│ CPU: 장치 상태 확인           │ CPU: 본래 작업 수행           │
│   ├─ 확인                     │   ├─ 계산                      │
│   ├─ 확인                     │   ├─ 계산                      │
│   ├─ 확인                     │   ├─ IRQ 수신                  │
│   └─ 이벤트 발견              │   └─ ISR 진입                  │
│                               │                                │
│ 이벤트 없을 때도 CPU 소모     │ 이벤트 있을 때만 CPU 개입     │
└───────────────────────────────┴────────────────────────────────┘

폴링은 구조는 단순하지만 장치가 한가한 동안에도 CPU 시간을 계속 태운다. 반면 인터럽트 기반 구조는 평소에는 CPU를 본연의 계산에 쓰고, 필요한 순간에만 빠르게 개입한다. 그래서 ISR은 단순한 함수가 아니라 시스템 전체의 시간 사용 전략을 바꾸는 메커니즘으로 봐야 한다.

📢 섹션 요약 비유: ISR은 아이가 계속 초인종을 확인하러 문 앞에 서 있는 방식이 아니라, 손님이 오면 초인종이 울리고 그때만 문으로 뛰어가는 방식과 같다.


Ⅱ. 아키텍처 및 핵심 원리

ISR이 동작하려면 인터럽트 요청 접수, 실행 주소 결정, 문맥 저장, 실제 처리, 원래 흐름 복귀가 끊김 없이 이어져야 한다. 보통 장치는 IRQ (Interrupt Request)를 보내고, 인터럽트 컨트롤러가 이를 정리한 뒤 CPU가 해당 벡터 번호에 맞는 ISR 주소를 찾는다. 이후 CPU는 현재 명령을 안전한 지점까지 마무리하고, 필요한 레지스터와 상태를 저장한 뒤 ISR로 분기한다.

이 과정의 핵심은 "현재 작업을 망가뜨리지 않으면서 긴급 작업을 끼워 넣는 것"이다. 그래서 PC (Program Counter), 상태 레지스터, 범용 레지스터 일부 또는 전부를 스택에 저장하는 문맥 저장이 필요하다. ISR이 끝나면 인터럽트 원인을 해제하고, 저장했던 문맥을 복구한 뒤 복귀 명령으로 원래 코드 흐름으로 돌아간다.

구성 요소역할설계상 의미
인터럽트 컨트롤러여러 인터럽트 요청을 수집·우선순위화어떤 사건을 먼저 처리할지 결정
인터럽트 벡터 테이블인터럽트 번호와 ISR 주소 연결빠른 분기와 모듈화 보장
시스템 스택문맥 저장 공간중단 전 상태를 정확히 복원
ISR 본체긴급 응답 수행최소 시간 내 핵심 처리
복귀 명령저장 문맥 복원 후 원래 흐름 재개프로그램 연속성 보장

아래 그림은 하드웨어 신호부터 복귀까지의 흐름을 압축해서 보여준다.

┌──────────────────────────────────────────────────────────────────────┐
│                 ISR 처리 흐름: 반응은 빠르게, 복귀는 정확하게      │
├──────────────────────────────────────────────────────────────────────┤
│ 장치 이벤트                                                         │
│     │                                                                │
│     ▼                                                                │
│ IRQ (Interrupt Request) 발생                                         │
│     │                                                                │
│     ▼                                                                │
│ 인터럽트 컨트롤러 ──▶ 벡터 번호 결정 ──▶ CPU                         │
│                                         │                            │
│                                         ▼                            │
│                           현재 명령 마무리 + 문맥 저장              │
│                                         │                            │
│                                         ▼                            │
│                             ISR 주소 조회 후 진입                    │
│                                         │                            │
│                                         ▼                            │
│                    인터럽트 원인 확인 → ACK → 최소 데이터 처리       │
│                                         │                            │
│                                         ▼                            │
│                         필요 시 후속 작업 큐 등록                    │
│                                         │                            │
│                                         ▼                            │
│                              문맥 복구 후 원래 코드 복귀             │
└──────────────────────────────────────────────────────────────────────┘

여기서 중요한 트레이드오프는 짧은 지연과 긴 처리의 충돌이다. ISR 안에서 오래 머무르면 다른 인터럽트가 지연되고, 스케줄러와 사용자 작업도 늦어진다. 그래서 실무에서는 인터럽트 원인 확인, 장치 확인 응답, 최소 버퍼 복사까지만 ISR에서 수행하고, 무거운 작업은 Bottom Half (지연 처리 하반부)나 커널 작업 큐로 넘긴다.

📢 섹션 요약 비유: ISR은 응급실 접수처럼 먼저 환자를 받아 생명 징후를 안정시키고, 정밀 검사는 뒤 병동으로 넘기는 절차와 같다.


Ⅲ. 비교 및 연결

ISR의 경계는 Polling (폴링), DMA (Direct Memory Access), 일반 서브루틴과 비교할 때 선명해진다. 폴링은 CPU가 능동적으로 상태를 확인하고, ISR은 장치가 CPU를 호출한다. 일반 서브루틴은 프로그램이 예정된 지점에서 호출되지만, ISR은 외부 사건 때문에 비동기적으로 끼어든다는 점이 다르다.

또한 ISR이 모든 입출력 일을 혼자 처리하는 것도 아니다. 대량 데이터 전송에서는 DMA가 메모리 복사를 대신하고, ISR은 DMA 완료 사실을 통지받아 결과를 정리하는 역할을 맡는다. 즉 ISR은 "데이터를 많이 옮기는 기술"이라기보다 "이벤트를 빠르게 연결하는 기술"에 가깝다.

비교 항목ISRPollingDMA
주된 목적이벤트 즉시 처리상태 주기 확인데이터 블록 전송 오프로드
CPU 개입 시점이벤트 발생 시항상 또는 주기마다설정 시점과 완료 시점
장점빠른 반응, 효율적 대기구조 단순, 디버깅 용이CPU 복사 부담 감소
약점설계 실수 시 지연 전파CPU 낭비 큼완료 통지는 별도 필요
대표 조합DMA 완료 ISR, 타이머 ISR단순 센서 루프디스크·네트워크 대량 전송

운영체제 관점에서는 타이머 ISR이 선점 스케줄링의 출발점이 되고, 네트워크 ISR은 패킷 수신 경로의 첫 관문이 된다. 저장장치 관점에서는 디스크나 NVMe (Non-Volatile Memory Express) 장치가 전송 완료를 인터럽트로 알리고, ISR은 큐 완료 정보를 수집해 상위 블록 계층으로 연결한다. 따라서 ISR은 컴퓨터구조, 운영체제, 장치 드라이버, 성능 튜닝이 만나는 교차점이다.

📢 섹션 요약 비유: 폴링이 "버스가 왔나?"를 계속 정류장 밖으로 내다보는 행동이라면, ISR은 버스가 오면 알림벨이 울리고, DMA는 짐을 대신 옮겨 주는 짐수레에 가깝다.


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

실무에서 ISR 품질은 평균 처리량보다 최악 지연 시간에 더 큰 영향을 준다. 인터럽트가 몰리는 상황에서 ISR 하나가 길어지면 다른 장치 인터럽트, 스케줄러 틱, 심지어 실시간 제어 신호까지 줄줄이 밀릴 수 있다. 그래서 설계의 핵심은 "ISR 안에 무엇을 넣을지"보다 "무엇을 절대 넣지 말아야 하는지"를 구분하는 것이다.

가장 흔한 원칙은 Top Half (즉시 처리 상반부)Bottom Half (지연 처리 하반부)를 나누는 것이다. Top Half에서는 인터럽트 원인 확인, 장치 ACK (Acknowledgement) 전송, 최소 버퍼 확보 같은 필수 작업만 처리한다. 이후 복잡한 파싱, 긴 반복문, 메모리 할당, 블로킹 호출은 Bottom Half나 워크큐로 넘겨 전체 시스템 지연을 억제한다.

┌───────────────────────────┬────────────────────────────────────┐
│ Top Half                  │ Bottom Half                        │
├───────────────────────────┼────────────────────────────────────┤
│ 인터럽트 즉시 실행        │ ISR 이후 지연 실행                 │
│ 장치 ACK                  │ 패킷 분석                          │
│ 상태 레지스터 읽기        │ 긴 데이터 정리                     │
│ 최소한의 버퍼 처리        │ 사용자 깨우기                      │
│ 수 µs 수준으로 종료 목표  │ 처리량 중심 작업 수행              │
└───────────────────────────┴────────────────────────────────────┘

실무 체크리스트

  1. ISR 내부에서 슬립, 블로킹 I/O, 긴 로그 출력 같은 지연 유발 동작을 제거했는가?
  2. 인터럽트 원인을 분명히 해제하여 같은 인터럽트가 폭주하지 않게 했는가?
  3. 공유 자료구조 접근 시 락 경합과 우선순위 역전을 고려했는가?
  4. 멀티코어 환경에서 인터럽트 친화도와 코어 분산 정책을 검토했는가?
  5. 고속 장치라면 인터럽트 폭주를 줄이기 위해 배치 처리, 코얼레싱(coalescing), DMA 조합을 검토했는가?

피해야 할 안티패턴

  • ISR 안에서 모든 비즈니스 로직까지 처리하는 긴 ISR
  • 인터럽트 해제를 빼먹어 동일 인터럽트가 반복 재진입하는 설계
  • 공용 락을 오래 잡아 시스템 전체 지연을 키우는 설계
  • 장치 속도는 빨라졌는데 ISR 병목을 측정하지 않는 튜닝

기술사 관점의 판단 문장은 명확하다. 응답성이 핵심이면 ISR은 더 짧아져야 하고, 처리량이 핵심이면 ISR 바깥의 후속 경로를 더 잘 설계해야 한다. ISR을 무겁게 만드는 것은 쉬워도, 시스템 전체를 안정적으로 빠르게 만드는 길은 아니다.

📢 섹션 요약 비유: 식당 입구 직원은 손님을 빨리 자리 배정하는 데 집중해야지, 입구에서 주문 받고 요리까지 시작하면 가게 전체 동선이 막히는 것과 같다.


Ⅴ. 기대효과 및 결론

잘 설계된 ISR은 CPU 시간을 절약하면서도 외부 사건에 대한 반응 지연을 줄여 준다. 그 결과 시스템은 유휴 시간에는 계산 효율을 높이고, 이벤트 순간에는 빠르게 방향을 전환할 수 있다. 특히 타이머, 네트워크, 저장장치, 센서 입력처럼 비동기 사건이 많은 환경일수록 ISR 품질이 체감 성능과 안정성을 크게 좌우한다.

다만 ISR은 만능 해결책이 아니다. 인터럽트 빈도가 지나치게 높으면 오히려 컨텍스트 전환 비용이 커지고, 잘못 설계된 ISR은 커널 전체를 흔드는 병목이 된다. 그래서 현대 시스템은 인터럽트, DMA, 배치 처리, 인터럽트 코얼레싱, 멀티큐 구조를 함께 조합해 반응성과 처리량의 균형을 맞춘다.

결국 ISR은 "이벤트가 생겼을 때 컴퓨터가 가장 먼저 취하는 짧고 정확한 행동"으로 기억하는 것이 좋다. ISR의 본질은 많은 일을 대신하는 것이 아니라, 시스템이 놓치면 안 되는 첫 반응을 가장 안전한 비용으로 수행하는 것이다.

📢 섹션 요약 비유: 좋은 소방벨 시스템은 화재를 직접 끄는 장치가 아니라, 불이 났을 때 가장 먼저 모두를 정확히 움직이게 만드는 첫 신호와 같다.


📌 관련 개념 맵

개념연결 포인트
Interrupt (인터럽트)ISR을 호출하는 사건 자체이며, 비동기 제어의 출발점
Interrupt Vector Table (인터럽트 벡터 테이블)인터럽트 번호를 실제 ISR 주소에 연결하는 분기 표
Context Save / Restore (문맥 저장 / 복구)현재 실행 흐름을 안전하게 중단·재개하게 만드는 핵심 절차
DMA (Direct Memory Access)대량 전송은 DMA가 맡고, 완료 통지는 ISR이 받아 후속 처리
Top Half / Bottom Half빠른 응답과 긴 처리의 충돌을 분리하는 실무 패턴
Scheduler (스케줄러)타이머 ISR을 계기로 선점과 문맥 전환이 발생

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

장치 이벤트 감지
    │
    ▼
Interrupt (인터럽트) + IRQ (Interrupt Request)
    │
    ▼
ISR (Interrupt Service Routine)
    │
    ├──▶ Context Save / Restore (문맥 저장 / 복구)
    │
    ├──▶ Top Half / Bottom Half
    │
    └──▶ DMA (Direct Memory Access) 완료 통지 연계
             │
             ▼
멀티코어 인터럽트 분산 · 고속 I/O 최적화

이 흐름은 "이벤트 발생 → 즉시 반응 → 안전한 복귀 → 후속 처리 분리 → 고속 입출력 최적화"로 개념이 확장되는 방향을 보여준다.

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

  1. ISR은 컴퓨터가 갑자기 중요한 벨소리를 들었을 때 먼저 해야 할 행동을 적어 둔 작은 메모예요.
  2. 컴퓨터는 하던 숙제를 잠깐 멈추고 메모대로 급한 일만 빨리 처리한 뒤 다시 숙제로 돌아가요.
  3. 메모가 너무 길면 다른 벨소리를 놓치니까, 제일 중요한 말만 짧게 적어 두는 게 좋아요.