CPU가 프로그램을 실행하는 도중에 I/O 하드웨어 장치에 관련된 처리 혹은 예외상황이 발생할 경우, 현재 실행 중인 작업을 즉시 중단하고 우선적으로 처리해야 하는 작업이 있다는 것을 CPU에게 알리는 것
현재 수행 중인 작업보다 더 중요한 요청(ex. I/O, 우선 순위 연산 등)이 발생하면 해당 작업을 먼저 처리한 후 원래 작업으로 돌아와서 처리를 계속한다.
하드웨어 인터럽트
- 하드웨어가 발생시키는 인터럽트로, CPU가 아닌 다른 하드웨어 장치가 CPU에게 이벤트를 알려주거나 서비스를 요청해야 할 경우 발생
- I/O 장치, Timer, 전원 등 외부적인 요인으로 발생(전원 이상, 외부 신호, 입출력 등)
소프트웨어 인터럽트 (or Trap)
- 소프트웨어가 발생시키는 인터럽트로, 프로그램 처리 중 오류 혹은 사용자에 의해 발생
- Exception / System Call으로 분류 가능
- 예외(Exception) : 메모리 참조 오류, 0으로 나누기, Overflow, Underflow 등
- 시스템콜(System Call) : 사용자가 발생시킨 인터럽트
System Call 등에 의한 인터럽트 발생
현재 기계어 코드 실행을 완료한 후, 현재까지의 수행 상태를 해당 프로세스의 PCB에 저장 (메모리 주소, 레지스터 값, 하드웨어 상태 등)
PC(Program Counter, IP)에 다음에 실행할 명령의 주소 저장
인터럽트 벡터로 점프 -> ISR 주소값 확인
ISR(Interrupt Service Routine)으로 점프하여 루틴 실행
인터럽트 처리 완료 -> 프로세스 상태 복구 (PCB로부터 레지스터 값 복원)
ISR의 IRET명령어 실행 -> 인터럽트 해제
PC 값을 복원하여 이전 실행 위치로 복귀
기존 프로그램 실행
인터럽트 벡터(Interrupt Vector)
각 인터럽트 발생 시 처리해야 할 루틴(ISR)의 주소를 보관하고 있는 공간
대부분의 CPU들은 인터럽트 벡터 테이블을 가지고 있음
Intelx86에서는 이를 IDT(Interrupt Descriptor Table)이라고 한다.
인터럽트 서비스 루틴(Interrupt Service Routine(ISR))
= 인터럽트 핸들러 Interrupt handler
인터럽트가 접수되면 커널에서 각각의 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴 실행
ex) 키보드 자판을 눌러 키보드 인터럽트가 발생하면 이에 해당하는 인터럽트 서비스 루틴이 실행됨