O que são chamadas de procedimento adiado?

Uma chamada de procedimento adiado (DPC) é um mecanismo de tratamento de interrupção no sistema operacional Microsoft Windows ao qual os drivers podem fazer referência ao executar determinados processos. O DPC permite que uma tarefa seja ativada, mas não executada, a partir de um nível de solicitação de interrupção altamente priorizado (IRQL). Isso permite que um driver processe uma rotina de serviço de interrupção de alto nível (ISR) rapidamente enquanto adia a execução de códigos IRQL de nível inferior. Os drivers usam DPCs para agendar operações de entrada / saída (E / S). Drivers são softwares usados ​​pelo Windows para se comunicar com dispositivos de hardware.

Transferências

Um driver de dispositivo de modo kernel manipula convencionalmente a transferência de um fluxo de dados de áudio ou vídeo de ou para um dispositivo externo. O processamento de dados dos drivers de dispositivo é controlado por interrupção. O hardware externo rotineiramente gera interrupções para solicitar que o driver de dispositivo transfira o próximo lote de dados. Um driver de dispositivo não pode processar dados instantaneamente em sua rotina de interrupção; assim, o sistema operacional precisa acionar uma rotina de retorno de chamada, que é o DPC. O modo kernel, ou modo de sistema, e o modo de usuário são os modos de operação de sua unidade de processamento central. O kernel controla todas as atividades de processamento do sistema.

Agendamento

O conceito de uma chamada de procedimento adiada existe apenas no modo kernel. O sistema operacional mantém os DPCs programados pelos drivers de dispositivo em uma fila. Se o seu sistema precisa processar interrupções, o kernel verifica a fila DPC e executa o primeiro DPC se não houver interrupções e nenhum processo DPC em execução. O DPC é o thread de maior prioridade no sistema, pois o processamento da fila DPC ocorre antes que o despachante escolha um thread e o atribua à CPU. Os DPCs têm três níveis de prioridade: baixo, médio e alto.

Processos

Cada DPC está vinculado a um objeto DPC definido pelo sistema. Quando um driver registra uma rotina DPCForslr, o sistema inicializa o objeto DPC previamente definido. Se mais de um DPC for necessário, um driver criará objetos DPC adicionais conhecidos como rotinas CustomDPC. A rotina DPCForlsr lida com vários processos; ele completa a operação de E / S descrita pelos pacotes de solicitação de entrada / saída (IRP), deques o próximo IRP, define o status de entrada / saída no IRP recebido e o processo para concluir a solicitação.

Rotinas

Normalmente, um driver de dispositivo que possui uma rotina de serviço de interrupção tem pelo menos uma rotina DPCForIsr ou CustomDPC para concluir o processamento de operações de E / S orientadas por interrupção. De acordo com a Open Systems Resources, Inc., a razão fundamental de um driver ter uma única rotina DPCForlsr, um conjunto de rotinas CustomDPC ou ambos depende da natureza de seu dispositivo subjacente e do conjunto de solicitações de E / S que ele deve suportar. O ISR de um driver precisa chamar IoRequestDPC para operações de I / O orientadas por interrupção usando rotinas DPCForlsr. Por outro lado, para operações sobrepostas, operações de E / S orientadas por interrupção usando rotinas CustomDPC, o ISR precisa chamar KeInsertQueueDPC.