오늘의 포스팅 내용은 인터럽트의 다양한 분류와 발생 원인에 대한 내용이다.
인터럽트는 책, 사람마다 그 분류를 다르게 하는 경우가 많다.
위처럼 3가지 경우가 가장 자주 보이는데 필자는 2번 분류가 가장 이해가 쉬운거 같아 2번 분류로 설명하고 동기식/비동기식에 대한 추가적인 설명을 할 예정이다.
하드웨어 인터럽트(외부 인터럽트)
정의
- 하드웨어가 발생시키는 인터럽트, CPU 외부 요인으로 발생하며 전기 신호를 통해 CPU에게 인터럽트를 알림
발생 원인
- 전원 이상
- 정전 또는 전원 이상
- 기계 착오
- CPU의 기능적인 동작 오류 발생
- 외부 신호
- 타이머에 의한 규정된 시간 알림
- 키보드로 인터럽트 키를 누를 경우
- 외부 장치로부터 인터럽트 요청
- 입/출력
- 입/출력 데이터의 오류나 이상현상
- 입/출력 장치가 데이터 전송을 요구하거나 전송이 끝남을 알리는 경우
- 입/출력 장치 동작에 CPU 기능이 필요한 경우
소프트웨어 인터럽트(내부 인터럽트)
정의
- 프로그램이 실행되면서 발생하는 인터럽트, 트랩(Trap) 또는 예외(Exception)이라고도 한다
발생 원인
- 잘못된 명령이나 데이터로 인해 발생
- Overflow or Underflow
- 0으로 나누는 경우
- 명령어의 잘못된 사용(Exception)
- 보호 영역 내의 메모리 주소에 엑세스 하는 경우
- 프로그램 검사(Program Check)
- 프로그램 실행 오류로 발생
- 프로그램 실행 중 의도적인 System Call
- SVC(Super Visor Call)이 대표적
- 일반적인 프로그램은 User Mode에서 실행되지만 권한 문제와 같이 Kernel Mode에 진입해야 하는 경우
SVC과 같은 System Call을 의도적으로 호출해 Kernel Mode에 진입해 처리를 한다- 프로그램 실행 중 내부에서 임의로 호출하거나 사용자가 의도적으로 호출한다
- 예를 들어 우리가 프로그램을 설치 할 때에 간혹 시스템 권한을 요청하는 경우가 있는데 이에 해당한다고 생각하면 된다
비동기식 인터럽트(Asynchronous Interrupt)
정의
- 정해진 기준없이 예측 불가하게 발생하는 이벤트, 우리가 흔히 아는 하드웨어 인터럽트가 여기에 해당한다
동기식 인터럽트(Synchronous Interrupt)
정의
- 기준에 맞추어 또는 시간에 맞추어서 발생하는 인터럽트, 예외(Exception), 트랩(Trap)이 여기에 해당한다
예외(Exception)
- 동기식 인터럽트의 한 종류로 명령어 실행의 결과로 자주 발생
- 0으로 나누는 경우, Page Fault 등
트랩(Trap)
- 특별한 조건을 설정해 놓고 해당 조건에 부합하는 상황이 발생하는 경우에 작동
- 프로그램을 작성 할 때 테스트를 위해 설정해 놓거나, Exception을 발생시키는 조건/System Call 등 OS 내에서 미리 설정해 놓은 트랩이 존재한다
인터럽트, 트랩, 예외 이 3가지에 대한 내용이 많이 혼란스러울 것이다.
이 3가지에 대해 한번 더 정리하자면
인터럽트(interrupt), 예외(exception), System Call이 모두는 사실 발생하면 Trap에 의해 Catch된다.
그 후 Trap handler가 상황에 맞게 interrupt → interrupt service routines(ISR), system call → system services, exception → exception handler을 맵핑해 처리하도록 한다.
Interrupt를 가장 큰 범위로 보고 그 안에서 Hardware로 인해 비동기적으로 발생하는 Interrupt는 Hardware Interrupt,
User Program으로 인해 동기적으로 발생하는 Trap, Exception, System Call은 Software Interrupt라고 보는 것이 가장 이해가 쉽다.
위 사진은 필자가 학부생 때 공부한 자료이다. 학습할 때 참고하면 좋을 것 같아 첨부하겠다.
이 부분에 대해서는 추후 더 좋은 분류나 설명이 있으면 업데이트 하도록 하겠다.