IT/컴퓨터구조

🖥️ [컴퓨터구조] 예외(Exception)와 인터럽트 처리

BlogFlow 2025. 3. 13. 18:00
반응형

[컴퓨터구조 목차 바로가기]

4️⃣ 프로세서 구조와 동작 원리

컴퓨터 시스템에서 예외(Exception)와 인터럽트(Interrupt) 는 CPU의 정상적인 명령어 실행을 일시적으로 중단하고,

특정 이벤트를 처리하기 위해 사용됩니다.

예외와 인터럽트는 CPU가 외부 또는 내부에서 발생하는 예외적인 상황에 반응하여 적절한 처리를 수행할 수 있도록 하는 중요한 메커니즘입니다.

이번 섹션에서는 예외와 인터럽트의 개념, 차이점, 처리 과정 및 현대 CPU에서의 최적화 방법을 자세히 살펴보겠습니다.


🔹 1. 예외(Exception)와 인터럽트(Interrupt)란?

1.1 예외(Exception)란?

예외(Exception)CPU 내부에서 실행 중인 프로그램에서 오류 또는 특수한 상황이 발생했을 때, 이를 처리하기 위해 발생하는 이벤트입니다.

즉, 프로그램 실행 중 예상치 못한 오류가 발생했을 때 CPU가 개입하여 적절한 처리를 수행하는 과정입니다.

💡 예외(Exception) 발생 예시

  • 0으로 나누기(Division by Zero)
  • 페이지 폴트(Page Fault)
  • 잘못된 명령어 실행(Illegal Instruction)
  • 부동소수점 연산 오류(Floating Point Exception)

예외는 CPU 내부에서 발생하며, 프로그램 실행을 방해할 수 있음


1.2 인터럽트(Interrupt)란?

인터럽트(Interrupt)CPU 외부에서 발생하는 이벤트가 CPU의 현재 작업을 일시적으로 중단하고 처리 루틴을 실행하도록 요청하는 신호입니다.

즉, 입출력 장치나 외부 하드웨어가 CPU의 주의를 끌어 특정 작업을 처리하도록 요구하는 메커니즘입니다.

💡 인터럽트 발생 예시

  • 키보드 입력(Keyboard Interrupt)
  • 마우스 클릭(Mouse Interrupt)
  • 네트워크 패킷 수신(Network Interrupt)
  • 하드디스크 입출력 완료(Disk I/O Completion)
  • 타이머 인터럽트(Timer Interrupt)

인터럽트는 CPU 외부에서 발생하며, 운영 체제가 이를 처리함


1.3 예외(Exception) vs. 인터럽트(Interrupt) 비교

구분 예외(Exception) 인터럽트(Interrupt)
발생 원인 CPU 내부 오류 CPU 외부 이벤트
발생 시점 실행 중 즉시 발생 주어진 시점에 발생
예제 0으로 나누기, 메모리 오류 키보드 입력, 네트워크 이벤트
처리 방식 예외 핸들러(Exception Handler) 실행 인터럽트 핸들러(Interrupt Handler) 실행

예외는 CPU 내부에서 발생하고, 인터럽트는 CPU 외부에서 발생


🔹 2. 예외(Exception) 처리 과정

CPU에서 예외가 발생하면, 이를 처리하기 위해 예외 처리 루틴(Exception Handler) 이 실행됩니다.

2.1 예외 처리 단계

1️⃣ 예외 발생 (Fault/Trap/Abort)

  • CPU 내부에서 오류 감지 (예: 0으로 나누기, 메모리 접근 오류) 2️⃣ 현재 명령어 중단 및 상태 저장
  • 프로그램 카운터(PC), 레지스터 값 저장 3️⃣ 예외 핸들러(Exception Handler) 호출
  • 운영 체제(OS)가 예외를 감지하고 핸들러 실행 4️⃣ 예외 처리 후 복귀 또는 프로그램 종료
  • 예외 복구 가능하면 원래 프로그램으로 복귀, 복구 불가능하면 프로그램 강제 종료

💡 예제: 0으로 나누기 예외 발생

DIV R1, R2, R3  # R3 = 0인 경우 예외 발생
Exception Handler 실행 → 오류 메시지 출력 → 프로그램 종료

CPU는 예외 발생 시, 해당 예외에 맞는 핸들러를 호출하여 문제를 해결


🔹 3. 인터럽트(Interrupt) 처리 과정

인터럽트가 발생하면 CPU는 현재 실행 중인 명령어를 잠시 중단하고 인터럽트 핸들러(Interrupt Handler)를 실행합니다.

3.1 인터럽트 처리 단계

1️⃣ 인터럽트 발생 (Interrupt Request, IRQ)

  • 키보드 입력, 네트워크 패킷 수신 등 외부 장치에서 인터럽트 요청 2️⃣ 현재 상태 저장
  • 실행 중이던 프로그램의 레지스터 값과 프로그램 카운터(PC) 저장 3️⃣ 인터럽트 벡터 테이블(IVT) 조회
  • 인터럽트 유형에 맞는 핸들러를 찾음 4️⃣ 인터럽트 핸들러 실행
  • 해당 인터럽트를 처리하는 코드를 실행 (예: 키보드 입력 처리) 5️⃣ 이전 작업으로 복귀 (Resume Execution)
  • 처리 완료 후, 중단된 프로그램을 다시 실행

💡 예제: 키보드 인터럽트 처리

사용자가 키보드 'A' 입력 → 키보드 컨트롤러에서 인터럽트 발생 → CPU가 인터럽트 핸들러 실행 → 화면에 'A' 출력

인터럽트는 CPU가 외부 이벤트를 효과적으로 처리할 수 있도록 함


🔹 4. 인터럽트 유형과 우선순위

인터럽트는 중요도에 따라 하드웨어 인터럽트(Hardware Interrupt), 소프트웨어 인터럽트(Software Interrupt), 타이머 인터럽트 등으로 나뉩니다.

인터럽트 유형 설명 예제
하드웨어 인터럽트 (Hardware Interrupt) 외부 장치에서 발생 키보드, 마우스, 네트워크
소프트웨어 인터럽트 (Software Interrupt) 프로그램에서 직접 요청 시스템 콜(System Call)
타이머 인터럽트 (Timer Interrupt) 일정 시간이 지나면 발생 OS에서 프로세스 스케줄링

인터럽트는 우선순위가 있으며, 중요한 인터럽트가 먼저 처리됨


🔹 5. 현대 CPU의 예외 및 인터럽트 최적화 기법

현대 CPU는 예외와 인터럽트를 효과적으로 처리하기 위해 다양한 최적화 기술을 적용합니다.

인터럽트 컨트롤러(Interrupt Controller) → 인터럽트 요청을 관리하고 우선순위를 조정

인터럽트 마스킹(Interrupt Masking) → 중요한 연산 중 특정 인터럽트를 비활성화

중첩 인터럽트(Nested Interrupts) → 낮은 우선순위 인터럽트 실행 중에도 높은 우선순위 인터럽트를 처리

비동기 인터럽트(Asynchronous Interrupts) → 입출력 장치가 독립적으로 작동하며 CPU를 효율적으로 사용

💡 예제: 멀티코어 CPU에서 인터럽트 최적화

  • 최신 CPU는 다중 인터럽트 라인(Multiple Interrupt Lines) 을 사용하여 빠르게 인터럽트를 처리

최신 CPU는 인터럽트 우선순위 관리와 비동기 실행을 통해 성능을 극대화


✅ 마무리: 예외 & 인터럽트 처리 핵심 정리

예외(Exception)는 CPU 내부에서 발생하는 오류이며, 인터럽트(Interrupt)는 외부 이벤트 처리 요청

CPU는 예외 및 인터럽트 발생 시, 핸들러(Handler)를 호출하여 문제를 해결

인터럽트는 키보드 입력, 네트워크 패킷 수신, 하드웨어 요청 등 다양한 이벤트를 처리하는 데 사용

현대 CPU는 인터럽트 컨트롤러, 인터럽트 마스킹, 비동기 인터럽트 등의 기법을 적용하여 최적화


 

반응형