Difference between interrupt, exception and trap

#인터럽트(interrupt), 예외(exception), 트랩(trap)


인터럽트는 크게 2가지로 분류할 수 있다.

1. Asynchronous Interrupt (비동기식 인터럽트)
 : aka Interrupt, hardware interrupt

우리가 흔히 인터럽트라고 부르는 것이 비동기식 인터럽트를 의미하며, 하드웨어 인터럽트(hardware interrupt)라고도 한다. 

먼저 Asynchronous(비동기식) 이라는 말이 어색한데, 비동기식이라함은 어떤 기준에 맞춰서 이벤트가 발생하는 것이 아니라 그때그때 정해진 기준없이 이벤트가 발생하는 것을 의미한다

전형적인 예로 I/O interrupt, keyboard event, network packet arrived, timer ticks 등이 있다.



2. synchronous Interrupt (동기식 인터럽트)
 : aka exception, software interrupt

우리가 흔히 exception이라고 부르는 것이 바로 동기식 인터럽트에 해당한다. 

Synchronous(동기식) 이라는 말은 Asynchronous와 반대말이므로, 이벤트가 언제든지 발생하는 것이 아니라, 기준에 맞추어 또는 시간에 맞추어서 정해진 일은 진행시키는 것을 의미한다. 

그래서 동기식 인터럽트는 명령어 실행 후 그 결과(instruction fault)로 발생하는 경우가 많다. 

전형적인 예로 CPU가 0으로 나누기를 하려고 했거나, Page fault 가 발생한 경우 등이 있다. 

추가적으로 소프트웨어 인터럽트(AKA Programmed exceptions)가 exception으로 여겨지기도 한다. 

주로 프로그램을 작성하는 프로그래머의 요청에 의해 발생되고, overflow 또는 bound 명령어가 검사조건에 만족하지 못하는 경우에 발생한다. 

이런 경우에 control unit이 트랩으로 처리해버리고 , 주로 시스템콜이나 디버깅에 사용된다



트랩(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 또는 서비스 루틴으로 매핑해줌



이 글을 공유하기

댓글(0)

Designed by JB FACTORY