212. 인터럽트 사이클 (Interrupt Cycle)
핵심 인사이트 (3줄 요약)
- 본질: 인터럽트 사이클 (Interrupt Cycle)은 정상적인 명령어 실행 루프를 일시 중지하고, 외부 하드웨어 장치나 내부 예외에서 발생한 긴급 요청을 처리하기 위해 시스템 제어권을 인터럽트 서비스 루틴 (ISR)으로 넘기는 과정이다.
- 가치: 폰 노이만 구조의 단일 흐름(순차적 실행) 한계를 부수고, 하드웨어 타이머와 입출력(I/O) 기기의 비동기적 응답을 가능하게 하여 오늘날의 시분할 선점형 멀티태스킹 운영체제를 탄생시킨 근본적인 하드웨어 장치다.
- 융합: 문맥 교환 (Context Switching)을 위해 현재 레지스터 상태(PC, 상태 플래그 등)를 스택 메모리에 안전하게 백업하는 마이크로 오퍼레이션이 핵심이며, 깊은 파이프라인 아키텍처에서는 파이프라인 전체를 비우는 정밀한 예외 (Precise Exception) 처리 기술과 결합된다.
Ⅰ. 개요 및 필요성
-
개념: 인터럽트 사이클 (Interrupt Cycle)은 CPU가 현재 명령어의 실행(Execute) 단계를 마친 직후, 다음 명령어를 인출(Fetch)하러 가기 전에 외부 하드웨어의 긴급 신호(INTR)나 내부 예외 상황이 발생했는지 검사하고 대응하는 특별한 단계다.
-
필요성: 인터럽트 사이클은 폰 노이만 구조의 단일 실행 흐름 한계를 부수고 시스템의 비동기적 응답성과 멀티태스킹을 실현하기 위해 반드시 필요하다. 입출력(I/O) 기기가 작업을 마칠 때까지 CPU가 무한 루프를 돌며 대기하는 '폴링(Polling)'의 자원 낭비를 원천 차단하고, 외부 이벤트 발생 시에만 즉각적으로 제어권을 넘겨 처리함으로써 CPU 가동률을 극대화하기 때문이다. 또한, 현재의 연산 문맥(Context)을 스택에 안전하게 보존하고 인터럽트 서비스 루틴(ISR)으로 점프하는 물리적 기작을 제공함으로써, 현대 운영체제가 수많은 프로세스를 시분할로 공평하게 관리할 수 있게 만드는 하드웨어적 거버넌스의 핵심 안전장치 역할을 수행한다.
-
💡 비유: 요리사가 한창 파스타를 만들고 있다가 오븐에서 '타이머 알람(인터럽트)'이 울리면, 하던 요리를 잠깐 멈추고 파스타 레시피의 몇 페이지를 보던 중인지 포스트잇에 적어둔 뒤(상태 백업), 오븐으로 달려가 불을 끄고(ISR 실행) 돌아와 파스타를 마저 만드는 과정과 같다. 급한 불부터 끄고 다시 제자리로 돌아오는 하드웨어의 기민함이다.
-
등장 배경: 과거 CPU는 I/O 장치가 작업을 마칠 때까지 계속 그 장치의 상태 레지스터를 물어보는 폴링 (Polling) 방식을 사용했으나, 이는 느린 I/O를 기다리며 엄청난 클럭 낭비를 초래했다. 이를 해결하기 위해 "장치가 작업을 마치면 CPU에게 전기 신호로 알려주자"는 인터럽트(Interrupt) 철학이 도입되었다. 이 비동기적 전기 신호를 CPU의 동기적 명령어 사이클 내에서 정식으로 받아주기 위해 만들어진 하드웨어 상태가 바로 인터럽트 사이클이다.
Ⅱ. 아키텍처 및 핵심 원리
구성 요소
| 요소명 | 역할 | 내부 동작 |
|---|---|---|
| 인터럽트 요청 선 (INTR / NMI) | 외부 신호 수신 물리 채널 | 마우스, 키보드, 네트워크 카드 등이 CPU 외부 핀에 전기적 하이/로우 신호 인가 (NMI는 무시 불가능) |
| 인터럽트 플래그 (IF / IE) | 인터럽트 허용 여부 제어 | CPU 상태 레지스터(PSW)의 특정 비트로, 0이면 INTR 신호를 의도적으로 무시(Masking)함 |
| 스택 포인터 (SP) | 복귀 주소 백업 영역 관리 | 현재의 PC(되돌아올 주소)와 상태 값을 메모리에 안전하게 저장하기 위해 스택의 최상단 주소를 지목 |
| 인터럽트 벡터 테이블 (IVT) | 핸들러 주소 매핑 참조 | 장치가 보낸 인터럽트 번호(Vector)를 기반으로 해당 ISR(함수)의 메모리 시작 주소를 찾아옴 |
인터럽트 사이클의 마이크로 오퍼레이션 흐름
실행 사이클 완료 직후, 펜딩(Pending)된 인터럽트가 있을 때 수행되는 동작이다. (되돌아올 주소인 PC를 메모리 스택에 PUSH하는 핵심 과정)
┌────────────────────────────────────────────────────────────────────────────┐
│ 인터럽트 사이클 (Interrupt Cycle)의 동작 흐름 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ [실행 사이클 완료] -> 인터럽트 플래그 검사 -> (인터럽트 발생 확인!) │
│ │
│ [T1 클럭] : MBR <- PC │
│ 현재 실행 중이던 프로그램의 "다음에 올 주소(PC)"를 MBR로 옮긴다. │
│ │
│ [T2 클럭] : MAR <- SP, PC <- ISR_Address │
│ 스택 포인터 주소를 MAR로 보내고, PC는 인터럽트 처리 함수의 주소로 바꾼다.│
│ │
│ [T3 클럭] : M[MAR] <- MBR, SP <- SP - 1 │
│ MBR에 든 복귀 주소를 스택 메모리에 실제로 저장하고 스택 포인터를 줄인다. │
│ │
└────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 인터럽트 사이클의 본질은 '현장 보존'과 '출동'이다. T1에서는 현재 하던 일의 지점(PC)을 스크린샷 찍듯 잡아두고, T2에서는 경찰서(ISR) 주소로 출동할 준비를 함과 동시에 스택이라는 안전한 보관 금고(SP)를 찾아간다. T3에서 최종적으로 금고에 스크린샷(PC)을 넣어둠으로써, 나중에 인터럽트 처리가 끝나면 IRET 명령어를 통해 언제든 원래 하던 일의 지점으로 한 치의 오차 없이 복귀할 수 있게 된다.
- 📢 섹션 요약 비유: 영화를 보던 중 배달(인터럽트)이 오면, 영화의 몇 분 몇 초(PC)를 보고 있었는지 기억하고 일시정지 버튼을 누른 뒤(상태 백업), 현관문으로 달려가 음식을 받는(ISR로 점프) 준비 과정과 같습니다.
Ⅲ. 비교 및 연결
폴링 (Polling) vs 인터럽트 (Interrupt) 비교
시스템의 효율성과 응답성을 가르는 두 가지 핵심 제어 방식의 차이다.
| 비교 항목 | 폴링 (Polling) | 인터럽트 (Interrupt) | 시스템 영향 |
|---|---|---|---|
| 제어 주체 | CPU (능동적 무한 확인) | 외부 장치 (비동기적 통보) | 인터럽트 방식이 CPU 부하를 획기적으로 낮춤 |
| 자원 낭비 | 심함 (기다리는 동안 계속 클럭 소모) | 없음 (발생할 때만 CPU가 반응) | 인터럽트 방식은 CPU 가동률 극대화 가능 |
| 하드웨어 복잡도 | 낮음 (추가 회로 거의 없음) | 높음 (인터럽트 라인, 컨트롤러 필요) | 복잡하지만 고성능 멀티태스킹의 필수 요건 |
| 적합한 상황 | 초저사양 MCU, 매우 빈번한 이벤트 | 일반 PC, 서버, 가변적 I/O 환경 | 현대 범용 시스템은 99% 인터럽트 기반 |
하드웨어 인터럽트와 소프트웨어 인터럽트(예외)의 융합
CPU는 외부 핀을 통한 전기 신호뿐만 아니라, 내부 실행 도중 발생하는 비정상적 상황(0으로 나누기, 잘못된 주소 접근)도 인터럽트 사이클을 통해 동일하게 처리한다.
┌────────────────────────────────────────────────────────────────────────────┐
│ 인터럽트 및 예외(Exception)의 통합 처리 구조 │
├────────────────────────────────────────────────────────────────────────────┤
│ │
│ [ 외부 이벤트 ] ────▶ [ 인터럽트 컨트롤러 (APIC) ] ─┐ │
│ (키보드, 타이머) │ │
│ ▼ │
│ [ 내부 이벤트 ] ────▶ [ CPU 내부 실행 결과 검사 ] ─▶ [ 인터럽트 사이클 ] │
│ (Divide by 0) │ │
│ ▼ │
│ [ 인터럽트 서비스 루틴 (ISR) 실행 ] │
│ │
└────────────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] 외부 장치에서 발생한 하드웨어 인터럽트와 CPU 실행 중에 발생한 소프트웨어 예외는 모두 '인터럽트 사이클'이라는 공통의 하드웨어 관문으로 모인다. CPU 입장에서는 그것이 밖에서 온 벨 소리인지, 안에서 터진 퓨즈인지 구분하지 않고 일단 하던 일을 멈추고 정해진 대응 매뉴얼(ISR)을 실행한다. 이 통합 구조 덕분에 운영체제는 외부 장치 관리와 내부 에러 처리를 하나의 일관된 메커니즘으로 제어할 수 있다.
- 📢 섹션 요약 비유: 밖에서 초인종이 울리는 것(하드웨어 인터럽트)과 집 안 주방에서 냄비가 타서 연기 알람이 울리는 것(예외)은 모두 '하던 일을 멈추게 한다'는 점에서 똑같이 처리되는 것과 같습니다.
Ⅳ. 실무 적용 및 기술사 판단
실무 시나리오
-
임베디드 RTOS에서의 실시간성 (Determinism) 확보 자율주행 자동차의 브레이크 제어 센서 인터럽트는 0.1ms의 지연도 허용하지 않는다. 하지만 만약 CPU가 다른 낮은 우선순위의 인터럽트를 처리하느라 바쁘다면, 이 긴급한 신호는 '인터럽트 대기' 상태에 빠진다. 아키텍트는 이를 해결하기 위해 '중첩 인터럽트 (Nested Interrupt)' 기능을 활성화하고, 브레이크 센서 라인에 가장 높은 하드웨어 우선순위(Priority)를 할당하여, 현재 실행 중인 ISR을 밀어내고 즉시 인터럽트 사이클을 한 번 더 수행할 수 있는 '선점형 인터럽트 구조'를 설계해야 한다.
-
디바이스 드라이버의 하반부 처리 (Top-Half vs Bottom-Half) 리눅스 커널 드라이버 작성 시, 인터럽트 사이클은 CPU를 완전히 점유하므로 ISR 안에서 너무 오래 머물면 시스템 전체가 먹통이 된다. 실무적으로는 인터럽트 사이클 직후의 Top-Half 단계에서는 '데이터 수신 확인' 같은 최소한의 필수 작업만 하고, 복잡한 데이터 처리는 Bottom-Half(태스크릿, 워크큐)로 넘겨 일반 명령어 사이클 흐름에서 처리하도록 설계하여 시스템의 전체적인 응답 지연을 방어한다.
도입 체크리스트
- 기술적: 하드웨어 설계 시 NMI (무시 불가능한 인터럽트) 핀을 전원 장애나 하드웨어 워치독(Watchdog) 같은 치명적 오류 라인에 제대로 할당하였는가?
- 성능적: 인터럽트가 너무 빈번하게 발생하여(Interrupt Storm) 실제 프로그램이 한 발짝도 못 나가는 '라이브락 (Livelock)' 현상이 발생할 가능성은 없는가? 이 경우 폴링 방식으로의 일시적 전환(NAPI 등)을 고려해야 한다.
안티패턴
-
ISR 내에서의 블로킹 I/O 또는 Sleep 함수 호출: 인터럽트 사이클을 통해 제어권을 넘겨받은 ISR은 프로세스 스케줄링의 대상이 아니다. 여기서 다른 I/O를 기다리며 잠들거나(Sleep) 무거운 연산을 수행하면, 시스템의 프로그램 카운터가 복구되지 못해 전체 시스템이 영원히 멈추는 'Deadlock'이나 커널 패닉을 유발하는 치명적인 안티패턴이다.
-
📢 섹션 요약 비유: 택배(인터럽트)를 받으러 현관에 나갔는데, 거기서 택배 기사님과 1시간 동안 수다를 떨면(ISR 내 무거운 연산) 주방에서 끓고 있던 찌개(메인 프로그램)는 다 타버리고 집이 엉망이 되는 것과 같습니다.
Ⅴ. 기대효과 및 결론
정량/정성 기대효과
| 구분 | 인터럽트 미적용 (폴링) | 인터럽트 사이클 적용 | 개선 효과 |
|---|---|---|---|
| CPU 효율 | 낮음 (대기 중 무의미한 연산) | 높음 (필요할 때만 가동) | 전체 시스템 스루풋 비약적 향상 |
| 시스템 응답성 | 낮음 (폴링 주기에 종속) | 매우 높음 (즉각 대응) | 실시간 제어 및 사용자 경험 개선 |
| 전력 소모 | 높음 (CPU가 계속 돔) | 낮음 (대기 시 슬립 가능) | 모바일 및 배터리 기반 기기의 핵심 기술 |
미래 전망
-
메시지 기반 인터럽트 (MSI/MSI-X)의 표준화: 물리적인 전선(라인)을 통해 신호를 보내는 방식은 확장성에 한계가 있다. 최신 PCIe 장치들은 전선 대신 특정 메모리 주소에 '메시지'를 써서 인터럽트를 알리는 MSI(Message Signaled Interrupts) 방식을 사용하며, 이는 멀티코어 환경에서 특정 CPU에게 인터럽트를 골라 보내는 정교한 부하 분산(Interrupt Steering) 기술로 진화하고 있다.
-
가상화 환경에서의 인터럽트 가속 (Hardware-assisted Virtualization): 가상 머신(VM)은 인터럽트가 발생할 때마다 하이퍼바이저가 개입해야 하므로 성능이 떨어진다. 인텔의 VT-x나 AMD-V 기술은 VM 내부의 게스트 OS가 하이퍼바이저 개입 없이 인터럽트 사이클을 직접 처리할 수 있는 하드웨어 우회 경로를 제공하여 가상화 성능 병목을 제거하고 있다.
-
📢 섹션 요약 비유: 이제는 단순히 벨이 울리면 나가는 것을 넘어, 수백 명의 손님이 각자 전용 메신저(MSI)로 주문을 보내고, 주인은 그 주문을 여러 명의 요리사(멀티코어)에게 가장 효율적으로 배분하여 처리하는 '스마트 주방 시스템'으로 진화하고 있습니다.
📌 관련 개념 맵
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 인터럽트 서비스 루틴 (ISR) | 인터럽트 사이클을 통해 제어권이 넘어갔을 때 실제로 실행되는 대응 코드(함수)다. |
| 인터럽트 벡터 | 각 하드웨어 장치에 할당된 고유 번호로, 인터럽트 사이클에서 어떤 ISR을 불러올지 결정하는 인덱스다. |
| 문맥 교환 (Context Switch) | 인터럽트 사이클이 수행하는 상태 저장/복구 동작의 논리적 확장으로, 멀티태스킹의 핵심 운영 체제 동작이다. |
| 마스킹 (Masking) | 현재의 중요한 작업을 방해받지 않기 위해 인터럽트 사이클의 가동을 일시적으로 하드웨어 수준에서 금지하는 기법이다. |
👶 어린이를 위한 3줄 비유 설명
- 인터럽트 사이클은 컴퓨터 일꾼(CPU)이 숙제를 하다가 밖에서 "띵동!" 하고 초인종이 울리면 하던 일을 잠깐 멈추는 단계예요.
- 그냥 멈추면 나중에 어디까지 풀었는지 까먹으니까, 연습장에 "숙제 5번 문제 풀던 중"이라고 적어두고 현관문으로 달려가죠.
- 이 단계 덕분에 컴퓨터는 한 가지 일만 순서대로 하는 답답한 바보가 아니라, 여러 가지 일을 동시에 척척 해내는 척척박사가 될 수 있답니다!