Soft Ware/Windows 구조와 원리

인터럽트 처리 방법 및 인터럽트 오브젝트 !!!

달려가보자 2012. 2. 16. 23:50

오늘은 다른분의 블러그를 참조하고 글을 올리네요 ^^ 책을 보다가 인터럽트 오브젝트라는 놈을

보게 되었는데요.. 궁금한 나머지 인터넷을 조사 +.+

자 소개 해 보겠습니다 ~~ ㅎㅎ

인터럽트 란 외부 장치 등에서  발생된 신호를 cpu에게 알리기 위한 수단입니다 ^^

자 cpu에게 알려줬으니깐 cpu가 작동하겠죠? ㅎㅎㅎㅎ

cpu는 인터럽트 서비스 루틴인 ISR을 등록하기 위해 IoConnectInterrupt   DDK 함수를 호출하는데요

여기서 호출할때  인터럽트 오브젝트를 생성한다고 하네요 ^^

인터럽트 오브젝트는 디바이스 ISR의주소와 특정 레벨의 인터럽트를 서로 연관시키는 모든 정보가

들어있다고 하네요 ^^ 




CPU는 인터럽트 컨트롤러에게 방금 접수된 인터럽트의 IRQ를 질의하여 해당 IRQ를 파악하여 IRQ를 근거로 하여 인터럽트 벡터 테이블의 인덱스로 사용될 벡터 값을 계산해낸다. 인터럽트 벡터 테이블의 해당 인덱스에는 인터럽트 게이트가 존재하며 이 게이트 내에는 디스패치 코드에 대한 세그먼트 실렉터와 옵셋이 존재한다. 이 세그먼트 실렉터는 GDT(전역 디스크립터 테이블)의 인덱스 역할을 하고 GDT 내의 해당 세그먼트 디스크립터에는 디스패치 코드가 존재하는 세그먼트의 베이스 주소가 존재한다. 이 베이스 주소와 인터럽트 게이트의 옵셋을 더해서 디스패치 코드의 주소가 만들어진다.
디스패치 코드는 키보드 디바이스 드라이버의 ISR을 직접 호출하는 것이 아니라 KiInterruptDispatch로 점프한다. KiInterruptDispatch 루틴은 키보드 디바이스 드라이버의 ISR을 호출하는 데 필요한 작업(IRQL을 높이고 인터럽트 스핀락 획득)을 수행한 다음에 키보드 드라이버의 ISR을 호출한다. ISR DIRQL에서 호출되므로 극히 제한적인 시스템 서비스 함수를 호출할 수 있다. DIRQL 레벨에서 할 수 없는 추가적인 작업이 필요한 경우 ISR DPC 메커니즘을 사용하여 작업을 계속 진행하도록 IoRequestDPC DDK 함수를 호출한다. 이로써 인터럽트는 서비스가 된 것이며 추가적인 작업은 이후에 DPC 콜백이 호출될 때 계속 진행된다.

- khealin님의 블로그에서 -

자 도움이 되었으면 좋겠네요 ^^

스핀록의 획득과 해제는 실행부의 구성 요소인 마이크로커널이 담당한다고 하네요 ^^

또한 드라이버 디스패치 루틴에서 인터럽트 스핀록을 얻고자 할때는 KeSynchronizeExecution()함수

를 사용한다. 이 함수는 특정 인터럽트 오브젝트 대해 인터럽트 서비스 루틴을 가지고 있는 드라이버

루틴과 동기화를 구현할 목적으로 사용되며, 드라이버가 제공한 함수 포인터를 가지고 있다고 하네요

운영체제는 이 함수 호출에 제공된 인터럽트 오브젝트가 가리키는 대로 IRQL을 상승시키고

스핀록을 얻은후, 드라이버가 제공한 함수를 호출한다고 하네요 ^^

'Soft Ware > Windows 구조와 원리' 카테고리의 다른 글

비동기 프로시저 콜 < APC > 에 대해서 ~~  (0) 2012.02.19
캐시 인터페이스  (0) 2012.01.04
지연 쓰기 란  (0) 2012.01.04
캐시 관리자  (0) 2012.01.04
스레드  (0) 2011.11.16