여러 가지 블로그를 찾아 보던 중에 좋은 자료가 있어서 간결하게 하여 포스팅하여 정리하였습니다.
- 인터럽트 (인터럽트에는 비동기와 동기가 있다. 비동기는 interrupt, 동기는 exception)
> Asynchronous Interrupt (비동기식 인터럽트) : aka Interrupt, hardware interrupt
우리가 흔히 interrupt 라고 부르는 것.
하드웨어 인터럽트(hardware interrupt)라고도 한다.
정해진 기준없이 예측 불가하게 이벤트가 발생.
예로 I/O interrupt, keyboard event, network packet arrived, timer ticks 등이 있다.
> synchronous Interrupt (동기식 인터럽트) : aka exception, software interrupt
우리가 흔히 exception 이라고 부르는 것이 바로 동기식 인터럽트에 해당한다.
이벤트가 언제든지 예측 불가하게 발생하는 것이 아니라 기준에 맞추어 또는 시간에 맞추어서 수행시키는 것을 의미한다.
그래서 동기식 인터럽트는 명령어 실행 후 그 결과(instruction fault)로 발생하는 경우가 많다.
예로 CPU가 0으로 나누기, Page fault 가 발생한 경우 등이 있다.
추가로 소프트웨어 인터럽트(AKA Programmed exceptions)가 exception으로 여겨지기도 한다.
주로 프로그램을 작성하는 프로그래머의 요청에 의해 발생되고, overflow 또는 bound 명령어가 검사조건에 만족하지 못하는 경우에 발생한다.
이런 경우에 control unit이 트랩으로 처리해버리고, 주로 시스템콜이나 디버깅에 사용된다
- 트랩 (트랩을 내부 인터럽트, 위에서 언급한 exception이라고 하는 경우도 있었습니다.)
트랩(trap)은 실행 중인 프로그램 내에 테스트를 위해 특별한 조건을 걸어 놓은 것을 말한다.
interrupt 이든, system call 이든, exception 이든 발생이 되면 trap에 의해 catch가 되고,
trap handler가 각 상황에 맞게 처리하도록 알맞게 매핑해주어서 각 서비스 루틴 또는 핸들러에서 처리를 시킨다.
다른 블로그에서 트랩을 표현하는 걸 보면 아래와 같다.
트랩은 발생하는 시점이 프로그램의 일정한 지점이다.
하드웨어에 의해 자동적으로 미리 알려진 위치에 조건적으로 점프하는 것.
interrupt → interrupt service routines(ISR) 을 실행하도록 처리
system call → system services 을 실행하도록 처리
exception → exception handler 을 실행하도록 처리
- 요약 -
Interrupt :
- 비동기식 이벤트
- 다른 하드웨어 장치가 CPU와 상관없이 발생시킴
- keyboard event, I/O interrupt, timer ticks
Exception :
- 동기식 이벤트
- 내부적으로 CPU control unit이 명령어의 실행 결과로 자주 발생시킴
- 0으로 나누기, page fault
Trap :
- 특별한 조건을 걸어 놓고 조건에 부합하는 상황이 걸리게 하는 역할
- 각 상황에 맞는 handler 또는 서비스 루틴으로 매핑해줌
하지만 trap과 exception 은 혼용되어 사용되는 경우가 많은 듯 합니다.
intel CPU에서 exception의 분류가 아래와 같습니다.
1. trap : INT 명령으로 명시적으로 발생
2. fault : 0으로 나눈 에러
3. abort : 복구 불가능한 에러
intel 에서는 trap 을 exception의 하위 요소로 보고 있는 것 같습니다.
또, 다른 블로그(링크)에서는 exception의 하위 요소로 interrupt를 넣어 주는 경우도 있었습니다.
구분이 다소 상이하기 때문에, interrupt와 trap 의 특징을 잘 구분하는 걸 우선시하면 좋을 것 같습니다.
실제 현업에서 어떻게 구분하는지, 실제 답이 아시는 분이 있으면 댓글주세요~.