KR101873794B1 - 웨이크록 사용을 추적하는 기술들 - Google Patents

웨이크록 사용을 추적하는 기술들 Download PDF

Info

Publication number
KR101873794B1
KR101873794B1 KR1020167004464A KR20167004464A KR101873794B1 KR 101873794 B1 KR101873794 B1 KR 101873794B1 KR 1020167004464 A KR1020167004464 A KR 1020167004464A KR 20167004464 A KR20167004464 A KR 20167004464A KR 101873794 B1 KR101873794 B1 KR 101873794B1
Authority
KR
South Korea
Prior art keywords
wake
application
power manager
calls
operating system
Prior art date
Application number
KR1020167004464A
Other languages
English (en)
Other versions
KR20160033767A (ko
Inventor
민열 임
로버트 피. 나이트
가우탐 우파디야야
네하 샤르마
Original Assignee
인텔 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인텔 코포레이션 filed Critical 인텔 코포레이션
Publication of KR20160033767A publication Critical patent/KR20160033767A/ko
Application granted granted Critical
Publication of KR101873794B1 publication Critical patent/KR101873794B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3206Monitoring of events, devices or parameters that trigger a change in power modality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/329Power saving characterised by the action undertaken by task scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3296Power saving characterised by the action undertaken by lowering the supply or operating voltage
    • Y02D10/122
    • Y02D10/17

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Power Sources (AREA)

Abstract

다양한 실시예들은 일반적으로 애플리케이션 및 커널 레벨들에서의 웨이크록들에 관련되는 이벤트들을 기록하는 로그들을 생성하는 것, 및 그리고 나서 웨이크록들의 디버깅을 인에이블하기 위해 가시적 제시에 이러한 이벤트들의 그래프들을 시간적으로 정렬하는 것에 관련된다. 웨이크록들을 디버그하는 장치는, 프로세서 컴포넌트, 애플리케이션 레벨 웨이크록들과 관련되는 호출들을 인터셉트하는 캡처 컴포넌트 - 인터셉트된 호출들은 운영 체제의 애플리케이션 전력 관리자에 의해 애플리케이션 루틴들로부터 수신됨 -; 및 애플리케이션 전력 관리자에 연결되는 운영 체제의 시스템 로그 생성기에 인터셉트된 호출들의 표시들을 제공하도록 애플리케이션 전력 관리자와 협력하는 중계 컴포넌트 - 시스템 로그 생성기는 프로세서 컴포넌트에 의한 운영 체제의 실행과 관련되는 이벤트들의 표시들 및 인터셉트된 호출들의 표시들을 포함하는 시스템 로그 데이터를 생성함 -를 포함한다. 다른 실시예들이 설명되고 청구된다.

Description

웨이크록 사용을 추적하는 기술들{TECHNIQUES FOR TRACING WAKELOCK USAGE}
본 명세서에 설명되는 실시예들은 일반적으로, 저 전력 상태에 진입하는 컴퓨팅 디바이스의 능력을 제어하기 위해 웨이크록들(wakelocks)의 사용을 추적(trace)하는 것에 관련된다.
전력 소비와 다양한 태스크들을 수행하는 특징들의 가용성 사이에서 상이한 절충을 각각 행하는 다양한 전력 상태들에서 동작하는 것을 지원하기 위해 컴퓨팅 디바이스들이 전력 관리 특징들을 포함하는 것은 흔한 일이다. 특히, 휴대용 컴퓨팅 디바이스들은 배터리로부터 이용가능한 제한된 전력을 다양한 컴포넌트들에 제공하는 것이 개별적으로 제어가능한 보다 정교한 형태들의 전력 관리를 갖는 경향이 있다.
컴퓨팅 디바이스가 처하게 될 수 있는 많은 사용들에 대해, 전력 관리 컴포넌트가 컴퓨팅 디바이스를 저 전력 상태로 두게 하는 것이 종종 가능하다. 그러나, 고 전력 상태로 컴퓨팅 디바이스를 유지하는 것이 바람직할 수 있고 따라서, 전력 관리 컴포넌트가 컴퓨팅 디바이스를 저 전력 상태로 두는 것을 방지하는 것이 바람직할 수 있는 상황들이 발생하고는 한다. 예를 들어, 컴퓨팅 디바이스는 모션 비디오의 재생을 수행하도록 동작될 수 있으며, 이에 의해 모션 비디오를 디코드하기에 충분한 처리 리소스들의 중단없는 사용 및 모션 비디오를 가시적으로 제시하는 디스플레이의 중단없는 사용을 요구한다. 또한, 이용가능한 전력의 제한된 공급이 고갈되어 감에도 불구하고(예를 들어, 컴퓨팅 디바이스의 배터리가 낮아짐에도 불구하고) 이러한 리소스들의 이러한 중단없는 사용이 요구될 수 있다.
애플리케이션 루틴들 및/또는 운영 체제의 다양한 부분들이, 컴퓨팅 디바이스의 전력 관리 컴포넌트가 컴퓨팅 디바이스를 저 전력 상태로 두는 것을 삼가하기를 요청하게 하는 함수 호출들(function calls)을 제공하는 것이 따라서 흔하게 되었다. 이것은 흔히, 컴퓨팅 디바이스가 저 전력 상태 또는 "휴면 모드(sleep mode)"에 진입할 수 없도록 고 전력 상태로 "잠기는(locked)" 또는 "깨어 있는(kept awake)", "웨이크록(wakelock)"을 요청하는 것 또는 "취득하는 것(acquiring)"이라고 언급되어 왔다. 다양한 구현들은 웨이크록을 요청하기 위한 호출들, 웨이크록을 해제하기 위한 호출들, 및/또는 명시된 시간 기간의 끝에서 만료하도록 시간 제한되는 웨이크록을 요청하기 위한 호출들에 대한 지원을 포함한다.
유감스럽게도, 애플리케이션 루틴들이 웨이크록들을 사용하기 위한 이러한 지원의 제공은, 웨이크록의 과도한 사용을 초래하고, 이에 의해 이용가능한 전력의 조기 고갈에 이르는, 애플리케이션 루틴들에서의 에러들 및/또는 다른 예상치 못한 상황들이 발생하는, 소위 "비-휴면 웨이크록 버그들(no-sleep wakelock bugs)"의 출현이 동반되어 왔다. 이러한 상황들은, 종종 "예상치 못한 배터리 소모(unexpected battery drain)"라고 언급되며, 또한 웨이크록이 어떻게든 요청되었고 승인되었지만, 결코 해제되지 않은 방식을 식별하려는 디버깅 노력들에 이르게 한다.
유감스럽게도, 많은 휴대용 컴퓨팅 디바이스들은, 이러한 웨이크록 버그들의 근원의 빠른 검출을 촉진하는 방식으로 설계되지 않았던 운영 체제들을 포함한다. 다양한 운영 체제들은 시간 경과에 따른 다양한 이벤트들의 발생을 상세히 기술하는 시스템 로그 데이터의 생성을 지원하곤 한다. 또한, 다양한 운영 체제들은, 더 일찍 요청되었지만, 아직 해제되지 않은 웨이크록이 있는지를 포함하여, 운영 체제의 컴포넌트들의 상태의 상세화된 뷰를 제공하도록, 레지스터들 및 다양한 데이터 구조들의 현재 상태를 "덤프하는(dump)" 능력을 제공하곤 한다. 그러나, 어떠한 루틴 또는 운영 체제 컴포넌트가 웨이크록을 잘못 요청할 수 있는지 및/또는 웨이크록을 해제하는 것을 무시할 수 있는지를 식별하는데 필요한 데이터를 기록하거나 또는 제공하는 대비는 이루어지지 않았다.
도 1은 웨이크록 디버깅 시스템의 일 실시예를 도시한다.
도 2는 웨이크록 디버깅 시스템의 다른 실시예를 설명한다.
도 3은 일 실시예에 따라 로그 데이터를 생성하는 일 예를 도시한다.
도 4-6 각각은 일 실시예에 따라 웨이크록을 디버깅하는 것을 촉진하는 예시적인 이미지를 도시한다.
도 7-9 각각은 웨이크록 디버깅 시스템의 일 실시예의 일부를 도시한다.
도 10-12 각각은 일 실시예에 따른 로직 흐름을 도시한다.
도 13은 일 실시예에 따른 처리 아키텍처를 도시한다.
다양한 실시예들은 일반적으로 운영 체제의 애플리케이션 및 커널 레벨들에서의 웨이크록들에 관련되는 이벤트들을 기록하는 로그들을 생성하는 것, 및 그리고 나서 웨이크록들의 디버깅을 인에이블하기 위해 가시적 제시에 이러한 이벤트들의 그래프들을 시간적으로 정렬하는 것에 관련된다. 보다 구체적으로, 운영 체제의 애플리케이션 전력 관리자는 운영 체제에 의해 정상적으로 생성되는 시스템 로그 데이터에서의 이벤트들의 기록을 향상시키기 위해 로그 패치 루틴으로 증강된다. 또한, 커널 레벨 웨이크록 이벤트들을 기록하는 보조 로그 데이터를 생성하기 위해 운영 체제의 커널 전력 관리자에 로그 디바이스 드라이버가 연결된다. 또한, 시스템 로그 데이터 및 보조 로그 데이터에 기록되는 웨이크록 이벤트들 및 관련된 이벤트들은 웨이크록 버그를 표시하는 이벤트들 사이의 관련성들이 보여질 수 있도록 시간적으로 정렬되는 그래프들에 가시적으로 제시된다.
운영 체제는 선택된 이벤트들의 발생들이 운영 체제가 수용되는 컴퓨팅 디바이스의 프로세서 컴포넌트에 의해 운영 체제의 실행의 전체에 걸쳐서 타임스탬프된 엔트리들에 기록되는 시스템 로그 데이터를 정상적으로 생성한다. 선택된 것들 중에서 어떠한 이벤트들이 시스템 로그 데이터에 기록될 것인가는 컴퓨팅 디바이스의 오퍼레이터에 의해 종종 변경가능하게 된다. 보다 구체적으로, 이벤트들의 보다 제한적 선택이 기록되는 "정상 모드(normal mode)" 및 이벤트들의 보다 큰 선택이 기록되는 "디버그 모드(debug mode)"가 보통 존재하며, 이러한 컴퓨팅 디바이스들의 오퍼레이터의 제어 하에 이들 모드들 사이에서 다이나믹하게 스위칭하는 능력이 종종 존재한다. 그러나, 디버그 모드에서도, 보통은 여전히 계류중인 웨이크록(예를 들어, 저 전력 상태로의 진입이 방지되도록 아직 해제되지 않은 보다 일찍 요청된 웨이크록)이 존재한다는 표시가 있는 것이 불과할 뿐이고, 어느 애플리케이션 루틴(들) 또는 얼마나 많은 애플리케이션 루틴들이 웨이크록을 요청하였거나 및/또는 해제하였는지에 대한 표시는 없다. 어떠한 사소한 정보라도 시스템 로그 데이터에 통상적으로 기록되는가는 애플리케이션 전력 관리자에 의해 제공된다.
운영 체제 내에서, 전력 관리는 애플리케이션 전력 관리자에 의한 애플리케이션 레벨 및 애플리케이션 전력 관리자가 그와 통신하는 분리된 별개의 커널 전력 관리자에 의한 커널 레벨의 양자 모두에서 취급될 수 있다. 애플리케이션 전력 관리자는 애플리케이션 레벨에서 웨이크록들을 요청하거나 또는 해제하기 위한 애플리케이션 루틴들로부터의 호출들을 수신한다. 애플리케이션 전력 관리자에 의해 수신되는 애플리케이션 레벨 웨이크록들을 요청하거나 또는 해제하기 위한 이러한 요청들은 어떠한 애플리케이션 루틴이 이러한 호출을 송신하고 있는지를 표시하는 식별 정보를 통상적으로 포함한다. 또한, 멀티-스레드형(multi-threaded) 처리 환경에서, 애플리케이션 전력 관리자는 각각의 호출이 어느 스레드로부터 수신되는지를 통상적으로 결정할 수 있다. 애플리케이션 전력 관리자는, 애플리케이션 루틴들 및/또는 스레드들을 식별하는 이러한 정보를 통상적으로 사용하여, 애플리케이션 레벨 웨이크록들 중 하나를 해제하기 위한 호출이 수신될 때 애플리케이션 레벨에서 이미 요청된 어느 웨이크록이 해제되어야 하는지를 식별한다. 그러나, 애플리케이션 전력 관리자는 시스템 로그 데이터에서의 기록을 위해 이러한 정보를 통상적으로 제공하지는 않는다. 시스템 로그 데이터에서 이러한 구체성의 부족함을 바로잡기 위해, 애플리케이션 전력 관리자는 로그 패치 루틴으로 증강된다. 이러한 로그 패치 루틴은 명령어들의 시퀀스를 애플리케이션 전력 관리자에 부가하여, 애플리케이션 전력 관리자로 하여금, 애플리케이션 레벨 웨이크록을 요청하거나 또는 해제하기 위한 각각의 호출에 관한 정보를, 어떠한 애플리케이션 루틴 및/또는 스레드가 이러한 호출들 각각과 관련되는지를 식별하는 정보와 함께, 제공하게 한다.
애플리케이션 전력 관리자는 컴퓨팅 디바이스의 현재 전력 상태를 스스로 직접 제어하는(예를 들어, 컴퓨팅 디바이스를 임의의 특정 저 전력 상태 또는 고 전력 상태로 두는) 능력을 통상적으로 갖지 않는다. 그 대신, 애플리케이션 전력 관리자는 애플리케이션 레벨에서 웨이크록들을 요청하거나 또는 해제하기 위해 자신이 수신하는 호출들을, 커널 레벨에서 애플리케이션 전력 관리자와 관련되는 더 적은 양의 웨이크록들을 요청하거나 또는 해제하기 위해 그 자신의 커널 전력 관리자에게 송신하는 호출들이 되도록 종합(aggregate)한다. 커널 전력 관리자에 대한 이러한 호출들은 애플리케이션 레벨에서 웨이크록들을 요청하거나 또는 해제하는 본래 호출들이 유래된 애플리케이션들 및/또는 스레드들을 식별하는 정보가 통상적으로 전혀 없다. 종종 애플리케이션 전력 관리자로부터 커널 전력 관리자로의 이러한 호출들에 포함되는 유일한 식별 정보는 이러한 호출들의 근원로서의 애플리케이션 전력 관리자의 표시이다.
커널 전력 관리자는, 애플리케이션 전력 관리자로부터 뿐만 아니라, 운영 체제의 다른 컴포넌트들로부터 및/또는 커널 레벨에서의 디바이스 드라이버들로부터도 커널 레벨 웨이크록들을 요청하거나 또는 해제하기 위한 호출들을 수신한다. 커널 전력 관리자는 통상적으로 시스템 로그 데이터에 기록하기 위한 커널 레벨 웨이크록들 또는 관련된 이벤트들에 관계되는 정보를 전혀 제공하지 않거나 또는 매우 적게 제공하도록 구성된다. 커널 레벨 웨이크록들에 관련되는 이벤트들에 관한 정보의 제공의 이러한 전적인 결핍을 바로잡기 위해, 커널 레벨 웨이크록들을 요청하거나 또는 해제하기 위한 호출들의 발생들 및 (애플리케이션 전력 관리자를 포함하여) 어떠한 운영 체제 컴포넌트가 각각의 호출을 행하는지를 포함하여, 커널 레벨 웨이크록들에 관련되는 이벤트들을 기록하는 보조 로그 데이터를 생성하기 위해 로그 디바이스 드라이버가 부가된다. 이러한 로그 디바이스 드라이버는 커널 전력 관리자와 통신하여, 커널 레벨 웨이크록들을 요청하거나 또는 해제하기 위해 커널 전력 관리자에 의해 수신되는 모든 호출들을 자신이 통지받을 것을 요청한다. 로그 디바이스 드라이버는 또한 자신이 보조 로그 데이터에 기록하는 이러한 이벤트 각각의 표시들을 타임스탬프한다.
(애플리케이션 레벨 웨이크록들에 관한 증대된 정보를 갖는) 시스템 로그 데이터 및 보조 로그 데이터의 생성에 이어서, 디버깅 루틴은 이들 양자 모두를 파싱하여(parses) 웨이크록 이벤트들 및 다른 관련된 이벤트들에 관한 정보를 추출한다. 이러한 디버깅 루틴은, 로그들 각각에서의 이러한 이벤트들과 관련되는 타임스탬프들을 이용하여, 이들을 시간적으로 정렬하고 또한 웨이크록 버그에 이르는 이벤트들 사이의 상관들이 식별되게 하기 위해 디스플레이에 이러한 이벤트들의 타임라인들의 시간적으로 정렬된 그래프들을 가시적으로 제시한다. 디버깅 루틴은, 웨이크록 버그가 발생한 동일한 컴퓨팅 디바이스의 프로세서 컴포넌트에 의해 실행될 수 있고/있거나 별도의 디버깅 디바이스의 프로세서 컴포넌트에 의해 실행될 수 있다.
본 명세서에 사용되는 표기 및 명명법을 일반적으로 참조하면, 후속하는 상세한 설명의 부분들은 컴퓨터 또는 컴퓨터들의 네트워크 상에서 실행되는 프로그램 프로시저들에 관하여 제시될 수 있다. 이러한 프로시저의 설명들 및 표현들은 기술 분야의 통상의 기술자들이 기술 분야의 다른 통상의 기술자들에게 자신들의 연구의 본질을 가장 효과적으로 전달하는데 사용된다. 프로시저는, 본 명세서에서, 그리고 일반적으로, 원하는 결과로 이어지는 일관성 있는 동작 시퀀스(self-consistent sequence of operations)인 것으로 간주된다. 이들 동작들은 물리량들(physical quantities)의 물리적 조작들(physical manipulations)을 요구하는 것들이다. 반드시 그런 것은 아니지만, 일반적으로, 이러한 양들은, 저장되고, 전달되고, 조합되고, 비교되고, 및 다른 방식으로 조작될 수 있는, 전기적, 자기적, 또는 광학적 신호들의 형태를 취한다. 주로 일반적 사용의 이유로, 이러한 신호들을, 비트들, 값들, 엘리먼트들, 심볼들, 문자들, 항들, 숫자들 등으로서 지칭하는 것이 때때로 편리한 것으로 드러난다. 그러나, 이들 및 유사한 용어들 모두는 적절한 물리량들과 관련되어야 하며 이러한 양들에 적용되는 단지 편리한 레이블들이라는 점이 주목되야 한다.
또한, 이러한 조작들은 종종, 인간 오퍼레이터에 의해 수행되는 정신적 동작들과 흔히 관련되는, 가산 또는 비교와 같은, 용어들로 지칭된다. 그러나, 하나 이상의 실시예들의 부분을 형성하는 본 명세서에 설명되는 동작들 중 임의의 것에서, 인간 오퍼레이터의 이러한 능력은 필요 없거나, 또는 대부분의 경우들에서, 없는 것이 바람직하다. 오히려, 이러한 동작들은 머신 동작들이다. 다양한 실시예들의 동작들을 수행하기에 유용한 머신들은, 본 명세서에서의 교시에 따라 작성되어진 것이 내부에 저장되는 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 구성되는 것으로서 범용 디지털 컴퓨터들을 포함하고, 및/또는 요구되는 목적을 위해 구체적으로 구성되는 장치를 포함한다. 다양한 실시예들은 또한 이러한 동작들을 수행하는 장치 또는 시스템들에 관한 것이다. 이러한 장치들은 요구되는 목적을 위해 구체적으로 구성되거나 또는 범용 컴퓨터를 포함할 수 있다. 다양한 이러한 머신들에 요구되는 구조는 주어지는 설명으로부터 명백할 것이다.
이제, 유사한 참조번호들이 전반적으로 유사한 엘리먼트들을 지칭하는데 사용되는, 도면들을 참조한다. 이하의 설명에서, 설명의 목적상, 그 철저한 이해를 제공하기 위하여 많은 특정 상세사항들이 제시된다. 그러나, 이러한 특정 상세사항들 없이도 신규한 실시예들이 실행될 수 있다는 점이 분명할 수 있다. 다른 경우들에서는, 잘 알려진 구조들 및 디바이스들이, 그 설명을 촉진하기 위하여 블록도 형태로 도시된다. 그 의도는, 청구항들의 범위 내에 있는 모든 수정물들, 균등물들, 및 대안들을 포괄하는 것이다.
도 1은 서버(100), 컴퓨팅 디바이스(300) 및 디버깅 디바이스(500) 중 하나 이상을 포함하는 웨이크록 디버깅 시스템(1000)의 일 실시예의 블록도이다. 이러한 컴퓨팅 디바이스들(100, 300 및 500) 각각은, 이에 제한되는 것은 아니지만, 데스크톱 컴퓨터 시스템, 데이터 입력 단말, 랩톱 컴퓨터, 넷북 컴퓨터, 태블릿 컴퓨터, 핸드헬드 PDA(personal data assistant), 스마트폰, 디지털 카메라, 의류 내에 포함되는 신체-착용 컴퓨팅 디바이스, 차량(예를 들어, 자동차, 자전거, 휠체어 등) 내에 통합되는 컴퓨팅 디바이스, 서버, 서버들의 클러스터, 서버 팜(server farm) 등을 포함하는 컴퓨팅 디바이스의 다양한 타입들 중 임의의 것일 수 있다.
도시되는 바와 같이, 이러한 컴퓨팅 디바이스들(100, 300 및 500)의 서브세트들은 컴퓨팅 디바이스(300) 상에 실행되는 하나 이상의 루틴들에 의해 요청되는 웨이크록들의 디버깅과 관련되는 신호들을 네트워크(999)를 통해 교환할 수 있다. 그러나, 이러한 컴퓨팅 디바이스들 중 하나 이상은 이러한 디버깅에 전부 관련되지 않은 다른 데이터를 서로와 및 다른 컴퓨팅 디바이스들(도시되지 않음)과 네트워크(999)를 통해 교환할 수 있다. 다양한 실시예들에서, 네트워크(999)는, 단일의 건물 또는 기타의 비교적 제한된 영역 내에서 연장되는 것으로 아마도 제한되는 단일 네트워크, 상당한 거리로 아마도 연장되는 접속된 네트워크들의 조합일 수 있고, 및/또는 인터넷을 포함할 수 있다. 따라서, 네트워크(999)는, 이에 제한되는 것은 아니지만, 전기적 및/또는 광학적 도전성 케이블링을 이용하는 유선 기술들, 및 적외선, 무선 주파수 또는 기타 형태의 무선 송신을 이용하는 무선 기술들을 포함하는, 신호들이 교환될 수 있는 다양한 통신 기술들(또는 그의 조합) 중 임의의 것에 기초할 수 있다.
다양한 실시예들에서, 컴퓨팅 디바이스(300)는, 프로세서 컴포넌트(350), 클록(351), 스토리지(360) 및 컴퓨팅 디바이스(300)를 네트워크(999)에 연결하는 인터페이스(390) 중 하나 이상을 포함한다. 스토리지(360)는 운영 체제(340), 디바이스 드라이버들(310), 시스템 데이터(330), 애플리케이션 루틴들(340), 로그 패치 루틴(177), 로그 디바이스 드라이버(171), 시스템 로그 데이터(337) 및 보조 로그 데이터(331) 중 하나 이상을 저장한다. 운영 체제(340), 디바이스 드라이버들(310), 애플리케이션 루틴들(370), 로그 패치 루틴(177) 및 로그 디바이스 드라이버(171) 각각은 다양한 기능들을 수행하는 로직을 구현하기 위해 컴퓨팅 디바이스(300)의 메인 프로세서 컴포넌트로서 자신의 역할로 프로세서 컴포넌트(350) 상에서 동작되는 명령어들의 시퀀스를 포함한다.
운영 체제(340) 및 디바이스 드라이버들(310)을 실행함에 있어서, 프로세서 컴포넌트(350)는 또한 애플리케이션 루틴들(370)을 실행하기 위한 지원의 다양한 형태들을 제공한다. 보다 구체적으로, 프로세서 컴포넌트(350)는, 애플리케이션 루틴들(370)의 실행 동안 다양한 함수 호출들이 행해질 수 있게 하는 API(application programming interface)를 이용가능하게 하여, 애플리케이션 루틴들(370)이 그를 위해 구성되는 어떠한 기능들이라도 수행하도록 애플리케이션 루틴들(370)이 실행될 수 있는 운영 환경을 제공한다. 각각의 애플리케이션 루틴(370)은, 워드프로세서들, 웹사이트 뷰어들, 사진 편집기들, 회의 일정 관리, CAD/CAM 등을 포함하는, 다양한 개인용 및/또는 전문가용 목적들 중 임의의 것을 수행하도록, 운영 체제(340)의 지원으로 프로세서 컴포넌트(350)에 의해 컴퓨팅 디바이스(300) 상의 실행을 위해 선택되는 다양한 타입들의 애플리케이션-레벨 루틴들 중 임의의 것일 수 있다. 프로세서 컴포넌트(350)는 또한 컴퓨팅 디바이스(300)의 컴포넌트들에 의한 전력의 소비를 관리하게 되며, 컴퓨팅 디바이스(300)를 다양한 저 전력 및 고 전력 상태들 사이에서 천이시킴으로써 그렇게 한다. 통상의 기술자들에게 친숙한 바와 같이, 적어도 일부 저 전력 상태들 동안, 컴퓨팅 디바이스(300)의 기능성은, 컴퓨팅 디바이스(300)의 다양한 컴포넌트들의 클록 스피드들을 감소시키는 것 및/또는 컴퓨팅 디바이스(300)의 다양한 컴포넌트들로부터 전력을 회수하는 것을 포함하는, 다양한 방식들로 감소될 수 있다.
적어도 운영 체제(340)에 의해 애플리케이션 루틴들(370)에 제공되는 호출가능한 함수들 중에는 웨이크록들을 요청 및 해제하기 위한 호출들이 있다. 앞서 논의된 바와 같이, 웨이크록의 요청은, 애플리케이션 루틴들(370) 중 하나 이상이 컴퓨팅 디바이스(300)에 의해 제공되는 기능성의 보다 완전한 레벨을 계속 사용할 수 있게 하도록, 컴퓨팅 디바이스(300)를 저 전력 모드의 적어도 일부 형태들로 천이시키는 것을 삼가하게 하는 운영 체제(340)에 대한 요청이다. 애플리케이션 루틴들(370) 중 하나 이상은 애플리케이션 루틴들(370)에 의해 수행되는 기능들에 적어도 일부 기초하여 다양한 이유들 중 임의의 것에 대해 웨이크록을 요청하기 위한 호출을 운영 체제(340)에 송신할 수 있다. 예를 들어, 애플리케이션 루틴들(370) 중 하나는 네트워크(999)를 통해 다른 디바이스로부터 수신되는 데이터의 실시간 모니터링을 수행할 수 있어서, 프로세서 컴포넌트(350)의 감소된 클록 속도 또는 인터페이스(390)의 감소된 기능성을 특징으로 하는 저 전력 모드가 그러한 기능을 수행하는 애플리케이션 루틴(370)의 능력을 디스에이블할 수 있다. 다른 예를 들어, 애플리케이션 루틴들(370) 중 하나는 스토리지(360) 내에 저장되는 모션 비디오의 디코딩 및 재생을 수행할 수 있어서, 컴퓨팅 디바이스(300)에 연결되는 디스플레이로부터 전력을 회수하는 것 또는 프로세서 컴포넌트(350)의 클록 속도를 감소시키는 것을 특징으로 하는 저 전력 모드가 어느 하나의 기능을 수행하는 해당 애플리케이션 루틴(370)의 능력을 차단할 수 있다.
도 3은 웨이크록들을 사용하고 디버그하는 컴퓨팅 디바이스(300)의 컴포넌트들의 동작의 일 실시예를 도시한다. 도시된 바와 같이, 운영 체제(340)는, 애플리케이션 레벨 웨이크록들을 관리하는 애플리케이션 전력 관리자(347), 및 애플리케이션 전력 관리자(347)와 관련되는 커널 레벨 웨이크록을 포함하는, 커널 레벨 웨이크록들을 관리하는 커널 전력 관리자(341) 양자 모두를 포함할 수 있다. 운영 체제(340)는 또한 시스템 로그 데이터(337)를 생성하는 시스템 로그 생성기(344)를 포함할 수 있고, 시스템 로그 데이터(337)에서의 기록을 위해 컴퓨팅 디바이스(300)의 동작의 다양한 파라미터들을 모니터링하는 시스템 모니터(345)를 부가적으로 포함할 수 있다.
애플리케이션 루틴들(370) 중 하나가 웨이크록을 요구하는 경우 애플리케이션 루틴들(370) 중 해당 하나의 정상 실행 동안, 애플리케이션 루틴들(370) 중 해당 하나는 웨이크록을 요청하기 위한 호출을 애플리케이션 전력 관리자(347)에 송신한다. 사용되는 이러한 호출은 애플리케이션 루틴들(370)에 의한 사용을 위해 애플리케이션 전력 관리자(347)에 의해 제공되는 API의 함수 호출이다. 이러한 호출은, 호출을 행한 애플리케이션 루틴들(370) 중 하나를 웨이크록을 요청한 루틴으로서 식별하며, 그 웨이크록과 관련될, 식별 정보를 포함한다. 이러한 식별 정보는, 호출의 파라미터로서 그 애플리케이션 루틴(370)에 의해 직접 제공되는 애플리케이션 루틴들(370) 중 하나의 식별자 및/또는 그로부터 호출이 수신되고 그 상에서 애플리케이션 루틴들(370) 중 하나의 일부가 프로세서 컴포넌트(350)에 의해 실행되는 스레드의 식별자를 포함할 수 있다. 운영 체제(340)는, 그로부터 호출들이 수신될 수 있는 스레드들의 식별자들을 이러한 스레드들에서 실행되는 애플리케이션 루틴들(370)(및 다른 루틴들) 중 특정의 것들에 상관시키는 매핑 데이터를 시스템 데이터(330) 내에 유지할 수 있다. 시스템 데이터(330)는 운영 체제(340)의 정상 동작에 요구되는 다양한 데이터를 포함할 수 있고, 돌발적이거나 또는 악의적인 변경을 방지하기 위해 그에 대한 액세스가 매우 제한되는 스토리지(360) 내의 위치에 저장될 수 있다.
웨이크록에 대한 요청을 수신하는 것에 응답하여, 애플리케이션 전력 관리자(347)는 애플리케이션 레벨 웨이크록을 인스턴스화하고, 다시, 애플리케이션 루틴들(370) 중 이를 요청한 것과 이를 관련시킨다. 이렇게 함에 있어서, 애플리케이션 전력 관리자(347)는, 요청된 애플리케이션 웨이크록을 애플리케이션 루틴들(370) 중 이를 요청했던 것에 상관시키고, 애플리케이션 웨이크록이 현재 계류중이라는 표시를 포함하는, 시스템 데이터(330) 내에 유지되는 웨이크록 데이터에서의 엔트리를 생성할 수 있다. 애플리케이션 레벨 웨이크록의 인스턴스화에 의해, 애플리케이션 레벨 웨이크록이 그리고 나서 "액티브(active)" 또는 "계류(pending)"가 되며, 심지어 하나의 웨이크록이 계류중이라는 사실도 컴퓨팅 디바이스(300)가 저 전력 상태로 천이하는 것을 방지한다. 컴퓨팅 디바이스(300)가 저 전력 상태로 천이하는 것이 허용되기 위해서는, 액티브이거나 또는 계류중인 임의의 및 모든 웨이크록들이 먼저 해제되어야 한다. 애플리케이션 루틴들(370) 중 그 하나와 관련되는 웨이크록을 해제하라는 후속 호출의 수신시, 그 후속 호출의 식별 정보는 어느 애플리케이션 웨이크록을 해제할지를 식별하는데 사용되고, 웨이크록 데이터에서의 엔트리는 클리어될 수 있거나 또는 그 웨이크록이 더 이상 계류중이 아니라는 표시로 마킹될 수 있다. 따라서, 계류 웨이크록을 해제하라는 호출은 그 웨이크록이 더 이상 액티브하지 않게 하여, 여전히 저 전력 상태로 천이하는 것을 방지할 수 있는 여전히 계류중인 하나 이상의 다른 웨이크록들이 존재할 수 있더라도, 컴퓨팅 디바이스가 저 전력 상태로 천이하는 것을 더 이상 방지할 수 없다는 결과를 낳는다. 앞서 논의된 바와 같이, 애플리케이션 전력 관리자(347)는 모든 계류 애플리케이션 레벨 웨이크록들을, 임의의 애플리케이션 레벨 웨이크록이 계류중일 때는 언제든지 이것이 커널 전력 관리자(341)에 대해 요청하는 커널 레벨 웨이크록들의 더 적은 양으로 종합한다. 달리 말하면, 임의의 계류 애플리케이션 레벨 웨이크록이 존재하는 한, 애플리케이션 전력 관리자는 커널 전력 관리자와 통신하여 애플리케이션 전력 관리자(347)와 관련되는 커널 레벨 웨이크록들의 제한된 양으로 하여금 또한 계류중이게 한다. 일부 실시예들에서는, 애플리케이션 전력 관리자(347)와 관련되는 단일의 커널 레벨 웨이크록만이 존재할 수 있다.
따라서, 어떠한 애플리케이션 레벨 웨이크록도 이미 계류중이지 않은 어떤 시점에서 웨이크록에 대한 요청이 애플리케이션 전력 관리자(347)에 의해 수신되면, 애플리케이션 전력 관리자(347)는 애플리케이션 전력 관리자(347)와 관련되는 커널 레벨 웨이크록에 대한 요청으로 커널 전력 관리자(341)에게 신호를 보낸다. 그렇지 않고 적어도 하나의 애플리케이션 레벨 웨이크록이 이미 계류중인 어떤 시점에서 웨이크록에 대한 요청이 애플리케이션 전력 관리자(347)에 의해 수신되면, 애플리케이션 전력 관리자(347)는 애플리케이션 전력 관리자(347)와 관련되는 커널 레벨 웨이크록에 대한 요청으로 커널 전력 관리자(341)에게 신호를 다시 보내지 않을 수 있는데, 그 이유는 커널 레벨 웨이크록이 이미 계류중이기 때문이다. 임의의 애플리케이션 웨이크록들이 계류중인 것을 중단할 때에만(예를 들어, 계류중이었던 모든 애플리케이션 레벨 웨이크록들이 해제되었음), 애플리케이션 전력 관리자(347)와 관련되는 커널 레벨 웨이크록을 해제하기 위해 애플리케이션 전력 관리자(347)가 커널 전력 관리자(341)에 호출을 송신한다.
애플리케이션 전력 관리자(341)와 관련되는 커널 레벨 웨이크록을 요청하거나 또는 해제하기 위한 애플리케이션 전력 관리자(347)로부터 커널 전력 관리자(341)로의 호출들은 애플리케이션 전력 관리자(341)를 호출의 근원으로서 식별하는 식별 정보를 포함한다. 이 동일한 호출 메커니즘은 또한 운영 체제(340)의 다른 커널 레벨 컴포넌트들에 의해서 및/또는 디바이스 드라이버들(310)에 의해 커널 레벨 웨이크록들을 직접 요청하거나 또는 이들을 해제하는데 사용될 수 있다. 애플리케이션 전력 관리자(347)에 의해 수신되는 웨이크록들에 관련되는 호출들과 다르지 않게, 커널 전력 관리자(341)에 의해 수신되는 웨이크록들에 관련되는 호출들의 적어도 일부에서의 식별 정보는 무엇이 호출을 송신하였든지 간에 긔에 의해 호출의 파라미터로서 제공되는 식별자 및/또는 그로부터 호출이 수신되는 스레드 또는 운영 체제 프로세스의 식별자를 포함할 수 있다. 시스템 데이터(330)의 매핑 정보는 커널 전력 관리자(341)에 의해 스레드들 또는 운영 체제 프로세스들의 식별자들을 애플리케이션 전력 관리자(347), 운영 체제(340)의 커널 레벨 컴포넌트 또는 디바이스 드라이버들(310) 중 하나에 상관시키는데 이용될 수 있다. 그러나, 일부 실시예들에서는, 이러한 정보를 제공하는 이러한 호출들 중 단 하나만이 애플리케이션 전력 관리자(347)로부터의 호출들일 수 있고, 이들만이 호출들의 근원으로서 애플리케이션 전력 관리자(347)를 식별할 수 있다. 커널 전력 관리자(341)는 또한 어느 커널 레벨 웨이크록들이 현재 계류중인지 및 이들을 요청한 모든 운영 체제 컴포넌트 또는 디바이스 드라이버(310)와의 이들의 관련성을 추적하는 메커니즘으로서 시스템 데이터(330)의 웨이크록 데이터에서의 엔트리들을 작성하고 클리어할 수 있다. 앞서 논의된 바와 같이, 커널 전력 관리자(341)는 컴퓨팅 디바이스(300)를 다양한 저 전력 상태들 및/또는 고 전력 상태들 사이에서 천이시키는 것에 의해 계류중인 웨이크록들의 적어도 존재 또는 부재에 작용하는 운영 체제(340)의 부분일 수 있다.
적어도 웨이크록들을 요청하는데 사용되는 호출들은 요청된 웨이크록들에 요구되는 특정 특징들을 표시하기 위해 하나 이상의 표시자 플래그들을 파라미터로서 포함할 수 있다는 점이 주목되어야 한다. 예를 들어, 웨이크록을 요청하기 위한 호출은, 그 웨이크록이 컴퓨팅 디바이스(300)의 특정 리소스 또는 컴포넌트(예를 들어, 디스플레이, 특정 스토리지 매체 디바이스 등)가 저 전력 상태에 놓이는 것에 대항하여 이들을 잠그는 것(locking)에 제한된다는 점을 명시할 수 있다. 애플리케이션 루틴의 일부의 상태의 몇몇 표시 및/또는 애플리케이션 루틴의 어떠한 부분이 웨이크록을 요구하였는지의 몇몇 표시를 제공하기 위해 다양한 디버그 플래그들 또는 메시지들이 웨이크록들에 관련되는 호출들에 포함될 수 있다는 점 또한 주목되어야 한다. 이러한 디버그 플래그들 또는 메시지들의 이러한 포함은 이러한 호출들에서 전달되는 파라미터들로서 존재할 수 있다. 적어도 커널 레벨 웨이크록들이, 요청되는 것에 응답하여 인스턴스화된 이후 선택된 시간 기간이 경과된 후 계류중인 것을 자동으로 중단하는 자체-만료 웨이크록들이 되도록 요청받을 수 있다는 점 또한 주목되어야 한다. 이러한 선택된 시간 기간은 그 웨이크록을 요청하기 위한 호출의 파라미터로서 명시될 수 있거나, 또는 미리 결정된 시간 기간(예를 들어, 상이한 시간 기간을 파라미터로서 명시하는 것에 의해 무효화될 수 있는(overridden) 디폴트 시간 기간)일 수 있다.
운영 체제(340)의 정상 실행 동안, 시스템 로그 생성기(344)는 이벤트들의 선택된 세트의 발생들을 기록하는 엔트리들을 시스템 로그 데이터(337)에 순환하여(recurringly) 부가한다. 그 선택된 세트 중에는, 컴퓨팅 디바이스(300)의 전력 상태들 중의 변경들의 발생들, 시스템 에러들의 발생들, 스토리지(360)의 특정 부분들(예를 들어, 시스템 데이터(330)가 저장되는 부분)에 시도되는 부적절한 액세스들의 발생들 등이 있을 수 있다. 시스템 모니터(345)는, 시스템 로그 데이터(337)에 기록하는 정보의 적어도 일부를 시스템 로그 생성기(344)에 공급하기 위해, 컴퓨팅 디바이스(300)의 동작의 다양한 양상들(예를 들어, 그것의 현재 전력 상태)을 모니터링할 수 있다. 시스템 로그 생성기(344)는, 자신이 시스템 로그 데이터(337)에 부가하는 엔트리들을 타임스탬핑하는데 사용하기 위한 현재 시간을 획득하기 위해, 또한 클록(351)과 일상적으로 통신할 수 있다.
앞서 논의된 바와 같이, 웨이크록들에 대한 지원의 제공은, 웨이크록이 배터리(명시적으로 도시되지는 않음)와 같은, 컴퓨팅 디바이스(300)의 전력의 제한된 근원의 고갈을 초래하기에 충분히 길게 과도하게 유지되는 웨이크록 버그들에 의해 동반될 수 있다. 또한 앞서 논의된 바와 같이, 운영 체제들에 의해 제공되는 웨이크록 버그들을 디버깅하기 위한 통상적 지원은, 어느 애플리케이션 루틴, 운영 체제 컴포넌트 또는 디바이스 드라이버가 계류중인 웨이크록을 가졌는지의 표시는 아니고, 시스템 로그 데이터에서 웨이크록이 계류중인지 여부의 표시들만의 포함이다.
그러나, 도 3에 도시되는 바와 같이, 애플리케이션 전력 관리자(347)는 시스템 로그 데이터(337)에서의 이러한 정보의 결핍을 극복하기 위해 로그 패치 루틴(177)으로 증강된다. 일부 실시예들에서, 로그 패치 루틴(177)은 호출 메커니즘을 통해 이들을 연결하기 위해 애플리케이션 전력 관리자(347)에 (동적으로 또는 정적으로) 링크될 수 있다(예를 들어, 로그 패치 루틴(177)은 다른 라이브러리의 것들로 대체되는 호출가능 함수들의 라이브러리를 구현할 수 있음). 다른 실시예들에서, 로그 패치 루틴(177)은 더 철저히 이들을 연결하기 위해 컴파일링 이전에 애플리케이션 전력 관리자(347)에 포함될 수 있다(예를 들어, 양자 모두의 명령어들의 시퀀스들이 컴파일링을 통해 단일의 조합된 루틴을 효과적으로 생성하도록 조합될 수 있음). 증강의 다른 메커니즘들이 통상의 기술자들에게 발생될 수 있다.
로그 패치 루틴(177)은, 애플리케이션 전력 관리자(347)의 것들에 부가될 때, 시스템 로그 데이터(337)에서의 부가적 데이터(334)로서의 기록을 위해 시스템 로그 생성기(344)에 부가적 애플리케이션 레벨 웨이크록 정보를 제공하는, 명령어들의 시퀀스를 포함한다. 구체적으로, 로그 패치 루틴(177)은 웨이크록들을 요청하거나 또는 해제하기 위해 애플리케이션 루틴들(370)로부터 애플리케이션 전력 관리자(347)에 의해 수신되는 호출들을 캡처한다. 로그 패치 루틴(177)은 그리고 나서, 부가적 데이터(334)의 일부로서 그들을 기록하도록 시스템 로그 생성기(344)를 인에이블하기 위해, 이러한 호출들 각각의 표시들을 시스템 로그 생성기(344)에게 제공하기 위해, 애플리케이션 전력 관리자(347)와 협력한다(예를 들어, 애플리케이션 전력 관리자(347)와 시스템 로그 생성기(344) 사이에 이미 자리잡은 통신들을 사용함). 이러한 표시들은, 이러한 호출들에 포함되는 파라미터들에 표시되는 바와 같이 및/또는 시스템 데이터(330) 내에 유지되는 매핑 데이터를 참조하는 것으로부터 유도되는 바와 같이 이러한 호출들을 행하는 애플리케이션 루틴들(370)의 것들 각각을 식별하는 식별 정보를 포함할 수 있다. 부가적으로, 애플리케이션 전력 관리자(347)는, 프로세서 컴포넌트(350)에 의한 로그 패치 루틴(177)의 실행에 의해, 부가적 데이터(334)의 일부로서의 기록을 위해 애플리케이션 전력 관리자(347)에 의해 커널 전력 관리자(341)에게 행해진 각각의 호출의 표시들을 시스템 로그 생성기(344)에게 부가적으로 제공하게 될 수 있다. 시스템 로그 데이터(337)에서 행해지는 다른 엔트리들에 의해서와 같이, 부가적 데이터(334)를 구성하는 부가적 엔트리들 또한 타임스탬프된다.
또한, 도 3에도 도시되는 바와 같이, 디바이스 드라이버들(예를 들어, 디바이스 드라이버들(310))로부터의 웨이크록 호출들을 지원하기 위해 커널 전력 관리자(341)에 의해 적어도 일부가 제공되는 DPI(driver programming interface)를 통해 커널 전력 관리자(341)와 통신하는 로그 디바이스 드라이버(171)가 디바이스 드라이버들(310)의 세트에 부가된다. 커널 전력 관리자(341)에 의해 적어도 일부가 제공되는 DPI는, 적어도 웨이크록들에 관해 커널 전력 관리자(341)에 의해 수신되는 호출들이 디바이스 드라이버에 재송신될 수 있는 재호출 메커니즘(callback mechanism)에 대한 지원을 포함할 수 있다. 로그 디바이스 드라이버(171)는, 프로세서 컴포넌트(350)에 의해 실행될 때, 웨이크록을 요청하거나 또는 해제하기 위해 커널 전력 관리자(341)에 의해 수신되는 각각의 호출이 로그 디바이스 드라이버(171)에 중계되도록, 바로 이러한 메커니즘의 소환(invocation)을 요청하기 위한 호출을 커널 전력 관리자(341)에 송신하는, 명령어들의 시퀀스를 포함한다. 다음 차례로, 로그 디바이스 드라이버(171)는, 이러한 호출들 각각의 발생들을 표시하는 엔트리들을 갖는 보조 로그 데이터(331)를 생성하기 위해, 자신에게 중계되는 웨이크록 호출들을 파싱한다. 이러한 표시들은, 이러한 호출들에 포함되는 파라미터들에 표시되는 바와 같이 및/또는 시스템 데이터(330) 내에 유지되는 매핑 데이터를 참조하는 것으로부터 유도가능한 바와 같이 이러한 호출들을 행하는 디바이스 드라이버들(310)의 것들 각각을 식별하는 식별 정보를 포함할 수 있다. 시스템 로그 생성기(344)에 의해 행해지는 엔트리들에서 그런 것처럼, 보조 로그 데이터(331)에서 행해지는 엔트리들은 로그 디바이스 드라이버(171)에 의해 타임스탬프된다. 그렇게 함에 있어서, 로그 디바이스 드라이버(171)는 시스템 로그 생성기(344)가 한 바와 같이 현재 시간을 제공하기 위해 클록(351)에 의존할 수 있다.
부가적 데이터(334)의 엔트리들 및/또는 보조 로그 데이터(331)의 생성에 의한 시스템 로그 데이터(337)의 증강은, 시스템 로그 데이터(337)에 더 큰 세트의 이벤트들을 기록하는 엔트리들의 포함을 초래하는 "디버그 모드"를 인에이블하거나 또는 디스에이블하는 동일한 모드 설정에 의해 선택적으로 트리거될 수 있다. 앞서 논의된 바와 같이, 컴퓨팅 디바이스(300)의 오퍼레이터의 제어 하에 디버그 모드로 및 이로부터 스위칭하기 위한 지원이 제공될 수 있다. 따라서, 운영 체제(340)는, 하나 이상의 애플리케이션 레벨 또는 커널 레벨 웨이크록들이 이미 자리잡을 수 있도록, 로그 패치 루틴(177) 및/또는 로그 디바이스 드라이버(171)의 기능성이 인에이블되기 이전에 일부 시간 동안 프로세서 컴포넌트(350)에 의해 실행될 수 있다. 일부 실시예들에서, 로그 패치 루틴(177)은, 인에이블되면, 애플리케이션 전력 관리자(347)로 하여금, 부가적 데이터(334)의 일부로서 기록을 위해, 이미 계류중인 모든 애플리케이션 레벨 웨이크록들의 표시를 시스템 로그 생성기(344)에 제공하게 할 수 있다. 대안적으로 또는 부가적으로, 로그 디바이스 드라이버(171)는, 인에이블되면, 이미 계류중인 임의의 커널 레벨 웨이크록들에 관한 커널 전력 관리자의 정보를 요청할 수 있고, 이러한 정보를 보조 로그 데이터(331)에 기록할 수 있다. 또한, 적어도 로그 패치 루틴(177)은, 애플리케이션 전력 관리자(347)로 하여금, 시스템 데이터(330)의 매핑 데이터의 적어도 일부를 검색하여, 부가적 데이터(334)의 일부로서 기록을 위해 시스템 로그 생성기(344)에 이를 제공하게 할 수 있다.
도 1로 돌아가서, 컴퓨팅 디바이스(300)는 네트워크(999)를 통해 및/또는 다른 메커니즘에 의해(예를 들어, 탈착가능 스토리지 매체의 사용을 통해) 서버(100)로부터 로그 패치 루틴(171) 및 로그 디바이스 드라이버(177)를 수신할 수 있다. 대안적으로, 그리고 구체적으로 도시되지는 않았지만, 컴퓨팅 디바이스(300)는, 존재하면, 디버깅 디바이스(500)로부터 로그 패치 루틴(171) 및 로그 디바이스 드라이버(177)를 수신할 수 있다. 또한, 로그 패치 루틴(171)이 애플리케이션 전력 관리자(347)와 함께 컴파일링될 수 있어서 이들이 통합될 수 있다면, 컴퓨팅 디바이스(300)는 로그 패치 루틴(171)이 그 안에 통합된 애플리케이션 전력 관리자(347)의 버전을 수신하는 것에 의해 로그 패치 루틴(171)을 수신할 수 있다.
다양한 실시예들에서, 디버깅 디바이스(500)는 (존재하면) 프로세서 컴포넌트(550), 스토리지(560), 제어부(520), 디스플레이(580), 및 디버깅 디바이스(500)를 네트워크(999)에 연결하는 인터페이스(590) 중 하나 이상을 포함한다. 스토리지(560)는 시스템 로그 데이터(337), 보조 로그 데이터(331), 정렬된 추적 데이터(534) 및 디버깅 루틴(570)을 저장한다. 디버깅 루틴(570)은 다양한 기능들을 수행하는 로직을 구현하기 위해 프로세서 컴포넌트(550)에서 동작하는 명령어들의 시퀀스를 원격 컴퓨팅 디바이스(500)의 메인 프로세서 컴포넌트로서의 자신의 역할에 포함한다.
디버깅 루틴(570)을 실행함에 있어서, 프로세서 컴포넌트(550)는 네트워크(999)를 통해 또는 다른 메커니즘을 통해(예를 들어, 탈착가능 스토리지 매체의 사용을 통해) 컴퓨팅 디바이스(300)로부터 시스템 로그 데이터(337) 및 보조 로그 데이터(331)를 수신한다. 프로세서 컴포넌트(550)는, 임의의 매핑 데이터와 마찬가지로, 웨이크록들과 관련되는 이벤트들 또는 다른 정보의 모든 표시들을 추출하기 위해 시스템 로그 데이터(337)(그 안의 부가적 데이터(334)를 포함함) 및 보조 로그 데이터(331)를 파싱한다. 프로세서 컴포넌트(550)는 또한 컴퓨팅 디바이스(300)의 다양한 컴포넌트들의 액티비티의 레벨들 또는 타입들에 관한 정보(예를 들어, 프로세서 컴포넌트(350)의 이용도 및/또는 클록 속도, 인터페이스(390)을 통한 데이터의 이동률, 스토리지 디바이스의 탈착가능 매체로부터의 데이터 검색률 등)을 추출할 수 있다. 프로세서 컴포넌트(550)는 웨이크록들에 관련되는 엔트리들에서의 식별 정보를 애플리케이션 루틴들(370) 및/또는 운영 체제(340)의 컴포넌트들 중 특정한 것들에 상관시키기 위해 시스템 로그 데이터(337) 또는 보조 로그 데이터(331)에 포함되는 임의의 매핑 데이터를 이용할 수 있다. 프로세서 컴포넌트(550)는 그리고 나서 이러한 이벤트들의 표시들을 전달하는 엔트리들을 그들의 타임 스탬프들에 의해 시간적으로 상관시키고, 정렬된 추적 데이터(534)로서 이들을 저장한다.
프로세서 컴포넌트(550)는 정렬된 추적 데이터(534)의 시간적으로 정렬된 엔트리들의 다양한 조합들을 후속하여 검색하고, 공통 시간 기간에 걸쳐서 발생하는 이벤트들의 타임라인들의 시간적으로 정렬된 그래프로서 이들을 디스플레이(580) 상에 가시적으로 제시한다. 프로세서 컴포넌트(550)는 시간적으로 정렬된 그래프들의 어떠한 조합들이 디스플레이되어야 하는지 및/또는 정렬된 추적 데이터(534)에 의해 커버되는 어떠한 시간 기간이 디스플레이되어야 하는지를 선택하기 위해 디버깅 디바이스(500)의 오퍼레이터에 의한 제어부(520)의 동작으로부터 입력을 수신하도록 제어부(520)를 모니터링할 수 있다.
도 4, 5 및 6 각각은 컴퓨팅 디바이스(300)의 동작 동안 시간에 걸쳐서 발생하는 웨이크록들의 사용과 관련되는 이벤트들의 시간적으로 정렬된 그래프들의 조합에 대해 디스플레이(580)에 가시적으로 제시될 수 있는 이미지(880)의 예시적인 실시예를 각각 도시한다. 도시된 바와 같이, 그리고 설명될 바와 같이, 이러한 시간적 정렬은 웨이크록들과 관련되는 이벤트들 사이에 가능한 인과 상관들(cause-and-effect correlations)을 식별하는데 도움이 되며, 이에 의해 웨이크록 버그들의 인스턴스들을 디버깅하는데 도움이 된다.
도 4는 웨이크록을 위한 요청에 응답하는 웨이크록의 인스턴스화 및/또는 그렇게 하라는 요청에 응답하는 웨이크록의 해제와 같은 웨이크록들에 관련되는 이벤트들의 타임라인을 각각 제시하는 다양한 웨이크록 그래프들(881, 884 및 887)의 가시적 제시를 도시한다. 상이한 애플리케이션 루틴(예를 들어, 애플리케이션 루틴들(370) 중 각각 하나)과 각각 관련되는 2개의 애플리케이션 레벨 웨이크록들 및 애플리케이션 전력 관리자(347)와 관련되는 커널 레벨 웨이크록을 포함하는, 시간 기간에 걸친 3개의 상이한 웨이크록들의 인스턴스화 및 해제의 3개의 시간적으로 정렬된 웨이크록 그래프들(887)이 구체적으로 도시된다. 웨이크록 그래프(881)가 3개의 웨이크록 그래프들(887)과 시간적으로 정렬되도록 동일 시간 기간에 걸친 디바이스 드라이버(예를 들어, 디바이스 드라이버들(310) 중 하나)와 관련되는 커널 레벨 웨이크록의 인스턴스화 및 해제의 웨이크록 그래프(881)가 또한 도시된다. 웨이크록 그래프(884)가 웨이크록 그래프들(887 및 881)과 시간적으로 정렬되도록 동일 시간 기간에 걸친 운영 체제의 커널 레벨 컴포넌트와 관련되는 커널 레벨 웨이크록의 인스턴스화 및 해제의 웨이크록 그래프(884)가 또한 도시된다. 액티비티 그래프들이 상술된 웨이크록 그래프들과 시간적으로 정렬되도록 동일 시간 기간에 걸친 프로세서 컴포넌트(350), 인터페이스(390) 및 탈착가능 매체 스토리지 디바이스(예를 들어, 선행 도면들 중 임의의 것에도 구체적으로 도시되지 않은, 디스크 매체 판독기)의 액티비티 레벨들의 타임라인들의 3개의 액티비티 그래프들(885)이 또한 도시된다. 전력 상태 그래프(883)가 상술된 웨이크록 그래프들과 시간적으로 정렬되도록 동일 시간 기간에 걸친 전력 상태들 중에서의 컴퓨팅 디바이스(300)의 천이들의 타임라인의 전력 상태 그래프(883)가 또한 더욱 도시된다.
3개의 웨이크록 그래프들(887)의 시간적 정렬은 2개의 애플리케이션 레벨 웨이크록들의 인스턴스화 및 해제가 애플리케이션 전력 관리자(347)와 관련되는 2개의 애플리케이션 레벨 웨이크록들의 종합을 나타내는 커널 레벨 웨이크록의 인스턴스화 및 해제를 가져오는 인과 관계를 가시적으로 보여 준다. 보다 구체적으로, 2개의 애플리케이션 레벨 웨이크록들 중 어느 하나가 계류중인 동안, 커널 레벨 웨이크록은 계류 상태를 유지한다는 점을 알 수 있다. 또한, 인터페이스(390)에 대한 액티비티 그래프들(885) 중 하나(예를 들어, "네트워크 액티비티"의 액티비티 그래프(885))와의 웨이크록 그래프(881)의 시간적 정렬은 디바이스 드라이버의 커널 레벨 웨이크록과 인터페이스(390)의 액티비티 사이에 존재하는 관계성의 가시적 힌트를 제공한다. 컴퓨팅 디바이스(300)의 3개의 특정 컴포넌트들의 액티비티의 도시에도 불구하고, 다른 컴포넌트들에 대한 및/또는 더 많거나 또는 더 적은 컴포넌트들에 대한 액티비티가 포함될 수 있다는 점이 주목되어야 한다. 또한, 액티비티가 그에 대해 보여질 수 있는 컴포넌트들은 단일(또는 소수의) 반도체 디바이스들(예를 들어, "시스템-온-칩" 또는 SOC)의 회로의 물리적으로 별개인 컴포넌트들 및/또는 기능 블록들일 수 있다. 알 수 있는 바와 같이, 네트워크 액티비티의 일부 양이 시작되었고 그리고 나서 인터페이스(390)와 관련되는 디바이스 드라이버에 의해 웨이크록이 필요했다는 것이 명백히 결정되었으며, 그래서 디바이스 드라이버로 하여금 하나를 요청하게 한다. 그리고 나서, 일단 네트워크 액티비티가 중단되면, 그 커널 레벨 웨이크록은 디바이스 드라이버에 의해 해제되었다. 또한, 웨이크록 그래프들(881, 884 및 887)와의 전력 상태 그래프(883)의 시간적 정렬은 웨이크록들의 계류 상태와 컴퓨팅 디바이스의 전력 상태들 사이의 인과 관계를 가시적으로 보여 준다. 구체적으로, 계류중인 웨이크록들이 존재하지 않을 경우, 컴퓨팅 디바이스(300)는 (전력 상태 그래프(883)에 대각선 교차 음영으로 표시되는) 저 전력 상태에 진입하는 것이 허용되고, 적어도 하나의 웨이크록 계류가 존재하는 경우, 컴퓨팅 디바이스(300)는 (전력 상태 그래프(883)에 사각형 교차 음영으로 표시되는) 고 전력 상태에 강제로 남게 된다.
도 5는 탈착가능 스토리지 매체 디바이스와 관련되는 단일 액티비티 그래프(885)(예를 들어, "디스크 판독기"의 액티비티 그래프)와 시간적으로 정렬되는 애플리케이션 루틴과 관련되는 애플리케이션 레벨 웨이크록의 단일 웨이크록 그래프(887)의 가시적 제시의 더 단순한 예를 도시한다. 이러한 2개의 그래프들의 시간적 정렬은, 디스크 판독기의 측에서의 액티비티의 시작과, 디스크 판독기의 액티비티가 저 전력 상태로의 가능한 천이로 인한 중단없이 계속되게 허용하는 웨이크록을 요청하는 웨이크록 그래프(887)에 마킹되는 호출 사이의 인과 관계가 보여질 수 있게 한다. 그러나, 이러한 2개의 그래프들의 시간적 정렬은 또한 일단 디스크 판독기의 액티비티가 보여지기를 중단했다면 호출의 결핍이 웨이크록을 해제할 수 있게 한다. 통상의 기술자들에게 친숙한 바와 같이, 이것은, 명령어들의 시퀀스에서의 에러가, 요청되기는 했지만, 결코 해제되지 않는 웨이크록을 초래하는, 웨이크록 버그의 "비 휴면 코드 버그(no sleep code bug)" 버전의 표시를 제공할 수 있다. 명령어들의 시퀀스는 웨이크록을 해제하는데 필요한 호출이 결핍될 수 있거나, 또는 명령어들의 시퀀스의 로직은 결코 실행되지 않는 웨이크록의 해제를 호출하는 명령어들을 초래하는 방식으로 결함이 있을 수 있다.
도 6은 애플리케이션 루틴(예를 들어, 애플리케이션 루틴들(370) 중 하나)과 관련되는 단일 애플리케이션 레벨 웨이크록과 관련되는 이벤트들의 3개의 시간적으로 정렬된 웨이크록 그래프들(887)의 가시적 제시의 더 단순한 예를 도시한다. 이러한 웨이크록 그래프들(887) 중 2개는 웨이크록을 요청하고 이를 해제하기 위해 동일한 애플리케이션 루틴과 관련되는 2개의 분리된 스레드들에 의해 이루어지는 호출들을 가시적으로 도시한다. 이러한 2개의 웨이크록 그래프들(887)의 시간적 정렬은, 2개의 스레드들 사이의 명령어들의 실행의 타이밍이, 웨이크록을 해제하기 위한 호출 이후 발생하는 웨이크록을 요청하기 위한 호출을 초래한, 웨이크록 버그의 가능한 "비 휴면 레이스 조건(no sleep race condition)" 버전을 쉽게 볼 수 있게 한다. 이러한 웨이크록 그래프들(887)의 세번째와의 이러한 2개의 웨이크록 그래프들(887)의 시간적 정렬은, 2개의 호출들이 이루어진 순서와, 그 결과인 요청된 웨이크록의 인스턴스화 및 후속 해제의 결핍의 인과 관계를 또한 도시한다.
도 2는 컴퓨팅 디바이스(300)의 대안적 실시예를 포함하는 웨이크록 디버깅 시스템(1000)의 대안적 실시예의 블록도를 도시한다. 도 2의 웨이크록 디버깅 시스템(1000)의 대안적 실시예는 여러 가지 면에서 도 1의 실시예와 유사하고, 따라서, 전반적으로 유사한 참조 번호들이 유사한 컴포넌트들을 지칭하는데 사용된다. 그러나, 도 1의 컴퓨팅 디바이스(300)와는 달리, 도 2의 컴퓨팅 디바이스(300)는 도 1의 디버깅 디바이스(500)의 특징들을 부가적으로 포함한다. 따라서, 그렇게 하기 위해 분리되고 개별인 디버깅 디바이스(500)가 존재하는 대신에 시간이 지나면서 발생하는 웨이크록들의 사용과 관련되는 이벤트들의 시간적으로 정렬된 타임라인 그래프들을, 파싱하고, 시간적으로 정렬하며, 가시적으로 제공하는 것은 도 2의 컴퓨팅 디바이스(300)의 프로세서 컴포넌트(350)이다. 그렇게 하기 위해 분리되고 개별인 디버깅 디바이스(500)의 제어부(520) 및 디스플레이(580)가 존재하는 대신에 이러한 가시적 제시를 제공하고 제어하는데 사용되는 것 또한 도 2의 컴퓨팅 디바이스(300)의 디스플레이(380) 및 제어부(320)이다.
다양한 실시예들에서, 프로세서 컴포넌트들(350 및 550) 각각은 매우 다양한 상업적으로 이용가능한 프로세서들 중 임의의 것을 포함할 수 있다. 또한, 이러한 프로세서 컴포넌트들 중 하나 이상은, 다수의 프로세서들, 멀티-스레드형 프로세서, (다수의 코어들이 동일한 다이들에 존재하든 또는 별개의 다이들에 존재하든) 멀티-코어 프로세서, 및/또는 다수의 물리적으로 분리된 프로세서들이 일부 방식으로 링크되는 일부 다른 종류의 멀티-프로세서 아키텍처를 포함할 수 있다.
다양한 실시예에서, 스토리지들(360 및 560) 각각은, 전력의 중단되지 않는 제공을 요구하는 휘발성 기술들을 아마도 포함하고, 탈착가능할 수 있거나 또는 그렇지 않은 머신-판독가능 스토리지 매체의 사용을 수반하는 기술을 아마도 포함하는, 다양한 정보 스토리지 기술들 중 임의의 것에 기초할 수 있다. 따라서, 이러한 스토리지들 각각은, ROM(read-only memory), RAM(random-access memory), DRAM(dynamic RAM), DDR-DRAM(Double-Data-Rate DRAM), SDRAM(synchronous DRAM), SRAM(static RAM), PROM(programmable ROM), EPROM(erasable programmable ROM), EEPROM(electrically erasable programmable ROM), 플래시 메모리, 폴리머 메모리(예를 들어, 강유전성 폴리머 메모리), 오보닉 메모리, 상 변화 또는 강유전성 메모리, SONOS(silicon-oxide-nitride-oxide-silicon) 메모리, 자기 또는 광학 카드들, 하나 이상의 개별 강자성 디스크 드라이브, 또는 하나 이상의 어레이들 내에 조직화되는 복수의 스토리지 디바이스들(예를 들어, RAID(Redundant Array of Independent Disks) 어레이 내에 조직화되는 다수의 강자성 디스크 드라이브들)을 포함하지만 이에 한정되지 않는 스토리지 디바이스의 다양한 타입들(타입들의 조합) 중 임의의 것을 포함할 수 있다. 이러한 스토리지들 각각은 단일의 블록으로서 도시되지만, 이들 중 하나 이상은 상이한 스토리지 기술들에 기초할 수 있는 다수의 스토리지 디바이스들을 포함할 수 있다는 점이 주목되어야 한다. 따라서, 예를 들어, 이러한 도시된 스토리지들 각각 중 하나 이상은, 프로그램들 및/또는 데이터가 일부 형태의 머신-판독가능 스토리지 매체 상에서 저장 및 전달될 수 있는 광학 드라이브 또는 플래시 메모리 카드 판독기, 상대적으로 연장된 주기 동안 국지적으로 프로그램들 및/또는 데이터를 저장하는 강자성 디스크 드라이브, 및 프로그램들 및/또는 데이터로의 상대적으로 신속한 액세스를 가능하게 하는 하나 이상의 휘발성 솔리드 스테이트 메모리 디바이스들(예를 들어, SRAM 또는 DRAM)의 조합을 나타낼 수 있다. 이러한 스토리지들 각각은, 동일한 스토리지 기술에 기초하지만, 사용 전문화의 결과로서 별개로 유지될 수 있는(예를 들어, 일부 DRAM 디바이스들은 메인 스토리지로서 이용되는 반면 다른 DRAM 디바이스들은 그래픽 제어기의 별개의 프레임 버퍼로서 이용됨), 다수의 스토리지 컴포넌트들로 구성될 수 있다는 점이 또한 주목되어야 한다.
다양한 실시예들에서, 인터페이스들(390 및 590) 각각은 컴퓨팅 디바이스들이 설명된 바와 같이 다른 디바이스들에 연결될 수 있게 하는 다양한 시그널링 기술들 중 임의의 것을 이용할 수 있다. 이러한 인터페이스들 각각은 이러한 연결을 가능하게 하는데 필요한 기능성의 적어도 일부를 제공하는 회로를 포함할 수 있다. 그러나, 이러한 인터페이스들 각각은 또한 (예를 들어, 프로토콜 스택 또는 다른 특징들을 구현하기 위한) 프로세서 컴포넌트들의 대응하는 것들에 의해 실행되는 명령어들의 시퀀스들로 적어도 일부 구현될 수 있다. 전기적으로 및/또는 광학적으로 도전성인 케이블링이 이용되는 경우, 이러한 인터페이스들은 RS-232C, RS-422, USB, 이더넷(IEEE 802.3) 또는 IEEE 1394를 포함하지만 이에 한정되지 않는 다양한 산업 표준들 중 임의의 것을 따르는 시그널링 및/또는 프로토콜들을 이용할 수 있다. 무선 신호 송신의 사용이 수반되는 경우, 이러한 인터페이스들은, IEEE 802.11a, 802.11b, 802.11g, 802.16, 802.20(일반적으로 "Mobile Broadband Wireless Access"라 함); Bluetooth; ZigBee; 또는 GSM/GPRS(GSM with General Packet Radio Service), CDMA/1xRTT, EDGE(Enhanced Data Rates for Global Evolution), EV-DO(Evolution Data Only/Optimized), EV-DV(Evolution For Data and Voice), HSDPA(High Speed Downlink Packet Access), HSUPA(High Speed Uplink Packet Access), 4G LTE 등과 같은 셀룰러 무선 전화 서비스를 포함하지만 이에 한정되지 않는 다양한 산업 표준들 중 임의의 것에 따르는 시그널링 및/또는 프로토콜들을 이용할 수 있다.
도 7, 8 및 9 각각은 도 1 또는 도 2의 이종 코어 처리 시스템(1000)의 일 실시예의 일부의 블록도를 보다 상세히 도시한다. 보다 구체적으로, 도 7은, 운영 체제(340) 및 로그 패치 루틴(177)을 실행함에 있어서, 프로세서 컴포넌트(350)가 애플리케이션 레벨 웨이크록들과 관련되는 이벤트들을 개선된 특수함으로 시스템 로그 데이터(337)에 기록하는, 컴퓨팅 디바이스(300)의 동작 환경의 양상들을 도시한다. 도 8은, 운영 체제(340) 및 로그 디바이스 드라이버(171)를 실행함에 있어서, 프로세서 컴포넌트(350)가 커널 레벨 웨이크록들과 관련되는 이벤트들을 보조 로그 데이터(331)에 기록하는, 컴퓨팅 디바이스(300)의 동작 환경의 양상들을 도시한다. 도 9는, 디버깅 루틴(570)을 실행함에 있어서, 프로세서 컴포넌트(350 또는 550)이, 각각, 웨이크록들을 디버깅하는데 도움이 되도록 이벤트들의 시간적으로 정렬된 타임라인 그래프들을 가시적으로 제공하기 위해 시스템 로그 데이터(337) 및 보조 로그 데이터(334)를 이용하는, 컴퓨팅 디바이스(300) 또는 디버깅 디바이스(500)의 동작 환경의 양상들을 도시한다.
통상의 기술자들에게 인식될 수 있는 바와 같이, 각각이 그로 구성되는 컴포넌트들을 포함하는, 운영 체제(340), 로그 패치 루틴(177), 로그 디바이스 드라이버(171) 및 디버깅 루틴(570)은, 프로세서 컴포넌트들(350 또는 550) 중 적용가능한 것들을 구현하도록 선택되는 어떠한 타입의 프로세서 또는 프로세서들 상에서 동작가능하게 되도록 선택된다. 다양한 실시예들에서, 각각을 구성하는 명령어들의 시퀀스들은, 운영 체제, 디바이스 드라이버들 및/또는 애플리케이션 레벨 루틴들(예를 들어, 디스크 매체 상에 제공되는 소위 "소프트웨어 묶음들(software suites)", 원격 서버로부터 획득되는 "애플릿들(applets)" 등) 중 하나 이상을 포함할 수 있다. 운영 체제가 포함되는 경우, 이러한 운영 체제는 프로세서 컴포넌트들(350 또는 550) 중 대응하는 것들 어느 것에 대해서도 적절한 다양한 이용가능한 운영 체제들 중 임의의 것일 수 있다. 하나 이상의 디바이스 드라이버들이 포함되는 경우, 이러한 디바이스 드라이버들은, 컴퓨팅 디바이스들(300 및 500) 중 대응하는 것들의, 하드웨어 컴포넌트들이든 또는 소프트웨어 컴포넌트든이든, 다양한 다른 컴포넌트들 중 임의의 것에 대한 지원을 제공할 수 있다.
운영 체제(340) 및 디버깅 루틴(540) 각각은, 설명된 바와 같이 네트워크(999)를 통해 신호들을 송신 및 수신하기 위해, 각각, 인터페이스(390 또는 590)를 동작시키도록 프로세서 컴포넌트(350 또는 550)에 의해 실행될 수 있는 통신 컴포넌트(349 또는 549)를 포함할 수 있다. 교환되는 신호들 중에는 로그 패치 루틴(177) 및/또는 로그 디바이스 드라이버(171)를 서버(100) 또는 디버깅 디바이스(500)로부터 컴퓨팅 디바이스(300)에 전달하는 신호들이 존재할 수 있다. 대안적으로 또는 부가적으로, 교환되는 신호들 중에는 시스템 로그 데이터(337) 및 보조 로그 데이터(331)를 컴퓨팅 디바이스(300)로부터 디버깅 디바이스(500)에 전달하는 신호들이 존재할 수 있다. 통상의 기술자에 의해 이해되는 바와 같이, 이러한 통신 컴포넌트들은 인터페이스들(390 및 590) 중 대응하는 것들을 구현하도록 선택되는 어떠한 타입의 인터페이스 기술과도 동작할 수 있도록 선택된다.
도 7로 보다 구체적으로 돌아가서, 로그 패치 루틴(177)은 웨이크록들을 요청하거나 또는 해제하기 위한 애플리케이션 루틴들(370)로부터의 인입 호출들을 인터셉트하도록 프로세서 컴포넌트(350)에 의해 실행가능한 캡처 컴포넌트(1777)를 포함할 수 있다. 캡처 컴포넌트(1777)는, 애플리케이션 루틴들(370) 중 어느 것이 호출을 송신하였는지의 식별 정보, 애플리케이션 루틴(370) 중 하나의 어느 프로세서가 호출을 송신하였는지의 식별 정보, 또는 웨이크록이 적용될 컴퓨팅 디바이스(300)의 하나 이상의 특정 컴포넌트들을 표시하는 하나 이상의 플래그들을 포함하지만 이에 제한되는 것은 아닌, 이러한 호출들에 전달되는 파라미터들 중 하나 이상을 캡처한다. 대안적으로 또는 부가적으로, 캡처 컴포넌트(1777)는 호출을 송신한 애플리케이션 루틴(370)의 부분이 그 상에서 프로세서 컴포넌트(350)에 의해 실행되는 스레드를 식별할 수 있다.
로그 패치 루틴(177)은 현재 계류중인 웨이크록들의 매핑 데이터 및/또는 웨이크록 데이터를 시스템 데이터(330)로부터 검색하기 위해 애플리케이션 전력 관리자(347)의 일부와 협력하도록 프로세서 컴포넌트(350)에 의해 실행될 수 있는 수집 컴포넌트(1773)를 포함할 수 있다. 앞서 논의된 바와 같이, 운영 체제(340)는 시스템 데이터(330)에서 그 정상 동작에 대해 요구되는 다양한 데이터를 유지하며, 시스템 데이터(330)는 그 콘텐츠의 손상을 방지하기 위해 액세스가 매우 제한되는 스토리지(360)의 일부에서 유지될 수 있다. 앞서 설명된 바와 같이, 매핑 데이터는, 프로세스들의 식별자들을, (적어도 운영 체제(340)가 멀티-스레드형 환경에서 실행되는 경우) 이러한 프로세스들이 실행되는 스레드들의 식별자들에 및 이러한 프로세스들의 적어도 일부가 일부인 애플리케이션 루틴들의 프로세스들의 식별자들에 상관시킨다. 또한 앞서 설명된 바와 같이, 웨이크록 데이터는 계류중인 애플리케이션 레벨의 각각을 애플리케이션 루틴들(370) 중 하나에 관련시키는 식별자들에 상관되는 적어도 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 포함할 수 있다.
로그 패치 루틴(177)은 애플리케이션 레벨 웨이크록들을 요청하거나 또는 해제하기 위한 호출들의 수신의 표시들을 제공하도록 프로세서 컴포넌트(350)에 의해 실행될 수 있는 중계 컴포넌트(1774)를 포함할 수 있어서, 시스템 로그 데이터(337)에서의 부가적 데이터(334)의 부분으로서 기록되도록 현재 계류중인 웨이크록들의 매핑 데이터 및/또는 웨이크록 데이터를 시스템 로그 생성기(344)에 매핑한다. 일부 실시예들에서 시스템 로그 생성기(344)는 시스템 로그 데이터(337)를 생성하는데 있어서 자신이 생성하는 모든 엔트리들의 모든 타임스탬핑을 제공할 수 있을지라도, 중계 컴포넌트(1774)는 시스템 로그 생성기(344)에 전달되는 웨이크록들에 관계되는 이벤트들의 표시들을 타임스탬핑하는데 사용하기 위해 클록(351)으로부터 보다 직접적으로 현재 시간의 표시들을 대안적으로 또는 부가적으로 수신할 수 있다.
도 8로 보다 구체적으로 돌아가서, 로그 디바이스 드라이버(171)는, 커널 전력 관리자(341)에게 이루어지는 커널 레벨 웨이크록들을 요청하거나 또는 해제하기 위한 모든 호출들이 로그 디바이스 드라이버(171)에 중계되도록 처리하기 위해 커널 전력 관리자(341)에 의해 제공되는 DPI의 재호출 메커니즘의 사용을 요청하기 위한 호출에 의해 커널 전력 관리자(341)에게 신호를 보내는 프로세서 컴포넌트(350)에 의해 실행될 수 있는 호출 컴포넌트(1713)를 포함할 수 있다. 이것은 디바이스 드라이버들(310), 애플리케이션 전력 관리자(347), 및 운영 체제(340)의 다른 컴포넌트들 중 하나 이상에 의해 행해지는 커널 레벨 웨이크록들에 대한 호출들을 포함할 것이다. 일부 실시예들에서, 호출 컴포넌트(1713)는 또한, 디바이스 드라이버(310) 중 어느 것(들) 및/또는 운영 체제(340)의 어느 컴포넌트들이 이들을 요청하였는지를 표시하는 식별 정보와 함께, 어떠한 커널 레벨 웨이크록들이 이미 계류중인지의 표시들을 요청하기 위한 호출에 의해, 커널 전력 관리자(341)에 신호를 보낼 수 있다. 이것은, 어떠한 디바이스 드라이버 또는 운영 체제 컴포넌트가 이들과 관련되더라도(예를 들어, 어떠한 디바이스 드라이버 또는 운영 체제 컴포넌트가 이들을 요청하였더라도) 이에 상관되는 계류중인 커널 레벨 웨이크록들의 표시들을 포함하는 시스템 데이터(330)의 부분으로서 유지되는 웨이크록 데이터의 적어도 일부를 커널 전력 관리자(341)가 검색하는 것을 초래할 수 있다.
로그 디바이스 드라이버(171)는, 커널 전력 관리자(341)가 커널 레벨 웨이크록들을 요청하거나 또는 해제하기 위해 수신하는 호출들의 표시들을 커널 전력 관리자(341)로부터 수신하도록 프로세서 컴포넌트(350)에 의해 실행될 수 있는 수신 컴포넌트(1711)를 포함할 수 있다. 앞서 논의된 바와 같이, 커널 전력 관리자(341)에 의한 이러한 표시들의 제공은 재호출 메커니즘을 소환하기 위해 호출 컴포넌트(1713)에 의해 커널 전력 관리자(341)에 행해지는 호출에 응답하는 것일 수 있다. 수신 컴포넌트(1711)는 또한 어떠한 커널 레벨 웨이크록들이 현재 계류중인지 및/또는 디바이스 드라이버들(310) 중 어느 것들 및/또는 운영 체제(340)의 어느 컴포넌트들이 이들을 요청하였는지에 대해 커널 전력 관리자(341)로부터 수신되는 표시들을 캡처할 수 있다.
로그 디바이스 드라이버(171)는 보조 로그 데이터(331)를 생성하도록 프로세서 컴포넌트(350)에 의해 실행될 수 있는 로깅 컴포넌트(1714)를 포함할 수 있다. 그렇게 함에 있어서, 로깅 컴포넌트(1714)는 커널 레벨 웨이크록들을 요청하거나 또는 해제하기 위한 호출들의 표시들 및/또는 현재 계류중인 웨이크록들의 웨이크록 데이터를 보조 로그 데이터(331)에 저장한다. 로깅 컴포넌트(1714)는, 커널 레벨 웨이크록들을 요청하거나 또는 해제하기 위한 호출들과 같은, 보조 로그 데이터(331)에 기록된 커널 레벨 웨이크록들에 관련되는 이벤트들의 표시들을 타임스탬프하는데 사용하기 위해 클록(351)으로부터 현재 시간의 표시들을 수신한다.
도 9로 보다 구체적으로 돌아가서, 디버깅 루틴(570)은, 컴퓨팅 디바이스(300)의 컴포넌트들의 액티비티의 양상들을 표시하는 엔트리들, 뿐만 아니라, 웨이크록들과 관련된 엔트리들을 추출하기 위해 시스템 로그 데이터(337) 및 보조 로그 데이터(331)의 엔트리들을 파싱하도록 프로세서 컴포넌트들(350 또는 550) 중 어느 하나에 의해 실행될 수 있는 상관 컴포넌트(574)를 포함할 수 있다. 상관 컴포넌트(574)는 추출된 엔트리들을 시간적으로 정렬시키고, 정렬된 추적 데이터(534)를 생성하기 위해 이들을 조합한다. 그렇게 함에 있어서, 상관 컴포넌트(574)는, 정렬된 추적 데이터(534)에서의 엔트리들을 더욱 상관시키기 위해 이들 사의의 관련성을 식별하여 사용하도록, 운영 체제(340)의 루틴들, 프로세스들, 스레드들, 컴포넌트들의 식별 정보를 애플리케이션 레벨 및/또는 커널 레벨 웨이크록들과 상관시키기 위해, 시스템 로그 데이터(337) 또는 보조 로그 데이터(331) 중 어느 하나에 포함되는 임의의 매핑 데이터를 또한 추출할 수 있다.
디버깅 루틴(570)은, 정렬된 추적 데이터(534)에 표시되는 웨이크록들, 컴퓨팅 디바이스(300)의 컴포넌트들의 액티비티, 및/또는 컴퓨팅 디바이스(300)의 전력 상태들 사이의 천이들과 관련되는 이벤트들의 시간적으로 정렬된 타임라인 그래프들의 이미지(880)를, 각각, 디스플레이(380 또는 580) 상에 가시적으로 제시하도록 프로세서 컴포넌트들(350 또는 550) 중 어느 하나에 의해 실행될 수 있는 제시 컴포넌트(578)를 포함할 수 있다. 논의된 바와 같이, 제시 컴포넌트(578)는, 웨이크록들, 어느 컴포넌트들의 액티비티 레벨들 등과 관련되는 다양한 이벤트들 중 어느 것들이 이미지(880)에 가시적으로 제시되어야 하는지를 선택하도록, 각각, 컴퓨팅 디바이스(300) 또는 디버깅 디바이스(500)의 오퍼레이터에 의해 제어부의 동작의 표시들을 수신하기 위해 제어부(320 또는 520)를 모니터할 수 있다. 대안적으로 또는 부가적으로, 제어부(320 또는 520)는, 정렬된 추적 데이터(534)에 의해 커버되는 시간 기간의 일부를 이미지(880)에 가시적으로 제시되어야 할 것으로 선택하도록 동작의 표시들을 수신하기 위해 모니터될 수 있다.
도 10은 로직 흐름(2100)의 일 실시예를 도시한다. 로직 흐름(2100)은 본 명세서에 설명되는 하나 이상의 실시예들에 의해 실행되는 동작들의 일부 또는 전부를 나타낼 수 있다. 보다 구체적으로, 로직 흐름(2100)은, 적어도 운영 체제(340) 및 로그 패치 루틴(177)을 실행함에 있어서 프로세서 컴포넌트(350)에 의해 수행되는, 및/또는 컴퓨팅 디바이스(300)의 다른 컴포넌트(들)에 의해 수행되는 동작들을 도시할 수 있다.
2110에서, 웨이크록 디버깅 시스템의 컴퓨팅 디바이스의 프로세서 컴포넌트(예를 들어, 웨이크록 디버깅 시스템(1000)의 컴퓨팅 디바이스(300)의 프로세서 컴포넌트(350))는 애플리케이션 전력 관리자의 명령어들의 시퀀스를 증강시키기 위한 명령어들의 시퀀스로 구성되는 패치 루틴(예를 들어, 운영 체제(340)의 애플리케이션 전력 관리자(347)를 증강하는 로그 패치 루틴(177))을 실행한다. 그렇게 함에 있어서, 패치 루틴의 기능성이 인에이블되는 때에 이미 계류중인 임의의 애플리케이션 레벨 웨이크록들의 표시들을 수집하기 위해 명령어들의 2개 시퀀스들 사이에 협력이 이루어진다. 논의된 바와 같이, 이것은 애플리케이션 전력 관리자가, 계류 웨이크록들을, 이들을 요청한 결과로서 이들과 관련되는 어떠한 애플리케이션 루틴이든 간에 이 루틴의 식별자들에 상관시키는 데이터 구조의 엔트리들을 검색하기 위해 운영 체제에 의해 유지되는 데이터 구조(예를 들어, 시스템 데이터(330)의 부분으로서 유지되는 웨이크록 데이터)에 액세스하는 것을 수반할 수 있다. 이러한 데이터 구조의 이러한 엔트리들은 또한 그 웨이크록들 중 어느 것이 계류중인지의 표시들을 유지할 수 있거나, 또는 계류중인 웨이크록들에 대한 엔트리들만을 포함할 수 있다.
2120에서, 패치 루틴이 인에이블될 때에 이미 계류중인 임의의 웨이크록들의 표시들은 운영 체제의 시스템 로그 생성기(예를 들어, 운영 체제(340)의 시스템 로그 생성기(344))에 의해 생성되는 시스템 로그 데이터에 기록된다. 앞서 논의된 바와 같이, 애플리케이션 전력 관리자는, 얼마나 많은 웨이크록들이 계류중인지 또는 어느 애플리케이션 루틴들과 이들이 관련되는지의 표시는 없이, 계류중인 웨이크록이 존재한다는 매우 제한된 표시만을 제공하기 위해 시스템 로그 생성기와 이미 정상적으로 통신하고 있다.
2130에서, 프로세서 컴포넌트에 의해 실행되는 프로세스들 및/또는 스레드들에 애플리케이션 루틴들을 매핑하는 매핑 정보를 수집하기 위해 패치 루틴과 애플리케이션 전력 관리자 사이에 추가적 협력이 초래된다. 논의된 바와 같이, 이것은 애플리케이션 전력 관리자가, 이러한 상관들의 표시들을 제공하는 매핑 데이터의 엔트리들을 검색하기 위해 운영 체제에 의해 유지되는 다른 데이터 구조(예를 들어, 시스템 데이터(330)의 부분으로서 유지되는 매핑 데이터)에 액세스하는 것을 수반할 수 있다. 2140에서, 수집되는 임의의 매핑 정보의 표시들은 시스템 로그 데이터에 기록된다.
2150에서, 웨이크록들을 요청하거나 또는 해제하기 위해 애플리케이션 전력 관리자에 의해 수신되는 호출들이 인터셉트된다. 앞서 논의된 바와 같이, 이러한 호출들을 인터셉트함에 있어서, 패치 루틴은, 호출을 이를 요청한 애플리케이션 루틴과 연관시키는 식별 정보, 웨이크록이 적용되는 컴퓨팅 디바이스의 특정 컴포넌트들을 표시하는 하나 이상의 플래그들, 및/또는 파라미터로서 포함될 수 있는 디버그 정보를 포함할 수 있는, 이러한 호출들에서 전달되는 파라미터들을 수신한다.
2160에서, 인터셉트된 호출들의 표시들을 시스템 데이터 생성기에 제공하는데 애플리케이션 전력 관리자와 시스템 데이터 생성기 사이의 통신을 이용하기 위해 패치 루틴과 애플리케이션 전력 관리자 사이에 더 많은 협력이 초래된다. 앞서 논의된 바와 같이, 이것은, 시스템 데이터 생성기가, 파라미터 정보를 포함하는, 이러한 인터셉트된 호출들에 대한 시스템 로그 데이터에 엔트리들을 생성하는 것을 초래한다.
도 11은 로직 흐름(2200)의 일 실시예를 도시한다. 로직 흐름(2200)은 본 명세서에 설명되는 하나 이상의 실시예들에 의해 실행되는 동작들의 일부 또는 전부를 나타낼 수 있다. 보다 구체적으로, 로직 흐름(2200)은, 적어도 제어 루틴(340) 및 로그 디바이스 드라이버(171)를 실행함에 있어서 프로세서 컴포넌트(350)에 의해 수행되는, 및/또는 컴퓨팅 디바이스(300)의 다른 컴포넌트(들)에 의해 수행되는 동작들을 도시할 수 있다.
2210에서, 웨이크록 디버깅 시스템의 컴퓨팅 디바이스의 프로세서 컴포넌트(예를 들어, 웨이크록 디버깅 시스템(1000)의 컴퓨팅 디바이스(300)의 프로세서 컴포넌트(350))는 커널 전력 관리자에 연결되는 로그 디바이스 드라이버(예를 들어, 운영 체제(340)의 커널 전력 관리자(341)과 통신하는 로그 디바이스 드라이버(171))를 실행한다. 그렇게 함에 있어서, 프로세서 컴포넌트는 로그 디바이스 드라이버의 기능성이 인에이블될 때에 이미 계류중인 임의의 커널 레벨 웨이크록들의 표시들을 제공하는 요청으로 커널 전력 관리자에 신호를 보낸다. 논의된 바와 같이, 이것은, 커널 전력 관리자가, 계류 웨이크록들을, 이들을 요청한 결과로서 이들과 관련되는 어떠한 디바이스 드라이버들 또는 운영 제제 컴포넌트이든 간에 이들의 식별자들에 상관시키는 데이터 구조의 엔트리들을 검색하기 위해 운영 체제에 의해 유지되는 데이터 구조(예를 들어, 시스템 데이터(330)의 부분으로서 유지되는 웨이크록 데이터)에 액세스하는 것을 수반할 수 있다. 이러한 데이터 구조의 이러한 엔트리들은 또한 그 웨이크록들 중 어느 것이 계류중인지의 표시들을 유지할 수 있거나, 또는 계류중인 웨이크록들에 대한 엔트리들만을 포함할 수 있다. 2220에서, 로그 디바이스 드라이버가 인에이블될 때에 이미 계류중인 임의의 커널 웨이크록들의 표시들은 로그 디바이스 드라이버에 의해 생성되는 보조 로그 데이터에 기록된다.
2230에서, 프로세서 컴포넌트는, 커널 레벨 웨이크록들을 요청하거나 또는 해제하기 위해 커널 전력 관리자에 의해 수신되는 모든 호출들이 로그 디바이스 드라이버에 중계될 것을 요청하는 DPI(driver programming interface)를 통한 호출에 의해 커널 전력 관리자에 신호를 보내도록 로그 디바이스 드라이버에 의해 야기된다. 앞서 논의된 바와 같이, 커널 전력 관리자로의 이러한 호출은, 웨이크록들에 관한 호출들이 그에 의해 하나 이상의 디바이스 드라이버들에게 되돌려 반영되는 DPI에 의해 제공되는 재호출 메커니즘을 소환하는 호출일 수 있다. 2240에서, 로그 디바이스 드라이버는 커널 전력 관리자에 의해 로그 디바이스 드라이버에 되돌려 반영되는 커널 웨이크록들을 요청 및 해제하기 위한 호출들 각각에 대한 보조 로그 데이터에서의 엔트리들을 생성한다. 다시, 호출들의 이러한 재반영은 재호출 메커니즘을 소환하는 더 이른 호출에 응답하는 것일 수 있다.
도 12는 로직 흐름(2300)의 일 실시예를 도시한다. 로직 흐름(2300)은 본 명세서에 설명되는 하나 이상의 실시예들에 의해 실행되는 동작들의 일부 또는 전부를 나타낼 수 있다. 보다 구체적으로, 로직 흐름(2300)은, 각각, 적어도 디버깅 루틴(570)을 실행함에 있어서 프로세서 컴포넌트(350 또는 550)에 의해 수행되는, 및/또는 컴퓨팅 디바이스(300) 또는 디버깅 디바이스(500)의 다른 컴포넌트(들)에 의해 수행되는, 동작들을 도시할 수 있다.
2310에서, 컴퓨팅 디바이스 또는 디버깅 디바이스의 프로세서 컴포넌트(예를 들어, 웨이크록 디버깅 시스템(1000)의 컴퓨팅 디바이스(300) 또는 디버깅 디바이스(500)의 프로세서 컴포넌트(350 또는 550))는 컴퓨팅 디바이스의 동작 동안 생성되는 시스템 로그 데이터 및 보조 로그 데이터로부터 웨이크록들 및 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들과 관련되는 엔트리들을 추출한다. 논의된 바와 같이, 추출된 엔트리들은, 웨이크록들을 요청 및/또는 해제하기 위한 호출들의 표시들, 컴퓨팅 디바이스의 하나 이상의 컴포넌트들의 액티비티의 레벨들의 표시들, 컴퓨팅 디바이스의 전력 상태들 사이의 천이들의 표시들 등을 포함할 수 있다. 2320에서, 추출된 엔트리들은 정렬된 추적 데이터(예를 들어, 시스템 로그 데이터(337) 및 보조 로그 데이터(331)로부터 추출되는 엔트리들로부터 생성되는 정렬된 추적 데이터(534))를 생성하기 위해 시간적으로 정렬된다.
2330에서, 시스템 로그 데이터 및 보조 로그 데이터 중 하나 또는 다른 하나에 포함되는 임의의 매핑 데이터가 또한 추출된다. 2340에, 이러한 추출된 매핑 데이터는, 웨이크록을 프로세스, 스레드, 디바이스 드라이버, 컴퓨팅 디바이스의 운영 체제의 컴포넌트 또는 애플리케이션 루틴에 상관시키기 위해, 추출된 엔트리들로부터 식별정보를 상관시키는데 이용된다.
2350에서, 정렬된 추적 데이터의 엔트리들은 웨이크록 이벤트들, 컴포넌트들의 액티비티 레벨들에서 변화들, 컴퓨팅 디바이스의 전력 상태에서의 변화들 등의 의 타임라인들을 생성하는데 사용된다. 또한, 이러한 타임라인들은 그리고 나서 이들이 컴퓨팅 디바이스의 동작에서 공통 시간 기간에 시간적으로 정렬되는 방식으로 디스플레이에 가시적으로 제시된다. 2360에서, 제어부는 어느 타임라인들을 디스플레이할지 선택하는 및/또는 정렬된 추적 데이터의 엔티리들에 의해 커버되는 시간의 어느 부분을 디스플레이할지를 선택하는 커맨드들을 전달하도록 이러한 제어부들의 동작의 표시들을 수신하기 위해 모니터될 수 있고, 시간적으로 정렬된 타임라인들의 가시적 제시는 이에 따라 변경될 수 있다.
도 13은 앞서 설명된 바와 같은 다양한 실시예들을 구현하는데 적합한 처리 아키텍처(3000)의 일 실시예를 도시한다. 보다 구체적으로, 처리 아키텍처(3000)(또는 그 변형물들)는 컴퓨팅 디바이스들(100, 300 또는 500) 중 하나 이상의 부분으로서 구현될 수 있다. 처리 아키텍처(3000)의 컴포넌트들에는 참조 번호들이 부여되고, 이 참조 번호들에서 마지막 2개 자릿수는 이들 컴퓨팅 디바이스들의 부분으로서 앞서 도시되고 설명된 컴포넌트들의 적어도 일부의 참조 번호들의 마지막 2개 자릿수에 대응한다는 점이 주목되어야 한다. 이것은 각각의 컴포넌트들을 상관하는데 도움이 되는 것으로서 행해진다.
처리 아키텍처(3000)는, 이에 제한되는 것은 아니지만, 하나 이상의 프로세서들, 멀티-코어 프로세서들, 코-프로세서들, 메모리 유닛들, 칩셋들, 제어기들, 주변기기들, 인터페이스들, 발진기들, 타이밍 디바이스들, 비디오 카드들, 오디오 카드들, 멀티미디어 I/O(input/output) 컴포넌트들, 전원들 등을 포함하는, 디지털 처리에 보통 이용되는 다양한 엘리먼트들을 포함할 수 있다. 본 출원에 사용되는 바와 같이, "시스템" 및 "컴포넌트"라는 용어들은, 디지털 처리가 수행되는 컴퓨팅 디바이스의 엔티티를 지칭하려는 의도이며, 그러한 엔티티는, 그 예들이 본 도시된 예시적인 프로세스 아키텍처에 의해 제공되는, 하드웨어, 하드웨어와 소프트웨어의 조합, 소프트웨어, 또는 실행중인 소프트웨어이다. 예를 들어, 컴포넌트는, 이에 제한되는 것은 아니지만, 프로세서 컴포넌트 상에서 실행되는 프로세스, 프로세서 컴포넌트 자체, 광 및/또는 자기 스토리지 매체를 이용할 수 있는 스토리지 디바이스(예를 들어, 하드 디스크 드라이브, 어레이 내의 다수의 스토리지 디바이스들 등), 소프트웨어 오브젝트, 명령어들의 실행 가능 시퀀스, 실행의 스레드, 프로그램, 및/또는 전체 컴퓨팅 디바이스(예를 들어, 전체 컴퓨터)일 수 있다. 예를 들면, 서버에 실행중인 애플리케이션 및 그 서버 양자 모두가 컴포넌트일 수 있다. 하나 이상의 컴포넌트들은 프로세스 및/또는 실행의 스레드 내에 존재할 수 있고, 컴포넌트는 하나의 컴퓨팅 디바이스에서 국지화(localize)될 수 있거나 및/또는 2개 이상의 컴퓨팅 디바이스 사이에 분산될 수 있다. 또한, 컴포넌트들은 동작들을 조율하기 위해 다양한 타입들의 통신 매체에 의해 서로 통신가능하게 연결될 수 있다. 이러한 조율은 정보의 단방향성 또는 양방향성 교환을 포함할 수 있다. 예를 들어, 컴포넌트들은 통신 미디어를 통해 통신되는 신호들의 형태로 정보를 통신할 수 있다. 이러한 정보는 하나 이상의 신호 라인들에 할당되는 신호들로서 구현될 수 있다. (커맨드, 상태, 어드레스 또는 데이터 메시지를 포함하는) 메시지가 이러한 신호들 중 하나일 수 있거나, 복수의 이러한 신호일 수 있으며, 임의의 다양한 접속들 및/또는 인터페이스들 중 임의의 것을 통해 직렬로 또는 실질적으로 병렬로 송신될 수 있다.
도시된 바와 같이, 처리 아키텍처(3000)를 구현함에 있어서, 컴퓨팅 디바이스는, 적어도 프로세서 컴포넌트(950), 스토리지(960), 하나 이상의 다른 디바이스들에 대한 인터페이스(990), 및 연결부(coupling)(959)를 포함할 수 있다. 설명되는 바와 같이, 프로세싱 아키텍처(3000)를 구현하는 컴퓨팅 디바이스의 다양한 양상들에 의존하여, 그 의도된 용도 및/또는 사용 조건들을 포함하여, 이러한 컴퓨팅 디바이스는, 이에 제한되는 것은 아니지만, 디스플레이 인터페이스(985), 또는 하나 이상의 처리 서브시스템들(900)과 같은, 부가적 컴포넌트들을 더 포함할 수 있다. 컴퓨팅 디바이스가 처리 아키텍처(3000)를 구현할 수 있는 어떠한 것에서든, 회로에 의해 구현되는 다양한 도시된 컴포넌트들의 것은, 단일의 또는 비교적 소수의 반도체 디바이스들(예를 들어, "시스템 온 칩" 또는 SOC) 내의 개별 컴포넌트들에 의해 및/또는 회로의 블록들로서 구현될 수 있다.
연결부(959)는, 하나 이상의 버스들, 포인트-대-포인트 인터커넥트들, 트랜시버들, 버퍼들, 크로스포인트 스위치들(crosspoint switches), 및/또는 적어도 프로세서 컴포넌트(950)를 스토리지(960)에 통신가능하게 연결하는 다른 도전체들 및/또는 로직을 포함할 수 있다. 연결부(959)는 프로세서 컴포넌트(950)를 인터페이스(990), 오디오 서브시스템(970) 및 디스플레이 인터페이스(985) 중 하나 이상에 (이들 및/또는 다른 컴포넌트들 중 어느 것이 또한 존재하는지에 따라) 더 연결할 수 있다. 프로세서 컴포넌트(950)가 연결부(959)에 의해 그렇게 연결되는 경우, 프로세서 컴포넌트(950)는 처리 아키텍처(3000)를 구현하는 상술된 컴퓨팅 디바이스들 중 임의의 것(들)에 대해, 위에서, 상세히 설명된 태스크들 중 다양한 것들을 수행할 수 있다. 연결부(959)는 신호들이 광학적으로 및/또는 전기적으로 전달되는 다양한 기술들 또는 기술들의 조합들 중 임의의 것에 의해 구현될 수 있다. 또한, 적어도 연결부(959)의 부분들은, 이에 제한되는 것은 아니지만, AGP(Accelerated Graphics Port), CardBus, E-ISA(Extended Industry Standard Architecture), MCA(Micro Channel Architecture), NuBus, PCI-X(Peripheral Component Interconnect (Extended)), PCI-E(PCI Express), PCMCIA(Personal Computer Memory Card International Association) 버스, HyperTransportTM, QuickPath 등을 포함하는, 광범위한 산업 표준들 중 임의의 것에 따르는 타이밍들 및/또는 프로토콜들을 이용할 수 있다.
앞서 논의된 바와 같이, 프로세서 컴포넌트(950)(프로세서 컴포넌트들(350 또는 550) 중 하나 이상에 대응함)는, 광범위한 기술들 중 임의의 것을 이용하고, 여러 방식들 중 임의의 것으로 물리적으로 조합되는 하나 이상의 코어들에 의해 구현되는, 광범위한 상업적으로 이용가능한 프로세서들 중 임의의 것을 포함할 수 있다.
앞서 논의된 바와 같이, 스토리지(960)(스토리지들(360 또는 560) 중 하나 이상에 대응함)는 광범위한 기술들 또는 기술들의 조합들 중 임의의 것에 기초하는 하나 이상의 개별 스토리지 디바이스들로 구성될 수 있다. 보다 구체적으로, 도시된 바와 같이, 스토리지(960)는, 휘발성 스토리지(961)(예를 들어, RAM 기술의 하나 이상의 형태들에 기초는 솔리드 스테이트 스토리지), 불휘발성 스토리지(962)(예를 들어, 그들의 콘텐츠를 유지하기 위해 전력의 지속적인 제공을 요구하지 않는 솔리드 스테이트, 강자성, 또는 다른 스토리지), 및 탈착가능 매체 스토리지(963)(예를 들어, 컴퓨팅 디바이스들 사이에서 정보가 전달될 수 있는 탈착가능 디스크 또는 솔리드 스테이트 메모리 카드 스토리지) 중 하나 이상을 포함할 수 있다. 이와 같이 스토리지(960)가 아마도 다수의 별개 타입들의 스토리지를 포함하는 것으로 도시되는 것은, 하나의 타입은 비교적 신속한 판독 및 기입 능력들을 제공하여 프로세서 컴포넌트(950)에 의한 데이터의 보다 신속한 조작을 가능케 하는(그러나 아마도 지속적으로 전력을 요구하는 "휘발성" 기술을 사용하는) 반면 다른 타입은 비교적 높은 밀도의 불휘발성 스토리지를 제공하는(그러나 아마도 비교적 느린 판독 및 기입 능력들을 제공하는), 컴퓨팅 디바이스들에서 하나보다 많은 타입의 스토리지 디바이스의 통상적 사용의 인식에 따른다.
종종 상이한 기술들을 이용하는 상이한 스토리지 디바이스들의 상이한 특성들을 감안하면, 이러한 상이한 스토리지 디바이스들은 상이한 인터페이스들을 통해 그들의 상이한 스토리지 디바이스들에 연결되는 상이한 스토리지 제어기들을 통해 컴퓨팅 디바이스의 다른 부분들에 연결되는 것이 또한 흔하다. 예를 들면, 휘발성 스토리지(961)가 존재하며 RAM 기술에 기초하는 경우, 휘발성 스토리지(961)는 아마도 행과 열 어드레싱(row and column addressing)을 이용하는 휘발성 스토리지(961)에 적절한 인터페이스를 제공하는 스토리지 제어기(965a)를 통해 연결부(959)에 통신가능하게 연결될 수 있고, 여기서, 스토리지 제어기(965a)는 휘발성 스토리지(961) 내에 저장되는 정보를 보존하는데 도움이 되는 행 리프레싱(row refreshing) 및/또는 다른 유지보수 태스크들을 수행할 수 있다. 다른 예를 들면, 불휘발성 스토리지(962)가 존재하며 하나 이상의 강자성 및/또는 솔리드-스테이트 디스크 드라이브들을 포함하는 경우, 불휘발성 스토리지(962)는, 아마도 정보의 블록들 및/또는 실린더들(cylinders)과 섹터들(sectors)의 어드레싱을 이용하는 불휘발성 스토리지(962)에 적절한 인터페이스를 제공하는 스토리지 제어기(965b)를 통해 연결부(959)에 통신가능하게 연결될 수 있다. 또 다른 예를 들면, 탈착가능 매체 스토리지(963)가 존재하며 하나 이상의 머신-판독가능 스토리지 매체(969)를 이용하는 하나 이상의 광학적 및/또는 솔리드-스테이트 디스크 드라이브들을 포함하는 경우, 탈착가능 매체 스토리지(963)는 아마도 정보 블록들의 어드레싱을 이용하는 탈착가능 매체 스토리지(963)에 적절한 인터페이스를 제공하는 스토리지 제어기(965c)를 통해 연결부(959)에 통신가능하게 연결될 수 있고, 여기서, 스토리지 제어기(965c)는 머신-판독가능 스토리지 매체(969)의 수명을 연장시키는 고유한 방식으로 판독, 소거, 및 기입 동작을 조율할 수 있다.
휘발성 스토리지(961) 또는 불휘발성 스토리지(962) 중 하나 또는 다른 하나는, 각각이 기초하는 기술들에 따라, 다양한 실시예들을 구현하기 위해 프로세서 컴포넌트(950)에 의해 실행될 수 있는 명령어들의 시퀀스를 포함하는 루틴이 저장될 수 있는 머신-판독가능 스토리지 매체의 형태의 제조 물품을 포함할 수 있다. 예를 들면, 불휘발성 스토리지(962)가 강자성-기반의 디스크 드라이브들(예를 들어, 소위 "하드 드라이브들")을 포함하는 경우, 각각의 이러한 디스크 드라이브는 통상적으로, 플로피 디스켓과 같은 스토리지 매체와 유사한 방식으로, 명령어들의 시퀀스와 같은, 정보를 저장하는데, 자기 응답성 입자들(magnetically responsive particles)의 코팅이 퇴적되어, 다양한 패턴들로 자기적으로 배향되는 하나 이상의 회전 플레터들을 이용한다. 다른 예를 들면, 불휘발성 스토리지(962)는, 컴팩트 플래시 카드와 유사한 방식으로, 명령어들의 시퀀스들과 같은, 정보를 저장하기 위해, 솔리드-스테이트 스토리지 디바이스의 뱅크들로 구성될 수 있다. 다시, 실행가능한 루틴들 및/또는 데이터를 저장하기 위해 상이한 시간들에 컴퓨팅 디바이스에서 상이한 타입들의 스토리지 디바이스들을 이용하는 것이 흔하다. 따라서, 다양한 실시예들을 구현하기 위해 프로세서 컴포넌트(950)에 의해 실행될 명령어들의 시퀀스를 포함하는 루틴이 초기에 머신 판독가능 스토리지 매체(969)에 저장될 수 있고, 그 루틴이 실행됨에 따라 프로세서 컴포넌트(950)에 의해 더 신속한 액세스를 가능하게 하기 위해 머신 판독가능 스토리지 매체(969) 및/또는 휘발성 스토리지(961)의 지속적 존재를 요구하지 않는 장기 저장을 위해 그 루틴을 불휘발성 스토리지(962)에 복사하는데 탈착가능 매체 스토리지(963)가 후속하여 이용될 수 있다.
앞서 논의된 바와 같이, 인터페이스(990)(인터페이스들(390 또는 590) 중 하나 이상에 대응함)는 컴퓨팅 디바이스를 하나 이상의 다른 디바이스들에 통신가능하게 연결하는데 이용될 수 있는 다양한 통신 기술들 중 임의의 것에 대응하는 다양한 시그널링 기술들 중 임의의 것을 이용할 수 있다. 다시, 프로세서 컴포넌트(950)로 하여금 입력/출력 디바이스들(예를 들어, 도시된 예시적 키보드(920) 또는 프린터(925)) 및/또는 다른 컴퓨팅 디바이스들과, 아마도 네트워크(예를 들어, 네트워크(999)) 또는 네트워크들의 인터커넥트된 세트를 통해, 상호작용할 수 있게 하는데 다양한 형태들의 유선 또는 무선 시그널링 중 하나 또는 양자 모두가 이용될 수 있다. 종종 임의의 하나의 컴퓨팅 디바이스에 의해 지원되어야 하는 다수 타입들의 시그널링 및/또는 프로토콜들의 상당히 상이한 특성의 인식에서, 인터페이스(990)는 다수의 상이한 인터페이스 제어기들(995a, 995b, 및 995c)를 포함하는 것으로서 도시된다. 인터페이스 제어기(995a)는, 도시된 키보드(920)과 같은, 사용자 입력 디바이스들로부터 직렬 송신되는 메시지를 수신하는데 다양한 타입들의 유선 디지털 직렬 인터페이스 또는 라디오 주파수 무선 인터페이스 중 임의의 것을 이용할 수 있다. 인터페이스 제어기(995b)는, 도시된 네트워크(999)(아마도 하나 이상의 링크들로 구성되는 네트워크, 더 작은 네트워크들, 또는 아마도 인터넷)를 통해 다른 컴퓨팅 디바이스에 액세스하는데 다양한 케이블링-기반의 또는 무선의 시그널링, 타이밍들 및/또는 프로토콜들을 이용할 수 있다. 인터페이스(995c)는, 데이터를 도시된 프린터(925)에 송신하기 위해 직렬 또는 병렬 신호 송신 중 어느 하나의 사용을 가능하게 하는 다양한 전기적으로 도전성인 케이블링 중 임의의 것을 이용할 수 있다. 인터페이스(990)의 하나 이상의 인터페이스 제어기들을 통해 통신가능하게 연결될 수 있는 디바이스들의 다른 예들은, 이에 제한되는 것은 아니지만, 마이크로폰들, 원격 제어기들, 스타일러스 펜들, 카드 판독기들, 지문 판독기들, 가상 현실 상호작용 장갑들, 그래픽 입력 태블릿들, 조이스틱들, 다른 키보드들, 망막 스캐너들, 터치 스크린들의 터치 입력 컴포넌트, 트랙볼들, 다양한 센서들, 제스처들 및/또는 얼굴 표정들을 통해 사람들에 의해 신호가 보내지는 커맨드들 및/또는 데이터를 수락하는 사람들의 움직임을 모니터하는 카메라 또는 카메라 어레이, 레이저 프린터들, 잉크젯 프린터들, 머신형 로봇들, 밀링 머신들(milling machine) 등을 포함한다.
컴퓨팅 디바이스가 디스플레이(예를 들어, 디스플레이들(580)에 대응하여, 도시된 예시적인 디스플레이(980))에 통신가능하게 연결되는(또는 아마도 실제로 이를 포함하는) 경우, 처리 아키텍처(3000)를 구현하는 이러한 컴퓨팅 디바이스는 디스플레이 인터페이스(985)를 또한 포함할 수 있다. 디스플레이에 통신가능하게 연결하는데 있어서 더 일반화된 타입들의 인터페이스가 이용될 수 있지만, 디스플레이에 다양한 형태들의 콘텐츠를 가시적으로 디스플레이하는데 있어서 종종 요구되는 다소 전문화된 부가적 처리뿐만 아니라, 사용되는 케이블링-기반의 인터페이스들의 다소 전문화된 속성은, 종종 별개의 디스플레이 인터페이스의 제공을 바람직하게 한다. 디스플레이(980)의 통신가능한 연결에 있어서 디스플레이 인터페이스(985)에 의해 이용될 수 있는 유선 및/또는 무선 시그널링 기술들은, 이에 제한되는 것은 아니지만, 다양한 아날로그 비디오 인터페이스들, DVI(Digital Video Interface), DisplayPort 등 중 임의의 것을 포함하는, 다양한 산업 표준들 중 임의의 것을 따르는 시그널링 및/또는 프로토콜들을 사용할 수 있다.
보다 일반적으로, 본 명세서에 설명되고 도시되는 컴퓨팅 디바이스들의 다양한 엘리먼트들은, 다양한 하드웨어 엘리먼트들, 소프트웨어 엘리먼트들, 또는 이들의 조합을 포함할 수 있다. 하드웨어 엘리먼트들의 예들은, 디바이스들, 로직 디비이스들, 컴포넌트들, 프로세서들, 마이크로프로세서들, 회로들, 프로세서 컴포넌트들, 회로 엘리먼트들(예를 들어, 트랜지스터들, 저항기들, 커패시터들, 인덕터들 등), 집적 회로들, ASIC(application specific integrated circuits), PLD(programmable logic devices), DSP(digital signal processors), FPGA(field programmable gate array), 메모리 유닛들, 로직 게이트들, 레지스터들, 반도체 디바이스, 칩들, 마이크로칩들, 칩셋들 등을 포함할 수 있다. 소프트웨어 엘리먼트들의 예들은, 소프트웨어 컴포넌트들, 프로그램들, 애플리케이션들, 컴퓨터 프로그램들, 애플리케이션 프로그램들, 시스템 프로그램들, 소프트웨어 개발 프로그램들, 머신 프로그램들, 운영 체제 소프트웨어, 미들웨어, 펌웨어, 소프트웨어 모듈들, 루틴들, 서브루틴들, 함수들, 메소드들(methods), 프로시저들(procedures), 소프트웨어 인터페이스들, API(Application Program Interfaces), 명령어 세트들, 컴퓨팅 코드, 컴퓨터 코드, 코드 세그먼트들, 컴퓨터 코드 세그먼트들, 워드들, 값들, 심볼들, 또는 이들의 임의의 조합을 포함할 수 있다. 그러나, 실시예가 하드웨어 엘리먼트들을 사용하여 구현되는지 및/또는 소프트웨어 엘리먼들을 사용하여 구현되는지를 결정하는 것은, 주어진 구현에 대해 원하는 대로, 원하는 계산율, 전력 레벨들, 내열성들, 처리 사이클 예산(processing cycle budget), 입력 데이터 레이트들, 출력 데이터 레이트들, 메모리 리소스들, 데이터 버스 속도들, 및 다른 설계 또는 성능 제약들과 같은, 임의 수의 인자들에 따라 달라질 수 있다.
일부 실시예들은 "일 실시예" 또는 "실시예"라는 표현들을 그 파생어들과 함께 사용하여 설명될 수 있다. 이러한 용어들은, 해당 실시예와 연계하여 설명되는 특정한 특징, 구조, 또는 특성이 적어도 일 실시예에 포함된다는 것을 의미한다. 명세서의 다양한 곳들에서 "일 실시예에서"라는 문구의 출현은 반드시 모두가 동일한 실시예를 지칭하는 것은 아니다. 또한, 일부 실시예들은 "연결된" 및 "접속된"이라는 표현을 그 파생어들과 함께 사용하여 설명될 수 있다. 이러한 용어들은 반드시 서로에 대한 동의어로서 의도되는 것은 아니다. 예를 들어, 일부 실시예들은 2개 이상의 엘리먼트들이 서로 직접 물리적 또는 전기적 접촉에 있음을 표시하는데 "접속된" 및/또는 "연결된"이라는 용어들을 사용하여 설명될 수 있다. "연결된"이란 용어는, 그러나, 2개 이상의 엘리먼트들이 서로 직접 접촉하지는 않지만 여전히 서로 협력하거나 상호작용한다는 것을 의미할 수도 있다. 더욱이, 상이한 실시예들로부터의 양상들 또는 엘리먼트들이 조합될 수 있다.
본 개시내용의 요약서는 독자로 하여금 기술적 개시내용의 본질을 신속하게 확인하는 것을 허용하도록 제공되는 것임이 강조된다. 그것이 청구항들의 범위 또는 의미를 해석하거나 제한하는 데 사용되지 않을 것이라고 이해하며 제출된다. 또한, 전술한 발명을 실시하기 위한 구체적인 내용에서, 개시내용을 간소화할 목적으로 다양한 특징들이 단일의 실시예에 함께 그룹화된다는 것을 알 수 있다. 이러한 개시의 방법은 청구되는 실시예들이 각각의 청구항에 명확히 기재되는 것보다 더 많은 특징들을 요구한다는 의도를 반영하는 것으로서 해석되어야 하는 것은 아니다. 오히려, 하기의 청구항들이 반영하는 바와 같이, 본 발명의 주제는 단일의 개시된 실시예의 모든 특징들보다 더 적게 존재한다. 따라서, 하기의 청구항들은 이에 의해 상세한 설명에 포함되며, 각각의 청구항은 그 자체로 개별 실시예로서 자립한다. 첨부된 청구항들에서, "포함하는(including)" 및 "여기에서(in which)"라는 용어들은, 각각, "포함하는(comprising)" 및 "여기서(wherein)"라는 각각의 용어들의 평문 등가물들로서 사용된다. 또한, "제1", "제2", "제3" 등의 용어들은 단순히 레이블들로서 사용되며, 자신들의 대상들에 대한 수치적 요건들을 부과하려고 의도되는 것은 아니다.
위에 설명된 것들은 개시되는 아키텍처의 예들을 포함한다. 물론, 컴포넌트들 및/또는 방법론들의 모든 인식가능한 조합을 설명하는 것이 가능하지는 않지만, 통상의 기술자라면 많은 추가적 조합들 및 치환들이 가능하다는 점을 인식할 수 있을 것이다. 따라서, 신규한 아키텍처가, 첨부된 청구항들의 사상 및 범위 내에 있는 모든 이러한 변경들, 수정들, 및 변형들을 포괄하는 것으로 의도된다. 상세한 개시내용은 이제 추가적 실시예들에 관련된 예들을 제공하는 것에 의지한다. 이하 제공되는 예들은 제한적인 것으로 의도되는 것이 아니다.
일부 예들에서, 웨이크록 이벤트들을 추적하는 장치는, 프로세서 컴포넌트; 애플리케이션 레벨 웨이크록들과 관련되는 호출들을 인터셉트하도록 프로세서 컴포넌트에 의해 실행되는 캡처 컴포넌트 - 인터셉트된 호출들은 운영 체제의 애플리케이션 전력 관리자에 의해 애플리케이션 루틴들로부터 수신됨 -; 및 애플리케이션 전력 관리자에 연결되는 운영 체제의 시스템 로그 생성기에 인터셉트된 호출들의 표시들을 제공하도록 애플리케이션 전력 관리자와 협력하도록 프로세서 컴포넌트에 의해 실행되는 중계 컴포넌트 - 시스템 로그 생성기는 프로세서 컴포넌트에 의한 운영 체제의 실행과 관련되는 이벤트들의 표시들 및 인터셉트된 호출들의 표시들을 포함하는 시스템 로그 데이터를 생성함 -를 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 장치는, 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 제공하고 계류중인 애플리케이션 레벨 웨이크록들을 애플리케이션 루틴들에 상관시키는 웨이크록 데이터를 수집하기 위해 애플리케이션 전력 관리자와 협력하도록 프로세서 컴포넌트에 의해 실행되는 수집 컴포넌트를 포함할 수 있다.
부가적으로 또는 대안적으로, 중계 컴포넌트는 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 시스템 로그 생성기에 제공하도록 애플리케이션 전력 관리자와 협력할 수 있고, 시스템 로그 생성기는 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 시스템 로그 데이터에 포함시킨다.
부가적으로 또는 대안적으로, 이러한 장치는, 애플리케이션 루틴들을 프로세서 컴포넌트에 의해 실행되는 프로세스들 또는 애플리케이션 루틴들의 부분들이 실행되는 스레드들에 상관시키는 매핑 데이터를 수집하도록 애플리케이션 전력 관리자와 협력하도록 프로세서 컴포넌트에 의해 실행되는 수집 컴포넌트를 포함할 수 있다.
부가적으로 또는 대안적으로, 중계 컴포넌트는 매핑 데이터를 시스템 로그 생성기에 제공하도록 애플리케이션 전력 관리자와 협력할 수 있고, 시스템 로그 생성기는 매핑 데이터를 시스템 로그 데이터에 포함시킨다.
부가적으로 또는 대안적으로, 인터셉트된 호출들은 웨이크록을 요청하기 위한 호출 또는 계류중인 웨이크록을 해제하기 위한 호출을 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 장치는 애플리케이션 전력 관리자를 포함할 수 있고, 애플리케이션 전력 관리자는 캡처 컴포넌트 및 중계 컴포넌트를 포함하도록 증강된다.
부가적으로 또는 대안적으로, 이러한 장치는 커널 레벨 웨이크록들과 관련되는 호출들을 로그 디바이스 드라이버에 중계하기 위해 운영 체제의 커널 전력 관리자에 신호를 보내도록 프로세서 컴포넌트에 의해 실행되는 로그 디바이스 드라이버의 호출 컴포넌트를 포함할 수 있고, 중계된 호출들은 커널 전력 관리자에 의해 운영 체제의 디바이스 드라이버들 또는 컴포넌트들로부터 수신된다.
부가적으로 또는 대안적으로, 운영 체제의 컴포넌트들은 애플리케이션 전력 관리자를 포함할 수 있고, 애플리케이션 전력 관리자는 커널 전력 관리자에 연결되어 커널 레벨 웨이크록과 관련되는 호출에 의해 커널 전력 관리자에 신호를 보낸다.
부가적으로 또는 대안적으로, 이러한 장치는, 로그 디바이스 드라이버에서 중계된 호출들을 수신하도록 프로세서 컴포넌트에 의해 실행되는 수신 컴포넌트, 및 중계된 호출들의 표시들을 포함하는 보조 로그 데이터를 생성하도록 프로세서 컴포넌트에 의해 실행되는 로깅 컴포넌트를 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 장치는, 시스템 로그 데이터로부터 애플리케이션 레벨 웨이크록들과 관련되는 엔트리들을 추출하고, 보조 로그 데이터로부터 커널 레벨 웨이크록들과 관련되는 엔트리들을 추출하고, 시스템 로그 데이터로부터 프로세서 컴포넌트를 포함하는 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들을 표시하는 엔트리들을 추출하며, 추출된 엔트리들을 시간적으로 정렬하는 상관 컴포넌트; 및 애플리케이션 레벨 웨이크록들 및 커널 레벨 웨이크록들과 관련되는 이벤트들, 및 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들의 시간적으로 정렬된 타임라인 그래프들을 생성하여 디스플레이에 가시적으로 제시하는 제시 컴포넌트 - 이벤트들 및 액티비티 레벨들은 추출된 엔트리들에 표시됨 -를 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 장치는 시스템 로그 데이터 및 보조 로그 데이터를 디버깅 디바이스에 송신하는 인터페이스를 포함할 수 있다.
일부 예들에서, 웨이크록 이벤트들을 추적하는 장치는, 프로세서 컴포넌트; 운영 체제의 애플리케이션 전력 관리자에 지향되는 애플리케이션 레벨 웨이크록들과 관련되는 호출들의 표시들을 시스템 로그 데이터로부터 추출하고, 운영 체제의 커널 전력 관리자에 지향되는 커널 레벨 웨이크록들과 관련되는 호출들의 표시들을 보조 로그 데이터로부터 추출하며, 운영 체제가 실행되는 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들의 표시들을 시스템 로그 데이터로부터 추출하는 상관 컴포넌트; 및 애플리케이션 레벨 웨이크록들과 관련되는 호출들, 커널 레벨 웨이크록들과 관련되는 호출들, 및 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들에서의 변화들의 시간적으로 정렬된 타임라인 그래프들을 생성하여 디스플레이에 가시적으로 제시하는 제시 컴포넌트를 포함할 수 있다.
부가적으로 또는 대안적으로, 상관 컴포넌트는 시스템 로그 데이터 및 보조 로그 데이터 중 하나로부터 매핑 정보를 추출하고, 매핑 정보는 컴퓨팅 디바이스에서 실행되는 프로세스 및 컴퓨팅 디바이스의 실행의 스레드 중 하나에 대한 컴퓨팅 디바이스에서 실행되는 애플리케이션 루틴의 상관의 표시를 포함한다.
부가적으로 또는 대안적으로, 상관 컴포넌트는 이러한 상관의 표시를 이용하여 애플리케이션 레벨 웨이크록들과 관련되는 호출들의 적어도 2개의 표시들을 상관시킬 수 있다.
부가적으로 또는 대안적으로, 이러한 장치는 제어부를 포함하고, 제시 컴포넌트는 타임라인 그래프들이 시간적으로 정렬되는 시간 기간을 선택하는 커맨드를 전달하는 제어부의 동작의 표시를 수신하도록 제어부를 모니터할 수 있다.
일부 예들에서, 태스크 부분들을 수행하도록 프로세서 컴포넌트 코어들을 할당하는 컴퓨터 구현 방법은, 애플리케이션 레벨 웨이크록들과 관련되는 호출들을 인터셉트하는 단계 - 인터셉트된 호출들은 운영 체제의 애플리케이션 전력 관리자에 의해 애플리케이션 루틴들로부터 수신됨 -; 및 인터셉트된 호출들의 표시들을 애플리케이션 전력 관리자에 연결되는 운영 체제의 시스템 로그 생성기에 제공하도록 애플리케이션 전력 관리자와 협력하는 단계 - 시스템 로그 생성기는 운영 체제의 실행과 관련되는 이벤트들의 표시들 및 인터셉트된 호출들의 표시들을 포함하는 시스템 로그 데이터를 생성함 -를 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 방법은 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 제공하고 계류중인 애플리케이션 레벨 웨이크록들을 애플리케이션 루틴들에 상관시키는 웨이크록 데이터를 수집하도록 애플리케이션 전력 관리자와 협력하는 단계를 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 방법은 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 시스템 로그 생성기에 제공하도록 애플리케이션 전력 관리자와 협력하는 단계를 포함할 수 있고, 시스템 로그 생성기는 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 시스템 로그 데이터에 포함시킨다.
부가적으로 또는 대안적으로, 이러한 방법은 애플리케이션 루틴들을 프로세서 컴포넌트에 의해 실행되는 프로세스들 또는 애플리케이션 루틴들의 부분들이 실행되는 스레드들에 상관시키는 매핑 데이터를 수집하도록 애플리케이션 전력 관리자와 협력하는 단계를 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 방법은 매핑 데이터를 시스템 로그 생성기에 제공하도록 애플리케이션 전력 관리자와 협력하는 단계를 포함할 수 있고, 시스템 로그 생성기는 매핑 데이터를 시스템 로그 데이터에 포함시킨다.
부가적으로 또는 대안적으로, 인터셉트된 호출들은 웨이크록을 요청하기 위한 호출 또는 계류중인 웨이크록을 해제하기 위한 호출을 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 방법은 커널 레벨 웨이크록들과 관련되는 호출들을 로그 디바이스 드라이버에 중계하도록 운영 체제의 커널 전력 관리자에 신호를 보내는 단계를 포함할 수 있고, 중계된 호출들은 커널 전력 관리자에 의해 운영 체제의 디바이스 드라이버들 또는 컴포넌트들로부터 수신된다.
부가적으로 또는 대안적으로, 운영 체제의 컴포넌트들은 애플리케이션 전력 관리자를 포함할 수 있고, 애플리케이션 전력 관리자는 커널 전력 관리자에 연결되어 커널 레벨 웨이크록과 관련되는 호출에 의해 커널 전력 관리자에 신호를 보낸다.
부가적으로 또는 대안적으로, 이러한 방법은, 로그 디바이스 드라이버에서 중계된 호출들을 수신하는 단계, 및 중계된 호출들의 표시들을 포함하는 보조 로그 데이터를 생성하는 단계를 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 방법은, 시스템 로그 데이터로부터 애플리케이션 레벨 웨이크록들과 관련되는 엔트리들을 추출하는 단계, 보조 로그 데이터로부터 커널 레벨 웨이크록들과 관련되는 엔트리들을 추출하는 단계, 시스템 로그 데이터로부터 프로세서 컴포넌트를 포함하는 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들을 표시하는 엔트리들을 추출하는 단계, 추출된 엔트리들을 시간적으로 정렬하는 단계, 및 애플리케이션 레벨 웨이크록들 및 커널 레벨 웨이크록들과 관련되는 이벤트들, 및 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들의 시간적으로 정렬된 타임라인 그래프들을 디스플레이에 가시적으로 제시하는 단계 - 이벤트들 및 액티비티 레벨들은 추출된 엔트리들에 표시됨 -를 포함할 수 있다.
부가적으로 또는 대안적으로, 이러한 방법은 시스템 로그 데이터 및 보조 로그 데이터를 네트워크를 통해 디버깅 디바이스에 송신하는 단계를 포함할 수 있다.
일부 예들에서, 적어도 하나의 머신-판독가능 스토리지 매체는, 프로세서 컴포넌트에 의해 실행될 때, 프로세서 컴포넌트로 하여금, 애플리케이션 레벨 웨이크록들과 관련되는 호출들을 인터셉트하게 하고 - 인터셉트된 호출들은 컴퓨팅 디바이스의 운영 체제의 애플리케이션 전력 관리자에 의해 애플리케이션 루틴들로부터 수신됨 -; 인터셉트된 호출들의 표시들을 애플리케이션 전력 관리자에 연결되는 운영 체제의 시스템 로그 생성기에 제공하도록 애플리케이션 전력 관리자와 협력하게 하는 - 시스템 로그 생성기는 운영 체제의 실행과 관련되는 이벤트들의 표시들 및 인터셉트된 호출들의 표시들을 포함하는 시스템 로그 데이터를 생성함 - 명령어들을 포함할 수 있다.
부가적으로 또는 대안적으로, 프로세서 컴포넌트는, 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 제공하고 계류중인 애플리케이션 레벨 웨이크록들을 애플리케이션 루틴들에 상관시키는 웨이크록 데이터를 수집하도록 애플리케이션 전력 관리자와 협력하게 될 수 있고, 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 시스템 로그 생성기에 제공하도록 애플리케이션 전력 관리자와 협력하게 될 수 있으며, 시스템 로그 생성기는 계류중인 애플리케이션 레벨 웨이크록들의 표시들을 시스템 로그 데이터에 포함시킨다.
부가적으로 또는 대안적으로, 프로세서 컴포넌트는, 애플리케이션 루틴들을 프로세서 컴포넌트에 의해 실행되는 프로세스들에 또는 애플리케이션 루틴들의 부분들이 실행되는 스레드들에 상관시키는 매핑 데이터를 수집하도록 애플리케이션 전력 관리자와 협력하게 될 수 있고, 매핑 데이터를 시스템 로그 생성기에 제공하도록 애플리케이션 전력 관리자와 협력하게 될 수 있으며, 시스템 로그 생성기는 매핑 데이터를 시스템 로그 데이터에 포함시킨다.
부가적으로 또는 대안적으로, 인터셉트된 호출들은 웨이크록을 요청하기 위한 호출 또는 계류중인 웨이크록을 해제하기 위한 호출을 포함할 수 있다.
부가적으로 또는 대안적으로, 프로세서 컴포넌트는, 커널 레벨 웨이크록들과 관련되는 호출들을 로그 디바이스 드라이버에 중계하도록 운영 체제의 커널 전력 관리자에 신호를 보내게 될 수 있고, 중계된 호출들은 커널 전력 관리자에 의해 운영 체제의 디바이스 드라이버들 또는 컴포넌트들로부터 수신된다.
부가적으로 또는 대안적으로, 운영 체제의 컴포넌트들은 애플리케이션 전력 관리자를 포함할 수 있고, 애플리케이션 전력 관리자는 커널 전력 관리자에 연결되어 커널 레벨 웨이크록과 관련되는 호출에 의해 커널 전력 관리자에 신호를 보낸다.
부가적으로 또는 대안적으로, 프로세서 컴포넌트는, 로그 디바이스 드라이버에서 중계된 호출들을 수신하고, 중계된 호출들의 표시들을 포함하는 보조 로그 데이터를 생성하게 될 수 있다.
부가적으로 또는 대안적으로, 프로세서 컴포넌트는, 시스템 로그 데이터로부터 애플리케이션 레벨 웨이크록들과 관련되는 엔트리들을 추출하고; 보조 로그 데이터로부터 커널 레벨 웨이크록들과 관련되는 엔트리들을 추출하고; 시스템 로그 데이터로부터 프로세서 컴포넌트를 포함하는 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들을 표시하는 엔트리들을 추출하고; 추출된 엔트리들을 시간적으로 정렬하며; 애플리케이션 레벨 웨이크록들 및 커널 레벨 웨이크록들과 관련되는 이벤트들, 및 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들의 시간적으로 정렬된 타임라인 그래프들을 디스플레이에 가시적으로 제시하게 될 수 있으며, 이벤트들 및 액티비티 레벨들은 추출된 엔트리들에 표시된다.
부가적으로 또는 대안적으로, 프로세서 컴포넌트는 시스템 로그 데이터 및 보조 로그 데이터를 네트워크를 통해 디버깅 디바이스에 송신하게 될 수 있다.
일부 예들에서, 적어도 하나의 머신-판독가능 저장 매체는 컴퓨팅 디바이스에 의해 실행될 때 컴퓨팅 디바이스로 하여금 위의 것 중 임의의 것을 수행하게 하는 명령어들을 포함할 수 있다.
일부 예들에서, 태스크 부분들을 수행하도록 프로세서 컴포넌트 코어들을 할당하는 장치는 위의 것 중 임의의 것을 수행하는 수단을 포함할 수 있다.

Claims (25)

  1. 웨이크록 이벤트들(wakelock events)을 추적(trace)하는 장치로서,
    프로세서 컴포넌트; 및
    적어도 일부가 하드웨어로 구현되는 로직
    을 포함하고, 상기 로직은,
    애플리케이션 레벨 웨이크록들과 관련되는 호출들을 인터셉트하고 - 상기 인터셉트된 호출들은 운영 체제의 애플리케이션 전력 관리자에 의해 수신됨 -,
    상기 애플리케이션 전력 관리자에 연결되는 상기 운영 체제의 시스템 로그 생성기에 상기 인터셉트된 호출들의 표시들을 제공하고 - 상기 시스템 로그 생성기는 상기 프로세서 컴포넌트에 의한 상기 운영 체제의 실행과 관련되는 이벤트들의 표시들 및 상기 인터셉트된 호출들의 표시들을 포함하는 시스템 로그 데이터를 생성함 -,
    계류중인 애플리케이션 레벨 웨이크록들(pending application level wakelocks)의 표시들을 제공하는 웨이크록 데이터를 수집하고,
    상기 계류중인 애플리케이션 레벨 웨이크록들을 상기 이벤트들 중 하나의 이벤트에 상관시키고,
    상기 운영 체제의 커널 전력 관리자(kernel power manager)에게 신호를 보내는 - 상기 신호는 상기 계류중인 애플리케이션 레벨 웨이크록들의 상관에 기초하여 상기 운영 체제가 저전력 상태로 천이하는 것을 방지하는 표시를 포함함 -,
    장치.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서,
    상기 로직은 상기 애플리케이션 전력 관리자를 포함하는, 장치.
  5. 제1항에 있어서,
    상기 신호는 커널 레벨 웨이크록들(kernel level wakelocks)과 관련되는 호출들을 로그 디바이스 드라이버에 중계하기 위한 표시를 포함하고, 상기 중계된 호출들은 상기 커널 전력 관리자에 의해 상기 운영 체제의 디바이스 드라이버들 또는 컴포넌트들로부터 수신되는, 장치.
  6. 제5항에 있어서,
    상기 로직은,
    상기 로그 디바이스 드라이버에서 상기 중계된 호출들을 수신하고,
    상기 중계된 호출들의 표시들을 포함하는 보조 로그 데이터(supplemental log data)를 생성하는, 장치.
  7. 제6항에 있어서,
    상기 시스템 로그 데이터 및 상기 보조 로그 데이터를 디버깅 디바이스에 송신하는 인터페이스를 포함하는 장치.
  8. 삭제
  9. 삭제
  10. 삭제
  11. 삭제
  12. 웨이크록 이벤트들을 추적하는 컴퓨터 구현 방법으로서,
    애플리케이션 레벨 웨이크록들과 관련되는 호출들을 인터셉트하는 단계 - 상기 인터셉트된 호출들은 애플리케이션 루틴들로부터 운영 체제의 애플리케이션 전력 관리자에 의해 수신됨 -;
    상기 인터셉트된 호출들의 표시들을 상기 애플리케이션 전력 관리자에 연결되는 상기 운영 체제의 시스템 로그 생성기에 제공하는 단계 - 상기 시스템 로그 생성기는 상기 운영 체제의 실행과 관련되는 이벤트들의 표시들 및 상기 인터셉트된 호출들의 표시들을 포함하는 시스템 로그 데이터를 생성함 -;
    계류중인 애플리케이션 레벨 웨이크록들의 표시들을 제공하는 웨이크록 데이터를 수집하는 단계;
    상기 계류중인 애플리케이션 레벨 웨이크록들을 상기 이벤트들 중 하나의 이벤트에 상관시키는 단계; 및
    상기 운영 체제의 커널 전력 관리자에게 신호를 보내는 단계 - 상기 신호는 상기 계류중인 애플리케이션 레벨 웨이크록들의 상관에 기초하여 상기 운영 체제가 저전력 상태로 천이하는 것을 방지하는 표시를 포함함 -
    를 포함하는 컴퓨터 구현 방법.
  13. 삭제
  14. 삭제
  15. 제12항에 있어서,
    상기 애플리케이션 루틴들을 프로세서 컴포넌트에 의해 실행되는 프로세스들 또는 상기 애플리케이션 루틴들의 부분들이 실행되는 스레드들에 상관시키는 매핑 데이터를 수집하도록 상기 애플리케이션 전력 관리자와 협력하는 단계를 포함하는 컴퓨터 구현 방법.
  16. 제12항에 있어서,
    상기 인터셉트된 호출들은 웨이크록을 요청하기 위한 호출 또는 계류중인 웨이크록을 해제하기 위한 호출을 포함하는, 컴퓨터 구현 방법.
  17. 제12항에 있어서,
    상기 신호는 커널 레벨 웨이크록들과 관련되는 호출들을 로그 디바이스 드라이버에 중계하기 위한 표시를 포함하고, 상기 중계된 호출들은 상기 커널 전력 관리자에 의해 상기 운영 체제의 디바이스 드라이버들 또는 컴포넌트들로부터 수신되는, 컴퓨터 구현 방법.
  18. 제17항에 있어서,
    상기 로그 디바이스 드라이버에서 상기 중계된 호출들을 수신하는 단계; 및
    상기 중계된 호출들의 표시들을 포함하는 보조 로그 데이터를 생성하는 단계
    를 포함하는 컴퓨터 구현 방법.
  19. 제18항에 있어서,
    상기 시스템 로그 데이터로부터 상기 애플리케이션 레벨 웨이크록들과 관련되는 엔트리들을 추출하는 단계;
    상기 보조 로그 데이터로부터 상기 커널 레벨 웨이크록들과 관련되는 엔트리들을 추출하는 단계;
    상기 시스템 로그 데이터로부터 프로세서 컴포넌트를 포함하는 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들을 표시하는 엔트리들을 추출하는 단계;
    상기 추출된 엔트리들을 시간적으로 정렬하는 단계; 및
    상기 애플리케이션 레벨 웨이크록들 및 상기 커널 레벨 웨이크록들과 관련되는 이벤트들, 및 상기 컴퓨팅 디바이스의 컴포넌트들의 액티비티 레벨들의 시간적으로 정렬된 타임라인 그래프들을 디스플레이에 가시적으로 제시하는 단계 - 상기 이벤트들 및 상기 액티비티 레벨들은 상기 추출된 엔트리들에 표시됨 -
    를 포함하는 컴퓨터 구현 방법.
  20. 명령어들을 포함하는 적어도 하나의 비일시적 머신-판독가능 저장 매체로서, 상기 명령어들은 프로세서 컴포넌트에 의해 실행될 때, 상기 프로세서 컴포넌트로 하여금,
    애플리케이션 레벨 웨이크록들과 관련되는 호출들을 인터셉트하고 - 상기 인터셉트된 호출들은 컴퓨팅 디바이스의 운영 체제의 애플리케이션 전력 관리자에 의해 애플리케이션 루틴들로부터 수신됨 -,
    상기 인터셉트된 호출들의 표시들을 상기 애플리케이션 전력 관리자에 연결되는 상기 운영 체제의 시스템 로그 생성기에 제공하도록 상기 애플리케이션 전력 관리자와 협력하게 하고 - 상기 시스템 로그 생성기는 상기 운영 체제의 실행과 관련되는 이벤트들의 표시들 및 상기 인터셉트된 호출들의 표시들을 포함하는 시스템 로그 데이터를 생성함 -,
    계류중인 애플리케이션 레벨 웨이크록들의 표시들을 제공하는 웨이크록 데이터를 수집하고,
    상기 계류중인 애플리케이션 레벨 웨이크록들을 상기 이벤트들 중 하나의 이벤트에 상관시키고,
    상기 운영 체제의 커널 전력 관리자에게 신호를 보내게 하는 - 상기 신호는 상기 계류중인 애플리케이션 레벨 웨이크록들의 상관에 기초하여 상기 운영 체제가 저전력 상태로 천이하는 것을 방지하는 표시를 포함함 -,
    적어도 하나의 비일시적 머신-판독가능 저장 매체.
  21. 삭제
  22. 제20항에 있어서,
    상기 프로세서 컴포넌트는,
    상기 애플리케이션 루틴들을 상기 프로세서 컴포넌트에 의해 실행되는 프로세스들 또는 상기 애플리케이션 루틴들의 부분들이 실행되는 스레드들에 상관시키는 매핑 데이터를 수집하도록 상기 애플리케이션 전력 관리자와 협력하고,
    상기 매핑 데이터를 상기 시스템 로그 생성기에 제공하도록 상기 애플리케이션 전력 관리자와 협력하게 하고, 상기 시스템 로그 생성기는 상기 매핑 데이터를 상기 시스템 로그 데이터에 포함시키는, 적어도 하나의 비일시적 머신-판독가능 저장 매체.
  23. 제20항에 있어서,
    상기 인터셉트된 호출들은 웨이크록을 요청하기 위한 호출 또는 계류중인 웨이크록을 해제하기 위한 호출을 포함하는, 적어도 하나의 비일시적 머신-판독가능 저장 매체.
  24. 제20항에 있어서,
    상기 신호는 커널 레벨 웨이크록들과 관련되는 호출들을 로그 디바이스 드라이버에 중계하기 위한 표시를 포함하고, 상기 중계된 호출들은 상기 커널 전력 관리자에 의해 상기 운영 체제의 디바이스 드라이버들 또는 컴포넌트들로부터 수신되는, 적어도 하나의 비일시적 머신-판독가능 저장 매체.
  25. 제24항에 있어서,
    상기 운영 체제의 컴포넌트들은 상기 애플리케이션 전력 관리자를 포함하고, 상기 애플리케이션 전력 관리자는 상기 커널 전력 관리자에 연결되어 커널 레벨 웨이크록과 관련되는 호출에 의해 상기 커널 전력 관리자에 신호를 보내는, 적어도 하나의 비일시적 머신-판독가능 저장 매체.
KR1020167004464A 2013-09-27 2013-09-27 웨이크록 사용을 추적하는 기술들 KR101873794B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2013/062291 WO2015047312A1 (en) 2013-09-27 2013-09-27 Techniques for tracing wakelock usage

Publications (2)

Publication Number Publication Date
KR20160033767A KR20160033767A (ko) 2016-03-28
KR101873794B1 true KR101873794B1 (ko) 2018-07-03

Family

ID=52741369

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167004464A KR101873794B1 (ko) 2013-09-27 2013-09-27 웨이크록 사용을 추적하는 기술들

Country Status (6)

Country Link
US (1) US9965014B2 (ko)
EP (1) EP3049886A4 (ko)
JP (1) JP6333965B2 (ko)
KR (1) KR101873794B1 (ko)
CN (1) CN105474125B (ko)
WO (1) WO2015047312A1 (ko)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9516127B2 (en) 2013-03-25 2016-12-06 Seven Networks, Llc Intelligent alarm manipulator and resource tracker
US9351254B2 (en) * 2014-01-22 2016-05-24 Seven Networks, Llc Method for power saving in mobile devices by optimizing wakelocks
EP3062142B1 (en) 2015-02-26 2018-10-03 Nokia Technologies OY Apparatus for a near-eye display
CN105183123B (zh) * 2015-09-21 2018-01-09 北京元心科技有限公司 一种在基于容器的多系统中进行电源管理的方法和装置
CN106662907B (zh) * 2015-10-29 2019-10-22 华为技术有限公司 基于终端的唤醒锁控制方法、装置及终端
CN105530377B (zh) * 2015-12-14 2019-03-15 Oppo广东移动通信有限公司 一种唤醒锁的处理方法、装置及系统
US10095305B2 (en) * 2016-06-18 2018-10-09 Qualcomm Incorporated Wake lock aware system wide job scheduling for energy efficiency on mobile devices
CN106125891A (zh) * 2016-06-24 2016-11-16 北京奇虎科技有限公司 终端电量优化方法、装置及终端
CN106372543A (zh) * 2016-08-31 2017-02-01 上海摩软通讯技术有限公司 一种基于移动终端的资源控制方法及装置
US10650552B2 (en) 2016-12-29 2020-05-12 Magic Leap, Inc. Systems and methods for augmented reality
EP4300160A2 (en) 2016-12-30 2024-01-03 Magic Leap, Inc. Polychromatic light out-coupling apparatus, near-eye displays comprising the same, and method of out-coupling polychromatic light
EP3410285B1 (en) 2017-04-17 2019-09-25 Shenzhen Goodix Technology Co., Ltd. Electronic device and detection method
US10578870B2 (en) 2017-07-26 2020-03-03 Magic Leap, Inc. Exit pupil expander
CN107484022B (zh) * 2017-08-07 2020-06-30 四川长虹电器股份有限公司 Android智能电视上实现系统全局屏保的方法
CN107547742B (zh) * 2017-08-30 2020-10-02 深圳辉烨物联科技有限公司 一种用于移动终端的唤醒锁释放方法和装置
US11280937B2 (en) 2017-12-10 2022-03-22 Magic Leap, Inc. Anti-reflective coatings on optical waveguides
WO2019126331A1 (en) 2017-12-20 2019-06-27 Magic Leap, Inc. Insert for augmented reality viewing device
US10755676B2 (en) 2018-03-15 2020-08-25 Magic Leap, Inc. Image correction due to deformation of components of a viewing device
JP7319303B2 (ja) 2018-05-31 2023-08-01 マジック リープ, インコーポレイテッド レーダ頭部姿勢位置特定
US11579441B2 (en) 2018-07-02 2023-02-14 Magic Leap, Inc. Pixel intensity modulation using modifying gain values
WO2020010226A1 (en) 2018-07-03 2020-01-09 Magic Leap, Inc. Systems and methods for virtual and augmented reality
US11856479B2 (en) 2018-07-03 2023-12-26 Magic Leap, Inc. Systems and methods for virtual and augmented reality along a route with markers
WO2020023543A1 (en) 2018-07-24 2020-01-30 Magic Leap, Inc. Viewing device with dust seal integration
JP7426982B2 (ja) 2018-07-24 2024-02-02 マジック リープ, インコーポレイテッド 移動検出デバイスの温度依存較正
CN112740665A (zh) 2018-08-02 2021-04-30 奇跃公司 基于头部运动的瞳孔间距离补偿的观察系统
CN116820239A (zh) 2018-08-03 2023-09-29 奇跃公司 图腾在用户交互系统中的融合姿势的基于未融合姿势的漂移校正
US10914949B2 (en) 2018-11-16 2021-02-09 Magic Leap, Inc. Image size triggered clarification to maintain image sharpness
EP3921720A4 (en) * 2019-02-06 2022-06-29 Magic Leap, Inc. Target intent-based clock speed determination and adjustment to limit total heat generated by multiple processors
EP3939030A4 (en) 2019-03-12 2022-11-30 Magic Leap, Inc. REGISTRATION OF LOCAL CONTENT BETWEEN FIRST AND SECOND VIEWERS OF AUGMENTED REALITY
CN114127837A (zh) 2019-05-01 2022-03-01 奇跃公司 内容提供系统和方法
CN114174895A (zh) 2019-07-26 2022-03-11 奇跃公司 用于增强现实的系统和方法
JP2023502927A (ja) 2019-11-15 2023-01-26 マジック リープ, インコーポレイテッド 外科手術環境において使用するための視認システム

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040004617A1 (en) * 2002-07-02 2004-01-08 Nigel Street Providing an overview of a large event sample period that supports triage and navigation
US20110235108A1 (en) * 2010-03-25 2011-09-29 Canon Kabushiki Kaisha Device management system, management apparatus, device management method, and program

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6550060B1 (en) * 1999-04-08 2003-04-15 Novadigm, Inc. Method and system for dynamic injection of dynamic link libraries into a windowed operating system
US6374369B1 (en) * 1999-05-21 2002-04-16 Philips Electronics North America Corporation Stochastic performance analysis method and apparatus therefor
JP4886188B2 (ja) * 2004-12-16 2012-02-29 キヤノン株式会社 情報処理装置及びその制御方法、コンピュータプログラム及び記憶媒体
US8476787B2 (en) * 2009-03-27 2013-07-02 Schneider Electric It Corporation System and method for changing power states of a power device
US8280456B2 (en) * 2009-08-14 2012-10-02 Google Inc. Providing a user with feedback regarding power consumption in battery-operated electronic devices
CN102023887B (zh) * 2009-09-21 2015-01-28 联想(北京)有限公司 一种计算机系统的电源管理方法及计算机系统
US8806246B1 (en) * 2010-05-05 2014-08-12 Crimson Corporation Enforcing and complying with a computing device power policy
CN101895975A (zh) 2010-07-22 2010-11-24 中兴通讯股份有限公司 一种进入待机模式的方法及其应用的移动终端
KR20120091551A (ko) 2011-02-09 2012-08-20 엘지전자 주식회사 이동 단말기 및 그 제어 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040004617A1 (en) * 2002-07-02 2004-01-08 Nigel Street Providing an overview of a large event sample period that supports triage and navigation
US20110235108A1 (en) * 2010-03-25 2011-09-29 Canon Kabushiki Kaisha Device management system, management apparatus, device management method, and program

Also Published As

Publication number Publication date
KR20160033767A (ko) 2016-03-28
WO2015047312A1 (en) 2015-04-02
CN105474125A (zh) 2016-04-06
US9965014B2 (en) 2018-05-08
EP3049886A1 (en) 2016-08-03
EP3049886A4 (en) 2017-05-17
US20150095682A1 (en) 2015-04-02
JP2016540268A (ja) 2016-12-22
CN105474125B (zh) 2019-01-01
JP6333965B2 (ja) 2018-05-30

Similar Documents

Publication Publication Date Title
KR101873794B1 (ko) 웨이크록 사용을 추적하는 기술들
US11922100B2 (en) System and method for energy usage accounting in software applications
CN107527317B (zh) 基于图像处理的数据传输系统
KR102205372B1 (ko) 클라이언트 측 활동 모니터링
US10120781B2 (en) Techniques for detecting race conditions
US9170912B1 (en) System and methods for power and energy modeling in computing devices using system call tracing
CN108132735B (zh) 终端与应用控制方法
EP3309676B1 (en) Method and apparatus for providing screenshot service on terminal device and storage medium and device
US9552221B1 (en) Monitoring application execution using probe and profiling modules to collect timing and dependency information
CN104636435A (zh) 云终端录屏方法
US10120731B2 (en) Techniques for controlling use of locks
US10394680B2 (en) Techniques for tracking graphics processing resource utilization
CN115016631B (zh) 进程调度方法和终端设备
US9766676B2 (en) Computing subsystem hardware recovery via automated selective power cycling
CN110633190B (zh) 一种应用程序内存监控方法、装置、设备及存储介质
US10962593B2 (en) System on chip and operating method thereof
CN101751283B (zh) 虚拟机监视器,虚拟机系统及客户操作系统状态获取方法
CN103123603A (zh) 调试系统及执行调试系统操作的方法
CN107450992B (zh) 标题栏与弹框栏同步通信的方法、存储介质、设备及系统
WO2024046089A1 (zh) 持锁进程检测方法及相关设备
WO2022126532A1 (zh) 数据处理方法及装置
CN117435259B (zh) Vpu的配置方法、装置、电子设备及计算机可读存储介质
CN107590241B (zh) 日志信息上报方法、装置及存储介质、adsp和终端
CN110221928B (zh) 信息记录方法、装置、终端及存储介质
CN104145244A (zh) 用于视频分析和编码的智能msi-x中断

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant