포스트

Exceptional Control Flow

ECF

예외적인 제어흐름 (exceptional control flow, ECF)은 운영체제가 입출력, 프로세스, 가상메모리 등을 구연하기 위해 사용하는 기본 메커니즘이다.
ECF를 이해하면 응용 프로그램들이 어떻게 운영체제와 상호작용 하는지 이해하는데에 도움이 된다. 응용 프로그램은 트랩 또는 시스템 콜이라고 알려진 ECF의 한 가지 형태를 사용해서 운영체제로부터 서비스를 요청한다.

예외상황

예외상황은 예외적인 제어흐름의 한가지 형태이며, 하드웨어와 운영체제에 의해 구현된다.
프로세서 상태의 변화에 대한 대응으로, ECF의 갑작스런 변화이다.

상태 변화는 이벤트라고 하는데 이 이벤트는 현재 인스트럭션의 실행에 직접적으로 관련될 수도 있다. 예로, 산술 오버플로우가 발생했다거나, 어떠한 인스트럭션이 divide by zero를 시도하는 것이 이러한 경우에 해당된다.
또는, 현재 인스트럭션의 실행과 관련이 없을 수도 있는데, 예시로는 시스템 타이머가 정지하는 경우가 있겠다.

어떤 경우에서든 이러한 이벤트가 발생을 했다면, 그리고 프로세서가 이를 감지한다면,
예외 테이블이라고 하는 점프 테이블을 통해 예외처리 핸들러라는 운영체제 서브루틴으로 간접 프로시저 콜을 한다. 예외처리 핸들러는 발생한 이벤트의 종류에 따라 구분되며, 특정 종류의 이벤트를 처리하기 위해 설계된 서브루틴이다.

예외처리 핸들러가 처리를 한 후에는 이벤트의 종류에 따라 핸들러는 다음 세 가지 중 하나를 한다:

  1. 제어를 현재의 인스트럭션으로 돌려준다.
    여기서 현재의 인스트럭션이라 함은, 이벤트 발생 시점에 실행되고 있던 인스트럭션을 지칭한다.

  2. 제어를 다음 인스트럭션으로 돌려준다. 여기서 다음 인스트럭션은 예외상황이 발생하지 않았더라면 다음에 실행되었을 인스트럭션이다.

  3. 중단된 프로그램을 종료한다.

예외상황은 네 가지의 종류로 구분된다:

인터럽트

트랩

1
2
3
트랩은 어떤 인스트럭션을 실행한 결과로 발생하는 의도적인 예외상황이다.
트랩 핸들러는 제어를 다음 인스트럭션으로 돌려준다.
트랩의 가장 종요한 사용은 시스템 콜이라는 인터페이스를 제공하는 것이다.

오류

중단

시스템 콜

시스템 콜, 또는 시스템 호출은 응용 프로그램이 운영체제의 커널에 서비스를 요청하기 위한 메커니즘이다.
여기서 서비스라 함은, 다음을 포함한다:

  • 파일 작업 수행
  • 프로세스 생성 및 관리
  • 메모리 관리
  • 입출력 연산 처리

프로그램이 운영 체제와의 상호작용을 필요로 하는 작업을 수행해야 할 경우, 프로그램은 시스템 콜을 한다.
이렇게 함으로 프로그램은 코드를 커널 모드에서 실행할 수 있게 되며 시스템 자원에 직접 접근할 수 있게 된다. 시스템 콜 인터페이스는 사용자 수준 프로그램이 커널과 통신할 수 있는 표준화된 방식을 제공한다.

프로그래머의 관점에서 시스템 콜은 보통의 함수 호출과 동일하다 (실제 구현은 매우 다르다). 다만, 보통의 함수와 달리 시스템 콜은 사용자 모드가 아닌 커널 모드에서 돌아가며,
이로 인해 커널 내에서 정의된 스택에 접근함으로 더욱 많은 권한을 가진 인스트럭션을 실행할 수 있게 된다.

x86-64 시스템에서 시스템 콜은 syscall이라고 부르는 트랩 인스트럭션을 통해 제공된다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.