Partilhar via


Compartilhando recursos do processador durante a inicialização a partir de um estado de Low-Power

Quando um computador é iniciado a partir de um estado de espera ou hibernação (inicialização a quente), os drivers devem evitar o uso de recursos do processador por mais tempo do que o necessário. Mais importante ainda, as rotinas de chamada de procedimento diferido (DPC) e o código que é executado em IRQL >= DISPATCH_LEVEL devem manter seus tempos de execução a um mínimo. Os drivers usam rotinas DPC para ajudar a inicializar dispositivos. Os drivers podem precisar executar o código de inicialização no DISPATCH_LEVEL como parte de um contrato de interface porta-miniporta.

Enquanto uma rotina DPC é executada, outros threads de prioridade mais baixa são impedidos de serem executados no mesmo processador. Além disso, outras rotinas de DPC que estão enfileiradas e prontas para serem executadas podem ser bloqueadas até que o DPC atual seja concluído. Para permitir que outros threads sejam executados rapidamente, uma rotina DPC típica deve ser executada por no máximo 100 microssegundos.

Uma rotina DPC que é executada por muito tempo durante a inicialização do sistema pode atrasar a inicialização de outros dispositivos. Esse atraso torna a fase de inicialização do dispositivo mais longa e atrasa a conclusão da inicialização pelo sistema operacional.

Use as seguintes práticas recomendadas para projetar suas rotinas de DPC:

  • Uma única rotina DPC não deve ser executada por mais de 100 microssegundos.

  • As rotinas DPC que chamam a rotina KeStallExecutionProcessor para atrasar a execução não devem especificar atrasos superiores a 100 microssegundos.

  • Se uma tarefa exigir mais de 100 microssegundos e for executada em DISPATCH_LEVEL, a rotina DPC deve terminar após 100 microssegundos e agendar uma ou mais rotinas de temporizador DPC para concluir a tarefa posteriormente.

  • Use as ferramentas de análise de desempenho documentadas no WDK para avaliar os tempos de execução das rotinas do DPC.