Component-Level 전원 관리

Windows 8부터 PoFx(전원 관리 프레임워크)를 사용하면 드라이버가 디바이스의 개별 구성 요소의 전원 상태를 관리할 수 있습니다. 구성 요소 수준 전원 관리는 디바이스 수준 전원 관리와 나란히 존재합니다. 소개는 전원 관리 프레임워크 개요를 참조하세요.

이 페이지에서는 Component-Level 전원 관리를 위한 PoFx API에 대해 설명합니다.

PoFx에서 관리할 디바이스를 등록하기 위해 드라이버는 PoFxRegisterDevice 루틴을 호출합니다. 드라이버는 다른 데이터 중에서 PO_FX_COMPONENT 구조의 배열을 포함하는 PO_FX_DEVICE 구조체를 이 루틴에 전달합니다. 이 배열의 각 요소는 디바이스에 있는 구성 요소의 Fx 전원 상태와 각 Fx 상태의 특성을 설명합니다. (최소한 구성 요소 수준 전원 관리를 지원하지 않는 구성 요소는 F0 상태만 구현합니다.) 특정 구성 요소의 특정 Fx 전원 상태 특성은 다음 값을 포함하는 PO_FX_COMPONENT_IDLE_STATE 구조체에 의해 설명됩니다.

  • 전환 대기 시간- 이 Fx 상태에서 F0(완전 켜기) 상태로 전환하는 데 필요한 시간입니다.
  • 상주 요구 사항- 구성 요소가 가치 있는 상태로 전환하기 위해 이 Fx 상태에서 소비해야 하는 시간입니다.
  • 이 Fx 상태의 구성 요소에서 사용하는 전력인 명목상 전력입니다.

PoFx는 이 정보(다른 시스템 차원의 입력 및 종속성 외에도)를 사용하여 특정 시간에 구성 요소가 있어야 하는 Fx 전원 상태에 대한 지능적인 결정을 내립니다. PoFx는 두 가지 경쟁 목표의 균형을 유지해야 합니다. 먼저 유휴 상태인 구성 요소는 가능한 한 적은 전력을 사용하도록 구성해야 합니다. 둘째, 항상 켜져 있고 항상 연결된 디바이스의 모양을 유지하기 위해 저전력 Fx 상태에서 F0으로 신속하게 전환할 수 있도록 구성 요소를 준비해야 합니다.

구성 요소 수준 전원 관리는 디바이스가 D0(완전 켜기) 전원 상태인 경우에만 수행할 수 있습니다. 디바이스가 D1(거의 켜기), D2(거의 꺼져 있음) 또는 D3 전원 상태인 경우 디바이스에 액세스할 수 없습니다. 디바이스가 D0 상태인 경우 드라이버가 적극적으로 사용하는 구성 요소만 F0 상태로 유지되어야 합니다. 유휴 구성 요소는 잠재적으로 저전력 Fx 상태로 전환하여 전력 소비를 줄일 수 있습니다.

디바이스가 D0 전원 상태에 있는 동안 드라이버는 간단한 프로토콜을 따라 구성 요소 수준 전원 관리를 사용하도록 설정합니다. 드라이버가 구성 요소에 액세스해야 하는 경우 드라이버는 PoFxActivateComponent 루틴을 호출하여 구성 요소에 대한 액세스를 요청합니다. 이 호출이 발생할 때 구성 요소가 저전력 Fx 상태인 경우 PoFx는 F0 상태로의 전환을 시작하고 이 전환이 완료되면 드라이버에 알깁니다. 그러면 드라이버가 구성 요소에 액세스할 수 있습니다. 드라이버가 더 이상 구성 요소에 액세스할 필요가 없는 경우 드라이버는 PoFxIdleComponent 루틴을 호출하여 PoFx에 알립니다. 이 호출에 대한 응답으로 PoFx는 잠재적으로 구성 요소를 저전력 Fx 상태로 전환할 수 있습니다.

액세스할 수 있는 구성 요소는 활성 상태입니다. 액세스할 수 없는 구성 요소는 유휴 상태입니다. 디바이스에서 구성 요소의 접근성을 추적하기 위해 PoFx는 각 구성 요소에 대한 활성화 참조 수를 유지 관리합니다. PoFxActivateComponent 호출은 지정된 구성 요소의 개수를 1씩 증가시키고 PoFxIdleComponent 호출은 개수를 1씩 감소합니다.

PoFxActivateComponent 호출이 개수를 0에서 1로 증가시키는 경우 PoFx는 유휴 상태에서 활성 조건으로 전환을 시작하고 이 전환이 완료되면 드라이버에 알릴 수 있습니다. 구성 요소가 이미 활성 상태일 때 PoFxActivateComponent 가 발생하면 구성 요소는 활성 상태로 유지되고 드라이버는 알림을 받지 않습니다.

PoFxIdleComponent 호출이 개수를 1에서 0으로 감소하는 경우 PoFx는 활성 조건에서 유휴 상태로 전환을 시작하고 이 전환이 완료되면 드라이버에 알릴 수 있습니다. PoFxIdleComponent 호출이 개수를 감소하지만 개수가 0이 아닌 상태로 유지되면 구성 요소는 활성 상태로 유지되고 드라이버는 알림을 받지 않습니다.

활성화 참조 수는 동일한 드라이버의 두 개 이상의 코드 경로가 디바이스의 동일한 구성 요소에 동시에 액세스해야 하는 상황을 편리하게 처리합니다. PoFx를 사용하면 드라이버가 구성 요소에 대한 액세스를 중앙에서 관리할 필요 없이 드라이버의 다양한 부분에서 구성 요소에 대한 액세스를 독립적으로 유지할 수 있습니다.

구성 요소의 활성/유휴 상태는 드라이버가 구성 요소에 액세스할 수 있는지 여부를 확인하는 유일한 신뢰할 수 있는 수단입니다. F0 전원 상태에 있지만 유휴 상태에 있는 구성 요소는 저전력 Fx 상태로 전환하려고 할 수 있습니다.

활성 상태에 있는 구성 요소는 항상 F0 상태입니다. 구성 요소는 유휴 상태가 될 때까지 F0을 떠날 수 없습니다. 유휴 상태에 있는 구성 요소는 F0 또는 저전력 Fx 상태일 수 있습니다. PoFxActivateComponent 호출이 유휴 상태에서 활성 상태로 전환을 시작할 때 구성 요소가 저전력 Fx 상태인 경우 구성 요소가 활성 상태로 전환하려면 먼저 구성 요소를 F0으로 전환해야 합니다.

디바이스 전원 관리 참조