지연된 프로시저 호출

Deferred Procedure Call

DPC(Delayed Procedure Call)는 높은 우선순위 태스크(예: 인터럽트 핸들러)가 나중에 실행하기 위해 필요하지만 낮은 우선순위 태스크를 연기할 수 있도록 하는 마이크로소프트 윈도우즈 운영 체제 메커니즘이다.이를 통해 장치 드라이버 및 기타 하위 수준 이벤트 소비자가 처리의 우선순위가 높은 부분을 신속하게 수행할 수 있으며, 중요도가 낮은 추가 처리를 낮은 우선순위로 예약할 수 있다.

DPC는 장치 드라이버나 다른 커널 모드 프로그램이 DPC 요청을 발행할 때 커널에 의해 생성되고 초기화되는 DPC 개체에 의해 구현된다.DPC 요청은 DPC 대기열의 끝에 추가된다.각 프로세서에는 별도의 DPC 대기열이 있다.DPC는 낮은, 중간, 높은 세 가지 우선순위 수준을 가지고 있다.기본적으로 모든 DPC는 중간 우선순위로 설정된다.윈도우즈가 디스패치/DPC 수준의 IRQL로 떨어지면 DPC 대기열에 보류 중인 DPC가 있는지 확인하고 대기열이 비어 있거나 IRQL이 높은 다른 인터럽트가 발생할 때까지 실행한다.

예를 들어, 클럭 인터럽트가 생성되면 클럭 인터럽트 핸들러는 일반적으로 현재 스레드의 카운터를 증가시켜 해당 스레드의 총 실행 시간을 계산하고 남은 양자 시간을 1만큼 줄인다.카운터가 0으로 떨어지면, 스레드 스케줄러를 호출하여 해당 프로세서에서 실행할 다음 스레드와 컨텍스트 스위치를 실행하기 위한 디스패쳐를 선택해야 한다.클럭 인터럽트는 훨씬 더 높은 IRQL에서 발생하므로, 프로세서의 IRQL이 떨어질 때 나중에 덜 중요한 작업인 이 스레드 디스패치를 수행하는 것이 바람직할 것이다.그래서 클럭 인터럽트 핸들러는 DPC 객체를 요청하고, 프로세서의 IRQL이 DPC/Dispatch 레벨로 떨어질 때 디스패치를 처리할 DPC 대기열의 끝에 이 객체를 추가한다.

인터럽트를 사용하는 스트리밍 오디오나 비디오로 작업할 때 DPC를 사용하여 각 버퍼에서 스트리밍할 때 오디오를 처리한다.제대로 작성되지 않은 드라이버의 다른 DPC가 너무 오래 걸리고 다른 인터럽트가 새로운 데이터 버퍼를 생성하는 경우, 첫 번째 DPC를 처리할 수 있기 전에 드롭아웃 결과가 발생한다.[1]

참조

일반
  • Art Baker & Jerry Lozano. (2000). Windows 2000 Device Driver Book: A Guide for Programmers, Second Edition, The. Prentice Hall. ISBN 978-0-13-020431-8.
  • Microsoft 문서: DPC(Delay Proced Procedure Calls)
특정
  1. ^ Ute Eberhardt (27 June 2012). "DPC Latency Checker". Thesycon.de. Retrieved 14 October 2017.