Partilhar via


Component-Level Gestão de Energia

A partir do Windows 8, a estrutura de gerenciamento de energia (PoFx) permite que um driver gerencie os estados de energia dos componentes individuais em um dispositivo. O gerenciamento de energia no nível do componente existe lado a lado com o gerenciamento de energia no nível do dispositivo. Para obter uma introdução, consulte Visão geral da estrutura de gerenciamento de energia.

Esta página descreve a API PoFx para Component-Level Power Management.

Para registrar um dispositivo a ser gerenciado pela PoFx, o driver chama a rotina PoFxRegisterDevice . O motorista passa essa rotina por uma estrutura PO_FX_DEVICE que, entre outros dados, contém uma matriz de estruturas PO_FX_COMPONENT . Cada elemento nesta matriz descreve os estados de energia Fx de um componente no dispositivo e os atributos de cada estado Fx. (No mínimo, um componente que não suporta gerenciamento de energia no nível do componente implementa apenas o estado F0.) Os atributos de um determinado estado de energia Fx em um componente específico são descritos por uma estrutura PO_FX_COMPONENT_IDLE_STATE , que contém os seguintes valores:

  • A latência de transição, que é o tempo necessário para fazer uma transição desse estado Fx para o estado F0 (totalmente ativado).
  • O requisito de residência, que é o tempo que um componente deve permanecer neste estado Fx para que a transição para o estado valha a pena.
  • A potência nominal, que é a potência que é consumida pelo componente neste estado Fx.

O PoFx usa essas informações (além de outras entradas e dependências em todo o sistema) para tomar decisões inteligentes sobre em qual estado de energia Fx um componente deve estar em um determinado momento. O PoFx deve equilibrar dois objetivos concorrentes. Primeiro, um componente que está ocioso deve ser configurado para consumir o mínimo de energia possível. Em segundo lugar, um componente deve estar preparado para mudar de um estado Fx de baixa potência para F0 com rapidez suficiente para manter a aparência de um dispositivo que está sempre ligado e sempre conectado.

O gerenciamento de energia no nível do componente pode ser executado somente quando um dispositivo está no estado de energia D0 (totalmente ligado). Quando um dispositivo está no estado de energia D1 (quase ligado), D2 (quase desligado) ou D3, o dispositivo fica inacessível. Quando o dispositivo está no estado D0, apenas os componentes que o driver está usando ativamente precisam permanecer no estado F0. Os componentes ociosos podem potencialmente mudar para estados Fx de baixa potência para reduzir o consumo de energia.

Enquanto um dispositivo está no estado de energia D0, o driver segue um protocolo simples para habilitar o gerenciamento de energia no nível do componente. Quando o driver precisa acessar um componente, o driver chama a rotina PoFxActivateComponent para solicitar acesso ao componente. Se o componente estiver em um estado Fx de baixa potência quando essa chamada ocorrer, o PoFx iniciará uma transição para o estado F0 e notificará o driver quando essa transição for concluída. O driver pode então acessar o componente. Quando o driver não precisa mais acessar o componente, o driver chama a rotina PoFxIdleComponent para notificar a PoFx. Em resposta a essa chamada, o PoFx pode potencialmente alternar o componente para um estado Fx de baixo consumo de energia.

Um componente acessível está na condição ativa. Um componente inacessível está na condição de inatividade. Para acompanhar a acessibilidade dos componentes em um dispositivo, o PoFx mantém uma contagem de referência de ativação em cada componente. Uma chamada PoFxActivateComponent incrementa a contagem no componente especificado em um, e uma chamada PoFxIdleComponent diminui a contagem em um.

Se uma chamada PoFxActivateComponent incrementar a contagem de zero para um, o PoFx iniciará uma transição da condição ociosa para a condição ativa e notificará o driver quando essa transição for concluída. Se um PoFxActivateComponent ocorre quando o componente já está na condição ativa, o componente permanece na condição ativa e o driver não recebe nenhuma notificação.

Se uma chamada PoFxIdleComponent diminuir a contagem de um para zero, o PoFx inicia uma transição da condição ativa para a condição ociosa e notifica o driver quando essa transição for concluída. Se uma chamada PoFxIdleComponent diminuir a contagem, mas a contagem permanecer diferente de zero, o componente permanece na condição ativa e o driver não recebe nenhuma notificação.

O número de referência de ativação lida de forma conveniente com situações em que dois ou mais caminhos de código no mesmo driver possam necessitar de aceder simultaneamente ao mesmo componente num dispositivo. Ao manter essa contagem, o PoFx permite que as várias partes do driver mantenham o acesso ao componente de forma independente, sem exigir que o driver gerencie centralmente o acesso ao componente.

A condição de atividade/inatividade de um componente é o único método confiável para um driver determinar se esse componente é acessível. Um componente que está no estado de energia F0, mas está na condição ociosa, pode estar prestes a mudar para um estado Fx de baixa potência.

Um componente que está na condição ativa está sempre no estado F0. O componente não pode sair de F0 até entrar na condição de inatividade. Um componente que está na condição ociosa pode estar em F0 ou em um estado Fx de baixa potência. Se um componente estiver em um estado Fx de baixa potência quando uma chamada PoFxActivateComponent iniciar uma transição da condição ociosa para a condição ativa, PoFx deve primeiro alternar o componente para F0 antes que o componente possa entrar na condição ativa.

Referência de gerenciamento de energia do dispositivo