Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
  DPC (Deferred Procedure call) 및 디스패치 (dispatch) 
작성일시 : 2007. 11. 12. 19:30 | 분류 : Windows Server/Kernel

디스패칭은 종종 한 스레드의 실행이 너무 길어져서 스케줄링을 다시해야하는데, 자발적인 대기상태 전환이나 종료가 않되는 경우 사용한다.

DPC란 하드웨어 인터럽트 서비스를 적절하게 제공하기 위해서 함께 동작하는 장치 인터럽트들을 제어할때 사용한다. IRQL이 높은 인터럽트가 발생하게 되면, CPU는 현재 Thread를 저장하고, 해당 인터럽트를 실행한다.

그런대 이 인터럽트도 여러 Thread로 나뉠 수 있다. 그리고 계중에는 중요하거나 우선 처리 않되도 되는 경우가 있을 수 있다. 이럴 경우 DPC를 이용하게 된다.

자 DPC가 어떻게 수행되는지 확인해 보자.

1. 먼저 인터럽트가 발생한다.
2. 1에서 발생한 인터럽트가 IRQL이 높은 경우 현 상태를 저장하고, IDT를 참조하여 ISR을 실행한다.
3. ISR이 동작하면서 CPU의 IRQL을 올린다
4. 만약 실행 되는 Thread가 덜 중요할 경우 해당 Thread를 DPC 큐에 넣는다.
5. ISR이 종료되면 IRQL이 DPC 레벨로 낮아 진다.
6, 7, 8, 9 DPC의 인터럽트들을 실행하고, 큐의 모든 object를 실행한 다음 원래 Thread로 복귀한다.

물론 특정 CPU를 대상으로 하는 "Targeted DPC"도 있다. DPC가 낮은 또는 중간의 우선순위라면 커널은 보통 대기열의 끝에 DPC를 두고 DPC가 높은 우선 순위를 가진다면 커널은 대기열 앞에 DPC를 넣는다.

|