인터럽트(Interrupt)란?
CPU가 실행 중인 작업을 잠시 멈추고, 더 급한 일을 먼저 처리하도록 만드는 신호
쉽게 말하면 지금 이거 멈추고 이것부터 처리하라고 시키는 것과 같다.
왜 필요할까?
CPU는 기본적으로 순차적으로 명령을 실행한다.
그런데 이런 상황이 발생한다
- 키보드 입력 발생
- 네트워크 패킷 도착
- 디스크 I/O 완료
- 타이머 만료
이걸 CPU가 계속 확인(Polling)하면 비효율적이다.
그래서 -> 이벤트가 발생하면 장치가 CPU에게 신호를 보냄 -> 그게 인터럽트이다.
동작 흐름
1. CPU가 A작업 수행 중
2. 인터럽트 발생
3. CPU가 현재 상태 저장(Context Save)
4. 인터럽트 핸들러 실행
5. 처리 끝나면 원래 작업 복귀
작업 A 실행 중
↓
[인터럽트 발생]
↓
인터럽트 처리
↓
작업 A 복귀
인터럽트 종류
1. 하드웨어 인터럽트
외부 장치에서 발생
- 키보드
- 마우스
- 디스크
- 네트워크 카드
2. 소프트웨어 인터럽트
프로그램이 직접 발생시킴
예:
- 시스템 콜(System Call)
- 예외(Exception)
자바에서 예외 터지는 것도 내부적으로는 인터럽트 메커니즘과 연관된 개념이다.
따라서 인터럽트는 CPU가 작업을 수행하던 중 외부 또는 내부 이벤트가 발생했을 때 현재 작업을 잠시 중단하고 해당 이벤트를 처리하도록 하는 메커니즘이다.