KR20220054398A - 애플리케이션 그룹에 대한 맞춤형 루트 프로세스 - Google Patents

애플리케이션 그룹에 대한 맞춤형 루트 프로세스 Download PDF

Info

Publication number
KR20220054398A
KR20220054398A KR1020227010645A KR20227010645A KR20220054398A KR 20220054398 A KR20220054398 A KR 20220054398A KR 1020227010645 A KR1020227010645 A KR 1020227010645A KR 20227010645 A KR20227010645 A KR 20227010645A KR 20220054398 A KR20220054398 A KR 20220054398A
Authority
KR
South Korea
Prior art keywords
applications
group
application
root process
mobile device
Prior art date
Application number
KR1020227010645A
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 KR20220054398A publication Critical patent/KR20220054398A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • 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
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C11/00Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
    • G11C11/21Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
    • G11C11/34Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
    • G11C11/40Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
    • G11C11/401Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming cells needing refreshing or charge regeneration, i.e. dynamic cells
    • G11C11/4063Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing
    • G11C11/407Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing or timing for memory cells of the field-effect type
    • G11C11/409Read-write [R-W] circuits 
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/482Application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/508Monitor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Stored Programmes (AREA)

Abstract

컴퓨팅 디바이스에서의 애플리케이션 그룹들에 대한 맞춤화된 루트 프로세스들.컴퓨팅 디바이스(예를 들어, 모바일 디바이스)는 애플리케이션들의 사용을 모니터링할 수 있다.그 후, 디바이스는 애플리케이션들의 사용과 관련된 데이터를 저장하고, 저장된 데이터에 따라 애플리케이션들을 그룹들로 그룹화할 수 있다.디바이스는 그룹 내의 각 애플리케이션에 공통된 사용에 따라 애플리케이션 그룹에 대한 루트 프로세스를 맞춤화 및 실행할 수 있다.디바이스는 그룹 내의 각 애플리케이션에 공통된 저장된 데이터에 기초하여 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들을 생성하고, 패턴들에 따라 그룹의 루트 프로세스를 실행할 수 있다.디바이스는 디바이스의 사용자로부터 그룹으로부터의 애플리케이션을 시작하기 위한 요청을 수신할 수 있고, 요청을 수신하 시 애플리케이션 그룹의 루트 프로세스를 사용함으로써 애플리케이션을 시작할 수 있다.

Description

애플리케이션 그룹에 대한 맞춤형 루트 프로세스
관련 출원
본 출원은 2019년 10월 3일자로 출원되고, 명칭이 "CUSTOMIZED ROOT PROCESSES FOR GROUPS OF APPLICATIONS"인 미국 특허 출원 제16/592,537호의 우선권을 주장하며, 이의 전체 개시 내용은 이에 의해 본원에서 원용된다.
기술분야
본원에서 개시되는 적어도 일부 실시예들은 일반적으로 컴퓨팅 시스템들에 대한 루트 프로세스들에 관한 것으로, 보다 구체적으로는 컴퓨팅 디바이스에서의 애플리케이션 그룹들에 대한 맞춤형 루트 프로세스들에 관한 것이다.
안드로이드 운영 체제의 내부 작업들은 모든 안드로이드 애플리케이션 프로세스들의 부모 또는 루트 프로세스로서 동작하는 자이고트(zygote)를 포함한다. 유닉스 및 유닉스와 유사한 운영 체제(이를테면, 리눅스 및 안드로이드)에서, 임의의 비-초기 프로세스(또는 임의의 비-제로 프로세스)는 운영 체제(operating system, OS)의 초기 또는 제로 프로세스로부터 적어도 부분적으로 도출될 수 있다. 이에 따라, 안드로이드 OS에 의한 "자이고트"라는 용어의 사용은 그 루트 프로세스 또는 프로세스 0을 지칭하는 것이다.
안드로이드는 구글에 의해 개발된 모바일 디바이스용 모바일 OS이다. 이는 리눅스 커널 및 기타 오픈 소스 소프트웨어의 수정 버전에 기초하고, 주로 모바일 디바이스들(예를 들어, 스마트폰, 태블릿 등)을 위해 설계된다. 또한, 구글은 사물 인터넷(Internet of Thing, IoT)을 위한 안드로이드의 버전들을 개발하였다. 그리고, 안드로이드의 버전들은 텔레비전 및 기타 가전 제품들, 차량내 정보 시스템들, 웨어러블 스마트 디바이스들, 게임 콘솔, 디지털 카메라, 및 PC를 포함하는 기타 유형들의 전자기기들을 위해 개발되었다.
안드로이드, 유닉스, 또는 유닉스와 유사한 또 다른 OS에 의한 비-제로 프로세스의 생성은 또 다른 프로세스가 "fork()"로 표현되는 시스템 호출을 실행할 때 일어나며, 이는 프로세스를 다수의 프로세스들로 포킹하게 한다. 포킹을 호출한 프로세스는 부모 프로세스이고, 새롭게 생성된 프로세스는 자식 프로세스이다. 유닉스 또는 유닉스와 유사한 운영 체제들에서, 커널은 그 프로세스 식별자(예를 들어, 초기 또는 제로 프로세스에 대해 "0")에 의해 각 프로세스를 식별할 수 있다. 유닉스 및 유사한 운영 체제들에서, 제로 프로세스(즉, 프로세스 0)는 OS가 부팅될 때 생성되는 루트 프로세스이다. "init"로서 알려져 있는 제1 자식 프로세스(예를 들어, 프로세스 1)는 제로 프로세스로부터 적어도 부분적으로 도출될 수 있고, OS에서의 모든 다른 프로세스의 조상이 될 수 있다.
본 개시는 아래에 주어지는 구체적인 내용 및 본 개시의 다양한 실시예들의 첨부 도면들로부터 보다 충분하게 이해될 것이다.
도 1 및 4는 본 개시의 일부 실시예들에 따른, 다수의 애플리케이션 그룹들에 대한 각 루트 프로세스들을 포함하고 실행하는 예시적인 모바일 디바이스를 나타낸다.
도 2, 3, 5, 및 6은 본 개시의 일부 실시예들에 따른, 도 1 및 4에 도시된 모바일 디바이스에 의해 수행될 수 있는 예시적인 동작들의 흐름도들을 나타낸다.
도 7은 본 개시의 일부 실시예들에 따른, 다수의 애플리케이션 그룹들에 대한 맞춤형 루트 프로세스들을 구현할 수 있는 예시적인 컴퓨팅 디바이스를 나타낸다.
본원에서 개시되는 적어도 일부 실시예들은 일반적으로 컴퓨팅 시스템들에 대한 루트 프로세스들에 관한 것으로, 보다 구체적으로는 컴퓨팅 디바이스에서의 다수의 애플리케이션 그룹들에 대한 맞춤형 루트 프로세스들에 관한 것이다.
본원에 개시된 일부 실시예들에서, 애플리케이션 그룹은 애플리케이션 그룹에 대해서만 각 루트 프로세스를 공유할 수 있다. 이러한 실시예들에서, 애플리케이션 그룹의 루트 프로세스는 그룹의 애플리케이션들 각각이 그룹의 루트 프로세스의 포킹을 통해 론칭될 수 있도록, 애플리케이션 그룹에 적합한 선택된 라이브러리, 오브젝트, 및/또는 페이지 집합을 프리로딩할 수 있다.
일부 실시예들에서, 운영 체제, 하이퍼바이저 등은 디바이스 또는 다수의 디바이스들(예를 들어, 네트워킹된 디바이스들)에서의 애플리케이션들에 대한 임계적인 라이브러리들, 오브젝트들, 및 페이지들을 모니터링 및 레코딩할 수 있고, 다양한 애플리케이션들의 라이브러리들, 오브젝트들, 및 페이지들의 사용을 캡처하기 위해 데이터베이스 또는 또 다른 유형의 데이터 구조를 구축할 수 있다. 캡처된 데이터 액세스 및 사용 패턴들은 루트 프로세스가 애플리케이션 그룹에 대한 각 루트 프로세스가 되도록, 루트 프로세스를 공유하기 위한 애플리케이션 그룹을 식별하기 위해 사용될 수 있다. 운영 체제, 하이퍼바이저 등은 캡처된 데이터 액세스 및 사용 패턴들에 기초하여 애플리케이션 그룹의 루트 프로세스를 생성하고 맞춤화할 수 있다. 시간이 지남에 따라 애플리케이션 그룹에서의 각 애플리케이션의 성능이 개선될 수 있는데, 이는 데이터베이스 또는 데이터 구조가 그룹에 대한 더 많은 양의 데이터 액세스 및 사용 패턴들로 진화할 수 있기 때문이다.
본원에 개시된 일부 실시예들은 하나 이상의 컴퓨팅 디바이스에서 사용자에 의한 하나 이상의 애플리케이션의 사용을 모니터링하도록 구성되는 하나 이상의 컴퓨팅 디바이스의 OS 또는 하이퍼바이저 등에 관한 것이다. 예를 들어, 일부 실시예들은 사용자에 의한 디바이스에서의 다수의 애플리케이션들의 사용을 모니터링하도록 구성되는 모바일 디바이스의 OS에 관한 것일 수 있다. 애플리케이션들의 모니터링은 OS, 하이퍼바이저 등이 애플리케이션 그룹에 대해 메모리로부터 판독되고 메모리에 기록하게 하는 애플리케이션 그룹에 공통된 통상적인 초기 또는 이력 또는 샘플링된 판독들 또는 기록들을 식별할 수 있다. 모니터링은 또한 관련 애플리케이션들의 사용 패턴들(예를 들어, 데이터 액세스 패턴들, 사용자에 의해 사용되는 통상적인 요일, 통상적으로 사용되는 일시 애플리케이션 그룹의 사용과 상관되는 사용되는 다른 애플리케이션들 등)의 모니터링을 포함할 수 있다. 애플리케이션 그룹과 연관된 초기 또는 이력 또는 샘플링된 판독들 및 기록들은 특히 애플리케이션 그룹에 대한 각 루트 프로세스를 통해 사용되도록 메모리에 저장되거나 캐싱될 수 있다. 초기 또는 이력 또는 샘플링된 판독들 및 기록들은 사용의 빈도, 사용의 최신성 등에 따라, 메모리를 통해, OS, 하이퍼바이저 등에 의해, 관리, 유지, 우선순위화 등이 될 수 있다. 일부 실시예들에서, 저장 또는 캐싱은 초기 판독들 및 기록들을 가속하기 위해 더 빠른 메모리에 행해질 수 있다.
일부 실시예들에서, 애플리케이션 그룹의 루트 프로세스에 대한 명령어들 및/또는 데이터는 플래시 메모리 또는 비휘발성 랜덤 액세스 메모리(NVRAM)와 같은 영구 비휘발성 메모리에 저장될 수 있다. NVRAM은 일부 실시예들에서 3D XPoint 메모리를 포함할 수 있다.
애플리케이션 그룹에 대한 루트 프로세스는 OS, 하이퍼바이저 등의 시동 시에 론칭될 수 있다. 일부 실시예들에서, 그룹의 루트 프로세스는 그룹 내의 애플리케이션들이 특정 시구간 내에 사용되지 않는 경우 또는 애플리케이션들이 CPU, GPU, 메모리 또는 기타 자원과 같은 너무 많은 시스템 자원들을 소비하는 경우 중지(kill)될 수 있다. 이러한 실시예들에서, OS, 하이퍼바이저 등은 애플리케이션 그룹에서의 적어도 하나의 애플리케이션의 사용을 예상하여, 그룹의 모니터링에서 식별된 패턴들에 따라 그룹의 루트 프로세스를 재 론칭하도록 구성될 수 있다. 패턴들에 대한 선호도는 패턴들의 정량화, 빈도 및/또는 최신성에 기초할 수 있고, 애플리케이션 그룹에 대한 임의의 유형의 메모리 액세스 패턴들이 모니터링 및 추적될 수 있다. 모니터링 및 추적은 특수 레지스터들(예를 들어, 모델 특정 레지스터들)을 판독 및 기록하는 것을 통해 OS를 통해 이용가능한 하드웨어 및 소프트웨어 성능 카운터들을 포함할 수 있다. 패턴들은 메모리로부터의 판독들, 메모리에 대한 기록들의 양, 빈도 및/또는 최신성, 물리적 메모리 공간에서의 어드레스 패턴들, 가상 공간에서의 어드레스 패턴들, 데이터의 로컬성(공간적으로 그리고/또는 시간적으로), 뱅크 충돌들, 또는 명령어당 CPU 사이클들과 같은 메트릭들에 기초할 수 있다. 패턴들은 또한 변환 색인 버퍼(translation lookaside buffer, TLB) 메트릭들 및 OS에 이용가능한 다른 메트릭들의 양, 빈도 및/또는 최신성과 같은 메트릭들에 기초할 수 있다.
일부 실시예들에서, 애플리케이션 그룹 내의 적어도 하나의 애플리케이션이 (모바일 디바이스와 같은) 컴퓨팅 디바이스에 설치된 후에, 디바이스의 OS 또는 연관된 하이퍼바이저는 사용자 및 애플리케이션 그룹에 대해 맞춤화된 루트 애플리케이션 프로세스를 생성하기 위해 그룹의 애플리케이션들을 프리론칭할 수 있다. 프리론칭은 사용자가 애플리케이션 그룹 중 적어도 하나의 애플리케이션을 시작할 것을 컴퓨팅 디바이스에 요청하기 전에 일어날 수 있다. 그룹의 애플리케이션들은 적어도 부분적으로 OS 또는 하이퍼바이저 등을 통해 실행될 수 있다. 이에 따라, 그룹의 애플리케이션들의 프리론치 프로세스 또는 루트 프로세스는 OS의 루트 프로세스와 상이하다. 이러한 실시예들에서, OS 또는 하이퍼바이저 등은 애플리케이션 그룹의 루트 프로세스를 셋업하기 위해 데이터를 이동 및/또는 복사할 수 있다. 일부 실시예들에서, 초기에 데이터의 복사 및/또는 이동은 OS의 루트 프로세스에 의해 행해질 수 있다. 이는 이를테면 애플리케이션 그룹의 루트 프로세스에 의해 그룹의 애플리케이션들에 대한 임의의 초기 판독들 또는 기록들 전에 일어날 수 있다. 일부 실시예들에서, 공통 코드 및 판독 전용 데이터(예를 들어, 라이브러리, 런타임, 드라이버, 메모리 페이지)는 OS의 루트 프로세스 또는 애플리케이션 그룹의 각 루트 프로세스에 의해 복사 및/또는 이동되지 않는다. 일부 실시예들에서, 루트 프로세스의 코드 및 데이터는 루트 프로세스, 또 다른 프로세스 또는 OS에 의한 코드 및 데이터의 초기 수정 때까지 복사되지 않는다. 일부 실시예들에서, 코드 및 데이터의 수정된 부분들만이 복사되지만, 수정된 부분들은 공통으로 유지되지 않는다. 일부 실시예들에서, 이러한 부분들은 메모리 페이지들, 캐시 라인들 또는 파일 시스템 섹터들 또는 컴퓨터 판독가능 저장 매체의 다른 요소들에 대한 기록들을 모니터링함으로써 식별될 수 있다.
컴퓨팅 디바이스(예를 들어, 모바일 디바이스)는 애플리케이션 그룹의 루트 프로세스에 추가하기 위한 초기 판독들 및 기록들을 결정하기 위해 사용자에 의한 애플리케이션 그룹의 빈번한 또는 최근의 사용을 모니터링할 수 있다. 이는 OS, 하이퍼바이저 등이 애플리케이션 그룹에 대한 메모리로부터 판독 및/또는 메모리에 기록하게 할 수 있다. 초기 기록들의 결과로서의 데이터 이동 및/또는 복사는 또한 사용자가 그룹 내의 애플리케이션들 중 적어도 하나를 시작할 것을 OS, 하이퍼바이저 등에 요청하기 전에 수행될 수 있다.
OS, 하이퍼바이저 등이 시스템 레벨 루트 프로세스를 포킹한 후에, 애플리케이션 그룹에 대한 예측되는 초기 판독들 및/또는 기록들은 그룹의 루트 프로세스를 맞춤화하기 위해 사용될 수 있다. 이러한 예들에서, 애플리케이션 그룹의 맞춤화된 루트 프로세스는 애플리케이션 그룹 중 하나 이상의 애플리케이션의 고속 시작을 위해 영구 비휘발성 메모리(예를 들어, 플래시 메모리 및/또는 NVRAM)에 저장될 수 있다.
사용자가 애플리케이션 그룹 내의 하나 이상의 애플리케이션을 시작할 것을 OS, 하이퍼바이저 등에 요청할 때, OS, 하이퍼바이저 등은 그룹의 프리론칭된 프로세스(즉, 애플리케이션 그룹의 루트 프로세스), 또는 사용자를 서비스하기 위해 프리론칭된 프로세스로부터 도출된 포크형 프로세스를 사용할 수 있다. 애플리케이션 그룹의 루트 프로세스로부터의 포크형 프로세스는 애플리케이션 그룹으로부터의 루트 프로세스와 유사하거나 상이할 수 있다.
또한, 사용자가 애플리케이션 그룹의 애플리케이션들을 중지할 때, OS는 그룹의 애플리케이션들의 액티브 프로세스들 및/또는 그룹의 루트 프로세스를 완전히 또는 부분적으로 중지할 수 있다. OS, 하이퍼바이저 등은 사용자가 애플리케이션 그룹의 애플리케이션들 중 적어도 하나를 실행할 것을 예상하여, 애플리케이션 그룹의 루트 프로세스를 재 론칭할 수 있으며, 이는 그룹의 애플리케이션들의 가장 최근의 그리고/또는 빈번한 사용자 사용 패턴들에 기초하여 또한 맞춤화될 수 있다
도 1 및 4는 본 개시의 일부 실시예들에 따른, 다수의 애플리케이션 그룹들에 대한 각 루트 프로세스들을 포함하고 실행하는 예시적인 모바일 디바이스(102)를 나타낸다. 도 2, 3, 5, 및 6은 본 개시의 일부 실시예들에 따른, 도 1 및 4에 도시된 모바일 디바이스(102)에 의해 수행될 수 있는 예시적인 방법들(200, 300, 500, 및 600)의 흐름도들을 나타낸다.
구체적으로, 도 1은 적어도 제어기 및 메모리(104)를 포함하는 모바일 디바이스(102)를 나타낸다. 모바일 디바이스(102)의 제어기 및 메모리(104)는 모바일 디바이스에서 실행되는 애플리케이션들에 대한 명령어들 및 데이터를 포함할 수 있다(예를 들어, 애플리케이션의 그룹(106a)의 애플리케이션들(108a, 108b, 및 108c) 참조). 모바일 디바이스(102)의 제어기는 데이터에 기초하여 애플리케이션들에 대한 명령어들을 실행할 수 있다. 데이터는 이진 포맷 또는 프로그래밍 언어 해석기에 의해 해석하기에 적합한 포맷의 애플리케이션 명령어 코드를 포함할 수 있다. 데이터는 몇몇 데이터 구조들, 라이브러리들 등을 포함할 수 있다. 제어기는 또한 명령어들 및 데이터를 제어기의 레지스터들에 보유할 수 있다. 데이터는 이진 포맷 또는 프로그래밍 언어 해석기에 의해 해석하기에 적합한 포맷의 애플리케이션 명령어 코드를 포함할 수 있다. 데이터는 몇몇 데이터 구조들, 라이브러리들 등을 포함할 수 있다. 메모리는 그 메모리 셀들에 명령어들 및 데이터를 보유할 수 있다. 일부 실시예들에서, 모바일 디바이스(102)의 메모리의 메모리 셀들은 플래시 메모리 셀들 및/또는 NVRAM 셀들을 포함할 수 있다. NVRAM 셀들은 3D XPoint 메모리 셀들이거나 이를 포함할 수 있다.
일부 실시예들에서, 메모리는 상이한 속도들, 레이턴시들, 대역폭들 및 다른 파라미터들을 가질 수 있다. 예를 들어, SRAM 메모리는 고속 캐시로서, DRAM은 메인 메모리로서, NVRAM은 저장 메모리로서 사용될 수 있다.
애플리케이션 그룹(예를 들어, 애플리케이션 그룹들(106a, 106b, 및 106c) 참조)에 대해, 모바일 디바이스(102)에 포함되고 이에서 실행 가능한 그룹 내의 애플리케이션들에 대한 명령어들 및 데이터는 애플리케이션 그룹의 루트 프로세스에 대한 루트 프로세스 데이터 및 명령어들을 포함할 수 있다. 모바일 디바이스(102)에 포함된 각 애플리케이션 그룹의 각 루트 프로세스(예를 들어, 애플리케이션 그룹(106a)의 루트 프로세스(110), 애플리케이션 그룹(106b)의 루트 프로세스(112), 및 애플리케이션 그룹(106c)의 루트 프로세스(114))는 제어기 및 메모리(104)에 의해 구현될 수 있다. 제어기는 루트 프로세스에 대한 명령어들 및 데이터에 따라 그룹의 루트 프로세스의 명령어들을 실행하도록 구성될 수 있고, 메모리는 제어기에 의한 루트 프로세스의 실행을 위해 명령어들 및 데이터를 보유 또는 저장하도록 구성될 수 있다.
모바일 디바이스(102)에 포함된 애플리케이션 그룹의 다른 프로세스들(예를 들어, 애플리케이션들(108a, 108b 및 108c) - 여기서 각 애플리케이션이 다른 프로세스들을 가짐 - 참조)은 또한 제어기 및 메모리(104)에 의해 구현될 수 있다. 제어기는 다른 프로세스들에 대한 명령어들 및 데이터에 따라 그룹의 다른 프로세스들의 명령어들을 실행하도록 구성될 수 있고, 메모리는 제어기에 의한 다른 프로세스들의 실행을 위해 명령어들 및 데이터를 보유 또는 저장하도록 구성될 수 있다.
모바일 디바이스(102)에서, 복수의 애플리케이션들(예를 들어, 애플리케이션들(108a, 108b 및 108c) 참조)의 사용은 복수의 애플리케이션들 각각에 대한 메모리 액세스를 결정하기 위해 모니터링될 수 있다. 복수의 애플리케이션들의 사용과 관련된 데이터(예를 들어, 애플리케이션 사용 데이터(116a, 116b, 및 116c) 참조)는 모바일 디바이스에, 이를테면 모바일 디바이스의 메모리에 저장될 수 있다(예를 들어, 제어기 및 메모리(104) 참조). 복수의 애플리케이션들은 또한 복수의 애플리케이션들의 사용과 관련된 데이터(예를 들어, 애플리케이션 사용 데이터(116a, 116b, 116c) 참조)에 따라 그룹들(예를 들어, 애플리케이션 그룹들(106a, 106b, 및 106c) 참조)로 그룹화될 수 있다. 도시된 바와 같이, 애플리케이션 그룹의 논리적 연결들은 애플리케이션 사용 데이터를 그룹의 루트 프로세스뿐만 아니라 그룹에 속하는 대응하는 애플리케이션들과 논리적으로 연관시키거나 연결할 수 있다(예를 들어, 논리적 연결들(118) 참조). 애플리케이션 그룹의 루트 프로세스(예를 들어, 루트 프로세스들(110, 112, 및 114) 참조)는 또한, 그룹 내의 각 애플리케이션에 공통된 사용 데이터(예를 들어, 애플리케이션들(108a, 108b, 및 108c)을 링크시키는 공통 데이터를 포함할 수 있는 애플리케이션 사용 데이터(116a, 116b, 및 116c) 참조)에 따라 맞춤화 및 실행될 수 있다. 그룹 내의 애플리케이션들의 사용 데이터 간의 공통성은 논리적 연결들(예를 들어, 논리적 연결들(118) 참조)을 통해 결정될 수 있다. 일부 실시예들에서, 논리적 연결들은 제어기 및 메모리(104)에 의해 저장 및 실행되는 관계형 데이터베이스에 의해 구현될 수 있다. 이러한 데이터베이스에서의 엔트리는 각 연결을 설명할 수 있다. 예를 들어, 애플리케이션(108a)은 애플리케이션(108b)에 연결될 수 있는데, 이는 이들이 공통 오브젝트를 공유하기 때문이다(예를 들어, 이들 양자가 모바일 폰 호출 동안 사용자 음성을 캡처하는 것과 관련된 데이터를 판독-기록하는 경우). 일부 실시예들에서, 그룹당 하나보다 많은 루트 프로세스가 존재할 수 있다. 다른 실시예들에서, 하나의 애플리케이션이 다수의 그룹들에 속할 수 있다. 예를 들어, 도 1을 참조하면, 애플리케이션(116c)은 애플리케이션 1의 그룹 및 애플리케이션 2의 그룹에 속할 수 있다(도시되시 않음).
구체적으로, 도 2는 도 1에 도시된 모바일 디바이스(102)에 의해 또는 모바일 디바이스(102)와 유사하게 구성된 또 다른 유형의 컴퓨팅 디바이스에 의해 수행될 수 있는 방법(200)의 동작들을 나타낸다. 또한, 일부 실시예들에서, 방법(200)은 일반적으로 컴퓨팅 디바이스의 OS 또는 모바일 디바이스(102)와 같은 모바일 디바이스의 OS에 의해 적어도 부분적으로 수행될 수 있다. 방법(200)은 또한 하이퍼바이저 및/또는 하나 이상의 운영 체제에 의해 적어도 부분적으로 수행될 수 있다.
도 2에서, 방법(200)은 각 애플리케이션에 대한 메모리 액세스를 결정하기 위해 복수의 애플리케이션들의 사용을 모니터링하는 단계(202)에서 시작한다. 단계(202)는 모바일 디바이스와 같은 디바이스에서의 애플리케이션들에 대한 메모리로부터의 판독들 및 메모리에의 기록들의 빈도 또는 최신성을 결정하기 위해 애플리케이션들의 사용을 모니터링하는 것을 포함할 수 있다 일부 실시예들에서, 단계(202)는 애플리케이션들의 이전 실행들의 패턴들의 양, 빈도 및/또는 최신성을 결정하기 위해 애플리케이션들의 사용을 모니터링 및/또는 추적하는 것을 포함할 수 있다.
단계(202)에서 애플리케이션들의 사용을 모니터링 및 추적하는 것은 애플리케이션들의 개시 동안(예를 들어, 애플리케이션들이 메모리로 로딩되고 있을 때를 포함함) 그리고/또는 그 후에 애플리케이션들의 실행 동안 일어날 수 있다. 애플리케이션들의 사용을 모니터링 및 추적하는 것은 애플리케이션의 개시 동안 그리고 개시 후 애플리케이션들을 실행하는 임의의 다른 기간에 일어날 수 있다. 런타임 동안 애플리케이션들의 사용을 모니터링 및 추적하는 것은 애플리케이션들의 유효한 그리고/또는 효율적인 각 루트 프로세스들의 도출을 가능하게 할 수 있다. 예를 들어, 개시 후에, 사용자는 애플리케이션의 일부 요소를 트리거하고 일부 결과를 예상하기 위해 스크린을 터치할 수 있다. 애플리케이션의 런타임 동안 일어나는 모니터링에 기초하여 임계적인 메모리 오브젝트가 프리로딩될 수 있으므로 일부 실시예들에서 그 결과의 전달은 매우 신속할 수 있다. 일부 실시예들에서, 오브젝트의 프리로딩은 NAND형 플래시 메모리와 같은 더 느린 메모리로부터 DRAM과 같은 더 빠른 메모리로 행해질 수 있다
단계(202)는 또한 애플리케이션들에 대한 메모리로부터의 판독들 및 메모리에의 기록들의 빈도 또는 최신성에 따라 애플리케이션들의 이전 실행들의 패턴들을 생성하는 단계를 포함할 수 있다. 일부 실시예들(도시되지 않음)에서, 방법(200)은 모니터링 및/또는 추적되는 애플리케이션들의 이전 실행들에서의 패턴들의 양, 빈도 및/또는 최신성에 따라 애플리케이션들의 이전 실행들의 패턴들을 생성하는 것으로 계속될 수 있다.
단계(204)에서, 방법(200)은 애플리케이션들의 사용에 관련된 데이터를 저장하는 것으로 계속된다. 애플리케이션들의 사용에 관련된 데이터의 저장은 애플리케이션들이 실행되는 모바일 디바이스와 같은 디바이스에서 일어날 수 있다. 데이터의 저장은 디바이스의 메모리 및/또는 데이터 저장 시스템에서 일어날 수 있다. 일부 실시예들에서, 새로운 데이터를 저장하는 것은 애플리케이션들의 사용과 관련된 오래된 미사용 데이터를 오버라이트할 수 있다.
단계(206)에서, 방법(200)은 저장된 데이터에 따라 애플리케이션들을 애플리케이션 그룹들로 그룹화하는 것으로 계속된다. 일부 실시예들에서, 애플리케이션들을 그룹화하는 것은 단계(202)로부터 바로 행해질 수 있고, 단계(204)에서 데이터를 저장하는 것과 동시에 행해질 수 있다. 다른 예들에서, 단계(204)는 단계(206)에서의 그룹화의 속도를 높이기 위해 완전히 바이패스될 수 있다.
단계(208)에서, 방법(200)은 단계(206)에서 형성된 애플리케이션 그룹들 중 한 애플리케이션 그룹에 대한 루트 프로세스를 맞춤화 및 실행하는 것으로 계속된다. 그룹의 루트 프로세스의 맞춤화 및 실행은 그룹 내의 각 애플리케이션에 공통된 사용에 따른다 - 이를테면 그룹 내의 각 애플리케이션에 공통된 사용 데이터에 기초한다. 단계(208)에서, 방법(200)은 그룹 내의 애플리케이션들의 이전 실행들의 패턴들에 따라 애플리케이션 그룹의 루트 프로세스를 맞춤화하는 단계, 및 그 후 그룹 내의 애플리케이션들의 이전 실행들의 패턴들에 따라 초기 지점으로 애플리케이션 그룹의 루트 프로세스를 실행하는 단계를 포함할 수 있다. 루트 프로세스를 맞춤화하는 것은 다양한 라이브러리들로부터 루트 프로세스를 구성하고, 디폴트에 의해 이용가능한 다른 루트 프로세스들을 사용하고, 데이터 구조들을 형성하며, 루트 프로세스 컴포넌트들에 대해 네트워크를 통해 다양한 소스들에 질의하는 것으로 행해질 수 있지만, 이에 제한되지 않는다.
단계(210)에서, 방법(200)은 다른 그룹 내의 각 애플리케이션에 공통인 사용에 따라 또 다른 애플리케이션 그룹들 중 한 그룹에 대한 또 다른 루트 프로세스를 맞춤화 및 실행하는 단계로 계속된다. 달리 말하면, 단계(210)는 애플리케이션 그룹들의 또 다른 그룹에 대해 단계(208)를 반복한다. 또한, 단계(210)는 단계(206)에서 형성된 애플리케이션 그룹들의 각 그룹에 대해 단계(208)를 반복하는 것을 포함한다. 일부 실시예들에서, 반복은 다수의 그룹들에 대해 동시에 단계(208)를 수행하는 것으로 대체될 수 있다. 다른 실시예들에서, 맞춤화는 그룹 내의 몇몇 애플리케이션들에 대한 루트 프로세스를 맞춤화하는 것에 대한 불능을 검출할 수 있다. 이 경우에, 이러한 상태의 결정 시에, 단계(208)는 그룹들 간의 애플리케이션들의 재그룹화가 행해질 수 있는 단계(206)로 다시 돌아갈 수 있다.
단계들(208 및 210)과 관련하여, 애플리케이션 그룹 내의 애플리케이션들의 이전 실행들의 패턴들은 모니터링 및/또는 추적되는 그룹의 애플리케이션들의 이전 실행들에서의 패턴들의 적어도 양, 빈도 및/또는 최신성을 포함하거나, 이와 관련되거나, 또는 이에 기초할 수 있다. 모니터링 및/또는 추적된 패턴은 사용자 또는 기계에 의한 애플리케이션 사용의 임의의 유형의 패턴일 수 있다. 예를 들어, 그룹 내의 애플리케이션들에 대한 메모리 액세스 및 사용의 임의의 유형의 패턴이 모니터링 및/또는 추적될 수 있다. 그룹 내의 애플리케이션들의 이전 실행들의 패턴들은 사용자 또는 기계에 의한 애플리케이션 사용의 임의의 유형의 패턴의 적어도 양, 빈도 및/또는 최신성과 같은 메트릭들을 포함하거나, 이와 관련되거나, 또는 이에 기초할 수 있다. 예를 들어, 패턴들은 메모리로부터의 판독들, 메모리에 대한 기록들의 양, 빈도 및/또는 최신성, 물리적 메모리 공간에서의 어드레스 패턴들, 가상 공간에서의 어드레스 패턴들, 데이터의 로컬성(공간적으로 그리고/또는 시간적으로), 뱅크 충돌들, 또는 명령어당 CPU 사이클들과 같은 메트릭들에 기초할 수 있다. 패턴들은 또한 TLB 메트릭들 및 OS에 이용가능한 다른 메트릭들의 양, 빈도 및/또는 최신성과 같은 메트릭들에 기초할 수 있다.
그룹의 애플리케이션들의 루트 프로세스를 실행하는 것은 애플리케이션들에 대한 메모리에의 임의의 초기 기록들 및/또는 메모리로부터의 임의의 초기 판독들 전에 메모리에서 데이터를 이동시키는 것을 포함할 수 있다. 또한, 그룹 내의 애플리케이션들의 루트 프로세스를 실행하는 것은 애플리케이션들에 대한 메모리에의 임의의 초기 기록들 및/또는 메모리로부터의 임의의 초기 판독들 전에 메모리에서 데이터를 복사하는 것을 포함할 수 있다. 그리고, 이동 및/또는 복사된 데이터는 그룹 내의 애플리케이션들의 이전 실행들의 패턴들과 관련된 데이터를 포함할 수 있다. 일부 실시예들에서, 메모리에 대한 임의의 초기 기록들 전 메모리에서의 데이터의 이동 및/또는 복사는 공통 코드 및 판독 전용 데이터의 이동 또는 복사를 회피하는 것을 포함할 수 있다. 일부 실시예들에서, 방법(200)은 컴퓨팅 디바이스에서의 OS(또는 하이퍼바이저)가 OS( 또는 하이퍼바이저)에 대한 루트 프로세스를 포킹한 후에, 애플리케이션들의 루트 프로세스가 애플리케이션 그룹에 대한 애플리케이션 레벨 프로세스이도록, 그 애플리케이션들에 대한 루트 프로세스의 실행을 맞춤화하기 위해 그룹 내의 애플리케이션들에 대한 예측된 초기 기록들 및/또는 판독들을 실행하는 단계를 포함할 수 있다.
또한, 도면들에 도시되지는 않았지만, 방법(200)은 루트 프로세스의 실행의 적어도 일부 전에 플래시 메모리에 애플리케이션 그룹의 루트 프로세스에 대한 데이터를 저장하는 단계를 포함할 수 있다. 또한, 방법(200)은 루트 프로세스의 실행의 적어도 일부 전에 NVRAM에 애플리케이션 그룹의 루트 프로세스에 대한 데이터를 저장하는 단계를 포함할 수 있다(도면들에 도시되지 않음). NVRAM은 3D XPoint 메모리를 포함할 수 있다.
구체적으로, 도 3는 도 1에 도시된 모바일 디바이스(102)에 의해 또는 모바일 디바이스(102)와 유사하게 구성된 또 다른 유형의 컴퓨팅 디바이스에 의해 수행될 수 있는 방법(300)의 동작들을 나타낸다. 또한, 일부 실시예들에서, 방법(300)은 일반적으로 컴퓨팅 디바이스의 OS 또는 모바일 디바이스(102)와 같은 모바일 디바이스의 OS에 의해 적어도 부분적으로 수행될 수 있다. 방법(300)은 또한 하이퍼바이저 및/또는 하나 이상의 운영 체제에 의해 적어도 부분적으로 수행될 수 있다.
도시된 바와 같이, 방법(300)은 또한 도 2에 도시된 방법(200)으로 시작한다. 도 3에 도시된 바와 같이, 방법(300)은 각 애플리케이션에 대한 메모리 액세스를 결정하기 위해 애플리케이션들의 사용을 모니터링하는 단계(202)뿐만 아니라, 애플리케이션들의 사용과 관련된 데이터를 저장하는 단계(204)를 포함한다. 방법(300)은 또한 저장된 데이터에 따라 애플리케이션들을 애플리케이션 그룹들로 그룹화하는 단계(206)를 포함한다. 그리고, 방법(300)은 그룹 내의 각 애플리케이션에 공통된 사용에 따라 애플리케이션 그룹들 중 한 애플리케이션 그룹에 대한 루트 프로세스를 맞춤화 및 실행하는 단계(208)뿐만 아니라, 단계(210)에서 애플리케이션 그룹들의 각 그룹에 대해 단계(208)를 반복하는 것을 포함한다.
단계(302)에서, 방법(300)은 애플리케이션 그룹들 중의 애플리케이션 그룹들로부터의 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 사용자로부터 수신하는 것으로 계속된다. 이는 단계(208) 후에, 애플리케이션 그룹들에 대한 루트 프로세스의 맞춤화 및 실행에 후속하여 일어날 수 있다. 일부 실시예들에서, 단계(208)는 연속 프로세스로서 구현될 수 있고, 단계(302)는 단계들(208 내지 210) 동안 임의의 시간에 그리고 동시에 행해질 수 있다. 다른 실시예들에서, 방법(200)의 모든 단계들은 필요한 변경이 행해질 필요가 있을 때, 필요 시에, 동시에 실행되고 서로 링크되는 연속 프로세스들로서 구현될 수 있다. 예를 들어, 단계(202)에서 패턴들이 변경되는 것으로 결정된다면, 변경은 다음 단계(204) 등으로 전파된다.
단계(304)에서, 방법(300)은 요청을 수신 시 그리고 그룹의 루트 프로세스를 사용함으로써 애플리케이션 그룹으로부터의 애플리케이션들 중 적어도 하나를 시작하는 것으로 계속된다.
일부 실시예들에서, 방법(300)은 적어도 부분적으로컴퓨팅 디바이스에서의 OS에 의해, 애플리케이션들의 이전 실행들의 패턴들에 따라 백그라운드 프로세스로서 애플리케이션 그룹의 루트 프로세스를 실행하는 단계를 포함할 수 있다. 이러한 실시예들에서, 방법(300)은 또한 OS에 의해, 컴퓨팅 디바이스의 사용자로부터 그룹 내의 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 수신하는 단계를 포함할 수 있다. 그리고, 방법(300)은 OS에 의해, 애플리케이션(들)을 시작하기 위한 요청을 수신 시 그리고 애플리케이션 그룹의 루트 프로세스 또는 애플리케이션 그룹의 루트 프로세스의 포크형 프로세스를 사용함으로써 컴퓨팅 디바이스에서의 애플리케이션(들)을 시작하는 단계를 포함할 수 있다. 일부 실시예들에서, 포크형 프로세스의 코드 및 데이터는 애플리케이션, 또 다른 프로세스 또는 OS에 의한 코드 및 데이터의 초기 수정 때까지 복사되지 않는다. 일부 실시예들에서, 코드 및 데이터의 수정된 부분들만이 복사되지만, 수정된 부분들은 공통으로 유지되지 않는다. 일부 실시예들에서, 이러한 부분들은 메모리 페이지들, 캐시 라인들 또는 파일 시스템 섹터들 또는 컴퓨터 판독가능 저장 매체의 다른 요소들에 대한 기록들을 모니터링함으로써 식별될 수 있다.
일부 실시예들에서, 방법(300)은 단계(208)에서, 컴퓨팅 디바이스(예를 들어, 모바일 디바이스) 또는 다수의 컴퓨팅 디바이스들에서, 그룹 내의 애플리케이션들의 이전 실행들의 패턴들에 따라 초기 지점으로 애플리케이션 그룹의 루트 프로세스를 실행하는 단계를 포함할 수 있다. 방법(300)은 또한 단계(302)에서, 컴퓨팅 디바이스(들)에 의해, 컴퓨팅 디바이스(들)의 사용자로부터 그룹 내의 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 수신하는 단계를 포함할 수 있다. 방법(300)은 또한 단계(304)에서, 애플리케이션(들)을 시작하기 위한 요청을 수신 시 그리고 애플리케이션 그룹의 루트 프로세스를 사용함으로써 컴퓨팅 디바이스에서의 애플리케이션(들)을 시작하는 단계를 포함할 수 있다. 이러한 실시예들에서, 방법(300)의 단계들 중 각 단계 또는 적어도 일부는 컴퓨팅 디바이스(들)의 운영 체제, 컴퓨팅 디바이스(들)의 하나 이상의 운영 체제, 하이퍼바이저, 또는 이들의 임의의 조합에 의해 수행될 수 있다. 예를 들어, 실행, 수신, 또는 시작 단계들 중 적어도 하나는 컴퓨팅 디바이스(들)에서의 OS에 의해 수행될 수 있다. 일부 실시예들에서, 초기 지점으로 루트 프로세스를 실행하는 단계, 그 후 단계(302)에서 또 다른 디바이스로부터 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 수신할 시에 그것을 포킹하는 단계, 그 후 네트워크를 통해 또 다른 디바이스, 예를 들어, 모바일 디바이스로 포크형 프로세스를 전달하는 단계, 그 후 단계(304)에서 모바일 디바이스 상의 포크형 프로세스를 애플리케이션을 위한 시작 지점으로서 사용하는 단계는 하나의 디바이스 상에서, 예를 들어, 클라우드 컴퓨팅 환경에서 수행될 수 있다.
구체적으로, 도 4는 적어도 제어기 및 메모리(104)를 포함하는 모바일 디바이스(102)를 나타낸다. 도 4에 도시된 바와 같이, 모바일 디바이스(102)의 제어기 및 메모리(104)는 모바일 디바이스에서 실행되는 애플리케이션들에 대한 명령어들 및 데이터를 포함할 수 있다(예를 들어, 애플리케이션들(108a, 108b, 및 108c) 참조). 모바일 디바이스(102)의 제어기는 데이터에 기초하여 애플리케이션들에 대한 명령어들을 실행할 수 있다. 데이터는 이진 포맷 또는 프로그래밍 언어 해석기에 의해 해석하기에 적합한 포맷의 애플리케이션 명령어 코드를 포함할 수 있다. 데이터는 몇몇 데이터 구조들, 라이브러리들 등을 포함할 수 있다. 제어기는 또한 명령어들 및 데이터를 제어기의 레지스터들에 보유할 수 있다. 메모리는 그 메모리 셀들에 명령어들 및 데이터를 보유할 수 있다. 일부 실시예들에서, 모바일 디바이스(102)의 메모리의 메모리 셀들은 플래시 메모리 셀들 및/또는 NVRAM 셀들을 포함할 수 있다.
도 4에 도시된 모바일 디바이스(102)와 관련하여, 애플리케이션 그룹(예를 들어, 애플리케이션 그룹들(106a, 106b, 및 106c) 참조)에 대해, 모바일 디바이스(102)에 포함되고 이에서 실행 가능한 그룹 내의 애플리케이션들에 대한 명령어들 및 데이터는 애플리케이션 그룹의 루트 프로세스에 대한 루트 프로세스 데이터 및 명령어들을 포함할 수 있다. 모바일 디바이스(102)에 포함된 각 애플리케이션 그룹의 각 루트 프로세스(예를 들어, 애플리케이션 그룹(106a)의 루트 프로세스(110), 애플리케이션 그룹(106b)의 루트 프로세스(112), 및 애플리케이션 그룹(106c)의 루트 프로세스(114))는 제어기 및 메모리(104)에 의해 구현될 수 있다. 제어기는 루트 프로세스에 대한 명령어들 및 데이터에 따라 그룹의 루트 프로세스의 명령어들을 실행하도록 구성될 수 있고, 메모리는 제어기에 의한 루트 프로세스의 실행을 위해 명령어들 및 데이터를 보유 또는 저장하도록 구성될 수 있다. 그리고, 모바일 디바이스(102)에 포함된 애플리케이션 그룹의 다른 프로세스들(예를 들어, 애플리케이션들(108a, 108b 및 108c) - 여기서 각 애플리케이션이 다른 프로세스들을 가짐 - 참조)은 또한 제어기 및 메모리(104)에 의해 구현될 수 있다. 제어기는 다른 프로세스들에 대한 명령어들 및 데이터에 따라 그룹의 다른 프로세스들의 명령어들을 실행하도록 구성될 수 있고, 메모리는 제어기에 의한 다른 프로세스들의 실행을 위해 명령어들 및 데이터를 보유 또는 저장하도록 구성될 수 있다.
도 1 및 도 4에서, 루트 프로세스는 애플리케이션 그룹에 대응하는 것으로 도시되어 있다(예를 들어, 루트 프로세스(110) 및 대응하는 애플리케이션 그룹(106a) 참조). 애플리케이션 그룹에서, 하나의 루트 프로세스는 그룹 내의 두 개 이상의 애플리케이션들에 의해 사용될 수 있는 다수의 프로세스들로 포킹될 수 있는 것으로 이해될 것이다. 또한, 단일 애플리케이션은 다수의 상이한 포크형 프로세스들을 사용할 수 있다. 예를 들어, 애플리케이션(108a)은 포크형 프로세스들(402, 404, 및 406)을 사용할 수 있다. 또한, 언급된 바와 같이, 다수의 애플리케이션들은 다수의 상이한 포크형 프로세스들을 사용할 수 있다. 예를 들어, 애플리케이션들(108a, 108b, 및 108c)은 포크형 프로세스들(402, 404, 및 406)을 사용할 수 있다. 이러한 실시예들은 포킹을 병합함으로써 구현될 수 있다. 다른 실시예들에서, 하나의 애플리케이션이 다수의 그룹들에 속할 수 있다. 예를 들어, 도 4를 참조하면, 애플리케이션(116c)은 애플리케이션 1의 그룹 및 애플리케이션 2의 그룹에 속할 수 있다. 이 경우에, 포킹을 병합하는 것은 다수의 그룹들에 걸쳐 일어날 수 있다.
일부 실시예들에서, 포크형 루트 프로세스의 초기 실행은 라이브러리들을 프리 로딩하는 것, 요구되는 라이브러리들 및 초기 데이터 구조들 중에서 포크형 프로세스를 구성하는 것, 그리고 추후 재사용을 위해 포크형 프로세스를 저장하는 것으로 제한될 수 있다. 또한, 언제든지, 포크형 프로세스의 실행은 프로세스를 재실행하는 데 시간을 소모하는 것을 회피하기 위해 재사용될 수 있도록, 어떤 상태에서 메모리에 저장될 수 있다.
또한, 도 4에 도시된 모바일 디바이스(102)에서, 복수의 애플리케이션들(예를 들어, 애플리케이션들(108a, 108b 및 108c) 참조)의 사용은 복수의 애플리케이션들 각각에 대한 메모리 액세스를 결정하기 위해 모니터링될 수 있다. 복수의 애플리케이션들의 사용과 관련된 데이터(예를 들어, 애플리케이션 사용 데이터(116a, 116b, 및 116c) 참조)는 모바일 디바이스에, 이를테면 모바일 디바이스의 메모리에 또는 네트워크를 통해 클라우드 공간에 저장될 수 있다(예를 들어, 제어기 및 메모리(104) 참조). 복수의 애플리케이션들은 또한 복수의 애플리케이션들의 사용과 관련된 데이터(예를 들어, 애플리케이션 사용 데이터(116a, 116b, 116c) 참조)에 따라 그룹들(예를 들어, 애플리케이션 그룹들(106a, 106b 및 106c) 참조)로 그룹화될 수 있다. 도시된 바와 같이, 애플리케이션 그룹의 논리적 연결들은 애플리케이션 사용 데이터를 그룹의 루트 프로세스뿐만 아니라 그룹에 속하는 대응하는 애플리케이션들과 논리적으로 연관시키거나 연결할 수 있다(예를 들어, 논리적 연결들(118) 참조). 애플리케이션 그룹의 루트 프로세스(예를 들어, 루트 프로세스들(110, 112, 및 114) 참조)는 또한, 그룹 내의 각 애플리케이션에 공통된 사용 데이터(예를 들어, 애플리케이션들(108a, 108b, 및 108c)을 링크시키는 공통 데이터를 포함할 수 있는 애플리케이션 사용 데이터(116a, 116b, 및 116c) 참조)에 따라 맞춤화 및 실행될 수 있다. 그룹 내의 애플리케이션들의 사용 데이터 간의 공통성은 논리적 연결들(예를 들어, 논리적 연결들(118) 참조)을 통해 결정될 수 있다.
추가적으로, 도 4에 도시된 바와 같이, 제어기 및 메모리(104)는 모바일 디바이스(102)에 저장되고 이에서 실행 가능한 애플리케이션 그룹의 각 루트 프로세스로부터 다수의 포크형 프로세스들(예를 들어, 포크형 프로세스들(402, 404, 및 406) 참조)에 대한 데이터 및 명령어들을 포함할 수 있다. 도 4에 도시된 바와 같이, 적어도 포크형 프로세스들(402, 404, 및 406)이 애플리케이션 그룹(106a)의 루트 프로세스(110)로부터 포킹될 수 있지만, 루트 프로세스(110)로부터 포킹되는 더 많은 프로세스들이 있을 수 있다.
일부 실시예들에서, 모바일 디바이스(102)의 운영 체제, 또는 모바일 디바이스 내의 또는 모바일 디바이스와 연관된 하이퍼바이저는 애플리케이션 그룹의 루트 프로세스(예를 들어, 애플리케이션 그룹(106a)의 루트 프로세스(110) 참조)를 다수의 프로세스들(예를 들어, 포크형 프로세스들(402, 404, 및 406) 참조)로 포킹하도록 구성된다. 이러한 실시예들에서, 운영 체제, 또는 하이퍼바이저는 하나 이상의 애플리케이션을 시작하기 위한 요청을 수신 시 그리고 애플리케이션(들)을 시작하기 위한 요청에 따라 다수의 포크형 프로세스들(예를 들어, 포크형 프로세스들(402, 404, 및 406) 참조) 중 적어도 하나 및/또는 애플리케이션 그룹의 각 루트 프로세스(예를 들어, 루트 프로세서(110) 참조)를 사용함으로써 모바일 디바이스(102)에서 하나 이상의 애플리케이션을 시작하도록 구성될 수 있다. 일부 실시예들에서, 각 포크형 프로세스는 시작될 것이 요청된 애플리케이션들 중 하나에 대한 것일 수 있다. 예를 들어, 루트 프로세스로부터 네 개의 프로세스들이 포킹되는 경우, 네 개의 포킹된 프로세스들은 모바일 디바이스의 사용자에 의해 시작될 것이 요청되었던 그룹 내의 네 개의 상이한 애플리케이션들에 대한 것일 수 있다.
포크형 다중 프로세스들의 적어도 일부 또는 각각은 애플리케이션 그룹의 부모 루트 프로세스와 상이할 수 있다. 차이는 실행될 컴퓨팅 디바이스에서의 상이한 애플리케이션들 및 상이한 애플리케이션 부분들에 기초할 수 있다. 그리고, 포크형 다수의 프로세스의 적어도 일부 또는 각각은 시작될 것이 요청된 애플리케이션의 실행의 적어도 일부 지점에서 애플리케이션의 그룹의 부모 루트 프로세스와 동일할 수 있다.
구체적으로, 도 5는 도 4에 도시된 모바일 디바이스(102)에 의해 또는 모바일 디바이스(102)와 유사하게 구성된 또 다른 유형의 컴퓨팅 디바이스에 의해 수행될 수 있는 방법(500)의 동작들을 나타낸다. 또한, 일부 실시예들에서, 방법(500)은 일반적으로 컴퓨팅 디바이스의 OS 또는 모바일 디바이스(102)와 같은 모바일 디바이스의 OS에 의해 적어도 부분적으로 수행될 수 있다. 방법(500)은 또한 하이퍼바이저 및/또는 하나 이상의 운영 체제에 의해 적어도 부분적으로 수행될 수 있다.
도시된 바와 같이, 방법(500)은 또한 도 2에 도시된 방법(200)으로 시작한다. 도 5에 도시된 바와 같이, 방법(500)은 각 애플리케이션에 대한 메모리 액세스를 결정하기 위해 애플리케이션들의 사용을 모니터링하는 단계(202)뿐만 아니라, 애플리케이션들의 사용과 관련된 데이터를 저장하는 단계(204)를 포함한다. 방법(500)은 또한 저장된 데이터에 따라 애플리케이션들을 애플리케이션 그룹들로 그룹화하는 단계(206)를 포함한다. 그리고, 방법(500)은 그룹 내의 각 애플리케이션에 공통된 사용에 따라 애플리케이션 그룹들 중 한 그룹에 대한 루트 프로세스를 맞춤화 및 실행하는 단계(208)뿐만 아니라, 단계(210)에서 애플리케이션 그룹들의 각 그룹에 대해 단계(208)를 반복하는 것을 포함한다.
단계(502)에서, 방법(500)은 애플리케이션 그룹들 중의 애플리케이션 그룹들로부터의 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 사용자로부터 수신하는 단계로 계속된다. 이는 사용자의 모바일 디바이스와 같은 사용자의 디바이스에서 일어날 수 있다. 단계(502)는 애플리케이션 그룹의 루트 프로세스의 맞춤화 및 실행 후에 일어날 수 있다.
단계(504)에서, 방법(500)은 애플리케이션 그룹의 루트 프로세스를 다수의 프로세스들로 포킹하는 것으로 계속된다. 초기에, 포크형 다중 프로세스들은 구현에 따라 루트 프로세스와 상이하거나 동일할 수 있다.
단계(506)에서, 방법(500)은 요청을 수신 시 그리고 요청에 따라 포크형 다중 프로세스들 중 적어도 하나를 사용함으로써 애플리케이션 그룹으로부터의 애플리케이션들 중 적어도 하나를 시작하는 것으로 계속된다.
이러한 실시예들에서, 방법(500)의 단계들 중 각 단계 또는 적어도 일부는 컴퓨팅 디바이스(들)의 운영 체제, 컴퓨팅 디바이스(들)의 하나 이상의 운영 체제, 하이퍼바이저, 또는 이들의 임의의 조합에 의해 수행될 수 있다. 예를 들어, 실행, 수신, 또는 시작 단계들 중 적어도 하나는 컴퓨팅 디바이스(들)에서의 OS에 의해 수행될 수 있다. 일부 실시예들에서, 방법(500)은 단계(504)에서, 애플리케이션 그룹의 루트 프로세스를 다수의 동일한 프로세스들로 포킹하는 단계, 및 단계(506)에서, 애플리케이션(들)을 시작하기 위한 요청을 수신 시 그리고 애플리케이션(들)을 시작하기 위한 요청에 따라 다수의 동일한 프로세스들 중 적어도 하나를 사용함으로써 모바일 디바이스에서의 애플리케이션(들)을 시작하는 단계를 포함할 수 있다.
방법(500)과 관련하여, 포크형 다중 프로세스들의 적어도 일부 또는 각각은 애플리케이션 그룹의 부모 루트 프로세스와 상이할 수 있다. 차이는 실행될 컴퓨팅 디바이스에서의 상이한 애플리케이션들 및 상이한 애플리케이션 부분들에 기초할 수 있다. 그리고, 포크형 다수의 프로세스의 적어도 일부 또는 각각은 그룹 내의 애플리케이션의 실행의 적어도 일부 지점에서 애플리케이션의 부모 루트 프로세스와 동일할 수 있다.
방법들(300 및 500)을 구현할 수 있는 실시예들과 같은 일부 실시예들에서, 그룹 내의 애플리케이션들의 이전 실행들의 패턴들은 특정 사용자 및 다른 사용자들에 의한 특정 컴퓨팅 디바이스(예를 들어, 특정 모바일 디바이스) 상의 애플리케이션들의 사용으로부터 비롯되어, 루트 프로세스는 임의의 사용자에 의해 특정 컴퓨팅 디바이스 상에서의 애플리케이션 그룹의 사용을 위해 맞춤화된다.
방법들(300 및 500)을 구현할 수 있는 일부 다른 실시예들과 같은 일부 다른 실시예들에서, 그룹 내의 애플리케이션들의 이전 실행들의 패턴들은 특정 사용자에 의한 특정 컴퓨팅 디바이스(예를 들어, 특정 모바일 디바이스) 상의 애플리케이션들의 사용으로부터 비롯되어, 애플리케이션 그룹의 루트 프로세스는 특정 사용자에 의해 특정 컴퓨팅 디바이스 상에서의 애플리케이션 그룹의 사용을 위해 맞춤화된다.
방법들(300 및 500)을 구현할 수 있는 일부 다른 실시예들과 같은 일부 다른 실시예들에서, 그룹 내의 애플리케이션들의 이전 실행들의 특정 사용자에 의한 패턴들은 특정 컴퓨팅 디바이스(예를 들어, 특정 모바일 디바이스) 상의 그리고 적어도 하나의 다른 컴퓨팅 디바이스 상의 애플리케이션들의 사용으로부터 비롯되어, 루트 프로세스는 특정 사용자에 의한 특정 컴퓨팅 디바이스 상의 그리고 적어도 하나의 다른 컴퓨팅 디바이스 상에서의 애플리케이션 그룹의 사용을 위해 맞춤화된다.
구체적으로, 도 6는 도 1 및 4에 도시된 모바일 디바이스(102)에 의해 또는 모바일 디바이스(102)와 유사하게 구성된 또 다른 유형의 컴퓨팅 디바이스에 의해 수행될 수 있는 방법(600)의 동작들을 나타낸다. 또한, 일부 실시예들에서, 방법(600)은 일반적으로 컴퓨팅 디바이스의 운영 체제 또는 모바일 디바이스의 운영 체제에 의해 수행될 수 있다. 방법(600)은 또한 하이퍼바이저 및/또는 하나 이상의 운영 체제에 의해 적어도 부분적으로 수행될 수 있다.
도 6에 도시된 바와 같이, 방법(600)은 도 3에 도시된 방법(300) 또는 도 5에 도시된 방법(500) 중 어느 하나로 시작한다. 그 후, 방법(600)은 단계(602)에서, 애플리케이션 그룹들 중의 한 애플리케이션 그룹으로부터의 애플리케이션들 중 적어도 하나를 종료하기 위한 요청을 수신하는 것으로 계속된다. 이는 방법(300) 또는 방법(500)이 적어도 부분적으로 일어난 후에 일어날 수 있다.
단계(604)에서, 방법(600)은 그룹으로부터의 애플리케이션들 중 적어도 하나를 종료하기 위한 요청을 수신 시, 애플리케이션 그룹으로부터의 애플리케이션들 중 적어도 하나를 적어도 부분적으로 종료하는 것으로 계속된다. 일부 실시예들에서, 애플리케이션의 종료 동안, 애플리케이션의 루트 프로세스는 애플리케이션의 특정 모듈들(예를 들어, GUI, 또는 라이브러리들 등)을 제거함으로써 추출될 수 있다. 루트 프로세스는 애플리케이션의 축약된 맞춤화 버전이 될 수 있으며, 이는 그 후 애플리케이션에 재사용될 수 있거나, 또는 그룹 내의 다른 애플리케이션들에 의해 사용될 수 있거나, 또는 종료된 애플리케이션 후에 애플리케이션들의 많은 루트 프로세스들을 취함으로써 그룹에 대한 메인 루트 프로세스를 생성할 때 사용될 수 있다. 이 다음에는 그룹의 애플리케이션들을 분석하고 그룹에 대한 메인 루트 프로세스를 구성하는 것이 뒤따를 수 있다. 결과로서, 디바이스 또는 시스템은 실제 애플리케이션 실행에 기초하여 맞춤화된 루트 프로세스들의 고도로 조정 가능한 시스템을 생성할 수 있다.
단계(606)에서, 방법(600)은 그룹으로부터의 적어도 하나의 애플리케이션을 종료하기 위한 요청을 수신 시, 애플리케이션 그룹의 각 루트 프로세스를 적어도 부분적으로 종료하는 것으로 계속된다.
도 6에 도시된 바와 같이, 단계(606)가 완료될 때, 단계(608)에서, 방법(600)은 - 적어도 하나의 애플리케이션 및 각 루트 프로세스를 적어도 부분적으로 종료한 후 - 미리 결정된 조건에 따라 각 루트 프로세스를 적어도 부분적으로 재실행하는 것으로 계속될 수 있다. 단계(608)에서, 그룹의 각 루트 프로세스를 적어도 부분적으로 재실행하는 것은 그룹 내의 애플리케이션들의 이전 실행들의 패턴들에 기초하여 일어날 수 있다. 또한, 단계(608)에서, 루트 프로세스를 적어도 부분적으로 재실행하는 것은 그룹의 애플리케이션들의 이전 실행들의 패턴들에 의해 업데이트될 수 있다.
도 6에 도시된 바와 같이, 단계(606)가 완료되지 않을 때, 단계(610)에서, 방법(600)은 적어도 하나의 애플리케이션을 종료하기 위한 요청을 수신 시 애플리케이션 그룹의 루트 프로세스를 계속해서 실행하면서 앞으로 이동할 수 있다. 다시 말해서, 방법(600)은 단계(602)에서 모바일 디바이스의 사용자로부터 적어도 하나의 애플리케이션을 종료하기 위한 요청을 수신하는 단계를 포함할 수 있고, 그 후 단계(604)에서, 이는 애플리케이션을 종료하기 위한 요청을 수신 시 적어도 하나의 애플리케이션을 적어도 부분적으로 종료하는 단계를 포함할 수 있으며, 그 후 단계(610)에서, 이는 애플리케이션(들)을 종료하기 위한 요청의 수신 시 그리고 단계(604)와 단계(610) 사이에서 그룹의 루트 프로세스를 중단하지 않고 애플리케이션 그룹의 루트 프로세스를 계속해서 실행하는 단계를 포함할 수 있다. 이의 결과로서, 사용자가 적어도 부분적으로 종료된 애플리케이션 또는 이 루트 프로세스가 사용될 수 있는 다른 애플리케이션을 재시작하기로 결정한다면 애플리케이션의 루트 프로세스가 다시 재사용될 수 있다.
방법(200), 방법(300), 방법(500), 방법(600), 또는 본원에서 설명된 임의의 다른 방법, 프로세스 또는 동작과 관련하여, 일부 실시예들에서, 비일시적 컴퓨터 판독가능 저장 매체는 적어도 하나의 프로세싱 디바이스(예를 들어, 도 7에 도시된 제어기(706))에 의해 실행될 때, 적어도 하나의 프로세싱 디바이스로 하여금, 방법(200), 방법(300), 방법(500), 방법(600), 또는 본원에서 설명된 임의의 다른 방법, 프로세스 또는 동작을 수행하게 하는 명령어들을 저장한다.
예를 들어, 일부 실시예들은 컴퓨팅 디바이스와 연관된 프로세서에 의해 실행될 때, 도 2에 도시된 방법(200)과 같은 방법을 수행하는 컴퓨터 실행가능 명령어들로 유형적으로 인코딩된 비일시적 컴퓨터 판독가능 저장 매체를 포함할 수 있다. 또한, 예를 들어, 일부 실시예들은 컴퓨팅 디바이스와 연관된 프로세서에 의해 실행될 때, 도 3에 도시된 방법(300), 도 5에 도시된 방법(500), 및 도 6에 도시된 방법(600)과 같은 방법을 수행하는 컴퓨터 실행가능 명령어들로 유형적으로 인코딩된 비일시적 컴퓨터 판독가능 저장 매체를 포함할 수 있다.
일부 실시예들에서, (예를 들어, 도 2에 도시된) 단계(202)는 모바일 디바이스에서, 복수의 애플리케이션들 각각에 대한 메모리 액세스를 결정하기 위해 복수의 애플리케이션들의 사용을 모니터링하는 단계를 포함할 수 있다. 단계(204)는 복수의 애플리케이션들의 사용과 관련된 데이터를 저장하는 단계를 포함할 수 있다. 단계(206)는 복수의 애플리케이션들의 사용과 관련된 데이터에 따라 복수의 애플리케이션들을 그룹들로 그룹화하는 단계를 포함할 수 있다. 단계(208)는 그룹 내의 각 애플리케이션에 공통인 사용에 따라 애플리케이션 그룹들 중 한 그룹에 대한 루트 프로세스를 맞춤화 및 실행하는 단계를 포함할 수 있다.
일부 실시예들에서, 모니터링, 저장, 그룹화, 또는 실행 중 적어도 하나는 모바일 디바이스에서의 OS에 의해 수행된다. 그리고, 일부 실시예들에서, 메모리 액세스를 결정하는 단계는 메모리로부터의 판독들 및 메모리에의 기록들의 빈도 또는 최신성을 측정하는 단계를 포함할 수 있다.
일부 실시예들에서, 단계(202)에서, 복수의 애플리케이션들의 사용의 모니터링은 루트 프로세스가 사용자에 의한 모바일 디바이스 상에서의 애플리케이션들의 사용을 위해 맞춤화되도록 사용자에 의한 복수의 애플리케이션들의 사용에 대한 것이다.
일부 실시예들에서, 단계(204)는 복수의 애플리케이션들의 사용과 관련된 데이터를 데이터베이스에 저장하는 단계를 포함할 수 있다. 그리고, 일부 실시예들에서, 단계(208)는 그룹 내의 애플리케이션들에 공통된 지점으로 그룹의 루트 프로세스를 실행하는 단계를 포함할 수 있다.
일부 실시예들에서, 단계(208)는 그룹 내의 각 애플리케이션에 공통인 데이터베이스 내의 데이터에 기초하여 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들을 생성하는 단계를 포함할 수 있다. 그리고, 단계(208)는 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들에 따라 그룹의 루트 프로세스를 실행하는 단계를 포함할 수 있다.
일부 실시예들에서, 단계(202)에서 복수의 애플리케이션들의 사용의 모니터링은 루트 프로세스가 임의의 사용자에 의한 모바일 디바이스 상에서의 애플리케이션의 사용을 위해 맞춤화되도록 모바일 디바이스의 임의의 사용자에 의한 복수의 애플리케이션들의 사용에 대한 것이다. 일부 실시예들에서, 단계(208)에서 그룹에 대한 루트 프로세스를 실행하는 단계는 그룹에 대한 메모리에의 임의의 초기 기록 전에 메모리 내의 데이터를 복사하는 단계를 포함할 수 있고, 메모리에의 임의의 초기 기록 전 메모리 내의 데이터의 복사는 공통 코드 및 판독 전용 데이터의 복사를 회피하는 것을 포함할 수 있다.
일부 실시예들은 단계(202)에서, 모바일 디바이스에서의 OS에 의해, 복수의 애플리케이션들 각각에 대한 메모리로부터의 판독 및 메모리에의 기록의 빈도 또는 최신성을 결정하기 위해 복수의 애플리케이션들의 사용을 모니터링하는 단계를 포함할 수 있다. 이러한 실시예들은 단계(204)에서, OS에 의해, 복수의 애플리케이션들의 사용과 관련된 데이터를 데이터베이스에 저장하는 단계를 포함할 수 있다. 그리고, 이러한 실시예들은 단계(206)에서, OS에 의해, 데이터베이스의 질의들에 따라 복수의 애플리케이션들을 그룹들로 그룹화하는 단계뿐만 아니라, 단계(208)에서, 적어도 부분적으로 OS에 의해, 그룹 내의 각 애플리케이션에 공통인 데이터베이스 내의 데이터에 따라 그룹들 중 한 그룹에 대한 루트 프로세스를 백그라운드 프로세스로서 실행하는 단계를 포함할 수 있다.
일부 실시예들에서, (도 3에 도시된) 방법(302)은 컴퓨팅 디바이스의 사용자로부터 그룹으로부터의 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 수신하는 단계를 포함할 수 있다. 단계(304)는 요청을 수신 시 루트 프로세스를 사용함으로써 모바일 디바이스에서의 그룹으로부터의 애플리케이션들 중 적어도 하나를 시작하는 단계를 포함할 수 있다.
일부 실시예들에서, (도 5에 도시된) 단계(504)는 모바일 디바이스에서의 OS에 의해, 루트 프로세스를 다수의 프로세스들로 포킹하는 단계를 포함할 수 있다. 단계(506)는 OS에 의해, 요청을 수신 시 요청에 따라 다수의 프로세스들 중 적어도 하나를 사용함으로써 그룹으로부터의 애플리케이션들 중 적어도 하나를 시작하는 단계를 포함할 수 있다.
일부 실시예들에서, (도 6에 도시된) 단계(602)는 모바일 디바이스의 사용자로부터, 그룹으로부터의 애플리케이션들 중 적어도 하나를 종료하기 위한 요청을 수신하는 단계를 포함할 수 있다. 단계(604)는 그룹으로부터의 애플리케이션들 중 적어도 하나를 적어도 부분적으로 종료하는 단계를 포함할 수 있고, 단계(606)는 그룹으로부터의 애플리케이션들 중 적어도 하나를 종료하기 위한 요청을 수신 시 루트 프로세스를 적어도 부분적으로 종료하는 단계를 포함할 수 있다. 단계(608)는 루트 프로세스 및 그룹으로부터의 애플리케이션들 중 적어도 하나를 적어도 부분적으로 종료한 후에, 미리 결정된 조건에 따라 루트 프로세스를 적어도 부분적으로 재실행하는 단계를 포함할 수 있다. 루트 프로세스를 적어도 부분적으로 재실행하는 단계는 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들에 기초하거나 이에 의해 업데이트될 수 있다. 단계(610)는 그룹으로부터의 애플리케이션들 중 적어도 하나를 종료하기 위한 요청을 수신 시 루트 프로세스를 계속해서 실행하는 단계를 포함할 수 있다.
일부 실시예들에서, 방법들은 루트 프로세스에 대한 데이터를 플래시 메모리에 저장하는 단계를 포함할 수 있다. 일부 실시예들에서, 방법들은 루트 프로세스에 대한 데이터를 NVRAM에 저장하는 단계를 포함할 수 있다. NVRAM은 3D XPoint 메모리를 포함할 수 있다.
일부 실시예들에서, 컴퓨팅 디바이스와 연관된 프로세서에 의해 실행될 때, 모바일 디바이스에서, 복수의 애플리케이션들 각각에 대한 메모리로부터의 판독들 및 메모리에의 기록들의 빈도 또는 최신성을 결정하기 위해 복수의 애플리케이션들의 사용을 모니터링하는 단계를 포함할 수 있는 방법을 수행하는 컴퓨터 실행가능 명령어들로 유형적으로 인코딩된 비일시적 컴퓨터 판독가능 저장 매체가 제공된다. 본 방법은 복수의 애플리케이션들의 사용과 관련된 데이터를 저장하는 단계를 포함할 수 있다. 본 방법은 사용과 관련된 데이터의 질의들에 따라 복수의 애플리케이션들을 그룹들로 그룹화하는 단계를 포함할 수 있다. 본 방법은 그룹 내의 각 애플리케이션에 공통인 저장된 데이터에 따라 그룹들 중 한 그룹에 대한 루트 프로세스를 실행하는 단계를 포함할 수 있다. 이러한 실시예들에서, 본 방법은 일부 실시예들에서, 단계(208)는 그룹 내의 각 애플리케이션에 공통된 저장된 데이터에 기초하여 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들을 생성하는 단계를 포함할 수 있다. 그리고, 본 방법은 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들에 따라 루트 프로세스를 실행하는 단계를 포함할 수 있다. 또한, 이러한 실시예들에서, 방법)은 모바일 디바이스의 사용자로부터 그룹 내의 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 수신하는 단계를 포함할 수 있다. 본 방법은 또한 요청을 수신 시 루트 프로세스를 사용함으로써 모바일 디바이스에서의 그룹으로부터의 애플리케이션들 중 적어도 하나를 시작하는 단계를 포함할 수 있다. 본 방법은 또한 루트 프로세스를 다수의 프로세스들로 포킹하는 단계를 포함할 수 있고, 본 방법은 요청을 수신 시 요청에 따라 다수의 프로세스들 중 적어도 하나를 사용함으로써 그룹으로부터의 애플리케이션들 중 적어도 하나를 시작하는 단계를 포함할 수 있다.
도 7은 본 개시의 일부 실시예들에 따른, 다수의 애플리케이션 그룹들에 대한 맞춤형 루트 프로세스들을 구현할 수 있는 예시적인 컴퓨팅 디바이스를 나타낸다. 디바이스(700)는 모바일 디바이스(102) 또는 스마트폰, 태블릿 컴퓨터, IoT 디바이스, 스마트 텔레비전, 스마트 워치, 안경 또는 다른 스마트 가전 제품, 차량내 정보 시스템, 웨어러블 스마트 디바이스, 게임 콘솔, PC, 디지털 카메라, 또는 이들의 임의의 조합과 같은 모바일 디바이스이거나 또는 모바일 디바이스와 다소 유사한 임의의 다른 유형의 컴퓨팅 디바이스일 수 있거나 또는 그 일부이거나 또는 이를 포함할 수 있다. 도시된 바와 같이, 디바이스(700)는 적어도 광역 네트워크(WAN), 로컬 영역 네트워크(LAN), 인트라넷, 4G 또는 5G와 같은 모바일 무선 네트워크, 엑스트라넷, 인터넷, 및/또는 이들의 임의의 조합을 포함하는 통신 네트워크(들)(714)에 연결될 수 있다.
본원에서 설명된 컴퓨팅 또는 모바일 디바이스들(이를테면, 모바일 디바이스(102) 또는 컴퓨팅 디바이스(700))은 개인용 컴퓨터(PC), 태블릿 PC, 셋탑 박스(STB), 개인용 정보 단말기(PDA), 휴대 전화, 웹 기기, 서버, 네트워크 라우터, 스위치 또는 브릿지, 또는 해당 기계에 의해 취해질 동작들을 특정하는 명령어 세트(순차적 또는 다른 방식)를 실행할 수 있는 임의의 기계일 수 있거나 이것들로 대체될 수 있다.
또한, 도 7에 도시된 디바이스(700)뿐만 아니라 도 1 및 4에 도시된 모바일 디바이스(102)에 대해 단일 기계가 도시되었지만, "기계"라는 용어는 또한 본 명세서에서 논의된 방법론들 또는 동작들 중 임의의 하나 이상을 수행하기 위한 명령어 세트(또는 다수의 세트들)를 개별적으로 또는 공동으로 실행하는 임의의 기계군을 포함하는 것으로 취해져야 한다. 그리고, 도시된 컴퓨팅 또는 모바일 디바이스들 각각은 적어도 버스 및/또는 마더보드, 하나 이상의 제어기(이를테면, 하나 이상의 CPU), 임시 데이터 저장소를 포함할 수 있는 메인 메모리, 적어도 하나의 유형의 네트워크 인터페이스, 영구 데이터 저장소를 포함할 수 있는 저장 시스템, 및/또는 이들의 임의의 조합을 각각 포함할 수 있다. 일부 멀티 디바이스 실시예들에서, 하나의 디바이스는 본원에서 설명된 방법들의 일부 부분들을 완료할 수 있고, 그 후 또 다른 디바이스가 본원에서 설명된 방법들의 다른 단계들을 계속할 수 있도록 네트워크를 통해 또 다른 디바이스에 완료의 결과를 송신할 수 있다.
도 7은 또한, 본 개시의 일부 실시예들에 따른, 예시적인 컴퓨팅 디바이스(700)의 예시적인 부분들을 나타낸다. 디바이스(700)는 도시된 바와 같이 네트워크(들)(714)에 통신 가능하게 결합될 수 있다. 디바이스(700)는 적어도 버스(704), 제어기(706)(이를테면, CPU), 메모리(708), 네트워크 인터페이스(710), 데이터 저장 시스템(712), 및 기타 컴포넌트들(716)(GPS 컴포넌트들, I/O 컴포넌트들, 및 센서들과 같은 모바일 또는 컴퓨팅 디바이스들에서 발견되는 임의의 유형의 컴포넌트들일 수 있음)을 포함한다. 다른 컴포넌트들(716)은 하나 이상의 디스플레이, 상이한 유형들의 센서, 오디오 및/또는 시각적 입력/출력 디바이스, 추가적인 애플리케이션 특정 메모리, 하나 이상의 추가적인 제어기(예를 들어, GPU), 또는 이들의 임의의 조합을 포함할 수 있다. 버스(704)는 제어기(706), 메모리(708), 네트워크 인터페이스(710), 데이터 저장 시스템(712) 및 기타 컴포넌트들(716)을 통신 가능하게 결합시킨다. 디바이스(700)는 적어도, 버스(704)(이는 다수의 버스들을 포함할 수 있음)를 통해 서로 통신하는 제어기(706), 메모리(708)(예를 들어, 판독 전용 메모리(ROM), 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM) 이를테면 동기식 DRAM(SDRAM) 또는 램버스 DRAM(RDRAM), 정적 랜덤 액세스 메모리(SRAM) 등), 및 데이터 저장 시스템(712)을 포함하는 컴퓨터 시스템을 포함한다.
달리 말하면, 도 7은 본 개시의 실시예들이 동작할 수 있는 컴퓨터 시스템을 예시적인 디바이스(700)의 블록도이다. 일부 실시예들에서, 컴퓨터 시스템은 실행될 때, 기계로 하여금 본원에서 논의된 방법론들 중 임의의 하나 이상을 수행하게 하기 위한 명령어 세트를 포함할 수 있다. 이러한 실시예들에서, 기계는 LAN, 인트라넷, 엑스트라넷, 및/또는 인터넷(예를 들어, 네트워크(들)(714))으로 다른 기계들에 연결(예를 들어, 인터페이스(710)를 통해 네트워킹)될 수 있다. 기계는 클라이언트-서버 네트워크 환경에서의 서버 또는 클라이언트 기계로서, 피어-투-피어(또는 분산) 네트워크 환경(이를테면 본원에서 설명된 피어-투-피어 네트워크들)에서의 피어 기계로서, 또는 클라우드 컴퓨팅 인프라스트럭처 또는 환경에서의 서버 또는 클라이언트 기계로서 동작할 수 있다.
제어기(706)는 하나 이상의 범용 처리 디바이스 이를테면 마이크로 프로세서, 중앙 처리 장치 등을 나타낸다. 보다 구체적으로, 처리 디바이스는 복합 명령어 세트 컴퓨팅(CISC) 마이크로 프로세서, 축소 명령어 세트 컴퓨팅(RISC) 마이크로 프로세서, 훨씬 긴 명령어(VLIW) 마이크로 프로세서, 단일 명령어 다중 데이터(SIMD), 다중 명령어 다중 데이터(MIMD), 또는 다른 명령어 세트들을 구현하는 프로세서, 또는 명령어 세트들의 조합을 구현하는 프로세서들일 수 있다. 제어기(706)는 또한 용도 특정 집적 회로(ASIC), 현장 프로그래밍 가능한 게이트 어레이(FPGA), 디지털 신호 프로세서(DSP), 네트워크 프로세서 등과 같은 하나 이상의 특수 목적 프로세싱 디바이스일 수 있다. 제어기(706)는 본 명세서에서 논의된 동작들 및 단계들을 수행하기 위한 명령어들(926)을 실행하도록 구성된다. 제어기(706)는 (네트워크(들)(714)와 같은) 하나 이상의 통신 네트워크를 통해 통신하기 위해 네트워크 인터페이스(710)와 같은 네트워크 인터페이스 디바이스를 더 포함할 수 있다.
데이터 저장 시스템(712)은 본 명세서에서 설명된 방법론들 또는 기능들 중 임의의 하나 이상을 구현하는 하나 이상의 명령어 세트 또는 소프트웨어가 저장되는 기계 판독가능 저장 매체(또한 컴퓨터 판독가능 매체라고도 알려져 있음)를 포함할 수 있다. 명령어들은 또한 기계 판독가능 저장 매체를 구성하는 컴퓨터 시스템, 메모리(708) 및 제어기(706)에 의한 이들의 실행 동안 메모리(708) 내에 그리고/또는 제어기(706) 내에 완전히 또는 적어도 부분적으로 상주할 수 있다. 메모리(708)는 디바이스(700)의 메인 메모리이거나 이를 포함할 수 있다.
메모리, 제어기, 및 데이터 저장 부분들이 예시적인 실시예에서 각각 단일 부분인 것으로서 도시되어 있지만, 각 부분은 명령어들을 저장하고 이들의 각 동작들을 수행할 수 있는 단일 부분 또는 다수의 부분들을 포함하는 것으로 간주되어야 한다. 또한, "기계 판독가능 매체"라는 용어는 기계에 의한 실행을 위한 명령어 세트를 저장하거나 인코딩할 수 있고 기계로 하여금 본 개시의 방법론들 중 임의의 하나 이상을 수행하게 하는 임의의 매체를 포함하는 것으로 취해져야 한다. 이에 따라, "기계 판독가능 저장 매체"라는 용어는 고체 상태 메모리들, 광학 매체들, 및 자기 매체들을 포함하지만, 이에 제한되지는 않는 것으로 취해져야 한다.
선행하는 발명을 실시하기 위한 구체적인 내용의 일부 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 동작들의 알고리즘들 및 상징적 표현들과 관련하여 제시되었다. 이러한 알고리즘적 설명들 및 표현들은 데이터 처리 분야의 기술자들에 의해 자신들의 작업 내용을 해당 기술분야의 다른 기술자들에게 가장 효과적으로 전달하기 위해 사용되는 방식들이다. 알고리즘은 본 명세서에서, 그리고 일반적으로, 목적하는 결과를 도출하는 동작들의 자기 일관적인 시퀀스인 것으로 구상된다. 동작들은 물리적 수량들의 물리적 조작들을 필요로 하는 것들이다. 반드시 그렇지는 아니지만, 일반적으로, 이러한 수량들은 저장, 조합, 비교, 및 다른 방식으로 조작될 수 있는 전기적 또는 자기적 신호들의 형태를 띤다. 주로 일반적인 용법의 이유로, 이러한 신호들을 비트들, 값들, 요소들, 심볼들, 문자들, 용어들, 숫자들 등으로서 나타내는 것이 때때로 편리하다는 것이 밝혀졌다.
그러나, 이러한 그리고 유사한 용어들은 모두 적절한 물리적 수량들과 연관되어야 하고 단지 이러한 수량들에 적용되는 편리한 라벨들일 뿐임을 유념해야 한다. 본 개시는 컴퓨터 시스템, 또는 컴퓨터 시스템의 레지스터들 및 메모리들 내 물리적(전자적) 수량들로서 표현된 데이터를 조작하고 컴퓨터 시스템 메모리들 또는 레지스터들 또는 다른 이러한 정보 저장 시스템들 내 물리적 수량들로서 유사하게 표현되는 다른 데이터로 변환하는 유사한 전자 컴퓨팅 디바이스의 동작 및 프로세스들을 나타낼 수 있다.
또한, 본 개시는 본 명세서에서의 동작들을 수행하기 위한 장치에 관한 것이다. 이러한 장치는 의도된 목적들을 위해 특별히 구성될 수 있거나, 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택 가능하게 활성화되거나 재구성되는 범용 컴퓨터를 포함할 수 있다. 이러한 컴퓨터 프로그램은 컴퓨터 판독가능 저장 매체, 이를테면 이에 제한되지는 않지만, 각각 컴퓨터 시스템 버스에 결합되는, 플로피 디스크, 광학 디스크, CD-ROM, 및 자기-광학 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), EPROM, EEPROM, 자기 또는 광학 카드, 또는 전자 명령어들을 저장하는데 적합한 임의의 유형의 매체를 포함하는 임의의 유형의 디스크에 저장될 수 있다.
본 명세서에서 제시된 알고리즘들 및 디스플레이들은 본질적으로 임의의 특정 컴퓨터 또는 다른 장치와 관련되는 것은 아니다. 다양한 범용 시스템들이 여기서의 교시에 따른 프로그램들과 함께 사용될 수 있거나, 방법을 수행하기 위해 보다 특화된 장치를 구성하는 것이 편리함을 증명할 수 있다. 이러한 다양한 시스템들에 대한 구조는 아래의 설명에서 제시된 바와 같이 나타날 것이다. 또한, 본 개시는 임의의 특정 프로그래밍 언어를 참조하여 설명되지 않는다. 본 명세서에서 설명된 바와 같이 본 개시의 교시 내용을 구현하는데 다양한 프로그래밍 언어들이 사용될 수 있다는 것이 이해될 것이다.
본 개시는 컴퓨터 프로그램 제품, 또는 소프트웨어로서 제공될 수 있으며, 이는 본 개시에 따라 프로세스를 수행하기 위해 컴퓨터 시스템(또는 다른 전자 디바이스들)을 프로그래밍하는데 사용될 수 있는 명령어들이 저장된 기계 판독가능 매체를 포함할 수 있다. 기계 판독가능 매체는 기계(예를 들어, 컴퓨터)에 의해 판독가능 형태로 정보를 저장하기 위한 임의의 메커니즘을 포함한다. 일부 실시예들에서, 기계 판독가능(예를 들어, 컴퓨터 판독가능) 매체는 기계(예를 들어, 컴퓨터) 판독가능 저장 매체 이를테면 판독 전용 메모리("ROM"), 랜덤 액세스 메모리("RAM"), 자기 디스크 저장 매체, 광학 저장 매체, 플래시 메모리 컴포넌트들 등을 포함한다.
앞에서의 명세서에서, 본 개시의 실시예들은 이의 특정 예시적인 실시예들을 참조하여 설명되었다. 다음의 청구항들에 제시된 바와 같이 본 개시의 실시예들의 보다 넓은 사상 및 범위로부터 벗어나지 않고 다양한 수정들이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면들은 제한적인 의미보다는 예시적인 의미로 고려되어야 한다.

Claims (20)

  1. 방법으로서,
    모바일 디바이스에서, 복수의 애플리케이션들 각각에 대한 메모리 액세스를 결정하기 위해 복수의 애플리케이션들의 사용을 모니터링하는 단계;
    상기 복수의 애플리케이션들의 사용과 관련된 데이터를 저장하는 단계;
    상기 복수의 애플리케이션들의 사용과 관련된 데이터에 따라 상기 복수의 애플리케이션들을 그룹들로 그룹화하는 단계; 및
    그룹 내의 각 애플리케이션에 공통된 사용에 따라 애플리케이션 그룹들 중 한 그룹에 대한 루트 프로세스(root process)를 맞춤화 및 실행하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 모니터링하는 단계, 저장하는 단계, 그룹화하는 단계, 또는 실행하는 단계 중 적어도 하나는 상기 모바일 디바이스에서의 운영 체제(operating system, OS)에 의해 수행되고, 메모리 액세스를 결정하는 단계는 메모리로부터의 판독 및 메모리에의 기록 빈도 또는 최신성을 측정하는 단계를 포함하는 것인, 방법.
  3. 제1항에 있어서, 상기 복수의 애플리케이션들의 사용과 관련된 데이터를 데이터베이스에 저장하는 단계, 및 상기 그룹 내의 상기 애플리케이션들에 공통된 지점으로 상기 루트 프로세스를 실행하는 단계를 포함하는, 방법.
  4. 제3항에 있어서,
    상기 그룹 내의 각 애플리케이션에 공통된 상기 데이터베이스 내의 데이터에 기초하여 상기 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들을 생성하는 단계; 및
    상기 그룹 내의 애플리케이션들 사이에서 공유되는 상기 이전 실행들의 패턴들에 따라 상기 루트 프로세스를 실행하는 단계를 포함하는, 방법.
  5. 제4항에 있어서,
    상기 모바일 디바이스의 사용자로부터 상기 그룹으로부터 상기 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 수신하는 단계; 및
    상기 요청을 수신 시 상기 루트 프로세스를 사용함으로써 상기 모바일 디바이스에서의 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 시작하는 단계를 포함하는, 방법.
  6. 제5항에 있어서,
    상기 모바일 디바이스에서의 운영 체제(OS)에 의해, 상기 루트 프로세스를 다수의 프로세스들로 포킹(forking)하는 단계; 및
    상기 OS에 의해, 상기 요청을 수신 시 상기 요청에 따라 상기 다수의 프로세스들 중 적어도 하나를 사용함으로써 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 시작하는 단계를 포함하는, 방법.
  7. 제5항에 있어서, 상기 복수의 애플리케이션들의 사용의 모니터링은 상기 루트 프로세스가 상기 사용자에 의한 상기 모바일 디바이스 상에서의 상기 애플리케이션들의 사용을 위해 맞춤화되도록 상기 사용자에 의한 상기 복수의 애플리케이션들의 사용에 대한 것인, 방법.
  8. 제5항에 있어서,
    상기 모바일 디바이스의 사용자로부터, 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 종료하기 위한 요청을 수신하는 단계;
    상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 종료하기 위한 요청을 수신 시, 상기 루트 프로세스 및 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 적어도 부분적으로 종료하는 단계; 및
    상기 루트 프로세스 및 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 적어도 부분적으로 종료한 후에, 미리 결정된 조건에 따라 상기 루트 프로세스를 적어도 부분적으로 재실행하는 단계를 포함하는, 방법.
  9. 제8항에 있어서, 상기 루트 프로세스를 적어도 부분적으로 재실행하는 단계는 상기 그룹 내의 애플리케이션들 사이에서 공유되는 상기 이전 실행들의 패턴들에 기초하거나 이에 의해 업데이트되는 것인, 방법.
  10. 제5항에 있어서,
    상기 모바일 디바이스의 사용자로부터, 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 종료하기 위한 요청을 수신하는 단계;
    상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 종료하기 위한 요청을 수신 시, 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 적어도 부분적으로 종료하는 단계; 및
    상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 종료하기 위한 요청을 수신 시 상기 루트 프로세스를 계속해서 실행하는 단계를 포함하는, 방법.
  11. 제1항에 있어서, 상기 복수의 애플리케이션들의 사용의 모니터링은 상기 루트 프로세스가 임의의 사용자에 의한 상기 모바일 디바이스 상에서의 상기 애플리케이션의 사용을 위해 맞춤화되도록 상기 모바일 디바이스의 임의의 사용자에 의한 상기 복수의 애플리케이션들의 사용에 대한 것인, 방법.
  12. 제1항에 있어서, 상기 그룹에 대한 상기 루트 프로세스를 실행하는 단계는 상기 그룹에 대한 메모리에의 임의의 초기 기록 전에 메모리 내의 데이터를 복사하는 단계를 포함하고, 상기 메모리에의 임의의 초기 기록 전 상기 메모리 내의 데이터의 복사는 공통 코드 및 판독 전용 데이터의 복사를 회피하는 것을 포함하는 것인, 방법.
  13. 제1항에 있어서, 상기 루트 프로세스에 대한 데이터를 플래시 메모리에 저장하는 단계를 포함하는, 방법.
  14. 제1항에 있어서, 상기 루트 프로세스에 대한 데이터를 비휘발성 랜덤 액세스 메모리(non-volatile random-access memory, NVRAM)에 저장하는 단계를 포함하는, 방법.
  15. 제14항에 있어서, 상기 NVRAM은 3D XPoint 메모리를 포함하는 것인, 방법.
  16. 컴퓨팅 디바이스와 연관된 프로세서에 의해 실행될 때, 방법을 수행하는 컴퓨터 실행가능 명령어들로 유형적으로 인코딩된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 방법은:
    모바일 디바이스에서, 복수의 애플리케이션들 각각에 대한 메모리로부터의 판독 및 메모리에의 기록의 빈도 또는 최신성을 결정하기 위해 복수의 애플리케이션들의 사용을 모니터링하는 단계;
    상기 복수의 애플리케이션의 사용과 관련된 데이터를 저장하는 단계;
    상기 사용과 관련된 상기 데이터의 질의들에 따라 상기 복수의 애플리케이션들을 그룹들로 그룹화하는 단계; 및
    상기 그룹 내의 각 애플리케이션에 공통된 저장된 데이터에 따라 상기 그룹들 중 한 그룹에 대한 루트 프로세스를 실행하는 단계를 포함하는 것인, 비일시적 컴퓨터 판독가능 저장 매체.
  17. 제16항에 있어서, 상기 방법은:
    상기 그룹 내의 각 애플리케이션에 공통된 상기 저장된 데이터에 기초하여 상기 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들을 생성하는 단계; 및
    상기 그룹 내의 애플리케이션들 사이에서 공유되는 이전 실행들의 패턴들에 따라 상기 루트 프로세스를 실행하는 단계를 포함하는 것인, 비일시적 컴퓨터 판독가능 저장 매체.
  18. 제17항에 있어서, 상기 방법은:
    상기 모바일 디바이스의 사용자로부터 상기 그룹으로부터 상기 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 수신하는 단계; 및
    상기 요청을 수신 시 상기 루트 프로세스를 사용함으로써 상기 모바일 디바이스에서의 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 시작하는 단계를 포함하는 것인, 비일시적 컴퓨터 판독가능 저장 매체.
  19. 제17항에 있어서, 상기 방법은:
    상기 모바일 디바이스의 사용자로부터 상기 그룹으로부터 상기 애플리케이션들 중 적어도 하나를 시작하기 위한 요청을 수신하는 단계;
    상기 모바일 디바이스에서의 운영 체제(OS)에 의해, 상기 루트 프로세스를 다수의 프로세스들로 포킹하는 단계; 및
    상기 OS에 의해, 상기 요청을 수신 시 상기 요청에 따라 상기 다수의 프로세스들 중 적어도 하나를 사용함으로써 상기 그룹으로부터의 상기 애플리케이션들 중 상기 적어도 하나를 시작하는 단계를 포함하는 것인, 비일시적 컴퓨터 판독가능 저장 매체.
  20. 방법으로서,
    모바일 디바이스에서 운영 체제(OS)에 의해, 복수의 애플리케이션들 각각에 대한 메모리로부터의 판독 및 메모리에의 기록의 빈도 또는 최신성을 결정하기 위해 복수의 애플리케이션들의 사용을 모니터링하는 단계;
    상기 OS에 의해, 상기 복수의 애플리케이션들의 사용과 관련된 데이터를 데이터베이스에 저장하는 단계;
    상기 OS에 의해, 상기 데이터베이스의 질의들에 따라 상기 복수의 애플리케이션들을 그룹들로 그룹화하는 단계; 및
    상기 OS에 의해, 상기 그룹 내의 각 애플리케이션에 공통된 상기 데이터베이스 내의 데이터에 따라 상기 그룹들 중 한 그룹에 대한 루트 프로세스를 백그라운드 프로세스로서 실행하는 단계를 포함하는, 방법.
KR1020227010645A 2019-10-03 2020-09-30 애플리케이션 그룹에 대한 맞춤형 루트 프로세스 KR20220054398A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/592,537 US11436041B2 (en) 2019-10-03 2019-10-03 Customized root processes for groups of applications
US16/592,537 2019-10-03
PCT/US2020/053532 WO2021067427A1 (en) 2019-10-03 2020-09-30 Customized root processes for groups of applications

Publications (1)

Publication Number Publication Date
KR20220054398A true KR20220054398A (ko) 2022-05-02

Family

ID=75274147

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227010645A KR20220054398A (ko) 2019-10-03 2020-09-30 애플리케이션 그룹에 대한 맞춤형 루트 프로세스

Country Status (6)

Country Link
US (2) US11436041B2 (ko)
EP (1) EP4038497A4 (ko)
JP (1) JP2022550447A (ko)
KR (1) KR20220054398A (ko)
CN (1) CN114467083A (ko)
WO (1) WO2021067427A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11474828B2 (en) 2019-10-03 2022-10-18 Micron Technology, Inc. Initial data distribution for different application processes
US11599384B2 (en) 2019-10-03 2023-03-07 Micron Technology, Inc. Customized root processes for individual applications
US11429445B2 (en) 2019-11-25 2022-08-30 Micron Technology, Inc. User interface based page migration for performance enhancement
US11366752B2 (en) 2020-03-19 2022-06-21 Micron Technology, Inc. Address mapping between shared memory modules and cache sets
US11836087B2 (en) 2020-12-23 2023-12-05 Micron Technology, Inc. Per-process re-configurable caches

Family Cites Families (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6138179A (en) 1997-10-01 2000-10-24 Micron Electronics, Inc. System for automatically partitioning and formatting a primary hard disk for installing software in which selection of extended partition size is not related to size of hard disk
CA2312444A1 (en) 2000-06-20 2001-12-20 Ibm Canada Limited-Ibm Canada Limitee Memory management of data buffers incorporating hierarchical victim selection
US6976114B1 (en) 2001-01-25 2005-12-13 Rambus Inc. Method and apparatus for simultaneous bidirectional signaling in a bus topology
US6847366B2 (en) 2002-03-01 2005-01-25 Hewlett-Packard Development Company, L.P. System and method utilizing multiple processes to render graphical data
US7370288B1 (en) 2002-06-28 2008-05-06 Microsoft Corporation Method and system for selecting objects on a display device
US8001266B1 (en) 2003-03-31 2011-08-16 Stretch, Inc. Configuring a multi-processor system
EP1473906A2 (en) 2003-04-28 2004-11-03 Matsushita Electric Industrial Co., Ltd. Service management system, and method, communications unit and integrated circuit for use in such system
US20050060174A1 (en) 2003-09-15 2005-03-17 Heyward Salome M. Absence management systems and methods
JP2005275707A (ja) * 2004-03-24 2005-10-06 Hitachi Ltd 情報処理装置、情報処理装置の制御方法、及びプログラム
US7574709B2 (en) 2004-04-30 2009-08-11 Microsoft Corporation VEX-virtual extension framework
WO2006026403A2 (en) 2004-08-26 2006-03-09 Availigent, Inc. Method and system for providing transparent incremental and multiprocess checkpointing to computer applications
JP4529612B2 (ja) * 2004-09-21 2010-08-25 株式会社セガ 携帯端末におけるアプリケーションプログラム使用時の通信料の削減方法
KR100678913B1 (ko) 2005-10-25 2007-02-06 삼성전자주식회사 가상 메모리 시스템에서 페이지 폴트를 줄이는 장치 및방법
US7917723B2 (en) 2005-12-01 2011-03-29 Microsoft Corporation Address translation table synchronization
US8042109B2 (en) 2006-03-21 2011-10-18 Intel Corporation Framework for domain-specific run-time environment acceleration using virtualization technology
US20070226702A1 (en) 2006-03-22 2007-09-27 Rolf Segger Method for operating a microcontroller in a test environment
TW200805394A (en) 2006-07-07 2008-01-16 Alcor Micro Corp Memory storage device and the read/write method thereof
US9274921B2 (en) 2006-12-27 2016-03-01 International Business Machines Corporation System and method for managing code displacement
US20090049389A1 (en) 2007-08-13 2009-02-19 Siemens Medical Solutions Usa, Inc. Usage Pattern Driven Graphical User Interface Element Rendering
US20090150541A1 (en) 2007-12-06 2009-06-11 Sony Corporation And Sony Electronics Inc. System and method for dynamically generating user interfaces for network client devices
US8789159B2 (en) 2008-02-11 2014-07-22 Microsoft Corporation System for running potentially malicious code
US8689508B2 (en) 2008-05-28 2014-04-08 Steeltec Supply, Inc. Extra strength backing stud having notched flanges
US8898667B2 (en) 2008-06-04 2014-11-25 International Business Machines Corporation Dynamically manage applications on a processing system
US8464256B1 (en) 2009-04-10 2013-06-11 Open Invention Network, Llc System and method for hierarchical interception with isolated environments
US20100169708A1 (en) 2008-12-29 2010-07-01 John Rudelic Method and apparatus to profile ram memory objects for displacment with nonvolatile memory
US8161260B2 (en) 2009-02-09 2012-04-17 Oracle International Corporation Optimal memory allocation for guested virtual machine(s)
KR101612922B1 (ko) 2009-06-09 2016-04-15 삼성전자주식회사 메모리 시스템 및 메모리 시스템 관리 방법
US8832683B2 (en) 2009-11-30 2014-09-09 Red Hat Israel, Ltd. Using memory-related metrics of host machine for triggering load balancing that migrate virtual machine
US8806140B1 (en) 2009-12-16 2014-08-12 Applied Micro Circuits Corporation Dynamic memory module switching with read prefetch caching
US8607023B1 (en) 2009-12-16 2013-12-10 Applied Micro Circuits Corporation System-on-chip with dynamic memory module switching
JP2012048322A (ja) * 2010-08-24 2012-03-08 Sony Corp 情報処理装置、アプリケーション制御方法及びプログラム
US8402061B1 (en) 2010-08-27 2013-03-19 Amazon Technologies, Inc. Tiered middleware framework for data storage
US20120221785A1 (en) 2011-02-28 2012-08-30 Jaewoong Chung Polymorphic Stacked DRAM Memory Architecture
US9141528B2 (en) 2011-05-17 2015-09-22 Sandisk Technologies Inc. Tracking and handling of super-hot data in non-volatile memory systems
US8631131B2 (en) 2011-09-07 2014-01-14 Red Hat Israel, Ltd. Virtual machine pool cache
US11074495B2 (en) 2013-02-28 2021-07-27 Z Advanced Computing, Inc. (Zac) System and method for extremely efficient image and pattern recognition and artificial intelligence platform
US9916538B2 (en) 2012-09-15 2018-03-13 Z Advanced Computing, Inc. Method and system for feature detection
US11195057B2 (en) 2014-03-18 2021-12-07 Z Advanced Computing, Inc. System and method for extremely efficient image and pattern recognition and artificial intelligence platform
US8738875B2 (en) 2011-11-14 2014-05-27 International Business Machines Corporation Increasing memory capacity in power-constrained systems
US9116812B2 (en) 2012-01-27 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for a de-duplication cache
JP5840525B2 (ja) * 2012-02-16 2016-01-06 シャープ株式会社 情報処理装置
US8719540B1 (en) 2012-03-15 2014-05-06 Pure Storage, Inc. Fractal layout of data blocks across multiple devices
US8838887B1 (en) 2012-03-30 2014-09-16 Emc Corporation Drive partitioning for automated storage tiering
US20150081964A1 (en) 2012-05-01 2015-03-19 Hitachi, Ltd. Management apparatus and management method of computing system
CN103631612B (zh) * 2012-08-23 2017-09-29 腾讯科技(深圳)有限公司 启动操作系统的方法与装置
WO2014045441A1 (ja) 2012-09-24 2014-03-27 株式会社日立製作所 ストレージ装置が有する階層型プール内のデータの配置を制御する計算機及び方法
GB2507596B (en) 2012-10-30 2014-09-17 Barclays Bank Plc Secure computing device and method
US9508040B2 (en) 2013-06-12 2016-11-29 Microsoft Technology Licensing, Llc Predictive pre-launch for applications
KR20150043102A (ko) 2013-10-14 2015-04-22 한국전자통신연구원 하이브리드 메모리의 데이터 관리 장치 및 방법
CA2867589A1 (en) 2013-10-15 2015-04-15 Coho Data Inc. Systems, methods and devices for implementing data management in a distributed data storage system
US10338826B2 (en) 2013-10-15 2019-07-02 Cypress Semiconductor Corporation Managed-NAND with embedded random-access non-volatile memory
US10013500B1 (en) 2013-12-09 2018-07-03 Amazon Technologies, Inc. Behavior based optimization for content presentation
US9411638B2 (en) 2013-12-19 2016-08-09 International Business Machines Corporation Application startup page fault management in a hardware multithreading environment
US20150178108A1 (en) 2013-12-20 2015-06-25 Vmware, Inc. Fast Instantiation of Virtual Machines
US9892121B2 (en) 2014-07-15 2018-02-13 Hitachi, Ltd. Methods and systems to identify and use event patterns of application workflows for data management
WO2016016926A1 (ja) 2014-07-28 2016-02-04 株式会社日立製作所 管理計算機及び性能閾値の評価方法
US9477427B2 (en) 2014-09-19 2016-10-25 Vmware, Inc. Storage tiering based on virtual machine operations and virtual volume type
US9250891B1 (en) * 2014-10-28 2016-02-02 Amazon Technologies, Inc. Optimized class loading
US10452538B2 (en) 2015-01-21 2019-10-22 Red Hat, Inc. Determining task scores reflective of memory access statistics in NUMA systems
WO2016134035A1 (en) 2015-02-17 2016-08-25 Coho Data, Inc. Virtualized application-layer space for data processing in data storage systems
US20170017576A1 (en) 2015-07-16 2017-01-19 Qualcomm Incorporated Self-adaptive Cache Architecture Based on Run-time Hardware Counters and Offline Profiling of Applications
US9977696B2 (en) * 2015-07-27 2018-05-22 Mediatek Inc. Methods and apparatus of adaptive memory preparation
KR102401772B1 (ko) 2015-10-02 2022-05-25 삼성전자주식회사 전자 장치에서 어플리케이션 실행 장치 및 방법
US9985946B2 (en) 2015-12-22 2018-05-29 Intel Corporation System, apparatus and method for safety state management of internet things (IoT) devices
US10509564B2 (en) 2015-12-28 2019-12-17 Netapp Inc. Storage system interface
US11182344B2 (en) 2016-03-14 2021-11-23 Vmware, Inc. File granular data de-duplication effectiveness metric for data de-duplication
US10324760B2 (en) 2016-04-29 2019-06-18 Advanced Micro Devices, Inc. Leases for blocks of memory in a multi-level memory
US20190339688A1 (en) 2016-05-09 2019-11-07 Strong Force Iot Portfolio 2016, Llc Methods and systems for data collection, learning, and streaming of machine signals for analytics and maintenance using the industrial internet of things
US20180284746A1 (en) 2016-05-09 2018-10-04 StrongForce IoT Portfolio 2016, LLC Methods and systems for data collection optimization in an industrial internet of things environment
US20200225655A1 (en) 2016-05-09 2020-07-16 Strong Force Iot Portfolio 2016, Llc Methods, systems, kits and apparatuses for monitoring and managing industrial settings in an industrial internet of things data collection environment
US11327475B2 (en) 2016-05-09 2022-05-10 Strong Force Iot Portfolio 2016, Llc Methods and systems for intelligent collection and analysis of vehicle data
US20200348662A1 (en) 2016-05-09 2020-11-05 Strong Force Iot Portfolio 2016, Llc Platform for facilitating development of intelligence in an industrial internet of things system
WO2019216975A1 (en) 2018-05-07 2019-11-14 Strong Force Iot Portfolio 2016, Llc Methods and systems for data collection, learning, and streaming of machine signals for analytics and maintenance using the industrial internet of things
US11774944B2 (en) 2016-05-09 2023-10-03 Strong Force Iot Portfolio 2016, Llc Methods and systems for the industrial internet of things
US11194517B2 (en) 2016-05-24 2021-12-07 Samsung Electronics Co., Ltd. Method and apparatus for storage device latency/bandwidth self monitoring
KR20170138765A (ko) 2016-06-08 2017-12-18 삼성전자주식회사 메모리 장치, 메모리 모듈 및 메모리 장치의 동작 방법
US10037173B2 (en) 2016-08-12 2018-07-31 Google Llc Hybrid memory management
US10152427B2 (en) 2016-08-12 2018-12-11 Google Llc Hybrid memory management
CN107220076B (zh) 2016-09-27 2018-10-30 华为技术有限公司 一种内存回收方法及装置
US20180276112A1 (en) 2017-03-27 2018-09-27 International Business Machines Corporation Balancing memory pressure across systems
US10452397B2 (en) 2017-04-01 2019-10-22 Intel Corporation Efficient multi-context thread distribution
US10921801B2 (en) 2017-08-02 2021-02-16 Strong Force loT Portfolio 2016, LLC Data collection systems and methods for updating sensed parameter groups based on pattern recognition
US20190050163A1 (en) 2017-08-14 2019-02-14 Seagate Technology Llc Using snap space knowledge in tiering decisions
CN107783801B (zh) 2017-11-06 2021-03-12 Oppo广东移动通信有限公司 应用程序预测模型建立、预加载方法、装置、介质及终端
CN109814936A (zh) 2017-11-20 2019-05-28 广东欧珀移动通信有限公司 应用程序预测模型建立、预加载方法、装置、介质及终端
KR102416929B1 (ko) 2017-11-28 2022-07-06 에스케이하이닉스 주식회사 메모리 모듈 및 메모리 모듈의 동작 방법
TWI647567B (zh) 2017-12-13 2019-01-11 國立中正大學 使用記憶體位址定位冷熱存取區間之方法
US11915012B2 (en) 2018-03-05 2024-02-27 Tensera Networks Ltd. Application preloading in the presence of user actions
US10606670B2 (en) 2018-04-11 2020-03-31 EMC IP Holding Company LLC Shared memory usage tracking across multiple processes
US20200133254A1 (en) 2018-05-07 2020-04-30 Strong Force Iot Portfolio 2016, Llc Methods and systems for data collection, learning, and streaming of machine signals for part identification and operating characteristics determination using the industrial internet of things
US11144468B2 (en) 2018-06-29 2021-10-12 Intel Corporation Hardware based technique to prevent critical fine-grained cache side-channel attacks
KR102557267B1 (ko) * 2018-10-12 2023-07-20 삼성전자주식회사 메모리의 저장 용량을 확보하기 위한 디스플레이 장치
JP7261037B2 (ja) * 2019-02-21 2023-04-19 株式会社日立製作所 データ処理装置、ストレージ装置およびプリフェッチ方法
US11307951B2 (en) * 2019-09-04 2022-04-19 Micron Technology, Inc. Memory device with configurable performance and defectivity management
US11599384B2 (en) 2019-10-03 2023-03-07 Micron Technology, Inc. Customized root processes for individual applications
US11474828B2 (en) 2019-10-03 2022-10-18 Micron Technology, Inc. Initial data distribution for different application processes
US11429445B2 (en) 2019-11-25 2022-08-30 Micron Technology, Inc. User interface based page migration for performance enhancement
US20210157718A1 (en) 2019-11-25 2021-05-27 Micron Technology, Inc. Reduction of page migration between different types of memory
US11366752B2 (en) 2020-03-19 2022-06-21 Micron Technology, Inc. Address mapping between shared memory modules and cache sets

Also Published As

Publication number Publication date
WO2021067427A1 (en) 2021-04-08
JP2022550447A (ja) 2022-12-01
EP4038497A1 (en) 2022-08-10
US11436041B2 (en) 2022-09-06
EP4038497A4 (en) 2023-09-27
CN114467083A (zh) 2022-05-10
US20210103463A1 (en) 2021-04-08
US20220413900A1 (en) 2022-12-29

Similar Documents

Publication Publication Date Title
KR20220054398A (ko) 애플리케이션 그룹에 대한 맞춤형 루트 프로세스
US11599384B2 (en) Customized root processes for individual applications
JP7297769B2 (ja) プリキャシュのためのクライアント・マシン間でのシェーダの配布
US9152668B1 (en) Asynchronous computation batching
US20230039910A1 (en) Initial data distribution for different application processes
US10248581B2 (en) Guarded memory access in a multi-thread safe system level modeling simulation
US9075666B2 (en) Deferred execution in a multi-thread safe system level modeling simulation
US9201708B2 (en) Direct memory interface access in a multi-thread safe system level modeling simulation
KR20210080009A (ko) 가속기, 가속기의 동작 방법 및 가속기를 포함한 디바이스
KR20190095489A (ko) 그래프 처리 시스템 및 그래프 처리 시스템의 동작 방법
US20210256373A1 (en) Method and apparatus with accelerator
US9626296B2 (en) Prefetch list management in a computer system
US10353591B2 (en) Fused shader programs
KR102026333B1 (ko) 분산 파일 시스템에 대한 태스크 처리 방법
CN111258657B (zh) 流水线控制方法及相关设备
US20230145253A1 (en) Reducing latency in highly scalable hpc applications via accelerator-resident runtime management
CN117687738A (zh) 一种缓存控制方法、装置和计算机设备
CN111158725A (zh) 程序升级方法、装置、终端及存储介质
JP2014229173A (ja) アクセラレータ処理実行装置、及びアクセラレータ処理実行プログラム
CN117312839A (zh) 模型训练方法、装置、系统及相关设备