컴퓨터공학

인터럽트(Interrupt)란? 하드웨어 인터럽트 vs 소프트웨어 인터럽트

nyambu 2025. 3. 6. 15:00

인터럽트(Interrupt)
인터럽트(Interrupt)

1. 인터럽트(Interrupt)란?

컴퓨터에서 프로세스는 CPU에서 명령어를 순차적으로 실행한다. 하지만 실행 도중에 예기치 않은 이벤트(입출력 요청, 오류 발생, 사용자 입력 등)가 발생할 수 있다. 이때, CPU가 현재 실행 중인 작업을 멈추고 해당 이벤트를 처리할 수 있도록 도와주는 메커니즘이 바로 **인터럽트(Interrupt)**이다.

즉, 인터럽트는 컴퓨터 시스템이 특정 이벤트에 신속하게 반응할 수 있도록 하는 중요한 기능이다. 인터럽트가 발생하면, CPU는 현재 실행 중인 작업을 잠시 중단하고, 운영체제가 해당 이벤트를 처리할 수 있도록 제어를 넘긴다.

1-1. 인터럽트가 없으면 어떻게 될까?

만약 인터럽트가 존재하지 않는다면, 운영체제는 외부 장치(키보드, 마우스, 네트워크 등)의 상태를 계속해서 확인(Polling)해야 한다. 이 방식은 CPU 리소스를 낭비할 뿐만 아니라, 빠르게 반응해야 하는 이벤트(예: 마우스 클릭, 네트워크 데이터 수신)를 적시에 처리하지 못하는 문제가 발생할 수 있다.

 

📌 예제: 키보드 입력이 없는 경우

  • CPU는 매초마다 키보드의 입력을 확인해야 하며, 사용자가 입력을 하지 않는 동안에도 CPU는 계속해서 키보드 상태를 검사해야 함
  • 하지만 인터럽트가 있으면, 사용자가 키를 눌렀을 때만 CPU가 이를 처리하므로 불필요한 CPU 자원 낭비가 사라짐

1-2. 인터럽트의 기본 원리

인터럽트가 발생하면 CPU는 다음과 같은 절차를 따른다.

 

1️⃣ 현재 실행 중인 프로세스의 상태 저장

  • CPU는 현재 실행 중이던 프로그램의 상태(레지스터 값, 프로그램 카운터 등)를 저장한다.

2️⃣ 인터럽트 원인 분석

  • CPU는 인터럽트가 발생한 원인을 **인터럽트 벡터 테이블(Interrupt Vector Table, IVT)**을 통해 확인한다.

3️⃣ 인터럽트 핸들러(Interrupt Handler) 실행

  • 운영체제는 해당 인터럽트를 처리하는 핸들러(예: 키 입력 처리, 네트워크 데이터 수신 등)를 실행한다.

4️⃣ 원래 프로세스로 복귀

  • 인터럽트 처리가 완료되면 CPU는 저장된 프로세스 상태를 복원하고 원래 수행하던 작업을 이어서 실행한다.

2. 인터럽트의 필요성

인터럽트는 운영체제의 핵심적인 기능 중 하나로, 여러 가지 중요한 역할을 수행한다.

2-1. 즉각적인 이벤트 처리 가능

운영체제가 인터럽트를 활용하면 입출력 장치(키보드, 마우스, 네트워크 등)에서 발생하는 이벤트를 즉시 처리할 수 있다.

 

📌 예제: 키보드 입력 처리

  • 사용자가 키보드를 누르면, 하드웨어 인터럽트가 발생하여 CPU가 즉시 해당 입력을 처리
  • 만약 인터럽트가 없으면, CPU가 계속해서 키보드 입력 여부를 확인해야 하므로 불필요한 연산이 발생

2-2. CPU 자원 낭비 방지

인터럽트가 없다면, 운영체제는 모든 장치(키보드, 마우스, 네트워크 등)의 상태를 지속적으로 확인하는 폴링(Polling) 방식을 사용해야 한다.
하지만 이 방식은 CPU 리소스를 비효율적으로 사용하므로, 인터럽트를 이용하면 불필요한 CPU 사용을 줄이고 중요한 작업에 집중할 수 있다.

 

📌 예제: 프린터 사용

  • 사용자가 문서를 프린터에 출력하면, CPU는 프린터가 인쇄를 완료할 때까지 기다리지 않는다.
  • 대신 인터럽트를 활용하여, 프린터가 출력 완료 후 CPU에게 알림을 보낸다.
  • 그동안 CPU는 다른 작업을 수행할 수 있어 시스템 성능이 향상됨

2-3. 멀티태스킹 지원

인터럽트는 멀티태스킹(Multitasking)을 가능하게 하는 핵심 기술이다.
운영체제는 인터럽트를 이용해 여러 개의 프로세스를 빠르게 전환하며 실행할 수 있다.

 

📌 예제: 웹 브라우저에서 동영상 재생 중 채팅하기

  • 사용자가 YouTube에서 영상을 시청하면서 채팅 앱에서 메시지를 입력하면, 두 개의 프로세스가 동시에 실행되는 것처럼 보인다.
  • 운영체제는 인터럽트를 활용하여 두 개의 프로세스를 빠르게 전환하며 실행

2-4. 시스템 안정성 및 오류 처리 제공

인터럽트는 시스템 오류(Exception)나 예외 상황을 감지하고 운영체제가 적절한 대응을 할 수 있도록 지원한다.

 

📌 예제: 0으로 나누기 오류

  • 프로그램에서 숫자를 0으로 나누는 연산이 실행되면, CPU는 "Divide by Zero" 인터럽트를 발생
  • 운영체제는 해당 오류를 감지하고 프로그램을 강제 종료하거나 예외 처리를 수행

📌 예제: 메모리 접근 오류(Segmentation Fault)

  • 프로그램이 허용되지 않은 메모리 영역을 접근하면, CPU가 메모리 접근 오류 인터럽트를 발생
  • 운영체제는 해당 프로세스를 종료하거나 적절한 조치를 취함

2-5. 실시간 시스템에서의 중요성

인터럽트는 실시간 시스템(Real-Time System)에서 빠른 응답 속도를 보장하는 필수적인 요소이다.
예를 들어, 자동차의 ABS(Anti-lock Braking System) 같은 긴급한 데이터 처리가 필요한 시스템에서는 인터럽트가 없으면 동작이 지연될 수 있다.

 

📌 예제: 자동차 ABS 시스템

  • 자동차가 급정거할 때, 브레이크 센서에서 "바퀴가 미끄러지고 있음"이라는 신호를 보내면 CPU는 즉시 이를 감지하여 제동 시스템을 조정
  • 만약 인터럽트가 없다면, CPU가 주기적으로 바퀴 상태를 확인해야 하고, 반응 속도가 늦어져 사고 위험 증가

3. 인터럽트의 종류

인터럽트는 크게 **하드웨어 인터럽트(Hardware Interrupt)**와 **소프트웨어 인터럽트(Software Interrupt)**로 나뉜다.

구분 설명 예시
하드웨어 인터럽트 외부 장치(키보드, 마우스, 네트워크 등)에서 발생하는 인터럽트 키 입력, 마우스 클릭, 프린터 완료, 네트워크 데이터 수신
소프트웨어 인터럽트 프로그램이 특정 명령을 실행하여 발생하는 인터럽트 시스템 호출(System Call), 예외(Exception), 오류(Divide by Zero)

3-1. 하드웨어 인터럽트(Hardware Interrupt)

하드웨어 인터럽트는 CPU 외부에서 발생하는 인터럽트로, 하드웨어 장치가 CPU에 작업 처리를 요청할 때 발생한다.
CPU는 외부 장치의 요청을 우선 처리하고, 작업이 완료되면 원래 프로세스로 복귀한다.

 

📌 하드웨어 인터럽트의 주요 예시

  • 키보드 입력 → 사용자가 키를 누르면 인터럽트가 발생하여 운영체제가 키 입력을 처리
  • 마우스 클릭 → 마우스 버튼을 클릭하면, CPU가 인터럽트를 받아 클릭 이벤트를 처리
  • 프린터 완료 → 문서 출력이 완료되면 인터럽트가 발생하여 운영체제가 알림
  • 네트워크 패킷 수신 → 데이터가 네트워크를 통해 수신되면 인터럽트가 발생하여 처리

📌 하드웨어 인터럽트의 처리 과정

  1. CPU는 현재 실행 중인 작업을 중단
  2. 인터럽트 컨트롤러(Interrupt Controller)가 인터럽트를 감지하고 CPU에 신호 전달
  3. CPU는 인터럽트 벡터 테이블(Interrupt Vector Table, IVT)을 참조하여 적절한 인터럽트 핸들러 실행
  4. 인터럽트 핸들러가 요청을 처리한 후, CPU는 원래 작업으로 복귀

3-2. 소프트웨어 인터럽트(Software Interrupt)

소프트웨어 인터럽트는 프로그램 내부에서 발생하는 인터럽트로, 운영체제와의 상호작용을 위해 프로세스가 의도적으로 인터럽트를 발생시키는 경우에 사용된다.

 

📌 소프트웨어 인터럽트의 주요 예시

  • 시스템 호출(System Call) → 프로세스가 운영체제의 기능(파일 열기, 메모리 할당 등)을 요청할 때 발생
  • 예외(Exception) 발생 → 0으로 나누기(Divide by Zero) 또는 접근 권한 위반(Segmentation Fault) 등
  • 디버깅(Debugging) 인터럽트 → 프로그램 실행을 중단하고 개발자가 코드를 확인할 수 있도록 중단점(Breakpoint) 설정

📌 소프트웨어 인터럽트의 처리 과정

  1. 프로그램이 인터럽트 명령을 실행 (예: 시스템 호출)
  2. CPU가 인터럽트 벡터 테이블을 참조하여 적절한 핸들러 실행
  3. 핸들러가 요청된 작업을 수행한 후, CPU는 원래 프로그램 실행을 계속

4. 인터럽트 처리 과정

인터럽트가 발생하면, 운영체제는 다음과 같은 과정으로 인터럽트를 처리한다.

 

1️⃣ 현재 실행 중인 프로세스 상태 저장

  • 실행 중인 프로세스의 프로그램 카운터(PC), 레지스터 값 등을 저장하여 나중에 다시 실행할 수 있도록 함

2️⃣ 인터럽트 벡터 테이블(Interrupt Vector Table) 조회

  • CPU는 인터럽트의 종류를 확인하고, 적절한 인터럽트 핸들러(Interrupt Handler)를 실행

3️⃣ 인터럽트 핸들러 실행

  • 해당 인터럽트에 대한 작업 수행 (예: 키보드 입력을 처리하거나, 네트워크 패킷을 읽어들임)

4️⃣ 원래 프로세스로 복귀

  • 인터럽트 처리 완료 후, CPU는 원래 실행 중이던 프로세스로 돌아감

5. 인터럽트 vs 폴링(Polling)

운영체제가 외부 장치의 이벤트를 처리하는 방법은 인터럽트 방식과 폴링 방식으로 나뉜다.

구분 인터럽트 방식 폴링 방식
처리 방식 이벤트 발생 시 CPU가 요청을 받음 CPU가 주기적으로 장치를 검사
CPU 효율 CPU가 다른 작업을 수행할 수 있음 CPU가 지속적으로 장치 상태를 확인해야 함
예시 키보드 입력, 네트워크 패킷 수신 CPU가 프린터의 상태를 반복적으로 확인

 

일반적으로 인터럽트 방식이 CPU 자원을 효율적으로 사용할 수 있어 더 많이 사용됨


6. 인터럽트 최적화 기법

인터럽트가 과도하게 발생하면 시스템 성능이 저하될 수 있다. 이를 방지하기 위해 다음과 같은 최적화 기법을 사용한다.

  • 인터럽트 병합(Interrupt Coalescing)
    • 여러 개의 인터럽트를 묶어서 한 번에 처리하여 CPU 부하를 줄이는 방식
  • DMA(Direct Memory Access) 활용
    • CPU를 거치지 않고, 장치가 직접 메모리에 데이터를 전송하도록 하여 인터럽트 횟수를 줄임
  • 인터럽트 우선순위 지정(Priority-Based Interrupt Handling)
    • 중요한 인터럽트는 우선 처리하고, 중요도가 낮은 인터럽트는 대기