Skip to content

⭐️ 8.1 Exceptions


DUMP#

  • 프로세서의 상태변화를 event라고 부른다.
  • 예외는 하드웨어와 소프트웨어 간에 긴밀한 협조가 필수다.
  • event로 인해 실행흐름이 예외처리기 (exception handler)로 옮겨가게 되고 exception table을 참조하여 예외처리 코드가 실행된 뒤, 기존 실행흐름의 다음 명령어로 돌아오게 되는 전체적인 과정을 예외라고 부른다.
  • 예외처리기가 어떤 이벤트를 모두 처리한 뒤 발생할 수 있는 상황엔 다음과 같다.
    1. 예외처리기가 \(I_{\text{curr}}\) 를 리턴하여 이벤트 발생 전 PC로 되돌아온다. ==> Fault
    2. 예외처리기가 \(I_{\text{next}}\) 를 리턴하여 이벤트 발생 전 PC의 다음 명령어로 되돌아온다. ==> Trap
    3. 예외처리기가 기존 프로그램을 종료시킨다. ☠️ ==> Abort

8.1. of Exceptions#

  1. CPU 제조사가 예외번호를 정의한다.. 커널 디자이너들또한 몇몇 예외테이블의 예외번호를 할당받는다.
  2. 시스템이 부팅할때 OS는 예외테이블이라 불리우는 점프 테이블을 생성해 메모리에 상주시킨다.
  3. 런타임에 프로세서는 이벤트를 탐지할 수 있으며, 사전에 정의한 예외번호에 따른 예외처리기를 호출한다. 이때 예외처리기의 정확한 주소를 찾기 위해서 exception table base register에 exception number * 8을 더한다.

8.1.2. Classes of Exceptions#

exceptions.jpeg

  • Interrupts: 하드웨어 인터럽트를 가지고 설명. 비동기적으로 실행되기 때문에 프로세스는 인터럽트가 발생했는지 여부를 알 수 없다. 실행중이던 명령어가 끝난 뒤에 인터럽트 핸들러로 실행흐름이 넘어가며, 핸들러가 종료되고 난 뒤에 I_next를 리턴한다.
  • Traps and System Calls: 유저 프로세스와 커널코드 사이에 함수를 호출하는 것처럼 간주되기도 한다. 인터럽트와 마찬가지로 트랩 핸들러가 처리를 마치면 I_next를 리턴해 다음줄부터 실행하게 된다.
  • Faults: 복구가 가능한 에러를 칭한다. 핸들러가 현 상황을 복구할 수 있으면 이전 코드로 돌아가 I_curr부터 다시 실행하고, 그러지 못한다면 abort를 호출한다.
  • Aborts: 복구가 불가능한 에러를 칭한다. 하드웨어 에러

8.1.3. Exceptions in Linux/x86-64 Systems#

  • 총 256개나 되는 예외가 있다고!!!
  • 0-31번 예외는 인텔에서 정의함, 32-255는 OS가 정의함.
  • syscall