exception의 종류와 차이점을 알려주세요


  • Trap: 시스템 콜과 같이 프로그램이 의도적으로 발생시키는 예외를 의미합니다. 시스템 콜은 유저랜드에서 호출할 수 없는 명령어들을 간접적으로 호출하여 하드웨어 자원에 접근합니다. 트랩 핸들러가 종료되면 프로그램의 다음 줄부터 실행하게 됩니다.
  • Interrupt: 인터럽트는 크게 내부 인터럽트와 외부 인터럽트로 나뉩니다. 내부 인터럽트는 종종 트랩으로도 불리우는 용어이므로 하드웨어에 의해 발생하는 외부 인터럽트 위주로 설명하겠습니다. 하드웨어 틱, IO등 유저 프로그램과는 비동기적으로 실행이 되며, 명령어를 마저 실행시킨 뒤에 인터럽트 핸들러로 실행흐름이 넘어가게 됩니다. 핸들러가 종료되면 유저 프로그램의 다음 줄부터 실행하게 되어 프로세스 입장에서는 인터럽트가 발생했는지 알 수 없게 합니다.
  • Fault: 가장 유명한 예로 페이지 폴트가 있듯이, 복구가 가능한 에러를 의미합니다. 페이지가 swap-out 되었다거나 하는 경우 폴트 핸들러가 해당 페이지를 swap-in을 한 뒤에 실행중이던 명령어로 되돌아가 재실행합니다. 만일 복구가 불가능한 예외일 경우 abort 루틴을 실행합니다.
  • Abort: 복구가 불가능하고 기존 실행 흐름으로 돌아가지 못하는 에러를 의미합니다.