지연된 프로 시저 호출이란 무엇입니까?

지연된 프로 시저 호출 (DPC)은 드라이버가 특정 프로세스를 실행할 때 참조 할 수있는 Microsoft Windows 운영 체제의 인터럽트 처리 메커니즘입니다. DPC를 사용하면 우선 순위가 높은 인터럽트 요청 수준 (IRQL)에서 작업을 활성화 할 수 있지만 실행할 수는 없습니다. 이는 드라이버가 하위 레벨 IRQL 코드의 실행을 지연시키면서 상위 레벨 인터럽트 서비스 루틴 (ISR)을 신속하게 처리 할 수 ​​있도록합니다. 드라이버는 DPC를 사용하여 입 / 출력 (I / O) 작업을 예약합니다. 드라이버는 Windows에서 하드웨어 장치와 통신하는 데 사용하는 소프트웨어입니다.

환승

커널 모드 장치 드라이버는 일반적으로 외부 장치와 오디오 또는 비디오 데이터 스트림의 전송을 처리합니다. 장치 드라이버의 데이터 처리는 인터럽트 기반입니다. 외부 하드웨어는 일상적으로 인터럽트를 생성하여 장치 드라이버에 다음 데이터 배치를 전송하도록 요청합니다. 장치 드라이버는 인터럽트 루틴에서 즉시 데이터를 처리 할 수 ​​없습니다. 따라서 운영 체제는 DPC 인 콜백 루틴을 트리거해야합니다. 커널 모드 또는 시스템 모드와 사용자 모드는 중앙 처리 장치의 작동 모드입니다. 커널은 모든 시스템 처리 활동을 제어합니다.

스케줄링

지연된 프로 시저 호출의 개념은 커널 모드에서만 존재합니다. 운영 체제는 대기열에있는 장치 드라이버에 의해 예약 된 DPC를 유지합니다. 시스템이 인터럽트를 처리해야하는 경우 커널은 DPC 대기열을 확인하고 인터럽트가없고 실행중인 DPC 프로세스가 없으면 첫 번째 DPC를 실행합니다. DPC는 디스패처가 스레드를 선택하고이를 CPU에 할당하기 전에 DPC 대기열 처리가 발생하기 때문에 시스템에서 우선 순위가 가장 높은 스레드입니다. DPC에는 낮음, 중간 및 높음의 세 가지 우선 순위 수준이 있습니다.

프로세스

각 DPC는 하나의 시스템 정의 DPC 개체와 연결됩니다. 드라이버가 DPCForslr 루틴을 등록하면 시스템은 이전에 정의 된 DPC 개체를 초기화합니다. 둘 이상의 DPC가 필요한 경우 드라이버는 CustomDPC 루틴으로 알려진 추가 DPC 개체를 만듭니다. DPCForlsr 루틴은 여러 프로세스를 처리합니다. IRP (입출력 요청 패킷)에 설명 된 I / O 작업을 완료하고 다음 IRP를 deques하며 수신 된 IRP에 입 / 출력 상태를 설정하고 요청을 완료하는 프로세스를 설정합니다.

루틴

일반적으로 인터럽트 서비스 루틴이있는 장치 드라이버에는 인터럽트 구동 I / O 작업의 처리를 완료하기위한 DPCForIsr 또는 CustomDPC 루틴이 하나 이상 있습니다. Open Systems Resources, Inc.에 따르면 드라이버에 단일 DPCForlsr 루틴, CustomDPC 루틴 집합 또는 둘 모두가있는 근본적인 이유는 기본 장치의 특성과 지원해야하는 I / O 요청 집합에 따라 다릅니다. 드라이버의 ISR은 DPCForlsr 루틴을 사용하는 인터럽트 구동 I / O 작업을 위해 IoRequestDPC를 호출해야합니다. 반대로 중첩 된 작업, CustomDPC 루틴을 사용하는 인터럽트 구동 I / O 작업의 경우 ISR은 KeInsertQueueDPC를 호출해야합니다.