'Windows NT' - 1개의 글

  1. 2005/09/27 Trap Dispatching

Trap Dispatching

2005/09/27 16:03
인터럽트와 예외는 프로세서를 제어의 일반적인 흐름에서 벗어나 있는 코드로 전환시키는 운영체제의 상태이다.
하드웨어나 소프트웨어가 인터럽트와 예외들을 감지할 수 있다.
Trap이란 용어는 예외나 인터럽트가 발생했을 때 실행중인 스레드를 잡아내고,그것을 사용자 모드에서 커널모드로 전환시키고, 제어를 운영체제의 고정지역으로 옮기기위한 프로세서 메커니즘이다.
Windows NT에서 프로세서는 제어를 스위칭 보드로서 작동되는 모듈인 커널의 트랩 핸들러로 옮긴다.
그래서 프로세서에 의해 발견된 인터럽트나 예외를 처리하고 제어상태를 핸들하는 코드로 옮긴다.

트랩핸들러를 활성화시키고, 트랩핸들러가 서비스를 위해 호출한 모듈의 상태를 보여준다.

커널은 다음과 같은 방법으로 인터럽트와 예외를 구별한다.
인터럽트는 프로세서가 작동시키는 것과 연관된 비동기적 이벤트 - 한번에 하나씩 일어날 수 있는 - 이다.
인터럽트는 I/O , Device , Processor , Clock , Timer에 의해 기본적으로 발생하고, 인터럽트는 켜지거나 꺼지게 된다. 반면에 예외는 특별한 명령에 의한 실행의 결과로 동기적 상태이다.

같은 조건하에서 같은 데이터로 프로그램을 실행시키는 것은 예외를 재생성(Reproduce)한다. 예외의 예는 memory access violations , certain , debugger , instructions , divide-by-zero 같은 것을 포함한다. 또한 커널은 시스템 서비스 호출을 예외로 간주한다.
하드웨어나 소프트웨어는 예외와 인터럽트를 생성할 수 있다.
예를 들어 bus error exception은 소프트웨어 버그가 원인이 된다.

또한 I/O 디바이스도 인터럽트를 생성할 수 있고 커널 그 자체도 소프트웨어 인터럽트를 발생시킬 수 있다.
호출되었을 때 트랩 핸들러는 머신의 상태(또 다른 예외나 인터럽트가 발생했다면 지워지는 정보)를 기록하는 동안 인터럽트가 작동되지 못하도록 한다. 트랩 핸들러는 인터럽트된 스레드의 실행상태를 저장하는 트랩 프레임을 생성한다.

이러한 정보는 커널이 인터럽트나 예외를 처리한 후에 스레드의 실행을 시작하도록 한다.
트랩 프레임은 대개 스레드의 완전한 컨텍스트의 하위집합이다.
트랩 핸들러는 몇몇 문제(가상주소 예외 같은)를 스스로 해결한다.
그러나 대부분의 경우에 그것은 발생했던, 그리고 제어를 다른 커널이나 실행모듈로 옮기는 상태를 결정한다.

예을 들어 디바이스 인터럽트의 상황이라면 커널은 제어를 디바이스를 인터럽트하기 위해 디바이스 드라이버가 제공하는 ISR(Interrupt Service Routine)로 옮긴다.
만약 시스템 서비스 호출에 의해 야기된 상황이라면 트랩 핸들러는 제어를 실행부 안의 시스템 서비스 코드로 옮긴다.


ps. 요즘 제가 Device Driver 와 CAD 공부를 하고 있는데, Windows Device에 관련된 책을 읽다가 낙서좀 합니다.
2005/09/27 16:03 2005/09/27 16:03
태그 :