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

차례:

Anonim

지연 프로 시저 호출 (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 (Input / Output Request Packet)에 설명 된 I / O 작업을 완료하고 다음 IRP를 종료하고 수신 된 IRP의 입 / 출력 상태 및 요청을 완료하는 프로세스를 설정합니다.

루틴

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