컴퓨터 과학

[컴퓨터 구조] CPU - 인터럽트

Data Jun 2025. 11. 23. 12:10

인터럽트(interrupt)는 CPU가 현재 수행하던 작업을 잠시 멈추고 더 중요한 사건을 처리하도록 만드는 신호이다.
키보드 입력, 마우스 클릭, 하드웨어 장치의 완료 알림, 오류 등 다양한 상황에서 발생한다.

이번 글에서는 인터럽트의 개념부터, 하드웨어 인터럽트 처리 과정과 ISR 수행 과정까지 한 번에 정리한다.

 

1. 인터럽트란

인터럽트는 CPU의 정상적인 실행 흐름을 방해하고 CPU의 주의를 다른 작업으로 전환시키는 신호이다.

 

1️⃣  동기 인터럽트 (Synchronous Interrupt)

 

CPU 내부에서 발생하는 인터럽트

  • 대표적 예: 0으로 나누기 오류, 페이지 폴트, 잘못된 명령어 실행 등
  • 프로그램의 예외(exception)와 동일한 개념

 

2️⃣ 비동기 인터럽트 (Asynchronous Interrupt)

 

입출력 장치 등 하드웨어에서 발생

  • 프린터, 네트워크, 센서, 키보드/마우스 등
  • CPU 외부에서 발생하기 때문에 하드웨어 인터럽트라고도 부름

예:

  • 프린터가 출력 완료 알림을 보냄
  • 키보드가 키 입력 발생 사실을 전달
  • 마우스가 움직임 신호 전달

 

2.  하드웨어 인터럽트 처리 절차

CPU가 하드웨어 인터럽트를 처리하는 순서를 정확히 정리하면 다음과 같다.

 

1️⃣ 하드웨어 인터럽트 처리 순서 (설명)

  1. 입출력장치가 CPU에게 인터럽트 요청 신호를 전송
  2. CPU는 명령어 사이클이 끝날 때마다 인터럽트 여부를 확인
  3. 인터럽트 요청이 있으면 CPU는 인터럽트 플래그를 확인
    • 현재 인터럽트를 받아들일 수 있는지 판단
  4. 인터럽트 허용 상태라면, CPU는 현재 수행 중인 작업을 백업
    • 주로 PC(프로그램 카운터) 등 레지스터 값 저장
  5. CPU는 인터럽트 벡터를 확인
    • 처리해야 하는 ISR의 시작 주소 결정
  6. 인터럽트 서비스 루틴(ISR) 실행
  7. ISR 수행이 끝나면 백업했던 작업 상태 복원 후 기존 작업 재개

2️⃣ 하드웨어 인터럽트 순서도

┌──────────────────────────────┐
│ 1. 입출력장치 → CPU 인터럽트 요청 │
└───────────────┬──────────────┘
                ▼
┌──────────────────────────────┐
│ 2. CPU: 명령어 사이클 종료 후   │
│    인터럽트 발생 여부 확인      │
└───────────────┬──────────────┘
                ▼
┌──────────────────────────────┐
│ 3. 인터럽트 플래그 확인        │
│   (허용? 차단?)                │
└───────┬──────────────────────┘
        │예(허용)                     │아니오(차단)
        ▼                             ▼
┌──────────────────────────────┐   ┌─────────────────────────┐
│ 4. 현재 작업 상태 백업         │   │  인터럽트 무시 후 기존 작업 지속 │
└───────────────┬──────────────┘   └─────────────────────────┘
                ▼
┌──────────────────────────────┐
│ 5. 인터럽트 벡터 확인         │
│    (ISR 주소 찾기)            │
└───────────────┬──────────────┘
                ▼
┌──────────────────────────────┐
│ 6. 인터럽트 서비스 루틴 실행   │
└───────────────┬──────────────┘
                ▼
┌──────────────────────────────┐
│ 7. 백업한 작업 상태 복원 후    │
│    기존 작업 재개             │
└──────────────────────────────┘

 

3. 인터럽트 요청(IRQ)과 인터럽트 플래그

1️⃣  인터럽트 요청 (Interrupt Request, IRQ)

  • 하드웨어 장치가 CPU에게 “나를 처리해 주세요!”라고 보내는 신호
  • 인터럽트가 들어오면 CPU는 현재 흐름이 중단될 수 있는지를 평가한다.

2️⃣ 인터럽트 플래그 (Interrupt Flag)

  • CPU의 플래그 레지스터 내부에 존재
  • 인터럽트 요청을 받을지, 무시할지 결정하는 비트

인터럽트 플래그가 0 → 인터럽트 비허용 (무시)
인터럽트 플래그가 1 → 인터럽트 허용

 

 

4. 인터럽트의 종류: Maskable vs Non-maskable

1️⃣ Maskable Interrupt

  • CPU가 인터럽트를 기본적으로 허용하지만, 설정에 따라 무시할 수도 있는 인터럽트
  • 대부분의 하드웨어 인터럽트가 여기에 속한다.

2️⃣  Non-maskable Interrupt (NMI)

  • 절대로 무시할 수 없는 치명적 인터럽트
  • 예: 전원 문제, 하드웨어적 치명 오류

 

5. 인터럽트 서비스 루틴(ISR)

ISR(Interrupt Service Routine)은 인터럽트를 처리하는 전용 프로그램 코드이다.
CPU는 인터럽트가 발생하면 ISR로 점프하여 문제를 해결한 뒤 다시 원래 작업으로 되돌아온다.

 

1️⃣  ISR 실행 순서 설명

  1. CPU가 인터럽트 발생을 감지
  2. 현재 실행 중인 상태(레지스터, PC 등) 백업
  3. 인터럽트 벡터로부터 ISR 시작 주소 획득
  4. ISR 실행
  5. 인터럽트 처리 완료
  6. 백업했던 작업 상태 복원
  7. 원래 수행하던 프로그램 실행 재개

2️⃣ ISR 순서도

┌──────────────────────────┐
│ 1. 인터럽트 발생 감지       │
└───────────────┬──────────┘
                ▼
┌──────────────────────────┐
│ 2. 현재 상태(PC/레지스터) 저장 │
└───────────────┬──────────┘
                ▼
┌──────────────────────────┐
│ 3. 인터럽트 벡터 확인       │
│    → ISR 시작 주소 획득     │
└───────────────┬──────────┘
                ▼
┌──────────────────────────┐
│ 4. ISR 실행               │
│    (인터럽트 처리 루틴)     │
└───────────────┬──────────┘
                ▼
┌──────────────────────────┐
│ 5. 처리 완료               │
└───────────────┬──────────┘
                ▼
┌──────────────────────────┐
│ 6. 저장했던 실행 상태 복원  │
└───────────────┬──────────┘
                ▼
┌──────────────────────────┐
│ 7. 원래 프로그램으로 복귀  │
└──────────────────────────┘

 

7. 인터럽트 서비스 루틴(ISR)의 저장 위치와 선택 방식

인터럽트 서비스 루틴(ISR)은 운영체제가 메모리에 미리 저장해 둔 함수 형태의 코드이다.
하드웨어 장치가 인터럽트를 발생시키면, 장치는 고유한 인터럽트 번호(IRQ) 를 CPU에 전달한다.

CPU는 이 번호를 기반으로 인터럽트 벡터 테이블(Interrupt Vector Table) 을 조회하여
“어떤 ISR을 실행해야 하는지”를 결정한다.

 

즉,

  • 장치는 ISR 주소를 직접 보내는 것이 아니라 IRQ 번호를 보내고
  • CPU는 인터럽트 벡터 테이블에서 해당 번호에 대응하는 ISR의 시작 주소를 가져와 실행한다.

 

정리하면

 

인터럽트는 CPU가 효율적으로 여러 장치를 관리하고, 오류나 외부 신호에 즉시 반응할 수 있게 만드는 핵심 메커니즘이다.
이번 글에서는 인터럽트의 동작 원리와 흐름을 ASCII 순서도로 명확하게 설명했다.