데스크톱 활동 중재자
플랫폼
클라이언트 – Windows 8
참고
DAM은 연결된 대기를 지원하는 Windows 8 클라이언트 머신에만 있습니다. DAM이 서버 SKU에 없습니다.
참고
Windows 8 위해 빌드된 Windows Microsoft Store 앱은 DAM의 영향을 받지 않습니다.
Description
고객은 컴퓨팅 요구를 충족하기 위해 더 가볍고, 더 작고, 더 많은 모바일 플랫폼으로 전환하고 있습니다. 모바일 디바이스로의 전환의 일환으로 사용자는 장치의 배터리 수명에 대해 점점 더 우려하고 있습니다. DAM(Desktop Activity Moderator)은 연결된 대기를 지원하는 디바이스의 일관되고 긴 배터리 수명을 보장하도록 설계된 Windows 8 몇 가지 새로운 기능 중 하나입니다.
연결된 대기는 디바이스가 켜져 있지만 화면이 꺼져 있을 때 발생합니다. 이 전원 상태에서 시스템은 기술적으로 항상 "켜기"입니다(메일, VoIP, 소셜 네트워킹 및 Windows Microsoft Store 앱을 사용한 인스턴트 메시징과 같은 주요 시나리오를 지원하기 위해). 사용자가 전원 단추를 누를 때 스마트폰이 있는 상태와 유사합니다.
따라서 연결된 대기 중에 소프트웨어(앱 및 운영 체제 소프트웨어 포함)가 잘 작동해야 합니다. DAM은 절전 상태(ACPI 디바이스의 S3)와 유사한 방식으로 데스크톱 앱 실행을 억제하도록 만들어졌습니다. 연결된 대기 항목 시 시스템 전체에서 데스크톱 소프트웨어 프로세스를 일시 중단하거나 제한하여 이 작업을 수행합니다. 이렇게 하면 연결된 대기를 지원하는 시스템이 최소화된 리소스 사용량과 길고 일관된 배터리 수명을 제공하는 동시에 Windows Microsoft Store 앱이 약속하는 연결된 환경을 제공할 수 있습니다.
세부 정보
DAM은 시스템이 연결된 대기를 지원하는 경우 시스템 부팅 시 로드되고 초기화되는 커널 모드 드라이버입니다. 이는 CallNtPowerInformation에서 반환된 SYSTEM_POWER_CAPABILITIES 구조체의 AOAC 필드가 TRUE로 설정되어 있는지 평가하여 결정됩니다.
DAM이 활성화되고 데스크톱 프로세스가 만들어지면 DAM은 시스템 관리 작업 개체에 프로세스를 추가합니다.
- 세션 0에서 프로세스가 만들어진 경우 DAM은 제한에 따라 작업 개체에 프로세스를 추가합니다.
- 대화형 세션(세션 1 이상)에서 프로세스가 만들어진 경우 DAM은 프로세스를 일시 중단 대상이 되는 작업 개체에 추가합니다.
참고
Windows 8 작업 개체를 중첩할 수 있습니다. 즉, DAM의 작업 개체 사용은 앱의 기존 작업 개체 사용을 방해하지 않습니다.
화면이 켜지면 DAM이 해제되고 시스템의 프로세스에 영향을 주지 않습니다. 시스템이 연결된 대기 상태인 경우 시스템의 활동에 따라 DAM은 프로세스를 제한하거나 일시 중단할 수 있습니다.
- 일시 중단이 적용되는 프로세스에는 모든 스레드가 일시 중단됩니다(어떤 상황에서도 실행할 수 없음). 앱 상태(프로세스 메모리)가 유지 관리됨
- 일시 중단된 프로세스와 일시 중단되지 않음 사이의 제한 주기가 적용되는 프로세스(대부분의 시간이 일시 중단된 상태에서 소요됨)
- 또한 Windows 중요한 활동이 발생하고 있음을 감지할 수 있으며 이 활동 중에 더 오랜 시간 동안 제한된 서비스를 사용하지 않을 수 있습니다.
- 또한 연결된 대기 상태에서는 센서 및 네트워크를 사용할 수 없으므로 제한된 프로세스를 열악한 네트워크 조건에 복원력 있게 설계해야 합니다(대부분의 프로세스에서는 변경이 필요하지 않음).
DAM 일시 중단이 사용되거나 해제되면 DAM은 메시지 배달에 옵트인(API 호출 또는 호환성 shim을 통해, 나중에 설명됨)에 옵트인한 일시 중단이 적용되는 프로세스에 WM_POWERBROADCAST 메시지 배달을 트리거합니다. 몇 초 지연 후 DAM은 프로세스를 일시 중단합니다.
DAM 제한이 사용되거나 해제되는 경우 알림이 없습니다. 프로세스는 수정할 필요가 없습니다. 프로세스는 속도가 느리기는 하지만 계속 작동합니다.
형상
프로세스는 연결된 대기 상태 중에 일시 중단되거나 제한되는 경우가 많습니다. 일시 중단된 앱의 대부분에서는 S3 일시 중단/다시 시작 또는 S4 최대 절전 모드/다시 시작 전환과 매우 유사해야 합니다. 매니페스트에는 가동 시간/런타임과 벽시계 시간의 불일치, 타이머 동작의 불일치 또는 일시 중단 완료 전후의 운영 체제 상태의 급격한 변경이 포함될 수 있지만 제한되지는 않습니다.
일시 중단 및 제한은 단위로 발생합니다(모든 일시 중단 가능한 프로세스는 일시 중단되고 한마음으로 사용되지 않으며 제한될 수 있는 모든 프로세스는 한마음으로 제한되고 할당되지 않음) 일시 중단된 두 프로세스 또는 두 개의 제한된 프로세스 간의 통신은 문제가 되지 않습니다.
프로세스 간 통신에 의존하는 소프트웨어는 다음과 같은 특별한 고려 사항이 필요할 수 있습니다.
- 세션 0의 프로세스 간 통신(제한됨)과 세션 1 이상(일시 중단됨) - 예제에는 현재 서비스 상태를 나타내는 트레이 아이콘 또는 UI 구성 요소가 포함됩니다.
- 사용자 모드의 구성 요소(세션 0 또는 1)와 드라이버(제한되거나 일시 중단되지 않음) 간의 통신 - 예를 들어 드라이버를 대신하여 작동하는 서비스가 포함됩니다.
이러한 경우 프로세스 간 통신이 올바르게 처리되지 않으면 앱이 중단되거나 응답하지 않는 것처럼 보일 수 있습니다(연결된 대기 상태일 때 화면이 꺼짐). 그러나 대부분의 경우 교차 프로세스 통신 문제에 대해 강력한 서비스 및 드라이버를 이미 개발해야 합니다.
웹에서 소프트웨어를 만들거나 종속된 공급업체는 프로세스 일시 중단이 연결 수명 및 핸드셰이크에 미치는 영향을 고려해야 합니다. 또한 연결된 대기 모드에서 네트워크 연결을 사용할 수 없으므로 세션 0에서 만든 프로세스 개발자는 간헐적인 네트워크 연결이 프로세스에 미치는 영향을 특히 알고 있어야 합니다.
해결 방법
Windows Microsoft Store 앱은 DAM의 영향을 받지 않습니다. 데스크톱 앱이 DAM의 영향을 받는 경우 다음 방법 중 하나를 사용하여 일시 중단이 발생하기 전에 알림을 요청할 수 있습니다(예: 상태 저장 또는 네트워크 연결 닫기).
- 앱에 HWND(창)가 있고 창 프로시저를 통해 이러한 알림을 처리하려는 경우 RegisterSuspendResumeNotification 을 호출하여 이러한 메시지에 등록합니다(또는 UnregisterSuspendResumeNotification 을 등록 취소). Flags 매개 변수에서 DEVICE_NOTIFY_WINDOW_HANDLE 사용하고 창의 HWND를 Recipient 매개 변수로 전달할 수 있습니다. 받은 메시지는 WM_POWERBROADCAST 메시지입니다.
- 앱에 창(HWND)이 없거나 직접 콜백을 원하는 경우 PowerRegisterSuspendResumeNotification 을 호출하여 이러한 메시지에 등록합니다(또는 PowerUnregisterSuspendResumeNotification 을 등록 취소). Flags 매개 변수에서 DEVICE_NOTIFY_CALLBACK 사용하고 Recipient 매개 변수에 PDEVICE_NOTIFY_SUBSCRIBE_PARAMETERS 형식의 값을 전달해야 합니다.
- 앱을 다시 컴파일할 수 없는 경우 AppCompat 도구 키트 (PromoteDAM shim 사용)를 통해 이러한 WM_POWERBROADCAST 메시지를 수신하도록 옵트인할 수 있습니다.
일시 중단 메시지는 wParam=PBT_APMSUSPEND;로 WM_POWERBROADCAST. 이 메시지는 시스템에서 옵트인된 모든 프로세스에 동시에 브로드캐스트됩니다. 앱은 일시 중단 경로에 대한 작업을 빠르고 효율적으로 수행해야 합니다. 브로드캐스트 알림 이후의 시간 제한은 프로세스별로가 아니라 전역이므로 이 경로에 필요한 작업이 광범위할 경우 프로세스가 시스템 리소스에 대해 경합할 수 있습니다.
다시 시작 메시지는 wParam=PBT_APMRESUME;로 WM_POWERBROADCAST. 이 메시지는 다시 시작 후 옵트인된 모든 프로세스에 동시에 브로드캐스트됩니다. 연결된 대기에서 시스템 종료에 대한 상대적인 배달 시간은 보장되지 않습니다.
카메라 관련 애플리케이션의 경우 전원 상태 전환이 발생하는 경우 일시 중단 알림 중에 애플리케이션은 카메라에 대한 모든 참조를 해제해야 합니다(모든 캡처 파이프라인 개체를 종료하고 삭제해야 합니다). 가능한 배터리 소모를 방지하기 위해 Windows 10 RS3+ 시스템에서 Windows 카메라 프레임 서버 서비스는 애플리케이션이 일시 중단 알림을 제대로 처리하지 않는 경우 모든 캡처 세션을 닫습니다. 이로 인한 부작용은 시스템이 대기 상태 또는 S3/S4 상태가 되면 애플리케이션의 캡처 파이프라인이 더 이상 작동 상태가 되지 않는다는 것입니다.
테스트
연결된 대기 전환에서 소프트웨어를 테스트합니다.
리소스
- Windows 7용 모바일 배터리 수명 솔루션
- SYSTEM_POWER_CAPABILITIES
- CallNtPowerInformation 함수
- 작업 개체
- RegisterSuspendResumeNotification
- UnregisterSuspendResumeNotification
- PowerRegisterSuspendResumeNotification
- PowerUnregisterSuspendResumeNotification
- AppCompat 도구 키트