KR20160132432A - 멀티 프로세스 애플리케이션들을 위한 동적 자원 관리 - Google Patents

멀티 프로세스 애플리케이션들을 위한 동적 자원 관리 Download PDF

Info

Publication number
KR20160132432A
KR20160132432A KR1020167027972A KR20167027972A KR20160132432A KR 20160132432 A KR20160132432 A KR 20160132432A KR 1020167027972 A KR1020167027972 A KR 1020167027972A KR 20167027972 A KR20167027972 A KR 20167027972A KR 20160132432 A KR20160132432 A KR 20160132432A
Authority
KR
South Korea
Prior art keywords
resource
application
resource usage
resources
usage budget
Prior art date
Application number
KR1020167027972A
Other languages
English (en)
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 KR20160132432A publication Critical patent/KR20160132432A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/504Resource capping
    • Y02B60/142
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

여기서는 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션으로 하여금, 컴퓨팅 디바이스의 할당된 자원 부분을 애플리케이션과 연관된 다중 프로세스들 간에 어떻게 분할할지를 동적으로 제어할 수 있게 하는 기술이 설명된다. 예를 들어, 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션은, 컴퓨팅 디바이스의 할당된 자원 부분을, 애플리케이션과 연관된 포그라운드(foreground) 프로세스와, 애플리케이션과 연관된 하나 이상의 백그라운드(background) 프로세스들 간에 어떻게 분할할지를 동적으로 제어하기 위해 컴퓨팅 디바이스의 운영체제와 상호작용할 수 있다.

Description

멀티 프로세스 애플리케이션들을 위한 동적 자원 관리{DYNAMIC RESOURCE MANAGEMENT FOR MULTI-PROCESS APPLICATIONS}
본 발명은 멀티 프로세스 애플리케이션들을 위한 동적 자원 관리에 관한 것이다.
오늘날의 모바일 디바이스들, 특히 오늘날의 로우 엔드(low-end) 모바일 디바이스들은 멀티 태스킹 시나리오들에 의해 심각하게 도전을 받고 있다. 크기면에서 경쟁적이 되도록 하기 위해, 모바일 디바이스들은 로우 엔드 및/또는 저전력 부품들을 이용하여 제조되어야 한다는 것은 흔한 일이다. 이것은 랜덤 액세스 메모리(random access memory; RAM), 멀티미디어카드(MultiMediaCard; MMC) 및 보안 디지털(Secure Digital; SD) 카드를 포함하는 모바일 디바이스들을 구현하기 위해 이용되는 메모리의 경우에 특히 그러하다. 이것의 순 효과는 메모리 관리를 위한 페이징(paging)에 의존하는 통상적인 모바일 디바이스들이 다중 프로세스들을 동시적으로 구동하려고 시도할 때 매우 빨리 멈춰선다는 것이다. 이것은 매우 불량한 사용자 경험과 장애가 있는 멀티태스킹 시나리오들을 야기시킨다. 모바일 디바이스들을 위해 개발 중에 있는 애플리케이션들과 운영체제들이 점점 커지는 반면에 시장은 감소된 제조 비용을 요구함에 따라, 이러한 문제는 특히 유의미해지고 있다.
이전에는, 모바일 디바이스 상에서의 다중 프로세스들의 동시적 실행을 지원하는 데에 있어서 불충분한 메모리를 갖는 문제는, 메모리 관리를 위한 페이징의 이용; 모바일 디바이스에 더 많은 메모리를 제공하는 것; 및 애플리케이션들과 운영체제들의 크기에 제한을 두는 것 중 하나 이상에 의해 처리되었었다. 위에서 언급한 바와 같이, 페이징은 매우 불량한 사용자 경험과 장애가 있는 멀티태스킹 시나리오들을 야기시킬 수 있다. 더 많은 메모리를 제공하는 것은 모바일 디바이스의 비용, 복잡도 및 전력 소모를 끌어올린다. 애플리케이션들과 운영체제들에 크기 제한을 두는 것은 사용자들에게 희망하는 기능을 개발하고 전달하는 것을 극도로 어렵게 만든다. 적어도 이러한 이유들로 인해, 모바일 디바이스들을 위한 기존의 메모리 관리 솔루션들은 결함이 있다. 사용자 경험에 악영향을 미치지 않고 폭넓게 다양한 멀티태스킹 시나리오들을 가능하게 하는 방식으로 오늘날의 모바일 디바이스들이 다중 프로세스들을 동시에 실행할 수 있게 하기 위해서는 보다 나은 메모리 관리 기술들이 필요하다.
여기서는 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션으로 하여금, 컴퓨팅 디바이스의 할당된 자원 부분을 애플리케이션과 연관된 다중 프로세스들 간에 어떻게 분할할지를 동적으로 제어할 수 있게 하는 시스템, 방법, 장치, 및 컴퓨터 프로그램 제품이 설명된다. 예를 들어, 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션은, 컴퓨팅 디바이스의 할당된 자원 부분을, 애플리케이션과 연관된 포그라운드(foreground) 프로세스와, 애플리케이션과 연관된 하나 이상의 백그라운드(background) 프로세스들 간에 어떻게 분할할지를 동적으로 제어하기 위해 컴퓨팅 디바이스의 운영체제와 상호작용할 수 있다. 이러한 능력을 애플리케이션에 제공함으로써, 여기서 설명된 실시예들은 이롭게도 애플리케이션들로 하여금 자원 할당들을 변경하도록 적응케 하고 컴퓨팅 디바이스 상에서 실행 중에 있을 수 있는 다른 프로세스들과 더 잘 공존할 수 있게 함으로써, 폭넓게 다양한 멀티태스킹 시나리오들을 더 잘 가능하게 할 수 있다.
특히, 컴퓨팅 디바이스 상에서 구현되는 시스템이 여기서 설명된다. 본 시스템은 적어도 하나의 프로세서, 및 적어도 하나의 프로세서에 의해 액세스가능하며 적어도 하나의 프로세서에 의한 실행을 위한 컴포넌트들을 저장하는 메모리를 포함한다. 컴포넌트들은 자원 관리자를 포함한다. 자원 관리자는, 애플리케이션과 연관된 자원 사용량 버짓(resource usage budget)을 유지하고, 자원 사용량 버짓을 표시하는 적어도 하나의 메세지를 애플리케이션과 연관된 포그라운드 프로세스에게 보내며, 포그라운드 프로세스에 할당될 자원 사용량 버짓의 제1 부분과 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 포그라운드 프로세스로부터 수신하도록 동작가능하다. 자원 사용량 버짓은 컴퓨팅 디바이스의 얼마나 많은 자원이 애플리케이션의 실행 동안 애플리케이션에 의해 이용될 수 있는지를 표시한다. 자원은, 예컨대, 휘발성 또는 비휘발성 메모리 자원, 중앙 처리 장치(CPU) 자원, 입력/출력(I/O) 자원, 네트워크 자원, 전력 자원, 또는 센서 자원을 포함할 수 있다.
전술한 시스템의 실시예에서, 자원 관리자는 또한, 자원 사용량 버짓의 제1 부분과 동등한 자원의 부분을 포그라운드 프로세스에 할당하고, 자원 사용량 버짓의 제2 부분과 동등한 자원의 부분을 적어도 하나의 백그라운드 태스크에 할당하도록 동작가능하다.
다른 실시예에서, 포그라운드 프로세스에 보내진 적어도 하나의 메시지와 포그라운드 프로세스로부터 수신된 적어도 하나의 메시지는 공유 API(application programming interface)를 통해 전달된다.
또다른 실시예에서, 자원 사용량 버짓은 포그라운드에서 실행 중인 애플리케이션에 대한 자원 사용량 버짓을 포함하며, 자원 사용량 버짓을 표시하는 적어도 하나의 메시지는 애플리케이션이 포그라운드에서 실행 중에 있다는 통지를 포함한다.
또다른 실시예에서, 자원 사용량 버짓은 중단되거나 또는 종료된 애플리케이션에 대한 자원 사용량 버짓을 포함하며, 자원 사용량 버짓을 표시하는 적어도 하나의 메시지는 애플리케이션이 중단되거나 또는 종료될 것이라는 통지를 포함한다.
추가적인 실시예에서, 자원 관리자는 또한, 미리결정된 시구간 이후에, 포그라운드 프로세스에 의해 이용 중에 있는 자원의 양과 적어도 하나의 백그라운드 프로세스에 의해 이용 중에 있는 자원의 양의 합이 자원 사용량 버짓을 초과하는지 여부를 결정하고, 상기 합이 자원 사용량 버짓을 초과한다라고 결정한 것에 응답하여, 포그라운드 프로세스와 적어도 하나의 백그라운드 프로세스 중 하나 이상을 종료시키도록 동작가능하다.
여기서는 컴퓨팅 디바이스에 의해 구현되는 방법이 설명된다. 방법에 따르면, 자원 관리자는 애플리케이션이 포그라운드에서 실행 중에 있다는 통지를 애플리케이션과 연관된 포그라운드 프로세스에 보낸다. 자원 관리자는 포그라운드 프로세스로부터, 포그라운드 프로세스에 할당될 제1 자원 사용량 버짓의 제1 부분과, 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 제1 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신한다. 제1 자원 사용량 버짓은 포그라운드에서 실행 중인 애플리케이션과 연관된 자원 사용량 버짓을 포함한다. 자원 관리자는, 제1 자원 사용량 버짓의 제1 부분과 동등한 자원의 부분을 포그라운드 프로세스에 할당하며, 제1 자원 사용량 버짓의 제2 부분과 동등한 자원의 부분을 적어도 하나의 백그라운드 태스크에 할당한다. 자원은, 예컨대, 휘발성 또는 비휘발성 메모리 자원, CPU 자원, I/O 자원, 네트워크 자원, 전력 자원, 또는 센서 자원을 포함할 수 있다.
전술한 방법의 하나의 실시예에서, 보내는 단계와 수신하는 단계는 공유 API를 통해 수행된다.
다른 실시예에서, 방법은 복수의 추가적인 단계들을 더 포함한다. 추가적인 단계들에 따르면, 자원 관리자는 애플리케이션이 중단되거나 또는 종료될 것이라는 통지를 포그라운드 프로세스에 보낸다. 자원 관리자는, 포그라운드 프로세스로부터, 포그라운드 프로세스에 할당될 제2 자원 사용량 버짓의 제1 부분과, 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 제2 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신한다. 제2 자원 사용량 버짓은 중단되거나 또는 종료된 애플리케이션과 연관된 자원 사용량 버짓을 포함하며, 이 제2 자원 사용량 버짓은 제1 자원 사용량 버짓보다 작을 수 있다. 자원 관리자는, 제2 자원 사용량 버짓의 제1 부분과 동등한 자원의 부분을 포그라운드 프로세스에 할당하고, 제2 자원 사용량 버짓의 제2 부분과 동등한 자원의 부분을 적어도 하나의 백그라운드 태스크에 할당한다.
이 실시예에 또한 따르면, 방법은, 미리결정된 시구간 이후에, 포그라운드 프로세스에 의해 이용 중에 있는 자원의 양과 적어도 하나의 백그라운드 프로세스에 의해 이용 중에 있는 자원의 양의 합이 제2 자원 사용량 버짓을 초과하는지 여부를 결정하는 단계와, 상기 합이 제2 자원 사용량 버짓을 초과한다라고 결정한 것에 응답하여, 포그라운드 프로세스와 적어도 하나의 백그라운드 프로세스 중 하나 이상을 종료시키는 단계를 더 포함할 수 있다.
여기서는 또한 컴퓨터 프로그램 제품이 설명된다. 컴퓨터 프로그램 제품은 컴퓨팅 디바이스의 적어도 하나의 프로세서에 의해 실행될 때 적어도 하나의 프로세서로 하여금 동작들을 수행하게 하는 컴퓨터 프로그램 로직이 기록되어 있는 컴퓨터로 판독가능한 메모리를 포함한다. 동작들은, 자원 관리자로부터, 자원 사용량 버짓을 표시하는 적어도 하나의 메시지를, 애플리케이션과 연관된 포그라운드 프로세스에게 보내는 것과, 자원 관리자에 의해, 포그라운드 프로세스로부터, 포그라운드 프로세스에 할당될 자원 사용량 버짓의 제1 부분과 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신하는 것을 포함한다. 자원은 휘발성 또는 비휘발성 메모리 자원, CPU 자원, I/O 자원, 네트워크 자원, 전력 자원, 또는 센서 자원을 포함할 수 있다.
전술한 컴퓨터 프로그램 제품의 하나의 실시예에서, 동작들은, 자원 관리자에 의해, 자원 사용량 버짓의 제1 부분과 동등한 자원의 부분을 포그라운드 프로세스에 할당하는 것과, 자원 사용량 버짓의 제2 부분과 동등한 자원의 부분을 적어도 하나의 백그라운드 태스크에 할당하는 것을 더 포함한다.
다른 실시예에서, 자원 사용량 버짓을 표시하는 적어도 하나의 메세지와, 포그라운드 프로세스에 할당될 자원 사용량 버짓의 제1 부분과 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지는 공유 API를 통해 보내진다.
또다른 실시예에서, 자원 사용량 버짓은 포그라운드에서 실행 중인 애플리케이션에 대한 자원 사용량 버짓을 포함하며, 자원 사용량 버짓을 표시하는 적어도 하나의 메시지는 애플리케이션이 포그라운드에서 실행 중에 있다는 통지를 포함한다.
또다른 실시예에서, 자원 사용량 버짓은 중단되거나 또는 종료된 애플리케이션에 대한 자원 사용량 버짓을 포함하며, 자원 사용량 버짓을 표시하는 적어도 하나의 메시지는 애플리케이션이 중단되거나 또는 종료될 것이라는 통지를 포함한다.
추가적인 실시예에서, 동작들은, 자원 관리자에 의해, 미리결정된 시구간 이후에, 포그라운드 프로세스에 의해 이용 중에 있는 자원의 양과 적어도 하나의 백그라운드 프로세스에 의해 이용 중에 있는 자원의 양의 합이 자원 사용량 버짓을 초과하는지 여부를 결정하는 것과, 상기 합이 자원 사용량 버짓을 초과한다라고 결정한 것에 응답하여, 자원 관리자에 의해, 포그라운드 프로세스와 적어도 하나의 백그라운드 프로세스 중 하나 이상을 종료시키는 것을 더 포함한다.
본 요약은 아래의 상세한 설명에서 보다 상세하게 설명되는 개념들의 선택을 단순한 형태로 소개하기 위해 제공된 것이다. 본 요약은 청구된 발명내용의 중요한 특징들 또는 필수적인 특징들을 식별시키려는 의도는 없으며, 또한 청구된 발명내용의 범위를 제한시키려는 의도도 없다. 또한, 청구된 발명내용은 상세한 설명 및/또는 본 명세서의 다른 섹션들에서 진술된 특정 실시예들로 한정되지 않는다는 것을 유념해둔다. 이러한 실시예들은 여기서 예시를 목적으로 제공될 뿐이다. 추가적인 실시예들이 여기에 포함된 교시내용들에 기초하여 본 발명분야의 당업자에게 자명할 것이다.
본 명세서에 병합되어 있고 본 명세서의 일부를 형성하는 첨부 도면들은 본 발명의 실시예들을 나타내며, 그리고 또한, 상세한 설명과 함께, 본 발명의 원리들을 설명하고 본 발명분야의 당업자가 본 발명을 실시하고 이용할 수 있도록 하는 역할을 한다.
도 1은 실시예에 따른, 디바이스 특유의(specific) 또는 사용자 특유의 자원 사용량 프로파일들에 기초하여 자원 관리를 수행하는 컴퓨팅 디바이스의 블록도이다.
도 2는 실시예에 따른, 디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일에 따라 컴퓨팅 디바이스의 자원을 관리하기 위해 컴퓨팅 디바이스에 의해 구현되는 방법의 흐름도를 도시한다.
도 3은 하나의 실시예에 따른, 애플리케이션에 대한 예상 자원 사용량을 계산하기 위한 방법의 흐름도를 도시한다.
도 4는 다른 실시예에 따른, 애플리케이션에 대한 예상 자원 사용량을 계산하기 위한 방법의 흐름도를 도시한다.
도 5는 실시예에 따른, 애플리케이션에 대한 평균 자원 사용량을 획득하기 위한 방법의 흐름도를 도시한다.
도 6은 도 2에서 도시된 흐름도의 방법에 따라 수행될 수 있는 추가적인 단계들의 흐름도를 도시한다.
도 7은 도 2에서 도시된 흐름도의 방법에 따라 수행될 수 있는 추가적인 단계들의 흐름도를 도시한다.
도 8은 도 2에서 도시된 흐름도의 방법에 따라 수행될 수 있는 추가적인 단계들의 흐름도를 도시한다.
도 9는 실시예에 따른, 사용자 특유의 자원 사용량 프로파일에 따라 컴퓨팅 디바이스의 자원을 관리하기 위해 컴퓨팅 디바이스에 의해 구현되는 방법의 흐름도를 도시한다.
도 10은 실시예에 따른, 디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일에 따라 애플리케이션의 론칭(launching)을 관리하기 위한 방법의 흐름도를 도시한다.
도 11은 프로세스들에 대해 자원들을 예상적으로 할당(predictively allocate)하기 위해 컴퓨팅 디바이스의 자원들에 대한 사용자의 모니터링된 자원 사용량 패턴들 및 이로부터 유도된 정보를 이용하기 위한 방법의 흐름도를 도시한다.
도 12는 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션이, 애플리케이션과 연관된 포그라운드 프로세스와 하나 이상의 백그라운드 태스크들에 대한 컴퓨팅 디바이스의 자원들의 할당을 관리하는 것을 도와줄 수 있게 하기 위한 하나의 방법의 흐름도를 도시한다.
도 13은 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션이, 애플리케이션과 연관된 포그라운드 프로세스와 하나 이상의 백그라운드 태스크들에 대한 컴퓨팅 디바이스의 자원들의 할당을 관리하는 것을 도와줄 수 있게 하기 위한 다른 방법의 흐름도를 도시한다.
도 14는 다양한 실시예들을 구현하기 위해 이용될 수 있는 예시적인 모바일 디바이스의 블록도이다.
도 15는 다양한 실시예들을 구현하기 위해 이용될 수 있는 예시적인 프로세서 기반 컴퓨터 시스템의 블록도이다.
도면들을 참조하여 살펴보는 경우, 본 발명의 특징들과 장점들은 아래에서 설명되는 상세한 설명으로부터 보다 명백해질 것이며, 도면 내 동일한 참조문자들은 본 명세서에 걸쳐서 대응하는 엘리먼트들을 식별한다. 도면들에서, 동일한 참조번호들은 일반적으로 동일하거나, 기능적으로 유사하고/유사하거나 구조적으로 유사한 엘리먼트들을 나타낸다. 엘리먼트가 처음으로 나타나는 도면은 대응하는 참조번호에서 가장 좌측 숫자(들)에 의해 표시된다.
I. 서론
아래의 상세한 설명은 본 발명의 예시적인 실시예들을 나타내는 첨부 도면들을 언급한다. 하지만, 본 발명의 범위는 이러한 실시예들로 한정되지 않으며, 이 대신에 첨부된 청구항들에 의해서만 정의된다. 따라서, 예시된 실시예들의 수정 버전들과 같이, 첨부 도면들에서 도시된 것을 뛰어넘는 실시예들은, 그럼에도 불구하고, 본 발명에 의해 포함될 수 있다.
명세서에서 “하나의 실시예”, “실시예”, “예시적인 실시예” 등에 대한 언급들은 설명된 실시예가 특정한 특징, 구조, 또는 특성을 포함할 수는 있으나, 모든 실시예가 반드시 이러한 특정한 특징, 구조, 또는 특성을 포함할 수 있다는 것은 아님을 나타낸다. 또한, 이러한 어구들은 반드시 동일한 실시예를 언급하는 것은 아니다. 더 나아가, 특정한 특징, 구조, 또는 특성이 실시예와 관련하여 설명될 때, 명시적으로 설명했는지 아닌지에 상관없이 다른 실시예들과 결부시켜서 이러한 특징, 구조, 또는 특성을 구현하는 것은 본 발명분야의 당업자의 지식 내에 있다는 것을 말한다.
여기서는 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션으로 하여금, 컴퓨팅 디바이스의 할당된 자원 부분을 애플리케이션과 연관된 다중 프로세스들 간에 어떻게 분할할지를 동적으로 제어할 수 있게 하는 시스템, 방법, 장치, 및 컴퓨터 프로그램 제품이 설명된다. 예를 들어, 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션은, 컴퓨팅 디바이스의 할당된 자원 부분을, 애플리케이션과 연관된 포그라운드(foreground) 프로세스와, 애플리케이션과 연관된 하나 이상의 백그라운드(background) 프로세스들 간에 어떻게 분할할지를 동적으로 제어하기 위해 컴퓨팅 디바이스의 운영체제와 상호작용할 수 있다. 이러한 능력을 애플리케이션에 제공함으로써, 여기서 설명된 실시예들은 이롭게도 애플리케이션들로 하여금 자원 할당들을 변경하도록 적응케 하고 컴퓨팅 디바이스 상에서 실행 중에 있을 수 있는 다른 프로세스들과 더 잘 공존할 수 있게 함으로써, 폭넓게 다양한 멀티태스킹 시나리오들을 더 잘 가능하게 할 수 있다. 여기서 설명되는 기술들은 이롭게도, 비제한적인 예시로서, 휘발성 및 비휘발성 메모리, CPU, I/O, 네트워크, 전력, 및 센서들을 비롯한, 컴퓨팅 디바이스의 다양한 상이한 유형들의 자원들의 이용을 관리하기 위해 이용될 수 있다.
섹션 II는 연관된 방법들뿐만이 아니라, 실시예에 따른, 디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일들에 기초하여 자원 관리를 수행하는 예시적인 컴퓨팅 디바이스를 설명한다. 섹션 III은 섹션 II의 예시적인 컴퓨팅 디바이스가 또한 어떻게 멀티 프로세스 애플리케이션들을 위한 동적 자원 관리를 가능하게 할 수 있는지를 설명한다. 섹션 IV은 여기서 설명된 자원 관리 특징들을 구현할 수 있는 예시적인 모바일 디바이스를 설명한다. 섹션 V은 여기서 설명된 자원 관리 특징들을 구현할 수 있는 예시적인 데스크탑 컴퓨터를 설명한다. 섹션 VI는 몇몇의 맺음말을 제공한다.
II. 디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일들에 기초하여 자원 관리를 수행하기 위한 예시적인 시스템 및 방법들
도 1은 실시예에 따른, 디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일들에 기초하여 자원 관리를 수행하는 컴퓨팅 디바이스(100)의 블록도이다. 컴퓨팅 디바이스(100)는 일반적으로 사용자를 대표하여 애플리케이션들을 구동할 수 있는 프로세서 기반 전자 디바이스를 나타내는 것을 의도한 것이다. 하나의 실시예에서, 컴퓨팅 디바이스(100)는 모바일 폰(예컨대, 스마트 폰), 랩탑 컴퓨터, 태플릿 컴퓨터, 노트북과 같은 모바일 컴퓨팅 디바이스를 포함한다. 컴퓨팅 디바이스(100)는 착용식 컴퓨터(예컨대, 머리 장착형 컴퓨터), 휴대형 미디어 플레이어, PDA(personal digital assistant), PNA(personal navigation assistant), 핸드헬드 게임 콘솔과 같은 다른 유형의 모바일 컴퓨팅 디바이스들, 또는 사용자를 대표하여 애플리케이션들을 구동할 수 있는 임의의 다른 모바일 디바이스를 포함할 수 있는 것을 생각할 수 있다. 컴퓨팅 디바이스(100)의 기능성을 병합할 수 있는 모바일 디바이스의 한가지 예시가 도 14를 참조하여 아래에서 논의될 것이다. 다른 실시예에서, 컴퓨팅 디바이스(100)는 데스크탑 컴퓨터 또는 사용자를 대표하여 애플리케이션들을 구동시킬 수 있는 다른 비모바일 컴퓨팅 플랫폼을 포함한다. 컴퓨팅 디바이스(100)의 기능성을 병합할 수 있는 예시적인 데스크탑 컴퓨터가 도 15를 참조하여 아래에서 논의될 것이다.
도 1에서 도시된 바와 같이, 컴퓨팅 디바이스(100)는 애플리케이션(102), 운영체제(104), 및 데이터 스토어(106)를 포함한다. 하나의 실시예에서, 애플리케이션(102)과 운영체제(104) 각각은, 컴퓨팅 디바이스(100)의 메모리 내에 저장되어 있고, 메모리에 통신가능하게 연결된 프로세서(예컨대, 소프트웨어 명령어들을 실행하도록 동작가능한 마이크로프로세서 또는 다른 회로)에 의해 이로부터 실행되는 소프트웨어 컴포넌트들을 포함한다. 이러한 메모리 및 프로세서는 단순화를 위해 도 1에서 도시되지는 않는다. 이러한 실시예에 또한 따르면, 애플리케이션(102)과 운영체제(104)는 각각 컴퓨팅 디바이스(100)의 비휘발성 메모리 내에 영구적으로 저장될 수 있고, 그런 다음 컴퓨팅 디바이스(100)의 전력구동 동작 동안 프로세서에 의한 실행을 위해 컴퓨팅 디바이스(100)의 휘발성 메모리로 일시적으로 이전될 수 있다.
애플리케이션(102)은 컴퓨팅 디바이스(100)의 사용자를 대표하여 기능들을 수행하고/수행하거나 특징들을 제공하기 위해 컴퓨팅 디바이스(100) 상에 설치되고 실행될 수 있는 폭넓게 다양한 컴퓨터 프로그램들 중 임의의 프로그램을 나타내도록 의도된 것이다. 애플리케이션(102)은, 예컨대, 비제한적인 예시로서, 전화 애플리케이션, 이메일 애플리케이션, 메시징 애플리케이션, 웹 브라우징 애플리케이션, 캘린더 애플리케이션, 유틸리티 애플리케이션, 게임 애플리케이션, 소셜 네트워킹 애플리케이션, 뮤직 애플리케이션, 생산성 애플리케이션, 라이프스타일 애플리케이션, 레퍼런스 애플리케이션, 여행 애플리케이션, 스포츠 애플리케이션, 네비게이션 애플리케이션, 헬스케어 및 피트니스 애플리케이션, 뉴스 애플리케이션, 사진 애플리케이션, 금융 애플리케이션, 비지니스 애플리케이션, 교육 애플리케이션, 날씨 애플리케이션, 이리더 애플리케이션, 의료 애플리케이션 등을 나타낼 수 있다.
운영체제(104)는 자원들을 총괄적으로 관리하고 컴퓨팅 디바이스(100) 상에서 실행 중인 애플리케이션들을 위한 공통 서비스들을 제공하는 컴퓨터 프로그램들의 세트를 포함한다. 도 1에서 도시된 바와 같이, 운영체제(104)는 드라이버들(110), 커넬(120), 및 시스템 서비스들(130)을 포함한다. 드라이버들(110)은 운영체제(104)가 CPU, 시스템 메모리 및 I/O 디바이스들과 같은, 컴퓨팅 디바이스(100)의 다양한 하드웨어 자원들과 상호작용할 수 있게 해주는 컴포넌트들을 포함한다. 커넬(120)은 드라이버들(110)을 이용하여 이러한 하드웨어 자원들 및 컴퓨팅 디바이스(100)의 다른 자원들을 관리하고 다른 프로그램들이 이러한 자원들을 운용하고 이용하도록 해준다. 커넬(120)은 프로세스들을 CPU에 할당하고, 시스템 메모리를 특정 프로세스에 할당하며, I/O 요청들을 적절한 디바이스들에 할당하는 것과 같은 동작들을 수행할 수 있다. 시스템 서비스들(130)은 커넬(120)에 의해 할당될 수 있는 다양한 자원들에 대한 애플리케이션들로부터의 요청들을 서비스하도록 동작하는 컴포넌트들이다.
도 1에서 도시된 바와 같이, 커넬(120)은 메모리 관리자(122)를 포함한다. 메모리 관리자(122)는 컴퓨팅 디바이스(100)의 시스템 메모리를 어떻게 사용할지를 제어하고 다른 프로세스들이 자신들이 필요한 시스템 메모리에 액세스할 수 있게 해주는 동작들을 수행한다. 다른 동작들 중에서도, 메모리 관리자(122)는 가상 어드레싱 스킴(scheme)을 유지할 수 있고, 프로세스들이 물리적으로 이용가능한 것보다 많은 시스템 메모리를 이용할 수 있도록 페이징을 수행할 수 있다. 시스템 메모리를 관리하기 위해, 메모리 관리자(122)는 드라이버들(110) 중 하나의 드라이버인 메모리 드라이버(112)와 상호작용한다.
도 1에서 추가로 도시된 바와 같이, 시스템 서비스들(130)은 자원 관리자(132)를 포함한다. 여기서 보다 자세하게 논의될 바와 같이, 자원 관리자(132)는 애플리케이션에 할당될 자원량을 결정하며, 이러한 자원이 이용가능한 경우 이 자원량을 할당하도록 동작하는 컴포넌트이며, 이러한 결정은 애플리케이션에 대한 자원 사용량 프로파일에 기초할 수 있다. 아래의 설명에서, 애플리케이션에 할당될 자원은 시스템 메모리인 것으로 가정될 것이지만, 여기서 설명된 자원 관리 기술들은, 비제한적인 예시로서, CPU, 시스템 메모리 이외의 다른 휘발성 메모리, 비휘발성 메모리, 네트워크 자원, I/O 자원, 전력 자원(예컨대, 배터리 전력 또는 몇몇의 다른 전력 공급기로부터의 전력), 및 센서 자원(예컨대, 카메라 또는 마이크로폰)을 비롯하여, 컴퓨팅 디바이스(100)의 임의의 다른 자원으로 손쉽게 확장될 수 있다는 것을 이해해야 한다.
데이터 스토어(106)는 컴퓨팅 디바이스(100)의 휘발성 또는 비휘발성 메모리 내에 저장된 데이터의 콜렉션을 포함한다. 여기서 설명될 바와 같이, 데이터 스토어(106)는 컴퓨팅 디바이스(100) 상에 설치되고 실행될 수 있는 애플리케이션들에 대한 자원 사용량 프로파일들을 저장하기 위해 자원 관리자(132)에 의해 이용된다. 일정한 예시적인 구현예들에 따르면, 데이터 스토어(106)는 레지스터(register) 또는 데이터베이스를 포함할 수 있다.
(예컨대, 애플리케이션의 사용자 활성화 또는 몇몇의 다른 이벤트에 응답하여) 애플리케이션(102)이 론칭될 경우, 애플리케이션(102)이 적절하게 실행되기 위해 필요한 자원들이 애플리케이션(102)에 할당될 것을 요청하는 하나 이상의 시스템 서비스 콜들이 애플리케이션(102)을 대표하여 시스템 서비스들(130)에 대해 행사된다. 콜(들)에 응답하여, 자원 관리자(132)는 필요한 자원들이 이용가능한지를 결정하고, 및 이러한 자원들이 이용가능한 경우 이 자원들이 애플리케이션(102)에 할당되게 하도록 동작한다.
시스템 메모리의 경우, 자원 관리자(132)는 데이터 스토어(106) 내에 저장될 수 있는 애플리케이션(102)에 대한 자원 사용량 프로파일에 액세스하려고 시도함으로써 애플리케이션(102)에 할당할 시스템 메모리의 양을 결정한다. 실시예에서, 애플리케이션(102)에 대한 이러한 자원 사용량 프로파일은 실행 동안 애플리케이션(102)이 이용할 것으로 예상되는 시스템 메모리의 양을 규정하는 예상 자원 사용량을 포함한다. 대안적으로, 자원 사용량 프로파일 애플리케이션(102)은 이러한 예상 자원 사용량을 유도할 수 있는 데이터를 포함할 수 있다. 추가적인 실시예에서, 데이터 스토어(106) 내에 애플리케이션(102)에 대한 어떠한 자원 사용량 프로파일도 존재하지 않으면, 디폴트 예상 자원 사용량이 애플리케이션(102)에 지정될 수 있다. 이러한 디폴트 예상 자원 사용량은 모든 애플리케이션들에 대해 동일할 수 있거나, 또는 애플리케이션 유형에 의해 달라질 수 있다.
자원 관리자(132)가 애플리케이션(102)에 대한 예상 자원 사용량을 결정하면, 자원 관리자(132)는 예상 자원 사용량이 현재 이용가능한지를 결정하기 위해 메모리 관리자(122)와 통신한다. 예상 자원 사용량이 현재 이용가능하면, 자원 관리자(132)는 예상 자원 사용량을 애플리케이션(102)에 할당할 것이며 애플리케이션(102)은 실행되는 것이 허용될 수 있다. 하지만, 예상 자원 사용량이 현재 이용가능하지 않으면, 자원 관리자(132)는 애플리케이션(102)이 실행되는 것을 막을 수 있다. 또한, 예상 자원 사용량이 현재 이용가능하지 않으면, 자원 관리자(132)는 또한 애플리케이션(102)에 대한 시스템 메모리를 비우기 위해 컴퓨팅 디바이스 상에서 현재 실행 중에 있는 하나 이상의 다른 프로세스들을 종료시킬 수 있다. 이러한 다른 프로세스들은 프로세스 우선순위화 스킴에 따라 애플리케이션(102)보다 낮은 우선순위가 지정된 프로세스들일 수 있다. 이러한 방식으로 충분한 시스템 메모리가 재확보되면, 자원 관리자(132)는 애플리케이션(102)이 실행되는 것을 허용할 수 있다.
애플리케이션(102)이 실행되기 시작한 후, 자원 관리자(132)는 얼마나 많은 시스템 메모리를 애플리케이션(102)이 실제로 이용하고 있는지를 모니터링할 것이다. 이러한 방식에서, 자원 관리자(132)는 예상 자원 사용량에 따라 애플리케이션(102)에 원래 할당되었던 것 보다 많은 시스템 메모리를 애플리케이션(102)이 사용 중에 있다라고 결정할 수 있다. 이 경우, 자원 관리자(132)는 애플리케이션(102)이 적절하게 실행되는 데에 충분한 시스템 메모리가 이용가능하는 것을 보장하기 위해 컴퓨팅 디바이스(100) 상에서 동시적으로 실행 중에 있는 하나 이상의 프로세스들을 종료시키려고 시도할 수 있다. 자원 관리자(132)는 또한, 애플리케이션(102)이 시스템 메로리 사용량에 대한 미리정의된 상한선을 초과하고 있다고 결정하거나 또는 그렇지 않고 애플리케이션(102)에 의한 시스템 메모리 사용량이 받아들일 수 없다라고 결정한 경우 애플리케이션(102)의 실행을 종료시킬 수 있다.
자원 관리자(132)는 또한 애플리케이션(102)에 대해 데이터 스토어(106) 내에 저장된 예상 자원 사용량을 업데이트하기 위해 얼마나 많은 시스템 메모리가 애플리케이션(102)에 의해 이용 중에 있는지를 모니터링함으로써 얻어낸 정보를 활용할 것이다. 예상 자원 사용량을 업데이트하기 위한 다양한 알고리즘들을 아래에서 자세하게 설명할 것이다. 이러한 방식으로, 자원 관리자(132)는 어떻게 애플리케이션(102)이 거동하는지와 컴퓨팅 디바이스(100)의 사용자에 의해 활용되고 있는지에 대해 반응하는 방식으로 시간에 걸쳐 애플리케이션(102)에 대한 자원들의 할당을 자동적으로 미세 조정할 수 있다. 이것은 이롭게도, 컴퓨팅 디바이스(100)가 특히 멀티태스킹 시나리오들 동안에 보다 나은 사용자 경험과 개선된 성능을 제공하게 할 수 있다.
디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일에 따라 자원 관리자(132)가 컴퓨팅 디바이스(100)의 자원을 관리하도록 동작하는 방식을 이제 도 2의 흐름도(200)를 참조하여 설명할 것이다. 흐름도(200)의 단계들은 도 1의 컴퓨팅 디바이스(100)의 컴포넌트들을 계속해서 참조하여 설명할 것이지만, 본 방법은 다른 컴포넌트들에 의해 완전히 수행될 수 있다는 것을 이해해야 한다.
도 2에서 도시된 바와 같이, 흐름도(200)의 방법은 컴퓨팅 디바이스(100)에 의해 실행 중에 있는 애플리케이션의 제1 인스턴스(instance)에 의해 이용되는 제1 자원량을 자원 관리자(132)가 결정하는 단계(202)로 시작한다. 예를 들어, 앞서 언급한 바와 같이, 자원 관리자(132)는 애플리케이션(102)의 제1 인스턴스가 컴퓨팅 디바이스(100)에 의해 실행 중에 있는 동안 애플리케이션(102)의 제1 인스턴스에 의해 이용 중에 있는 제1 시스템 메모리량을 결정할 수 있다.
실시예에서, 자원 관리자(132)는 애플리케이션과 연관된 하나 이상의 백그라운드 태스크들 및 애플리케이션과 연관된 포그라운드 프로세스에 의해 이용되는 자원량을 결정함으로써 이러한 제1 시스템 메모리량을 결정한다. 포그라운드 프로세스는 애플리케이션의 제1 인스턴스를 위한 사용자 인터페이스를 현재 제공하고 있으며 컴퓨팅 디바이스(100)와 연관된 디스플레이의 적어도 일부분을 점유하고 있는 프로세스일 수 있다. 하지만, 오늘날의 많은 애플리케이션들의 실행은 또한 하나 이상의 백그라운드 프로세스들(여기서는 백그라운드 태스크들이라고도 칭해짐)의 실행을 수반한다. 이러한 백그라운드 태스크들은 포그라운드 프로세스와 동시적으로 실행될 수 있으며, 몇몇의 경우들에서는, 포그라운드 프로세스에 의해 개시될 수 있다. 이러한 백그라운드 태스크들의 예시들은, 비제한적인 예시로서, 백그라운드 오디오를 생성하는 것, VoIP(Voice over Internet Protocol) 콜을 수행하는 것, 이메일들을 동기화하는 것, 콘텐츠 공유 등을 포함한다. 포그라운드 프로세스와 같이, 이러한 백그라운드 태스크들은 시스템 자원들을 소비한다. 하지만, 애플리케이션 자원 사용량의 통상적인 개념은 이러한 백그라운드 태스크들에 의해 소비되는 자원들을 일반적으로 포함하지는 않는다. 실시예는 이롭게도, 실행 중인 애플리케이션과 연관된 포그라운드 프로세스 및 동일한 애플리케이션과 연관된 하나 이상의 백그라운드 태스크들 모두에 의한 자원 사용량을 추적하고 이 양 유형들의 자원 사용량을 결합하여 애플리케이션에 대한 총 자원 사용량을 획득함으로써 이것을 해결한다.
단계(204)에서, 자원 관리자(132)는 적어도 제1 자원량에 기초하여 애플리케이션에 대한 제1 예상 자원 사용량을 계산한다. 예를 들어, 자원 관리자(132)는 적어도 제1 자원량에 기초하여 애플리케이션(102)에 대한 제1 예상 시스템 메모리 사용량을 계산할 수 있다. 이 단계가 어떻게 수행될 수 있는지를 보여주기 위해 다양한 예시적인 알고리즘들이 아래에서 제공될 것이다.
단계(206)에서, 자원 관리자(132)는 제1 예상 자원 사용량을 데이터 스토어(106) 내에 저장한다. 예를 들어, 자원 관리자(132)는 애플리케이션(102)에 대한 제1 예상 시스템 메모리 사용량을 데이터 스토어(106) 내에 저장할 수 있다.
단계(206)의 수행 후의 어느 시점에서, 자원 관리자(132)는 애플리케이션의 제2 인스턴스가 컴퓨팅 디바이스(100) 상에서 실행될 것임을 통지받는다. 단계(208)에서, 자원 관리자(132)는 데이터 스토어(106) 내에 저장된 제1 예상 자원 사용량에 적어도 기초하여 애플리케이션의 제2 인스턴스에 할당될 제2 자원량을 결정한다. 예를 들어, 자원 관리자(132)는 데이터 스토어(106) 내에 애플리케이션(102)에 대해 저장된 제1 예상 시스템 메모리 사용량에 적어도 기초하여 애플리케이션(102)의 제2 인스턴스에 할당될 제2 시스템 메모리량을 결정할 수 있다. 제2 시스템 메모리량을 결정하는 것은, 예컨대, 제2 시스템 메모리량을 제1 예상 시스템 메모리 사용량으로 설정하는 것을 포함할 수 있다.
단계(204)에서의 애플리케이션에 대한 제1 예상 자원 사용량을 계산하기 위해 다양한 방법들이 이용될 수 있다. 예를 들어, 하나의 실시예에서, 제1 예상 자원 사용량은 일정 회수의 실행들에 걸쳐 애플리케이션에 의해 이용되었던 최대 자원량에 기초하여 계산된다. 이 접근법은 도 3의 흐름도(300)에 의해 나타난다.
구체적으로, 도 3은 실시예에 따른, 애플리케이션에 대한 예상 자원 사용량을 계산하기 위한 방법의 흐름도(300)를 도시한다. 도 3에서 도시된 바와 같이, 흐름도(300)의 방법은, 자원 관리자(132)가, 단계(202) 동안에 결정된 제1 자원량을, 애플리케이션의 이전에 실행된 하나 이상의 인스턴스들과 연관된, 이전에 결정된 하나 이상의 자원량들과 비교함으로써 애플리케이션에 대한 최대 자원 사용량을 획득하는 단계(302)로 시작한다. 단계(304)에서, 자원 관리자(132)는 최대 자원 사용량에 기초하여 제1 예상 자원 사용량을 계산한다.
이 접근법의 예시를 이제 제공할 것이다. 이 예시에 따르면, 자원 관리자(132)는 애플리케이션(102)의 다섯 번의 구별적인 실행들 동안에 애플리케이션(102)에 의한 시스템 메모리 사용량을 추적하고 이러한 실행들에 걸친 애플리케이션(102)의 최대 시스템 메모리 사용량을 예상 자원 사용량으로서 선택한다. 예를 들어, 애플리케이션(102)의 마지막 네 번의 실행들 동안, 애플리케이션(102)은 100 MB, 120 MB, 160 MB 및 140 MB의 시스템 메모리를 각각 이용했다는 것을 가정한다. 그런 후, 단계(202) 동안, 자원 관리자(132)는 애플리케이션(102)의 현재 실행 중인 인스턴스가 150 MB의 시스템 메모리를 이용 중에 있다라고 결정한다. 이 경우에서, 자원 관리자(132)는 제1 예상 자원 사용량을 160 MB(또는, 아마도 160 MB 더하기 얼마간의 버퍼량)으로 설정할 수 있는데, 그 이유는 이 160 MB은 애플리케이션(102)의 마지막 다섯 번의 실행들에 걸쳐 애플리케이션(102)의 최대 시스템 메모리 사용량이기 때문이다.
다른 실시예에서, 제1 예상 자원 사용량은 일정 회수의 실행들에 걸쳐 애플리케이션에 의해 이용된 평균 자원량에 기초하여 계산된다. 이 접근법은 도 4의 흐름도(400)에 의해 나타난다.
구체적으로, 도 4는 실시예에 따른, 애플리케이션에 대한 예상 자원 사용량을 계산하기 위한 방법의 흐름도(400)를 도시한다. 도 4에서 도시된 바와 같이, 흐름도(400)의 방법은, 자원 관리자(132)가, 단계(202) 동안에 결정된 제1 자원량과, 애플리케이션의 이전에 실행된 하나 이상의 인스턴스들과 연관된, 이전에 결정된 하나 이상의 자원량들에 기초하여, 애플리케이션에 대한 평균 자원 사용량을 획득하는 단계(402)로 시작한다. 단계(404)에서, 자원 관리자(132)는 평균 자원 사용량에 기초하여 제1 예상 자원 사용량을 계산한다.
이 접근법의 예시를 이제 제공할 것이다. 이 예시에 따르면, 자원 관리자(132)는 애플리케이션(102)의 다섯 번의 구별적인 실행들 동안에 애플리케이션(102)에 의한 시스템 메모리 사용량을 추적하고, 이 값들의 평균을 계산하고, 그런 후, 평균값을 예상 자원 사용량으로서 이용한다. 예를 들어, 애플리케이션(102)의 마지막 네 번의 실행들 동안, 애플리케이션(102)은 100 MB, 120 MB, 160 MB 및 140 MB의 시스템 메모리를 각각 이용했다는 것을 가정한다. 그런 후, 단계(202) 동안, 자원 관리자(132)는 애플리케이션(102)의 현재 실행 중인 인스턴스가 150 MB의 시스템 메모리를 이용 중에 있다라고 결정한다. 이 경우, 자원 관리자(132)는 애플리케이션(102)에 대한 평균 자원 사용량은 ((100 MB + 120 MB + 160 MB + 140 MB + 150 MB) / 5) = 134 MB이라고 결정할 것이다. 결과적으로, 자원 관리자(132)는 제1 예상 자원 사용량을 134 MB(또는, 아마도 134 MB 더하기 얼마간의 버퍼량)로 설정할 수 있다.
단계(402)에서 설명된 평균 자원 사용량이 획득될 수 있는 다른 방법을 이제 설명할 것이다. 이 접근법에 따르면, 새로운 장기간 러닝 평균(running average)을 획득하기 위해 자원 사용량의 러닝 평균은 가장 최근의 자원 사용량과 결합된다. 이러한 결합은, 오래된 장기간 러닝 평균 또는 가장 최근의 자원 사용량 중 어느 하나에 더 큰 가중치가 적용되도록 가중화될 수 있다. 이와 달리, 양자의 양들은 똑같이 가중화될 수 있다. 이 접근법은 다음의 수학식을 이용하여 표현될 수 있으며:
Figure pct00001
여기서,
Figure pct00002
은 자원 사용량의 새로운 러닝 평균을 나타내고,
Figure pct00003
은 자원 사용량의 오래된 러닝 평균을 나타내고,
Figure pct00004
는 가장 최근에 관찰된 자원 사용량을 나타내며,
Figure pct00005
는 가중치를 결정하는 변수이다.
예를 들어, 자원 사용량의 오래된 러닝 평균, 즉
Figure pct00006
은 130 MB와 같고, 가장 최근에 관찰된 자원 사용량, 즉
Figure pct00007
은 160 MB이며, 가중화 계수
Figure pct00008
는 .25인 것을 가정한다. 이 경우, 자원 사용량의 새로운 러닝 평균, 즉
Figure pct00009
은 ((.25 * 130 MB) + (.75 * 160 MB)) = 152.5 MB일 것이다. 결과적으로, 자원 관리자(132)는 제1 예상 자원 사용량을 152.5 MB(또는, 아마도 152.5 MB 더하기 얼마간의 버퍼량)로 설정할 수 있다.
러닝 평균들을 이용하여 애플리케이션에 대한 평균 자원 사용량을 획득하는 전술한 방법이 도 5의 흐름도(500)에 도시된다. 도 5에서 도시된 바와 같이, 흐름도(500)의 방법은 자원 관리자(132)가 단계(202) 동안에 획득된 제1 자원량(즉, 가장 최근에 관찰된 자원 사용량)에 제1 가중화 계수를 곱하는 단계(502)로 시작한다. 단계(504) 동안, 자원 관리자(132)는 적어도 이전에 결정된 하나 이상의 자원량(즉, 이전에 관찰된 자원 사용량)에 기초하여 획득되었던 러닝 평균 자원 사용량에 제2 가중화 계수를 곱하여 제2 곱셈값을 획득한다. 단계(506)에서, 자원 관리자(132)는 제1 곱셈값과 제2 곱셈값을 합하여 새로운 평균 자원 사용량을 획득한다.
도 2를 참조하여 위에서 언급한 바와 같이, 흐름도(200)의 단계(208)에서, 자원 관리자(132)는 제1 예상 자원 사용량에 적어도 기초하여 컴퓨팅 디바이스(100)에 의해 실행될 애플리케이션의 제2 인스턴스에 할당될 제2 자원(예컨대, 시스템 메모리)의 양을 결정한다. 제2 자원량은 예상 알고리즘에 기초한 추정치이기 때문에, 애플리케이션의 제2 인스턴스는 할당된 제2 자원량보다 많이 자원량을 소비할 수 있는 것이 언제나 가능하다. 이러한 시나리오를 해결하기 위해, 자원 관리자(132)는, 애플리케이션의 제2 인스턴스가 제2 인스턴스 자신에 할당된 지분의 자원들보다 많이 자원들을 소비하고 있다라고 결정하도록 구성될 수 있고, 이에 응답하여, 자원들을 비우기 위해 컴퓨팅 디바이스(100) 상에서 동시에 실행 중인 다른 프로세스들을 종료시킬 수 있다. 예를 들어, 자원 관리자(132)는 프로세스 우선순위화 스킴에 따라 해당 애플리케이션보다 낮은 우선순위가 지정된 일정한 프로세스들을 종료시킬 수 있다.
이 프로세스는 도 6의 흐름도(600)에서 도시된다. 구체적으로, 도 6에서 도시된 바와 같이, 흐름도(600)의 방법은 컴퓨팅 디바이스(100)에 의해 실행 중에 있는 애플리케이션의 제2 인스턴스에 의해 이용되는 자원량이 제2 자원량을 초과한다라고 자원 관리자(132)가 결정하는 단계(602)로 시작한다. 이러한 결정에 응답하여, 단계(604)에서, 자원 관리자(132)는 컴퓨팅 디바이스 상에서 동시에 실행 중인 하나 이상의 프로세스들을 종료시킨다. 추가적으로 또는 대안적으로, 자원 관리자(132)는 컴퓨팅 디바이스(100) 상에서 동시에 실행 중인 하나 이상의 프로세스들과 통신하고, 이러한 프로세스들에게 각자의 자원의 소비를 감소시킬 것을 명령할 수 있다.
자원 관리자(132)가, 메모리 관리자(122)와의 통신 또는 몇몇의 다른 수단을 통해, 애플리케이션의 제2 인스턴스에 할당될 제2 자원량이 현재 이용가능하지 않다고 결정할 수 있다. 이 경우, 자원 관리자(132)는 애플리케이션의 제2 인스턴스의 실행을 막을 수 있다.
이 프로세스는 도 7의 흐름도(700)에서 도시된다. 구체적으로, 도 7에서 도시된 바와 같이, 흐름도(700)의 방법은 제2 자원량이 현재 이용가능하지 않다라고 자원 관리자(132)가 결정하는 단계(702)로 시작한다. 이러한 결정에 응답하여, 단계(704)에서, 자원 관리자(132)는 애플리케이션의 제2 인스턴스의 실행을 막는다.
애플리케이션의 제2 인스턴스에 할당된 제2 자원량이 현재 이용가능하지 않다라고 자원 관리자(132)가 결정하는 경우, 자원 관리자(132)는 또한 자원을 비우기 위해 컴퓨팅 디바이스(100) 상에서 실행 중에 있는 하나 이상의 프로세스들을 종료시킬 수 있다. 예를 들어, 자원 관리자(132)는 프로세스 우선순위화 스킴에 따라 해당 애플리케이션보다 낮은 우선순위가 지정된 일정한 프로세스들을 종료시킬 수 있다. 이러한 다른 프로세스들에 의한 자원 소비가 감소된 후, 자원 관리자(132)는 애플리케이션의 제2 인스턴스의 실행을 허용할 수 있다.
이 프로세스는 도 8의 흐름도(800)에서 도시된다. 구체적으로, 도 8에서 도시된 바와 같이, 흐름도(800)의 방법은 제2 자원량이 현재 이용가능하지 않다라고 자원 관리자(132)가 결정하는 단계(802)로 시작한다. 이러한 결정에 응답하여, 단계(804)에서, 자원 관리자(132)는 컴퓨팅 디바이스(100) 상에서 현재 실행 중인 하나 이상의 프로세스들을 종료시킨다. 추가적으로 또는 대안적으로, 자원 관리자(132)는 컴퓨팅 디바이스(100) 상에서 현재 실행 중인 하나 이상의 프로세스들과 통신하고, 이러한 프로세스들에게 각자의 자원의 소비를 감소시킬 것을 명령할 수 있다.
스마트폰과 같은, 많은 컴퓨팅 디바이스들의 경우, 전형적인 사용량 모델은 컴퓨팅 디바이스별 사용자 하나이다. 이 경우, 컴퓨팅 디바이스에 대한 자원 사용량 프로파일들을 저장하는 것은 특정 사용자에 대한 자원 사용량 프로파일들을 저장하는 것과 본질적으로 동일하다. 하지만, 컴퓨팅 디바이스들은 또한 다중 사용자들을 지원하기 위해 이용될 수 있다. 예를 들어, 동일 가정의 복수의 여러 구성원들은 각각 동일한 태블릿 컴퓨터, 데스크탑 컴퓨터, 또는 게임 콘솔을 이용하여 애플리케이션들을 구동시킬 수 있다. 이러한 사용자들 각각은 상이한 애플리케이션들을 이용할 수 있거나 또는 동일한 애플리케이션을 상이한 방식들로 이용할 수 있어서, 그 결과 다양한 레벨들의 자원 소비를 초래시킬 수 있다. 이 시나리오를 해결하기 위해, 어떠한 실시예들은 컴퓨팅 디바이스 상에 애플리케이션과 사용자 둘 다에 의한 자원 사용량 프로파일들을 저장하고, 이로써 자원들의 예상적인 할당은 컴퓨팅 디바이스를 현재 이용 중에 있는 특정 사용자에 맞춤화될 수 있다. 이러한 자원 사용량 프로파일들은 (이전에 설명한 디바이스 특유의 자원 사용량 프로파일들에 대비되어) 사용자 특유의 자원 사용량 프로파일들인 것으로서 생각될 수 있다.
도 9는 실시예에 따른, 사용자 특유의 자원 사용량 프로파일에 따라 컴퓨팅 디바이스의 자원을 관리하기 위해 컴퓨팅 디바이스에 의해 구현되는 방법의 흐름도(900)를 도시한다. 흐름도(900)의 방법은 도 1을 참조하여 상술한 컴퓨팅 디바이스(100)의 컴포넌트들을 계속해서 참조하여 설명할 것이다. 하지만, 본 방법은 이러한 실시예로 한정되지 않는다.
도 9에서 도시된 바와 같이, 흐름도(900)의 방법은 제1 사용자를 대표하여 컴퓨팅 디바이스(100)에 의해 실행 중에 있는 애플리케이션의 제1 인스턴스에 의해 이용되는 제1 자원량을 자원 관리자(132)가 결정하는 단계(902)로 시작한다. 예를 들어, 자원 관리자(132)는 애플리케이션(102)의 제1 인스턴스가 제1 사용자를 대표하여 컴퓨팅 디바이스(100)에 의해 실행 중에 있는 동안 애플리케이션(102)의 제1 인스턴스에 의해 이용 중에 있는 제1 시스템 메모리량을 결정할 수 있다. 제1 사용자를 대표하여 애플리케이션(102)의 제1 인스턴스가 실행 중에 있다라는 사실은 폭넓게 다양한 임의의 방법으로 결정될 수 있다. 사용자가 컴퓨팅 디바이스(100)에 로그인 할 수 있는 실시예에서, 현재 로그인 정보가 이러한 결정을 행하는 데에 이용될 수 있다. 하지만, 이 예시는 비제한적인 것이며, 컴퓨팅 디바이스의 사용자의 신분을 결정하기 위한 임의의 적절한 방법이 이용될 수 있다.
단계(904)에서, 자원 관리자(132)는 적어도 제1 자원량에 기초하여 애플리케이션과 제1 사용자에 대한 제1 예상 자원 사용량을 계산한다. 예를 들어, 자원 관리자(132)는 적어도 제1 자원량에 기초하여 애플리케이션(102)과 제1 사용자에 대한 제1 예상 시스템 메모리 사용량을 계산할 수 있다. 이 단계가 어떻게 수행될 수 있는지를 보여주기 위한 다양한 예시적인 알고리즘들은 이전에 제공되었다.
단계(906)에서, 자원 관리자(132)는 제1 예상 자원 사용량을 데이터 스토어(106) 내에 저장한다. 예를 들어, 자원 관리자(132)는 애플리케이션(102) 및 제1 사용자에 대한 제1 예상 시스템 메모리 사용량을 데이터 스토어(106) 내에 저장할 수 있다.
단계(906)의 수행 후의 어느 시점에서, 자원 관리자(132)는 제1 사용자를 대표하여 애플리케이션의 제2 인스턴스가 컴퓨팅 디바이스(100) 상에서 실행될 것임을 통지받는다. 단계(908)에서, 자원 관리자(132)는 데이터 스토어(106) 내에 저장된 제1 예상 자원 사용량에 적어도 기초하여 애플리케이션의 제2 인스턴스에 할당될 제2 자원량을 결정한다. 예를 들어, 자원 관리자(132)는 데이터 스토어(106) 내에 애플리케이션(102) 및 제1 사용자에 대해 저장된 제1 예상 시스템 메모리 사용량에 적어도 기초하여 애플리케이션(102)의 제2 인스턴스에 할당될 제2 시스템 메모리량을 결정할 수 있다. 제2 시스템 메모리량을 결정하는 것은, 예컨대, 제2 시스템 메모리량을 제1 예상 시스템 메모리 사용량으로 설정하는 것을 포함할 수 있다.
단계(910)에서, 자원 관리자(132)는 제2 사용자를 대표하여 컴퓨팅 디바이스(100)에 의해 실행 중에 있는 애플리케이션의 제3 인스턴스에 의해 이용되는 제3 자원량을 결정하며, 제2 사용자는 제1 사용자와는 상이하다. 예를 들어, 자원 관리자(132)는 애플리케이션(102)의 제3 인스턴스가 제2 사용자를 대표하여 컴퓨팅 디바이스(100)에 의해 실행 중에 있는 동안 애플리케이션(102)의 제3 인스턴스에 의해 이용 중에 있는 제3 시스템 메모리량을 결정할 수 있다. 제2 사용자를 대표하여 애플리케이션(102)의 제3 인스턴스가 실행 중에 있다라는 사실은 폭넓게 다양한 임의의 방법으로 결정될 수 있다. 사용자가 컴퓨팅 디바이스(100)에 로그인 할 수 있는 실시예에서, 현재 로그인 정보가 이러한 결정을 행하는 데에 이용될 수 있다. 하지만, 이 예시는 비제한적인 것이며, 컴퓨팅 디바이스의 사용자의 신분을 결정하기 위한 임의의 적절한 방법이 이용될 수 있다.
단계(912)에서, 자원 관리자(132)는 적어도 제3 자원량에 기초하여 애플리케이션과 제2 사용자에 대한 제2 예상 자원 사용량을 계산한다. 예를 들어, 자원 관리자(132)는 적어도 제3 자원량에 기초하여 애플리케이션(102)과 제2 사용자에 대한 제1 예상 시스템 메모리 사용량을 계산할 수 있다. 이 단계가 어떻게 수행될 수 있는지를 보여주기 위한 다양한 예시적인 알고리즘들은 이전에 제공되었다.
단계(914)에서, 자원 관리자(132)는 제2 예상 자원 사용량을 데이터 스토어(106) 내에 저장한다. 예를 들어, 자원 관리자(132)는 애플리케이션(102) 및 제2 사용자에 대한 제2 예상 시스템 메모리 사용량을 데이터 스토어(106) 내에 저장할 수 있다.
단계(914)의 수행 후의 어느 시점에서, 자원 관리자(132)는 제2 사용자를 대표하여 애플리케이션의 제4 인스턴스가 컴퓨팅 디바이스(100) 상에서 실행될 것임을 통지받는다. 단계(916)에서, 자원 관리자(132)는 데이터 스토어(106) 내에 저장된 제2 예상 자원 사용량에 적어도 기초하여 애플리케이션의 제4 인스턴스에 할당될 제4 자원량을 결정한다. 예를 들어, 자원 관리자(132)는 데이터 스토어(106) 내에 애플리케이션(102) 및 제2 사용자에 대해 저장된 제2 예상 시스템 메모리 사용량에 적어도 기초하여 애플리케이션(102)의 제4 인스턴스에 할당될 제4 시스템 메모리량을 결정할 수 있다. 제4 시스템 메모리량을 결정하는 것은, 예컨대, 제4 시스템 메모리량을 제2 예상 시스템 메모리 사용량으로 설정하는 것을 포함할 수 있다.
도 10은 실시예에 따른, 디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일에 따라 애플리케이션의 론칭을 관리하기 위한 방법의 흐름도(1000)를 도시한다. 흐름도(1000)의 방법은 도 1을 참조하여 상술한 컴퓨팅 디바이스(100)의 컴포넌트들을 계속해서 참조하여 설명할 것이다. 하지만, 본 방법은 이러한 실시예로 한정되지 않는다.
도 10에서 도시된 바와 같이, 흐름도(1000)의 방법은 애플리케이션을 론칭해달라는 요청이 수신되는 단계(1002)로 시작한다. 예를 들어, 애플리케이션(102)을 론칭해달라는 요청은, 예컨대, 시스템 서비스들(130)에 의해 및/또는 자원 관리자(132)에 의해 수신될 수 있다.
단계(1004)에서, 자원 관리자(132)는 애플리케이션에 대한 예상 자원 사용량을 획득한다. 예를 들어, 자원 관리자(132)는 애플리케이션(102)에 대한 예상 자원 사용량을 획득할 수 있다. 예상 자원 사용량은 컴퓨팅 디바이스(100)에 의한 애플리케이션의 하나 이상의 이전 실행들 동안 컴퓨팅 디바이스(100)의 모니터링된 자원 사용량에 기초한다. 예상 자원 사용량, 또는 이러한 예상 자원 사용량을 계산하기 위해 필요한 정보는 애플리케이션에 대한 자원 사용량 프로파일로부터 획득될 수 있고, 이것은 데이터 스토어(206) 내에 저장될 수 있다. 자원은 휘발성 또는 비휘발성 메모리 자원, CPU 자원, I/O 자원, 네트워크 자원, 전력 자원, 또는 센서 자원 중 하나 이상을 포함할 수 있다. 예상 자원 사용량은 애플리케이션과 연관된 하나 이상의 백그라운드 태스크들 및 애플리케이션과 연관된 포그라운드 프로세스 둘 다에 의한 컴퓨팅 디바이스(100)의 자원 사용량을 모니터링하는 것에 기초할 수 있다.
결정 단계(1006)에서, 자원 관리자(132)는 예상 자원 사용량을 현재 이용가능한 자원량에 비교함으로써 충분한 양의 자원이 이용가능한지 여부를 결정한다. 예를 들어, 자원이 시스템 메모리인 실시예에서, 자원 관리자(132)는 메모리 관리자(122)로부터 현재 이용가능한 시스템 메모리량을 획득할 수 있고, 그런 후, 애플리케이션에 대한 예상 시스템 메모리 사용량을 현재 이용가능한 시스템 메모리에 비교하여 충분한 양의 시스템 메모리가 이용가능한지를 결정할 수 있다.
단계(1008)에서 도시된 바와 같이, 충분한 양의 자원이 이용가능하다고 자원 관리자(132)가 적어도 결정하면, 자원 관리자(132)는 애플리케이션이 론칭되는 것을 허용할 것이다. 예를 들어, 충분한 시스템 메모리가 이용가능하다고 자원 관리자(132)가 적어도 결정하면, 자원 관리자(132)는 애플리케이션(102)이 론칭되는 것을 허용할 것이다. 애플리케이션을 론칭하는 것을 자원 관리자(132)가 허용하기 위해 충족되어야 하는 다른 조건들이 있을 수 있다는 것을 유념해둔다.
단계(1010)에서 도시된 바와 같이, 충분한 양의 자원이 이용가능하지 않다고 자원 관리자(132)가 결정하면, 자원 관리자(132)는 애플리케이션이 론칭되는 것을 허용하지 않을 것이다. 예를 들어, 충분한 시스템 메모리가 이용가능하지 않다고 자원 관리자(132)가 결정하면, 자원 관리자(132)는 애플리케이션(102)이 론칭되는 것을 허용하지 않을 것이다. 추가적으로, 자원 관리자(132)는 하나 이상의 현재 실행 중인 프로세스들을 종료시키거나 또는 그렇지 않고 이 프로세스들의 자원 사용량을 감소시키게 함으로써 자원들을 비우려고 할 수 있다.
실시예에서, 자원 관리자(132)는 또한 특정 자원 사용량 거동들과 연관된 시간, 위치, 및 이벤트들과 같은, 애플리케이션 및/또는 사용자에 의한 자원 사용량과 관련된 다른 정보를 추적할 수 있다. 이러한 정보는 이롭게도, 사용자가 애플리케이션을 론칭하려고 시도하기 전에도 컴퓨팅 디바이스의 자원들을 애플리케이션에 예상적으로 할당하기 위해 이용될 수 있다. 또한, 애플리케이션들 및/또는 애플리케이션 데이터는 사용자가 이들에 액세스할 것으로 예상되기 전의 시점에서 메모리 내로 로딩될 수 있다.
예를 들어, 사용자가 특정 시간, 특정 장소에서, 또는 특정 이벤트와 연관되어 특정 애플리케이션을 론칭할 것 같다고 결정될 수 있는 경우, 자원 관리자(132)는, 사용자가 해당 애플리케이션을 론칭할 것으로 예상되기 전에, 그리고 아마도 그 직전에, 해당 애플리케이션에 할당될 충분한 자원들이 이용가능할 것을 보장하도록 동작할 수 있다. 또한, 이러한 예상 분석은, 사용자가 애플리케이션 및 그 특징들에 대한 즉시적 액세스를 획득할 수 있도록, 애플리케이션 또는 애플리케이션 콘텐츠를 시스템 메모리 내로 로딩하는 데에 실제로 이용될 수 있다.
이것을 나타내는 데에 도움이 되도록, 도 11은 프로세스들에 대해 자원들을 예상적으로 할당하기 위해 컴퓨팅 디바이스의 자원들에 대한 사용자의 모니터링된 자원 사용량 패턴들 및 이로부터 유도된 정보를 이용하기 위한 방법의 흐름도(1100)를 도시한다. 흐름도(1100)의 방법은 도 1을 참조하여 상술한 컴퓨팅 디바이스(100)의 컴포넌트들을 계속해서 참조하여 설명할 것이다. 하지만, 본 방법은 이러한 실시예로 한정되지 않는다.
도 11에서 도시된 바와 같이, 흐름도(1100)의 방법은 자원 관리자(132)가 애플리케이션 및/또는 사용자에 의한 컴퓨팅 디바이스(100)의 적어도 하나의 자원의 사용량의 패턴을 모니터링하는 단계(1102)로 시작한다. 이전에 논의한 바와 같이, 사용량의 패턴을 모니터링하는 것은 애플리케이션 및/또는 사용자에 의한 자원 사용량을 모니터링하는 것뿐만이 아니라, 특정 자원 사용량 거동들과 연관된 시간, 위치, 및 이벤트와 같은, 이러한 자원 사용량과 연관된 다른 정보를 모니터링하는 것을 수반할 수 있다.
단계(1104)에서, 자원 관리자(132)는 사용량의 패턴과 연관된 정보를 저장한다. 자원 관리자(132)는 예컨대 데이터 스토어(106) 내에 이러한 정보를 저장할 수 있다.
단계(1106)에서, 자원 관리자(132)는 이러한 저장된 정보를 이용하여, 컴퓨팅 디바이스(100)에 의한 프로세스의 실행 이전에 적어도 하나의 자원의 적어도 일부분을 적어도 하나의 프로세스에 예상적으로 할당한다. 하나의 예시적인 실시예에서, 단계(1106) 동안, 자원 관리자(132)는 컴퓨팅 디바이스(100)의 사용자 또는 임의의 다른 엔티티가 애플리케이션을 론칭하기 전에 자원의 적어도 일부분을 해당 애플리케이션에 예상적으로 할당한다. 적어도 하나의 자원이 시스템 메모리를 포함하는 다른 예시적인 실시예에서, 자원 관리자(132)는 컴퓨팅 디바이스(100)의 사용자 또는 임의의 다른 엔티티가 애플리케이션을 론칭하기 전에 애플리케이션 또는 해당 애플리케이션과 연관된 데이터의 적어도 일부분을, 예상적으로 할당된 시스템 메모리 내로 로딩할 수 있다. 이러한 예시들은 예시를 위해 제공되었을 뿐이며, 이에 한정되는 것으로 의도된 것은 아니다. 본 발명분야의 당업자는 추가적인 자원 관리 태스크들을 수행하기 위해 자원 사용량 패턴 정보를 레버리징하기 위한 또다른 기술들이 이용될 수 있다는 것을 이해할 것이다. 어떠한 실시예들에 따르면, 폭넓게 다양한 사용자들 및 컴퓨팅 디바이스들로부터 데이터를 수집함으로써 결정된 일반적인 사용량 패턴들에 기초하여 특정 사용자에 대해 자원들은 예상적으로 할당될 수 있고, 애플리케이션들 및/또는 애플리케이션 데이터는 메모리 내로 로딩될 수 있다. 그런 후, 이러한 할당들 및 로딩은 특정 사용자의 거동들에 기초하여 미세 조정될 수 있다.
III. 멀티 프로세스 애플리케이션들에 대한 동적 자원 관리를 위한 예시적인 시스템 및 방법들
실시예에서, 도 1의 컴퓨팅 디바이스(100)는 컴퓨팅 디바이스(100) 상에서 실행 중인 애플리케이션(예컨대, 애플리케이션(102))으로 하여금, 컴퓨팅 디바이스(100)의 할당된 자원 부분을 애플리케이션과 연관된 다중 프로세스들 간에 어떻게 분할할지를 동적으로 제어할 수 있게 한다. 예를 들어, 컴퓨팅 디바이스(100) 상에서 실행 중인 애플리케이션(102)은, 컴퓨팅 디바이스(100)의 할당된 자원 부분을 애플리케이션과 연관된 포그라운드 프로세스와 애플리케이션과 연관된 하나 이상의 백그라운드 프로세스들 간에 어떻게 분할할지를 동적으로 제어하기 위해, 자원 관리자(132)와 상호작용할 수 있다. 이러한 능력을 애플리케이션에 제공함으로써, 여기서 설명된 실시예들은 이롭게도 애플리케이션들로 하여금 자원 할당들을 변경하도록 적응케 하고 컴퓨팅 디바이스 상에서 실행 중에 있을 수 있는 다른 프로세스들과 더 잘 공존할 수 있게 함으로써, 폭넓게 다양한 멀티태스킹 시나리오들을 더 잘 가능하게 할 수 있다.
애플리케이션(102)과 자원 관리자(132)가 이러한 동적 자원 관리를 수행하기 위해 상호작용할 수 있는 하나의 방식을 이제 도 12의 흐름도(1200)를 참조하여 설명할 것이다. 도 12에서 도시된 바와 같이, 흐름도(1200)의 방법은, 자원 관리자(132)가, 애플리케이션(102)이 포그라운드에서 실행 중에 있다는 통지를, 애플리케이션(102)과 연관된 포그라운드 프로세스에 보내는 단계(1202)로 시작한다.
단계(1204)에서, 자원 관리자(132)는, 포그라운드 프로세스로부터, 포그라운드 프로세스에 할당될 제1 자원 사용량 버짓의 제1 부분과, 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 제1 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신한다.
단계(1206)에서, 자원 관리자(132)는, 제1 자원 사용량 버짓의 제1 부분과 동등한 자원의 부분을 포그라운드 프로세스에 할당하고, 제1 자원 사용량 버짓의 제2 부분과 동등한 자원의 부분을 적어도 하나의 백그라운드 태스크에 할당한다. 자원은, 예컨대, 비제한적인 예시로서, 휘발성 또는 비휘발성 메모리 자원, CPU, I/O 자원, 네트워크 자원, 전력 자원, 또는 센서 자원을 포함할 수 있다.
단계(1208)에서, 자원 관리자(132)는, 애플리케이션이 중단되거나 또는 종료될 것이라는 통지를 포그라운드 프로세스에 보낸다.
단계(1210)에서, 자원 관리자(132)는, 포그라운드 프로세스로부터, 포그라운드 프로세스에 할당될 제2 자원 사용량 버짓의 제1 부분과, 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 제2 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신한다. 제2 자원 사용량 버짓은 제1 자원 사용량 버짓보다 작을 수 있다.
단계(1212)에서, 자원 관리자(132)는, 제2 자원 사용량 버짓의 제1 부분과 동등한 자원의 부분을 포그라운드 프로세스에 할당하고, 제2 자원 사용량 버짓의 제2 부분과 동등한 자원의 부분을 적어도 하나의 백그라운드 태스크에 할당한다. 미리결정된 시구간 이후에, 자원 관리자(132)는 포그라운드 프로세스에 의해 이용 중에 있는 자원의 양과 적어도 하나의 백그라운드 프로세스에 의해 이용 중에 있는 자원의 양의 합이 제2 자원 사용량 버짓을 초과하는지 여부를 결정할 수 있다. 상기 합이 제2 자원 사용량 버짓을 초과한다라고 결정한 것에 응답하여, 자원 관리자(132)는 포그라운드 프로세스와 적어도 하나의 백그라운드 프로세스 중 하나 이상을 종료시킬 수 있다. 추가적으로 또는 대안적으로, 자원 관리자(132)는, 애플리케이션(102)과 연관된 하나 이상의 백그라운드 프로세스들의 론칭은, 총 자원 사용량이 제2 자원 사용량 버짓을 초과하게 될 것이라고 예상적으로 결정할 수 있다. 이러한 예상에 기초하여, 자원 관리자(132)는 하나 이상의 백그라운드 태스크들이 론칭되는 것을 이후 시간 때까지 막을 수 있다.
하나의 실시예에서, 전술한 방법에서 자원 관리자(132)와 포그라운드 프로세스 간에 교환된 통신들은 공유 API를 통해 교환된다. 개발자들이 이러한 특징물들을 이용할 수 있는 애플리케이션들을 개발할 수 있도록 이러한 API는 애플리케이션들의 개발자들에 노출될 수 있다.
도 13은 컴퓨팅 디바이스 상에서 실행 중인 애플리케이션이, 애플리케이션과 연관된 포그라운드 프로세스와 하나 이상의 백그라운드 태스크들에 대한 컴퓨팅 디바이스의 자원들의 할당을 관리하는 것을 도와줄 수 있게 하기 위한 다른 방법의 흐름도(1300)를 도시한다.
도 13에서 도시된 바와 같이, 흐름도(1300)는, 자원 관리자(132)가, 자원 사용량 버짓을 표시하는 적어도 하나의 메시지를, 애플리케이션과 연관된 포그라운드 프로세스에 보내는 단계(1302)로 시작한다.
단계(1304)에서, 자원 관리자(132)는, 포그라운드 프로세스로부터, 포그라운드 프로세스에 할당될 자원 사용량 버짓의 제1 부분과, 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신한다.
단계(1306)에서, 자원 관리자(132)는, 자원 사용량 버짓의 제1 부분과 동등한 자원의 부분을 포그라운드 프로세스에 할당하고, 자원 사용량 버짓의 제2 부분과 동등한 자원의 부분을 적어도 하나의 백그라운드 태스크에 할당한다.
실시예에서, 포그라운드 프로세스에 보내진 적어도 하나의 메시지와 자원 관리자에 보내진 적어도 하나의 메시지는 공유 API를 통해 보내진다.
또다른 실시예에서, 자원 사용량 버짓은 포그라운드에서 실행 중인 애플리케이션에 대한 자원 사용량 버짓을 포함하며, 자원 사용량 버짓을 표시하는 적어도 하나의 메시지는 애플리케이션이 포그라운드에서 실행 중에 있다는 통지를 포함한다.
또다른 실시예에서, 자원 사용량 버짓은 중단되거나 또는 종료된 애플리케이션에 대한 자원 사용량 버짓을 포함하며, 자원 사용량 버짓을 표시하는 적어도 하나의 메시지는 애플리케이션이 중단되거나 또는 종료될 것이라는 통지를 포함한다.
추가적인 실시예에서, 자원 관리자(132)는, 미리결정된 시구간 이후에, 포그라운드 프로세스에 의해 이용 중에 있는 자원의 양과 적어도 하나의 백그라운드 프로세스에 의해 이용 중에 있는 자원의 양의 합이 자원 사용량 버짓을 초과하는지 여부를 결정하고, 상기 합이 자원 사용량 버짓을 초과한다라고 결정한 것에 응답하여, 포그라운드 프로세스와 적어도 하나의 백그라운드 프로세스 중 하나 이상을 종료시킨다.
IV. 예시적인 모바일 디바이스 구현예
도 14는 여기서 설명된 실시예들을 구현할 수 있는 예시적인 모바일 디바이스(1402)의 블록도이다. 도 14에서 도시된 바와 같이, 모바일 디바이스(1402)는 다양한 택일적 사항의 하드웨어 및 소프트웨어 컴포넌트들을 포함한다. 모바일 디바이스(1402) 내의 임의의 컴포넌트는 임의의 다른 컴포넌트와 통신할 수 있지만, 도해의 용이성을 위해, 모든 접속들을 도시하지는 않는다. 모바일 디바이스(1402)는 임의의 다양한 컴퓨팅 디바이스들(예컨대, 셀 폰, 스마트 폰, 핸드헬드 컴퓨터, 개인 보조 단말기(PDA) 등)일 수 있고, 셀룰러 또는 위성 네트워크와 같은, 하나 이상의 모바일 통신 네트워크들(1404), 또는 근거리 또는 광역 네트워크와의 양방향 무선 통신을 허용할 수 있다.
도시된 모바일 디바이스(1402)는 신호 코딩, 데이터 프로세싱, 입력/출력 프로세싱, 전력 제어, 및/또는 다른 기능들과 같은 태스크들을 수행하기 위한 제어기 또는 프로세서(1410)(예컨대, 신호 프로세서, 마이크로프로세서, ASIC, 또는 다른 제어 및 프로세싱 논리 회로)를 포함할 수 있다. 운영체제(1412)는 모바일 디바이스(1402)의 컴포넌트들(102)의 할당 및 사용을 제어할 수 있고, 하나 이상의 애플리케이션 프로그램들(1414)("애플리케이션들" 또는 "앱들"이라고도 불리운다)을 위한 지원을 제공할 수 있다. 애플리케이션 프로그램들(1414)은 일반적인 모바일 컴퓨팅 애플리케이션들(예컨대, 이메일 애플리케이션, 캘린더, 연락처 매니저, 웹 브라우저, 메시징 애플리케이션), 및 임의의 다른 컴퓨팅 애플리케이션들(예컨대, 워드 프로세싱 애플리케이션들, 맵핑 애플리케이션들, 미디어 플레이어 애플리케이션들)을 포함할 수 있다.
예시된 모바일 디바이스(1402)는 메모리(1420)를 포함할 수 있다. 메모리(1420)는 탈착불가능 메모리(1422) 및/또는 탈착가능 메모리(1424)를 포함할 수 있다. 탈착불가능 메모리(1422)는 RAM, ROM, 플래시 메모리, 하드 디스크, 또는 잘 알려진 다른 메모리 디바이스들 또는 기술들을 포함할 수 있다. 탈착가능 메모리(1424)는 GSM 통신 시스템에서 잘 알려져 있는 가입자 식별 모듈(Subscriber Identity Module; SIM) 카드 또는 플래시 메모리를 포함할 수 있거나, 또는 "스마트 카드"와 같은 잘 알려진 다른 메모리 디바이스 또는 기술들을 포함할 수 있다. 메모리(1420)는 운영체제(1412) 및 애플리케이션들(1414)을 구동시키기 위한 데이터 및/또는 코드를 저장하기 위해 이용될 수 있다. 예시적인 데이터는 하나 이상의 유선 또는 무선 네트워크들을 통해 하나 이상의 네트워크 서버들 또는 다른 디바이스들로부터 수신되고 및/또는 이들에 보내질 웹 페이지들, 텍스트, 이미지들, 사운드 화일들, 비디오 데이터, 또는 다른 데이터를 포함할 수 있다. 메모리(1420)는 국제 모바일 가입자 식별정보(International Mobile Subscriber Identity; IMSI)와 같은 가입자 식별자, 및 국제 모바일 장비 식별자(International Mobile Equipment Identifier; IMEI)와 같은 장비 식별자를 저장하는데 이용될 수 있다. 이러한 식별자들은 사용자들 및 장비를 식별하기 위해 네트워크 서버에 송신될 수 있다.
모바일 디바이스(1402)는 터치스크린(1432), 마이크로폰(1434), 카메라(1436), 물리적 키보드(1438) 및/또는 트랙볼(1440)과 같은 하나 이상의 입력 디바이스들(1430), 및 스피커(1452)와 디스플레이(1454)와 같은 하나 이상의 출력 디바이스들(1450)을 지원할 수 있다. 터치 스크린(1432)과 같은 터치 스크린들은 상이한 방법들로 입력을 검출할 수 있다. 예를 들어, 용량성 터치스크린은 물체(예컨대, 손끝)가 표면에 흐르는 전류를 왜곡시키거나 또는 인터럽트시킬 때 터치 입력을 검출한다. 다른 예시로서, 터치스크린은 광 센서를 이용하여 광 센서로부터의 빔이 인터럽트될 때 터치 입력을 검출할 수 있다. 스크린의 표면과의 물리적 접촉은 몇몇의 터치스크린들에 의해 검출될 입력을 위해 반드시 필요한 것만은 아니다.
가능할 수 있는 다른 출력 디바이스들(미도시됨)은 압전기 또는 다른 햅틱 출력 디바이스를 포함할 수 있다. 몇몇의 디바이스들은 하나보다 많은 입력/출력 기능을 서빙할 수 있다. 예를 들어, 터치스크린(1432) 및 디스플레이(1454)는 단일 입력/출력 디바이스로 결합될 수 있다. 입력 디바이스들(1430)은 내추럴 사용자 인터페이스(Natural User Interface, NUI)를 포함할 수 있다.
무선 모뎀(들)(1460)은, 본 업계에서 잘 이해되는 바와 같이, 안테나(미도시됨)에 결합될 수 있고, 프로세서(1410)와 외부 디바이스들 간의 양방향 통신들을 지원할 수 있다. 모뎀(들)(1460)은 포괄적으로 도시된 것이며 모바일 통신 네트워크(1404) 및/또는 다른 무선 기반 모뎀들(예컨대, 블루투스(1464) 및/또는 Wi-Fi(1462))과 통신하기 위한 셀룰러 모뎀(1466)을 포함할 수 있다. 무선 모뎀(들)(1460) 중 적어도 하나는 일반적으로, 셀룰러 네트워크들간, 또는 모바일 디바이스와 공중 전화망(public switched telephone network; PSTN)간의, 단일 셀룰러 네트워크 내에서의 데이터 및 음성 통신들을 위한 GSM 네트워크와 같은, 하나 이상의 셀룰러 네트워크들과의 통신을 위해 구성된다.
모바일 디바이스(1402)는 적어도 하나의 입력/출력 포트(1480), 전원 공급기(1482), 글로벌 위치추적 시스템(Global Positioning System; GPS) 수신기와 같은 위성 네비게이션 시스템 수신기(1484), 가속도계(1486), 및/또는 USB 포트, IEEE 1394(FireWire) 포트, 및/또는 RS-232 포트일 수 있는 물리적 커넥터(1490)를 더 포함할 수 있다. 본 발명분야의 당업자에 의해 인식될 바와 같이 임의의 컴포넌트들이 삭제될 수 있고 다른 컴포넌트들이 추가될 수 있으므로, 모바일 디바이스(1402)의 예시된 컴포넌트들(1402)은 필수적인 것이 아니거나 또는 총망라적인 것도 아니다.
실시예에서, 모바일 디바이스(1402)의 일정한 컴포넌트들은 디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일들에 기초하여 자원 관리를 수행하고 멀티 프로세스 애플리케이션들에 대한 동적 자원 관리를 가능하게 하는 것과 관련하여 여기서 설명된 기능들을 수행하도록 구성된다. 예를 들어, 하나의 실시예에서, 운영체제(1412)는 운영체제로 하여금 디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일들에 기초하여 자원 관리를 수행하게 할 수 있는 운영체제(104)의 특징들을 포함한다. 추가적인 예시로서, 애플리케이션들(1414) 중 적어도 하나와 운영체제(1412)는 운영체제(104)와 애플리케이션(102)의 컴포넌트들로 하여금 멀티 프로세스 애플리케이션들에 대한 동적 자원 관리를 수행하게 할 수 있는 운영체제(104)와 애플리케이션(102)의 특징들을 포함할 수 있다. 하지만, 이것은 예시에 불과하며, 상이한 기능들이 상이한 컴포넌트들에 의해 수행될 수 있다.
디바이스 특유의 또는 사용자 특유의 자원 사용량 프로파일들에 기초하여 자원 관리를 수행하고 멀티 프로세스 애플리케이션들에 대한 동적 자원 관리를 가능하게 하는 것과 관련하여 여기서 설명된 기능들을 수행하기 위한 컴퓨터 프로그램 로직은 메모리(1420) 내에 저장되고 프로세서(1410)에 의해 실행될 수 있다. 이러한 컴퓨터 프로그램 로직을 실행함으로써, 프로세서(1410)는 도 1을 참조하여 상술한 컴퓨팅 디바이스(100)의 임의의 컴포넌트들의 임의의 특징들을 구현하게 될 수 있다. 또한, 이러한 컴퓨터 프로그램 로직을 실행함으로써, 프로세서(1410)는 도 2 내지 도 13에서 도시된 모든 흐름도들 또는 그들 중 일부의 모든 단계들 또는 일부 단계들을 수행하게 될 수 있다.
V. 예시적인 컴퓨터 시스템 구현예
도 15는 여기서 설명된 다양한 실시예들을 구현하기 위해 이용될 수 있는 예시적인 프로세서 기반 컴퓨터 시스템(1500)을 도시한다. 예를 들어, 시스템(1500)은 도 1을 참조하여 상술한 컴퓨팅 디바이스(100)의 임의의 컴포넌트들을 구현하기 위해 이용될 수 있다. 시스템(1500)은 도 2 내지 도 13에서 도시된 모든 흐름도들 또는 그들 중 일부의 모든 단계들 또는 일부 단계들을 이행하기 위해 이용될 수 있다. 여기서 제공된 시스템(1500)의 설명은 예시로서 제공된 것이며 제한적인 의미로서 의도된 것은 아니다. 본 발명분야의 당업자에 의해 알려진 바와 같이, 실시예들은 추가적인 유형들의 컴퓨팅 시스템들에서 구현될 수 있다.
도 15에서 도시된 바와 같이, 시스템(1500)은 프로세싱 유닛(1502), 시스템 메모리(1504), 및 시스템 메모리(1504)를 비롯한 다양한 시스템 컴포넌트들을 프로세싱 유닛(1502)에 결합시키는 버스(1506)를 포함한다. 프로세싱 유닛(1502)은 하나 이상의 마이크로프로세서들 또는 마이크로프로세서 코어들을 포함할 수 있다. 버스(1506)는 임의의 다양한 버스 아키텍처들을 이용하는, 메모리 버스 또는 메모리 제어기, 주변 버스, 가속화 그래픽 포트, 및 프로세서 또는 로컬 버스를 비롯한 임의의 여러가지 유형들의 하나 이상의 버스 구조들을 나타낼 수 있다. 시스템 메모리(1504)는 ROM(read only memory)(1508) 및 RAM(random access memory)(1510)을 포함한다. BIOS(basic input/output system)(1512)가 ROM(1508) 내에 저장된다.
시스템(1500)은 또한, 다음의 드라이브들 중 하나 이상을 갖는다: 하드 디스크에 기록하거나 또는 이로부터 판독하기 위한 하드 디스크 드라이브(1514), 탈착가능 자기 디스크(1518)에 기록하거나 이로부터 판독하기 위한 자기 디스크 드라이브(1516), 및 CD ROM, DVD, BLU-RAY™ 디스크 또는 다른 광학 매체와 같은 탈착가능 광 디스크(1522)에 기록하거나 또는 이로부터 판독하기 위한 광학 디스크 드라이브(1520). 하드 디스크 드라이브(1514), 자기 디스크 드라이브(1516), 및 광학 디스크 드라이브(1520)는 각각, 하드 디스크 드라이브 인터페이스(1524), 자기 디스크 드라이브 인터페이스(1526), 및 광학 디스크 드라이브 인터페이스(1528)에 의해 버스(1506)에 연결된다. 드라이브들 및 이들 각자와 관련된 컴퓨터로 판독가능한 매체는 컴퓨터로 판독가능한 명령어들, 데이터 구조들, 프로그램 모듈들, 및 컴퓨터를 위한 다른 데이터의 비휘발성 저장을 제공한다. 하드 디스크, 탈착가능 자기 디스크, 및 탈착가능 광학 디스크를 설명하였지만, 데이터를 저장하기 위해, 플래시 메모리 카드, 디지털 비디오 디스크, RAM(random access memory), ROM(read only memory) 등과 같은, 다른 유형들의 컴퓨터로 판독가능한 메모리 디바이스들 및 저장 구조물들이 이용될 수 있다.
복수의 프로그램 모듈들은 하드 디스크, 자기 디스크, 광학 디스크, ROM, 또는 RAM 상에 저장될 수 있다. 이러한 프로그램 모듈들은 운영체제(1530), 하나 이상의 애플리케이션 프로그램들(1532), 다른 프로그램 모듈들(1534), 및 프로그램 데이터(1536)를 포함한다. 다양한 실시예들에 따르면, 프로그램 모듈들은 도 1을 참조하여 상술한 컴퓨팅 디바이스(100)의 기능들 및 특징들 모두 또는 그 일부를 수행하기 위해 프로세싱 유닛(1502)에 의해 실행가능한 컴퓨터 프로그램 로직을 포함할 수 있다. 프로그램 모듈들은 또한, 프로세싱 유닛(1502)에 의해 실행될 때, 도 2 내지 도 13의 흐름도들을 참조하여 도시되거나 설명된 단계들 또는 동작들 중 임의의 것을 수행하는 컴퓨터 프로그램 로직을 포함할 수 있다.
사용자는 키보드(1538) 및 포인팅 디바이스(1540)와 같은 입력 디바이스들을 통해 커맨드와 정보를 시스템(1500) 내에 입력할 수 있다. 다른 입력 디바이스들(미도시됨)은 마이크로폰, 조이스틱, 게임 제어기, 스캐너 등을 포함할 수 있다. 하나의 실시예에서, 사용자가 터치 스크린 상의 하나 이상의 포인트들에 대한 (예컨대, 손가락 또는 스타일러스에 의해서와 같은) 터치의 적용을 통해 사용자 입력을 제공할 수 있도록 디스플레이(1544)와 함께 터치 스크린이 제공된다. 이러한 입력 디바이스들 및 다른 입력 디바이스들은 종종, 버스(1506)에 결합되는 직렬 포트 인터페이스(1542)를 통해 프로세싱 유닛(1502)에 연결되지만, 병렬 포트, 게임 포트 또는 범용 직렬 버스(USB)와 같은, 다른 인터페이스들에 의해 연결될 수 있다. 이러한 인터페이스들은 유선 또는 무선 인터페이스들일 수 있다.
디스플레이(1544)는 또한 비디오 아답터(1546)와 같은 인터페이스를 통해 버스(1506)에 연결된다. 디스플레이(1544)에 더하여, 시스템(1500)은 스피커 및 프린터와 같은 다른 주변 출력 디바이스들(미도시됨)을 포함할 수 있다.
시스템(1500)은 네트워크 인터페이스 또는 아답터(1550), 모뎀(1552), 또는 네트워크를 통해 통신을 구축하기 위한 다른 적절한 수단을 통해 네트워크(1548)(예컨대, 근거리 네트워크 또는 인터넷과 같은 광역 네트워크)에 연결된다. 내부에 있거나 또는 외부에 있을 수 있는 모뎀(1552)은 직렬 포트 인터페이스(1542)를 통해 버스(1506)에 연결된다.
여기서 이용되는 "컴퓨터 프로그램 매체", "컴퓨터로 판독가능한 매체", 및 "컴퓨터로 판독가능한 저장 매체"의 용어들은 하드 디스크 드라이브(1514)와 연관된 하드 디스크, 탈착가능 자기 디스크(1518), 탈착가능한 광학 디스크(1522)와 같은 메모리 디바이스들 또는 저장 구조물들뿐만이 아니라, 플래시 메모리 카드, 디지털 비디오 디스크, RAM(random access memory), ROM(read only memory) 등과 같은 다른 메모리 디바이스들 또는 저장 구조물들을 일반적으로 가리키기 위해 이용된다. 이러한 컴퓨터로 판독가능한 저장 매체는 통신 매체과 구별되고 이와 중첩되지 않는다(통신 매체를 포함하지 않는다). 통신 매체는 일반적으로, 컴퓨터로 판독가능한 명령어들, 데이터 구조들, 프로그램 모듈들, 또는 다른 데이터를 반송파와 같은 변조 데이터 신호 내에 포함시킨다. “변조 데이터 신호”의 용어는 해당 신호 내에 정보를 인코딩하는 방식으로 설정되거나 또는 변경된 하나 이상의 특성들을 갖는 신호를 의미한다. 비제한적인 예로서, 통신 매체는 음향, RF, 적외선과 같은 무선 매체 및 다른 무선 매체를 포함한다. 실시예들은 또한 이러한 통신 매체에 관한 것이다.
위에서 언급한 바와 같이, 컴퓨터 프로그램들 및 모듈들(애플리케이션 프로그램들(1532) 및 다른 프로그램 모듈들(1534)을 포함함)은 하드 디스크, 자기 디스크, 광학 디스크, ROM, 또는 RAM 상에 저장될 수 있다. 이러한 컴퓨터 프로그램들은 또한 네트워크 인터페이스(1550), 직렬 포트 인터페이스(1542), 또는 임의의 다른 인터페이스 유형을 통해 수신될 수 있다. 이러한 컴퓨터 프로그램들은, 애플리케이션에 의해 실행되거나 또는 로딩될 때, 컴퓨터(1500)로 하여금 여기서 논의된 본 발명의 실시예들의 특징들을 구현할 수 있게 해준다. 이에 따라, 이러한 컴퓨터 프로그램들은 시스템(1500)의 제어기들을 나타낸다.
실시예들은 또한 임의의 컴퓨터로 사용가능한 매체 상에 저장된 소프트웨어를 포함하는 컴퓨터 프로그램 제품들에 관한 것이다. 이러한 소프트웨어는, 하나 이상의 데이터 프로세싱 디바이스들에서 실행될 때, 데이터 프로세싱 디바이스(들)로 하여금 여기서 설명된 대로 동작하게 한다. 본 발명의 실시예들은 현재 알려져 있거나 또는 미래에 알려질, 임의의 컴퓨터로 사용가능한 매체 또는 컴퓨터로 판독가능한 매체를 활용한다. 컴퓨터로 판독가능한 매체들의 예시들은, 비제한적인 예시로서, RAM, 하드 드라이브, 플로피 디스크, CD ROM, DVD ROM, 집 디스크, 테이프, 자기 저장 디바이스, 광학 저장 디바이스, MEM, 나노기술 기반 저장 디바이스 등과 같은 메모리 디바이스들 및 저장 구조물들을 포함한다.
대안적인 구현예들에서, 시스템(1500)은 하드웨어 로직/전기 회로 또는 펌웨어로서 구현될 수 있다. 추가적인 실시예들에 따르면, 이러한 컴포넌트들 중 하나 이상은 SoC(system-on-chip)에서 구현될 수 있다. SoC는 프로세서(예컨대, 마이크로제어기, 마이크로프로세서, 디지털 신호 프로세서(digital signal processor; DSP) 등), 메모리, 하나 이상의 통신 인터페이스들, 및/또는 추가적인 회로들 및/또는 그 기능들을 수행하기 위해 임베딩된 펌웨어를 포함하는 집적 회로칩을 포함할 수 있다.
VI. 결론
다양한 실시예들을 상술하였지만, 이들 실시예는 단지 예로서 제시된 것이며 한정적인 의미를 갖는 것이 아님을 이해해야 한다. 본 발명의 범위 및 사상을 벗어나지 않고서 다양한 변경들이 형태와 상세사항들에서 취해질 수 있다는 것을 본 발명분야의 당업자에게는 자명할 것이다. 따라서, 본 발명의 폭과 범위는 상술한 예시적인 실시예들 중 임의의 실시예에 의해 한정되어서는 안되며, 아래의 청구항들 및 이들 청구항의 등가물들에 따라서만 정의되어야 한다.

Claims (10)

  1. 컴퓨팅 디바이스 상에서 구현되는 시스템에 있어서,
    적어도 하나의 프로세서; 및
    상기 적어도 하나의 프로세서에 의해 액세스가능하며, 상기 적어도 하나의 프로세서에 의한 실행을 위한 컴포넌트들을 저장하는 메모리
    를 포함하고, 상기 컴포넌트들은 자원 관리자를 포함하고,
    상기 자원 관리자는,
    애플리케이션과 연관된 자원 사용량 버짓(resource usage budget) - 상기 자원 사용량 버짓은 상기 컴퓨팅 디바이스의 얼마나 많은 자원이 상기 애플리케이션의 실행 동안 상기 애플리케이션에 의해 이용될 수 있는지를 표시함 - 을 유지하고, 상기 자원 사용량 버짓을 표시하는 적어도 하나의 메시지를 상기 애플리케이션과 연관된 포그라운드 프로세스(foreground process)에게 보내며, 상기 포그라운드 프로세스로부터, 상기 포그라운드 프로세스에 할당될 상기 자원 사용량 버짓의 제1 부분과, 상기 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크(background task)에 할당될 상기 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신하도록 동작가능한 것인, 컴퓨팅 디바이스 상에서 구현되는 시스템.
  2. 제1항에 있어서,
    상기 자원 관리자는 또한, 상기 자원 사용량 버짓의 제1 부분과 동등한 상기 자원의 부분을 상기 포그라운드 프로세스에 할당하고, 상기 자원 사용량 버짓의 제2 부분과 동등한 상기 자원의 부분을 상기 적어도 하나의 백그라운드 태스크에 할당하도록 동작가능한 것인, 컴퓨팅 디바이스 상에서 구현되는 시스템.
  3. 제1항에 있어서,
    상기 자원은,
    휘발성 또는 비휘발성 메모리 자원;
    중앙 처리 장치(CPU) 자원;
    입력/출력(I/O) 자원;
    네트워크 자원;
    전력 자원; 또는
    센서 자원
    을 포함한 것인, 컴퓨팅 디바이스 상에서 구현되는 시스템.
  4. 제1항에 있어서,
    상기 포그라운드 프로세스에 보내진 적어도 하나의 메시지와 상기 포그라운드 프로세스로부터 수신된 적어도 하나의 메시지는 공유 API(application programming interface)를 통해 전달되는 것인, 컴퓨팅 디바이스 상에서 구현되는 시스템.
  5. 제1항에 있어서,
    상기 자원 사용량 버짓은 상기 포그라운드에서 실행 중인 애플리케이션에 대한 자원 사용량 버짓을 포함하며, 상기 자원 사용량 버짓을 표시하는 적어도 하나의 메시지는 상기 애플리케이션이 상기 포그라운드에서 실행 중에 있다는 통지를 포함한 것인, 컴퓨팅 디바이스 상에서 구현되는 시스템.
  6. 제1항에 있어서,
    상기 자원 사용량 버짓은 중단되거나 또는 종료된 애플리케이션에 대한 자원 사용량 버짓을 포함하며, 상기 자원 사용량 버짓을 표시하는 적어도 하나의 메시지는 상기 애플리케이션이 중단되거나 또는 종료될 것이라는 통지를 포함한 것인, 컴퓨팅 디바이스 상에서 구현되는 시스템.
  7. 제6항에 있어서,
    상기 자원 관리자는 또한, 미리결정된 시구간 이후에, 상기 포그라운드 프로세스에 의해 이용 중에 있는 자원의 양과 상기 적어도 하나의 백그라운드 프로세스에 의해 이용 중에 있는 자원의 양의 합이 상기 자원 사용량 버짓을 초과하는지 여부를 결정하며, 상기 합이 상기 자원 사용량 버짓을 초과한다라고 결정한 것에 응답하여, 상기 포그라운드 프로세스와 상기 적어도 하나의 백그라운드 프로세스 중 하나 이상을 종료시키도록 동작가능한 것인, 컴퓨팅 디바이스 상에서 구현되는 시스템.
  8. 컴퓨팅 디바이스에 의해 구현되는 방법에 있어서,
    자원 관리자로부터, 애플리케이션이 포그라운드 프로세스에서 실행 중에 있다는 통지를, 상기 애플리케이션과 연관된 포그라운드 프로세스에게 보내는 단계;
    상기 자원 관리자에 의해, 상기 포그라운드 프로세스로부터, 상기 포그라운드 프로세스에 할당될 제1 자원 사용량 버짓 - 상기 제1 자원 사용량 버짓은 상기 포그라운드에서 실행 중인 애플리케이션과 연관된 자원 사용량 버짓을 포함함 - 의 제1 부분과, 상기 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 상기 제1 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신하는 단계; 및
    상기 자원 관리자에 의해, 상기 제1 자원 사용량 버짓의 제1 부분과 동등한 자원의 부분을 상기 포그라운드 프로세스에 할당하고, 상기 제1 자원 사용량 버짓의 제2 부분과 동등한 상기 자원의 부분을 상기 적어도 하나의 백그라운드 태스크에 할당하는 단계
    를 포함하는 컴퓨팅 디바이스에 의해 구현되는 방법.
  9. 제8항에 있어서,
    상기 자원은,
    휘발성 또는 비휘발성 메모리 자원;
    중앙 처리 장치(CPU) 자원;
    입력/출력(I/O) 자원;
    네트워크 자원;
    전력 자원; 또는
    센서 자원
    을 포함한 것인, 컴퓨팅 디바이스에 의해 구현되는 방법.
  10. 제8항에 있어서,
    상기 자원 관리자로부터, 상기 애플리케이션이 중단되거나 또는 종료될 것이라는 통지를 상기 포그라운드 프로세스에게 보내는 단계;
    상기 자원 관리자에 의해, 상기 포그라운드 프로세스로부터, 상기 포그라운드 프로세스에 할당될 제2 자원 사용량 버짓 - 상기 제2 자원 사용량 버짓은 중단되거나 또는 종료된 애플리케이션과 연관된 자원 사용량 버짓을 포함함 - 의 제1 부분과, 상기 애플리케이션과 연관된 적어도 하나의 백그라운드 태스크에 할당될 상기 제2 자원 사용량 버짓의 제2 부분을 규정하는 적어도 하나의 메시지를 수신하는 단계; 및
    상기 자원 관리자에 의해, 상기 제2 자원 사용량 버짓의 제1 부분과 동등한 상기 자원의 부분을 상기 포그라운드 프로세스에 할당하고, 상기 제2 자원 사용량 버짓의 제2 부분과 동등한 상기 자원의 부분을 상기 적어도 하나의 백그라운드 태스크에 할당하는 단계
    를 더 포함하는 컴퓨팅 디바이스에 의해 구현되는 방법.
KR1020167027972A 2014-03-10 2015-02-27 멀티 프로세스 애플리케이션들을 위한 동적 자원 관리 KR20160132432A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461950614P 2014-03-10 2014-03-10
US61/950,614 2014-03-10
US14/264,735 2014-04-29
US14/264,735 US9678797B2 (en) 2014-03-10 2014-04-29 Dynamic resource management for multi-process applications
PCT/US2015/017889 WO2015138150A1 (en) 2014-03-10 2015-02-27 Dynamic resource management for multi-process applications

Publications (1)

Publication Number Publication Date
KR20160132432A true KR20160132432A (ko) 2016-11-18

Family

ID=54017466

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167027972A KR20160132432A (ko) 2014-03-10 2015-02-27 멀티 프로세스 애플리케이션들을 위한 동적 자원 관리

Country Status (10)

Country Link
US (1) US9678797B2 (ko)
EP (1) EP3117316A1 (ko)
JP (1) JP2017514209A (ko)
KR (1) KR20160132432A (ko)
CN (1) CN106104485A (ko)
AU (1) AU2015229883A1 (ko)
CA (1) CA2939511A1 (ko)
MX (1) MX2016011541A (ko)
RU (1) RU2016136180A (ko)
WO (1) WO2015138150A1 (ko)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190052367A (ko) * 2017-11-08 2019-05-16 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작방법
KR20200018509A (ko) * 2017-06-16 2020-02-19 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 메모리와 통합된 로직을 사용한 백그라운드 함수의 수행 기법
US10838765B2 (en) 2017-04-28 2020-11-17 Samsung Electronics Co., Ltd. Task execution method for voice input and electronic device supporting the same
US11221931B2 (en) 2019-01-15 2022-01-11 SK Hynix Inc. Memory system and data processing system
KR20220073542A (ko) * 2020-11-26 2022-06-03 성균관대학교산학협력단 적응형 i/o 완료 방법 및 이를 수행하기 위한 컴퓨터 프로그램
US11636014B2 (en) 2017-10-31 2023-04-25 SK Hynix Inc. Memory system and data processing system including the same
WO2023101155A1 (ko) * 2021-11-30 2023-06-08 삼성전자 주식회사 메모리 회수 방법 및 장치

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10191771B2 (en) * 2015-09-18 2019-01-29 Huawei Technologies Co., Ltd. System and method for resource management
US10169078B2 (en) 2015-10-16 2019-01-01 International Business Machines Corporation Managing thread execution in a multitasking computing environment
CN105740078B (zh) * 2016-01-29 2020-09-08 华为技术有限公司 一种内存管理方法、装置及终端
US10313429B2 (en) * 2016-04-11 2019-06-04 Huawei Technologies Co., Ltd. Distributed resource management method and system
US10541879B2 (en) * 2016-07-29 2020-01-21 Microsoft Technology Licensing, Llc Multi-channel resource control system
WO2018053717A1 (en) * 2016-09-21 2018-03-29 Accenture Global Solutions Limited Dynamic resource allocation for application containers
CN107220077B (zh) * 2016-10-20 2019-03-19 华为技术有限公司 应用启动的管控方法和管控设备
US20180129537A1 (en) * 2016-11-10 2018-05-10 Microsoft Technology Licensing, Llc Managing memory usage using soft memory targets
CN108399102A (zh) * 2017-02-08 2018-08-14 阿里巴巴集团控股有限公司 一种资源分配方法和装置
US10445208B2 (en) * 2017-06-23 2019-10-15 Microsoft Technology Licensing, Llc Tunable, efficient monitoring of capacity usage in distributed storage systems
KR102387181B1 (ko) 2017-10-31 2022-04-19 에스케이하이닉스 주식회사 컴퓨팅 디바이스 및 그것의 동작방법
KR102455880B1 (ko) 2018-01-12 2022-10-19 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
CN110046032A (zh) * 2018-01-12 2019-07-23 广东欧珀移动通信有限公司 应用程序处理方法和装置、电子设备、计算机可读存储介质
JP6968016B2 (ja) * 2018-03-22 2021-11-17 キオクシア株式会社 ストレージデバイスおよびコンピュータシステム
CN108834157A (zh) * 2018-04-27 2018-11-16 努比亚技术有限公司 网络带宽分配方法、移动终端及计算机可读存储介质
US10963310B2 (en) * 2018-07-19 2021-03-30 International Business Machines Corporation Intelligent contentionless processing resource reduction in a multiprocessing system
WO2020024272A1 (en) * 2018-08-03 2020-02-06 Shanghai United Imaging Healthcare Co., Ltd. Systems and methods for computing resources allocation for medical applications
CN109669780B (zh) * 2018-12-25 2020-02-14 上海极链网络科技有限公司 一种视频解析方法及系统
WO2020231196A1 (en) * 2019-05-14 2020-11-19 Samsung Electronics Co., Ltd. Method and system for predicting and optimizing resource utilization of ai applications in an embedded computing system
US11200094B2 (en) * 2020-01-20 2021-12-14 Dell Products L.P. Artificial intelligence-based application guard
US11494236B2 (en) * 2020-05-06 2022-11-08 EMP IP Holding Company, LLC System and method for sharing central processing unit (CPU) resources with unbalanced applications
US11275668B2 (en) * 2020-08-10 2022-03-15 Dell Products L.P. Dynamically enhancing the performance of a foreground application
US20230100163A1 (en) * 2021-09-24 2023-03-30 Google Llc Allocating computing device resources
US11941254B2 (en) 2021-12-14 2024-03-26 Micron Technology, Inc. Test memory sub-systems through validation of responses to proof of space challenges
US11960756B2 (en) 2021-12-14 2024-04-16 Micron Technology, Inc. Management of storage space in solid state drives to support proof of space activities
US11775188B2 (en) * 2022-02-02 2023-10-03 Micron Technology, Inc. Communications to reclaim storage space occupied by proof of space plots in solid state drives
US11977742B2 (en) 2022-02-02 2024-05-07 Micron Technology, Inc. Solid state drives configurable to use storage spaces of remote devices in activities involving proof of space

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6910106B2 (en) 2002-10-04 2005-06-21 Microsoft Corporation Methods and mechanisms for proactive memory management
KR20060008896A (ko) 2003-04-14 2006-01-27 코닌클리케 필립스 일렉트로닉스 엔.브이. 자원 관리 방법 및 장치
US7900092B2 (en) 2003-07-11 2011-03-01 Computer Associates Think, Inc. Kernel-level method of flagging problems in applications
US7631138B2 (en) 2003-12-30 2009-12-08 Sandisk Corporation Adaptive mode switching of flash memory address mapping based on host usage characteristics
US7529903B2 (en) 2005-07-05 2009-05-05 International Business Machines Corporation Systems and methods for memory migration
US7673189B2 (en) * 2006-02-06 2010-03-02 International Business Machines Corporation Technique for mapping goal violations to anamolies within a system
US8112755B2 (en) * 2006-06-30 2012-02-07 Microsoft Corporation Reducing latencies in computing systems using probabilistic and/or decision-theoretic reasoning under scarce memory resources
US7827358B2 (en) 2007-01-07 2010-11-02 Apple Inc. Memory management methods and systems
EP1970804A1 (en) 2007-03-05 2008-09-17 Slipstream Data, Inc. System and method for dynamic memory allocation
US20090028127A1 (en) * 2007-07-26 2009-01-29 Gordon Kent Walker Methods and apparatus for providing computational load allocation in a network environment
US8510743B2 (en) 2007-10-31 2013-08-13 Google Inc. Terminating computer applications
US8139533B2 (en) * 2007-11-05 2012-03-20 Qualcomm Incorporated Division of the scheduling algorithm into background and foreground algorithms
US20100131959A1 (en) * 2008-11-26 2010-05-27 Spiers Adam Z Proactive application workload management
US8321703B2 (en) 2009-12-12 2012-11-27 Microsoft Corporation Power aware memory allocation
US8843526B2 (en) 2009-12-18 2014-09-23 Sap Ag Application specific memory consumption and analysis
US8464023B2 (en) 2010-08-27 2013-06-11 International Business Machines Corporation Application run-time memory optimizer
CN103559080B (zh) * 2011-02-14 2017-04-12 微软技术许可有限责任公司 移动设备上的后台应用代码的受约束执行
US20120324481A1 (en) 2011-06-16 2012-12-20 Samsung Electronics Co. Ltd. Adaptive termination and pre-launching policy for improving application startup time
US9218206B2 (en) 2011-06-20 2015-12-22 Microsoft Technology Licensing, Llc Memory management model and interface for new applications
US9032413B2 (en) * 2011-09-01 2015-05-12 Microsoft Technology Licensing, Llc Decoupling background work and foreground work
US9164803B2 (en) 2012-01-20 2015-10-20 Microsoft Technology Licensing, Llc Background task resource control
US8843912B2 (en) 2012-02-20 2014-09-23 International Business Machines Corporation Optimization of an application to reduce local memory usage
US8924437B2 (en) 2012-03-13 2014-12-30 Microsoft Corporation Memory usage data collection and analysis for dynamic objects
US9201693B2 (en) 2012-09-04 2015-12-01 Microsoft Technology Licensing, Llc Quota-based resource management

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10838765B2 (en) 2017-04-28 2020-11-17 Samsung Electronics Co., Ltd. Task execution method for voice input and electronic device supporting the same
KR20200018509A (ko) * 2017-06-16 2020-02-19 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 메모리와 통합된 로직을 사용한 백그라운드 함수의 수행 기법
US11636014B2 (en) 2017-10-31 2023-04-25 SK Hynix Inc. Memory system and data processing system including the same
KR20190052367A (ko) * 2017-11-08 2019-05-16 에스케이하이닉스 주식회사 메모리 시스템 및 그것의 동작방법
US11221931B2 (en) 2019-01-15 2022-01-11 SK Hynix Inc. Memory system and data processing system
KR20220073542A (ko) * 2020-11-26 2022-06-03 성균관대학교산학협력단 적응형 i/o 완료 방법 및 이를 수행하기 위한 컴퓨터 프로그램
WO2023101155A1 (ko) * 2021-11-30 2023-06-08 삼성전자 주식회사 메모리 회수 방법 및 장치

Also Published As

Publication number Publication date
AU2015229883A1 (en) 2016-09-08
US9678797B2 (en) 2017-06-13
MX2016011541A (es) 2016-11-29
WO2015138150A1 (en) 2015-09-17
EP3117316A1 (en) 2017-01-18
US20150254108A1 (en) 2015-09-10
RU2016136180A (ru) 2018-03-14
CN106104485A (zh) 2016-11-09
CA2939511A1 (en) 2015-09-17
JP2017514209A (ja) 2017-06-01

Similar Documents

Publication Publication Date Title
US10182018B2 (en) Resource management based on device-specific or user-specific resource usage profiles
US9678797B2 (en) Dynamic resource management for multi-process applications
US9952903B2 (en) Background task resource control
CN106415296B (zh) 自适应电池寿命延长
US8997171B2 (en) Policy based application suspension and termination
EP2893444B1 (en) Quota-based resource management
US20120324481A1 (en) Adaptive termination and pre-launching policy for improving application startup time
US20170153917A1 (en) Account activity level based-system resource allocating method and device
US20190095250A1 (en) Application program management method and device
US20150067238A1 (en) Computing Device and Method for Predicting Low Memory Conditions
JP2014517434A5 (ko)
EP2538327A1 (en) Adaptive Termination and Pre-Launching Policy for Improving Application Startup Time
US10248321B1 (en) Simulating multiple lower importance levels by actively feeding processes to a low-memory manager
US10719243B2 (en) Techniques for preserving an expected lifespan of a non-volatile memory
CN115617515A (zh) 智能物联网操作系统的内存分配方法、装置和存储介质
CN111078405A (zh) 内存分配方法、装置、存储介质及电子设备
US20230342200A1 (en) System and method for resource management in dynamic systems
US20230342218A1 (en) Automated dynamic resource configuration for hard provisioned virtual machines
US20230342170A1 (en) Automated analysis and dynamic resource configuration for hard provisioned virtual machines
US20230189469A1 (en) Distribution of available power to devices in a group