Quais são as chamadas de procedimento adiadas?

Índice:

Anonim

Uma chamada de procedimento adiada (DPC) é um mecanismo de tratamento de interrupções 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 (IRQL) altamente priorizado. Isso permite que um driver processe uma rotina de serviço de interrupção de alto nível (ISR) rapidamente, ao adiar a execução de códigos IRQL de nível inferior. 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 do 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 do 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 central de processamento. 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 agendados pelos drivers de dispositivo em uma fila. Se o seu sistema precisar processar interrupções, o kernel verifica a fila DPC e executa o primeiro DPC se não houver interrupções e nenhum processo DPC estiver em execução. O DPC é o thread priorizado mais alto no sistema, já que o processamento da fila do DPC ocorre antes que o dispatcher escolha um thread e o atribui à 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 definido anteriormente. Se mais de um DPC for necessário, um driver criará objetos DPC adicionais conhecidos como rotinas CustomDPC. A rotina DPCForlsr manipula vários processos; ele conclui a operação de E / S descrita pelos pacotes de solicitação de entrada / saída (IRP), define 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 controladas por interrupção. De acordo com a Open Systems Resources, Inc., o motivo fundamental pelo qual um driver possui uma única rotina DPCForlsr, um conjunto de rotinas CustomDPC ou ambas depende da natureza de seu dispositivo subjacente e do conjunto de solicitações de E / S que deve suportar. O ISR de um driver precisa chamar IoRequestDPC para operações de E / S controladas por interrupção usando rotinas DPCForlsr. Por outro lado, para operações sobrepostas, operações de E / S controladas por interrupção usando rotinas CustomDPC, o ISR precisa chamar KeInsertQueueDPC.