KR20190020677A - Nand 스토리지 디바이스에 대한 선제적 압축해제 스케줄링 - Google Patents

Nand 스토리지 디바이스에 대한 선제적 압축해제 스케줄링 Download PDF

Info

Publication number
KR20190020677A
KR20190020677A KR1020187036789A KR20187036789A KR20190020677A KR 20190020677 A KR20190020677 A KR 20190020677A KR 1020187036789 A KR1020187036789 A KR 1020187036789A KR 20187036789 A KR20187036789 A KR 20187036789A KR 20190020677 A KR20190020677 A KR 20190020677A
Authority
KR
South Korea
Prior art keywords
application
decompression
dependent objects
metadata
dependent
Prior art date
Application number
KR1020187036789A
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 KR20190020677A publication Critical patent/KR20190020677A/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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44568Immediately runnable code
    • G06F9/44578Preparing or optimising for loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • 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/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44521Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7207Details relating to flash memory management management of metadata or control data

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Memory System (AREA)

Abstract

플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템들, 방법들, 및 컴퓨터 프로그램들이 개시된다. 시스템의 하나의 실시형태는 플래시 메모리 디바이스 및 선제적 압축해제 스케줄러 컴포넌트를 포함한다. 선제적 압축해제 스케줄러 컴포넌트는, 애플리케이션 설치자 컴포넌트가 플래시 메모리 디바이스에 압축된 애플리케이션을 설치하는 것에 응답하여, 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들을 정의하는 메타데이터를 생성하고 저장하도록 구성된 로직을 포함한다. 애플리케이션 론처 컴포넌트에 의한, 압축된 애플리케이션의 론치에 응답하여, 선제적 압축해제 스케줄러 컴포넌트는, 론칭될 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들을 저장된 메타데이터로부터 결정한다. 선제적 압축해제 스케줄러 컴포넌트는, 저장된 메타데이터에 기초하여 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링한다.

Description

NAND 스토리지 디바이스에 대한 선제적 압축해제 스케줄링
관련 기술의 설명
플래시 스토리지와 같은 비-휘발성 스토리지는 포터블 컴퓨팅 디바이스들 (예컨대, 셀룰러 전화기들, 스마트 폰들, 태블릿 컴퓨터들, 포터블 디지털 어시스턴트 (PDA) 들, 포터블 게임 콘솔들, 웨어러블 디바이스들, 및 다른 배터리-전력 디바이스들) 을 포함하는 다양한 타입들의 컴퓨팅 디바이스들에 통합된다. 사용자 요구들을 해결하기 위해, 포터블 컴퓨팅 디바이스들에서의 NAND 플래시 스토리지의 용량은 지속적으로 증가한다. 하지만, 보다 큰 NAND 플래시 스토리지는 포터블 컴퓨팅 디바이스들의 비용을 상당히 증가시킨다. 비용 압력에 대한 통상적인 해결책은 사용자 데이터를 가능한 한 콤팩트하게 유지하는 파일 시스템 압축을 구현하는 것이다. 압축 솔루션은 NAND 플래시 스토리지의 제한된 용량을 임시로 확장할 수 있지만, 애플리케이션 데이터 및/또는 코드를 압축/압축해제하는 프로세스는 포터블 컴퓨팅 디바이스의 성능에 부정적으로 영향을 미치고 전력 소모를 증가시키며, 이는 바람직하지 않게 배터리 수명을 감축시킨다.
예를 들어, NAND 에서 데이터 및/또는 코드를 압축하는 것은 랜덤 판독 레이턴시를 길어지게 한다. 랜덤 판독들을 수행하기 위한 보다 긴 레이턴시는 NAND 가 직접적 코드 실행을 위해 적합하지 않게 한다. 코드는 NAND 로부터 휘발성 메모리 (예컨대, 동적 랜덤 액세스 메모리 (DRAM)) 로 다운로드되고, 그 다음에 DRAM 으로부터 실행될 필요가 있다. 또한, NAND 스토리지는 블록들로 판독 및 기입된다. NAND 에 기입하기 전에, 코드/데이터는 인코딩될 수도 있고, 이는 고속-인코딩 알고리즘들의 구현을 필요로 한다. NAND 를 판독한 후에, 압축된 코드/데이터는 디코딩될 필요가 있고, 이는 디바이스 성능을 상당히 제한할 수도 있다.
따라서, 디바이스 성능 및 사용자 경험에 부정적으로 영향을 미치는 일 없이 스토리지 용량을 증가시키기 위해 NAND 스토리지 에서 압축된 오브젝트들의 압축해제를 스케줄링하기 위한 향상된 시스템들 및 방법들에 대한 필요성이 존재한다.
플래시 스토리지에서의 압축된 애플리케이션의 압축해제를 선제적으로 스케줄링 (preemptively scheduling) 하기 위한 시스템들, 방법들, 및 컴퓨터 프로그램들이 개시된다. 시스템의 하나의 실시형태는 플래시 메모리 디바이스 및 선제적 압축해제 스케줄러 컴포넌트 (preemptive decompression scheduler component) 를 포함한다. 선제적 압축해제 스케줄러 컴포넌트는, 애플리케이션 설치자 컴포넌트 (application installer component) 가 플래시 메모리 디바이스에 압축된 애플리케이션을 설치하는 것에 응답하여, 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들 (dependent objects) 을 정의하는 메타데이터 (metadata) 를 생성하고 저장하도록 구성된 로직 (logic) 을 포함한다. 애플리케이션 론처 컴포넌트 (application launcher component) 에 의한, 압축된 애플리케이션의 론치 (launch) 에 응답하여, 선제적 압축해제 스케줄러 컴포넌트는, 론칭될 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들을 저장된 메타데이터로부터 결정한다. 선제적 압축해제 스케줄러 컴포넌트는, 저장된 메타데이터에 기초하여 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링한다.
방법의 일 실시형태는, 플래시 메모리 디바이스 상에서 설치된 압축된 애플리케이션을 위한 메타데이터를 생성하는 것을 포함한다. 메타데이터는 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들을 정의한다. 메타데이터는 메모리에 저장된다. 압축된 애플리케이션의 론치에 응답하여, 론칭될 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들이, 저장된 메타데이터로부터 결정된다. 방법은 추가적으로, 저장된 메타데이터에 기초하여 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링하는 것을 포함한다.
도면들에서, 유사한 참조 번호들은 달리 표시되지 않는다면 여러 도면들 전체에 걸쳐 유사한 부분들을 가리킨다. "102A" 또는 "102B" 와 같은 문자 지정들을 갖는 참조 번호들의 경우, 그 문자 지정들은 동일한 도면에 존재하는 2 개의 유사한 부분들 또는 엘리먼트들을 구별할 수도 있다. 참조 번호들에 대한 문자 지정들은 참조 번호가 모든 도면들에서 동일한 참조 번호를 갖는 모든 부분들을 포함하도록 의도되는 경우 생략될 수도 있다.
도 1 은 플래시 스토리지에서 압축된 오브젝트들의 선제적 압축해제를 제공하기 위한 시스템의 일 실시형태의 블록도이다.
도 2 는 도 1 의 선제적 NAND 압축해제 스케줄러의 일 실시형태의 동작을 나타내는 결합된 블록/플로우 다이어그램이다.
도 3 은 도 1 의 시스템에서 압축된 오브젝트들을 선제적으로 압축해제하기 위한 방법의 일 실시형태를 나타내는 플로우차트이다.
도 4 는 도 1 의 메타데이터 테이블의 일 예시적인 실시형태를 나타내는 데이터 다이어그램이다.
도 5 는 도 4 의 메타데이터 테이블을 동적으로 업데이트하기 위한 방법의 일 실시형태를 나타내는 플로우차트이다.
도 6 은 도 1 의 시스템을 통합하기 위한 포터블 컴퓨팅 디바이스의 일 실시형태의 블록도이다.
단어 "예시적인" 은 여기서 "예, 예시, 또는 설명으로서 작용하는" 을 의미하도록 사용된다. "예시적인" 으로서 여기에 기술된 임의의 양태는 반드시 다른 양태들에 비해 바람직하다거나 이로운 것으로서 해석되지는 않는다.
본 설명에서, 용어 "애플리케이션" 은 또한 오브젝트 코드, 스트립트들, 바이트 코드, 마크업 언어 파일들, 및 패치들과 같은 실행가능한 콘텐츠를 갖는 파일들을 포함할 수도 있다. 또한, 여기에서 언급된 "애플리케이션" 은 또한 열릴 필요가 있을 수도 있는 문서들 또는 액세스될 필요가 있는 다른 데이터 파일들과 같은, 본성상 실행가능하지 않는 파일들을 포함할 수도 있다.
용어 "콘텐츠" 는 또한 오브젝트 코드, 스트립트들, 바이트 코드, 마크업 언어 파일들, 및 패치들과 같은 실행가능한 콘텐츠를 갖는 파일들을 포함할 수도 있다. 또한, 여기에서 언급된 "콘텐츠" 는 또한 열릴 필요가 있을 수도 있는 문서들 또는 액세스될 필요가 있는 다른 데이터 파일들과 같은, 본성상 실행가능하지 않는 파일들을 포함할 수도 있다.
본 설명에서 사용되는 바와 같이, 용어들 "컴포넌트", "데이터베이스", "모듈", "시스템" 등은 컴퓨터 관련된 엔티티, 하드웨어, 펌웨어, 하드웨어 및 소프트웨어의 조합, 소프트웨어, 또는 실행 중인 소프트웨어를 지칭하도록 의도된다. 예를 들어, 컴포넌트는 프로세서 상에서 실행중인 프로세스, 프로세서, 오브젝트, 실행가능물, 실행의 스레드, 프로그램, 및/또는 컴퓨터일 수도 있지만, 이들에 제한되지 않는다. 예시로써, 컴퓨팅 디바이스상에서 실행중인 애플리케이션 및 컴퓨팅 디바이스 양자 모두는 컴포넌트일 수도 있다. 하나 이상의 컴포넌트들은 프로세스 및/또는 실행의 스레드 내에 상주할 수도 있고, 컴포넌트는 하나의 컴퓨터상에 로컬라이징될 수도 있고 및/또는 2 이상의 컴퓨터들 사이에 분포될 수도 있다. 또한, 이들 컴포넌트들은 저장된 여러 데이터 구조들을 갖는 여러 컴퓨터 판독가능 매체들로부터 실행될 수도 있다. 그 컴포넌트들은 하나 이상의 데이터 패킷들 (예를 들어, 로컬 시스템, 분포된 시스템 내의 다른 컴포넌트와 상호작용하는 하나의 컴포넌트로부터의, 및/또는 신호로써 다른 시스템들을 갖는 인터넷과 같은 네트워크를 가로지르는 데이터) 을 갖는 신호에 따르는 것과 같이 로컬 및/또는 원격 프로세스들로써 통신할 수도 있다.
본 설명에서, 용어들 "통신 디바이스", "무선 디바이스", "무선 전화", "무선 통신 디바이스", 및 "무선 핸드셋" 은 교환가능하게 사용된다. 제 3 세대 ("3G") 무선 기술 및 제 4 세대 ("4G") 의 도래로, 더 큰 대역폭 가용성은 매우 다양한 무선 능력들을 갖는 더 많은 포터블 컴퓨팅 디바이스들을 가능하게 했다. 따라서, 포터블 컴퓨팅 디바이스는 셀룰러 전화, 페이저, PDA, 스마트폰, 네비게이션 디바이스, 또는 무선 연결 또는 링크를 갖는 핸드-헬드 컴퓨터를 포함할 수도 있다.
도 1 은 플래시 스토리지에서 압축된 오브젝트들을 선제적으로 압축해제하기 위한 시스템 (100) 을 나타낸다. 시스템 (100) 은 동적 랜덤 액세스 메모리 (DRAM) (106) 와 같은 휘발성 랜덤 액세스 메모리 (VRAM) 및 플래시 메모리 디바이스 (예컨대, NAND 플래시 (104)) 에 전기적으로 커플링된 시스템 온 칩 (SoC) (102) 을 포함한다. SoC (102) 는 제어 버스 (128) 및 데이터 버스 (130) 를 통해 NAND 플래시 (104) 에 전기적으로 커플링될 수도 있다. SoC (102) 는 버스 (132) 를 통해 DRAM (106) 에 전기적으로 커플링될 수도 있다. 시스템 (100) 은, 퍼스널 컴퓨터, 워크스테이션, 서버, 및 셀룰러 전화기, 스마트 폰, 포터블 디지털 어시스턴트 (PDA), 포터블 게임 콘솔, 내비게이션 디바이스, 태블릿 컴퓨터와 같은 포터블 컴퓨팅 디바이스 (PCD), 스포츠 와치, 피트니스 트래킹 디바이스 등과 같은 웨어러블 디바이스, 또는 다른 배터리-전력의, 웹-가능 디바이스들을 포함하는, 임의의 컴퓨팅 디바이스에서 구현될 수도 있다.
SoC (102) 는, SoC 버스 (120) 를 통해 상호접속되는, 오퍼레이팅 시스템 (O/S) (122) 을 실행하는 중앙 프로세싱 유닛 (CPU) (110), DRAM 제어기 (112), 정적 랜덤 액세스 메모리 (SRAM) (116), 판독 전용 메모리 (ROM) (114), 압축/압축해제 모듈(들) (118), 및 플래시 제어기 (108) 를 포함하는, 다양한 온-칩 컴포넌트들을 포함한다. SoC (102) 는 DRAM (106) 및 NAND 플래시 (104) 로부터 메모리 리소스들을 요청하는 하나 이상의 메모리 클라이언트들을 포함할 수도 있다. 메모리 클라이언트들은 하나 이상의 프로세싱 유닛들 (예컨대, 중앙 프로세싱 유닛 (CPU) (110), 그래픽 프로세싱 유닛 (GPU), 디지털 신호 프로세서 (DSP) 등), 비디오 인코더, 또는 NAND 플래시 (104) 및 DRAM (106) 에 판독/기입 액세스를 요청하는 다른 클라이언트들을 포함할 수도 있다.
도 1 에서 예시된 실시형태에서, NAND 플래시 (104) 는 SoC (102) 로부터 분리되어 있지만, 다른 실시형태들에서, NAND 플래시 (104) 는 SoC 다이 상에 물리적으로 부착되거나 적층될 수도 있고, SoC 다이와 동일한 물리적 패키지에 존재할 수도 있다. 당해 기술분야에서 알려진 바와 같이, NAND 플래시 (104) 는 물리적 페이지들을 저장하기 위한 메인 어레이 및 제어기를 포함할 수도 있다. SoC (102) 상에 존재하는 CPU (110) 는 플래시 제어기 (108) 를 통해 NAND 플래시 (104) 에 대해 논리적 페이지들의 유닛들로 데이터를 판독 및/또는 기입한다. 데이터는, 에러 정정 코드 (ECC) 모듈 (136) 에 의해 생성된/체크된 에러 정정 비트(들)와 함께 메인 어레이의 물리적 페이지들로부터 취출되고 저장된다.
압축/압축해제 모듈(들) (118) 은 애플리케이션 코드/데이터를 압축하고 압축된 코드/데이터를 NAND 플래시 (104) 에 저장하기 위한 로직을 포함한다. 압축된 코드/데이터가 요청될 때, 압축/압축해제 모듈(들) (118) 은 NAND 플래시 (104) 에 저장된 애플리케이션 코드/데이터를 압축해제하고, 그 다음에, 압축해제된 코드/데이터를 실행한다. 압축/압축해제 모듈(들) (118) 은 CPU (110) 에 의해 실행되는 소프트웨어 모듈들을 포함할 수도 있음을 이해하여야 한다. 다른 실시형태들에서, 압축/압축해제 모듈(들) (118) 은, 압축/압축해제를 고속화하기 위해 전용 RAM 을 갖는 별도의 하드웨어 디바이스, 코-프로세서를 포함할 수도 있다.
도 1 에서 예시된 바와 같이, 시스템 (100) 은 추가적으로, NAND 플래시 (104) 로부터 애플리케이션 (134) 이 론칭되고 애플리케이션 코드/데이터가 판독될 때 사전에 종속적 압축된 오브젝트들 (136) 의 디코딩/압축해제를 선제적으로 스케줄링하기 위한 하나 이상의 모듈(들) (예컨대, 선제적 NAND 압축해제 스케줄러 (126)) 를 포함한다. 애플리케이션 (134) 은 다양한 타입들의 애플리케이션들을 포함할 수도 있음을 이해하여야 한다.
일 실시형태에서, 애플리케이션 (134) 은 모바일 애플리케이션을 포함할 수도 있다. 당해 기술분야에서 알려진 바와 같이, 스마트폰과 같은 포터블 컴퓨팅 디바이스를 위한 통상적인 애플리케이션은, 다수의 공유된 네이티브 실행가능 라이브러리 파일들, 및 플랫폼 런타임을 위한 라이브러리 파일들 (예컨대, 안드로이드를 위한 Dalvik/ART, iOS 를 위한 Objective-C 런타임) 의 집합을 포함할 수도 있다. 데이터 파일들은, 모두 함께 패키징되는, 예를 들어, XML, HTML, 텍스트 파일들 및/또는 다른 포맷들의 파일들을 포함하는, 다양한 포맷들을 포함할 수도 있다. 애플리케이션을 생성하는 다양한 타입들의 모든 다양한 컴포넌트 파일들이 "오브젝트들 (objects)" 로서 지칭됨을 이해하여야 한다. 압축된 형태의 애플리케이션에서, 애플리케이션을 형성하는 모든 오브젝트들은 또한 압축된 형태로 있을 수도 있다. 애플리케이션은 이들 오브젝트들에 의존적이기 때문에, 압축된 애플리케이션에서의 압축된 형태에서의 오브젝트들은 "종속 (dependent)" 압축된 오브젝트들로서 지칭된다.
애플리케이션에서의 오브젝트들의 일부는 추가적으로, 플랫폼에서 직접 이용가능할 수도 있는 다른 오브젝트들에 의존적일 수도 있음을 또한 이해하여야 한다. 예를 들어, 브라우저 애플리케이션을 위한 공유된 실행가능 오브젝트 파일 라이브러리 (libwebcore.so) 는 플랫폼 실행가능 오브젝트 라이브러리 (libbionic.so 및 libicu.so) 에 종속적일 수도 있다. 이 경우에, 플랫폼 공유된 실행가능 오브젝트 파일들 (libbionic.so and libicu.so) 은 종속 오브젝트들 (dependent objects) 을 포함할 수도 있고, 그것들이 압축된 형태로 존재하는 경우에, "종속" 압축된 오브젝트들을 포함할 수도 있다.
당해 기술분야에서 알려진 바와 같이, 압축된 오브젝트들은 애플리케이션이 처음 그것들을 액세스할 때 압축해제될 수도 있다. 따라서, 압축된 형태로 존재하는 동적으로 로딩되는 공유된 실행가능 오브젝트 라이브러리들에 대해, 압축해제는 플롯폼의 동적 링커 로더 (dynamic linker loader; DLL) 가 그것들을 로딩할 때 발생할 수도 있다. 유사하게, 애플리케이션에 의해 사용되고 압축된 파일들로서 유지되는 다양한 데이터 파일들 및 데이터 캐시들에 대해, 압축해제는 애플리케이션이 그들 파일들에서 임의의 데이터를 액세스할 필요가 있을 때 발생할 수도 있다. 이들 활동들은 애플리케이션이 론칭된 후 얼마의 기간 후에 발생할 수도 있고, 이 경우에, 압축해제는 그것들이 필요한 시간에서의 그것들의 액세스를 위해 추가적인 지연들을 도입할 수도 있음을 이해하여야 한다. 당해 기술분야에서 통상의 지식을 가진 자 (이하, '통상의 기술자' 라 함) 는, 용어 "선제적 압축해제 (preemptive decompression)" 는, 이들 타입의 압축된 오브젝트들 중의 임의의 것이, 그것들이 애플리케이션에 의해 실제로 액세스되거나 필요하기 전에 발생하는 애플리케이션 론치 시간 동안 선행하여 압축해제되는 것을 의미함을 이해할 것이다. 용어 "선제적 스케줄링 (preemptive scheduling)" 은, 압축된 오브젝트들이 실행 애플리케이션에 의해 필요하거나 액세스되기 바로 전에 압축해제 활동의 게으른 스케줄을 갖기보다는, 애플리케이션 론치 시간 동안 선행하여 이들 압축된 오브젝트들의 압축해제를 스케줄링하는 것을 지칭한다.
이와 관련하여, 시스템 (100) 은 애플리케이션 론치 동안 선행하는 선제적 스케줄링 및 선제적 압축해제의 메커니즘을 제공하고, 이는 종속 압축된 오브젝트들로 하여금, 그것들이 실행 애플리케이션에 의해 실제로 필요하거나 액세스되기 전에 "사전에 (ahead-of-time)" 압축해제되는 것을 가능하게 한다. 이러한 메커니즘은 다양한 혜택들을 제공할 수도 있음을 이해하여야 한다. 예를 들어, 한 가지 혜택은, 애플리케이션이 종속 오브젝트들의 압축해제를 기다릴 필요가 없기 때문에, 애플리케이션의 실행 동안 갑작스런 중단들 (stalls) 또는 지연들 (delays) 을 감소시키는 것에 있다. 또한, 압축해제를 앞으로 이동시키는 것은, 압축해제가 애플리케이션 론치를 위해 필요한 활동들의 결정적 경로와 독립적으로 병렬적으로 일어날 수도 있기 때문에, 론치 시간들을 느리게 하지 않는다. 또 다른 혜택은, 충분한 병렬처리가 다수의 압축해제 유닛들을 통해 이용가능한 경우에, 순차적 종속성 체인에서의 모든 압축된 오브젝트들이 동시에 압축해제될 수도 있기 때문에, 다수의 종속 압축된 오브젝트들이 순차적 종속성 체인으로서 애플리케이션 론칭 동안 순차적으로 필요할 때 애플리케이션의 론치 시간들을 감소시키는 것을 수반할 수도 있다. 이러한 방식으로, 시스템 (100) 은 레이턴시 (latency) 를 감소시키고 중간의 중단들을 감소시키는 전체적인 혜택들을 제공할 수도 있고, 이에 의해, 사용자 경험을 향상시킨다.
선제적 NAND 압축해제 스케줄러 (126) 는 하나 이상의 설치된 애플리케이션들 (134) 을 위해 특별히 구성된 메타데이터를 생성한다. 메타데이터는 압축해제 메타데이터 테이블 (124) 에 저장될 수도 있다. 아래에서 보다 자세히 설명되는 바와 같이, 애플리케이션 (134) 을 위한 메타데이터는 하이-레벨 정보를 이용하여 애플리케이션 설치 시간에 정적으로 (statically) 생성될 수도 있다. 일 실시형태에서, 애플리케이션 (134) 을 위한 압축해제 메타데이터 테이블은, 하나 이상의 설치된 애플리케이션들 (134) 에 대한, 하나 이상의 종속 라이브러리들, 코드 오브젝트들, 사이즈-제약된 블록들, 애플리케이션 데이터, 파일들 등에 관한 정보를 포함할 수도 있다. 애플리케이션 (134) 이 론칭될 때, 종속 압축된 오브젝트들 (136) 을 사전에 선제적으로 디코딩/압축해제하기 위해 압축해제 메타데이터 테이블 (124) 이 액세스되고 사용된다. 메타데이터 테이블 (124) 은 애플리케이션(들) (134) 의 실행 활동에 기초하여 동적으로 업데이트될 수도 있다. 일 실시형태에서, O/S (122) 는 압축해제 메타데이터 테이블 (124) 을 생성 및/또는 관리할 뿐만 아니라 압축된 오브젝트들 (136) 의 선제적 디코딩/압축해제를 트리거할 수도 있다.
도 2 는 선제적 NAND 압축해제 스케줄러 (126) 의 일 예시적인 구현을 나타낸다. 선제적 NAND 압축해제 스케줄러 (126) 는 애플리케이션 설치자 컴포넌트 (202), O/S (122), 애플리케이션 론처 컴포넌트 (208), 및 애플리케이션 실행 환경 (210) 과 인터페이싱할 수도 있다. 애플리케이션 설치자 컴포넌트 (202) 는, NAND 플래시 스토리지 (104) 에서 압축되지않은 컴포넌트들 (204) 을 포함하는 압축되지않은 애플리케이션 (134) 을 설치하도록 구성된다. 애플리케이션 설치자 컴포넌트 (202) 는 압축/압축해제 모듈(들) (118) 에게, 압축되지않은 컴포넌트들 (204) 을 압축하고 대응하는 압축된 컴포넌트들 (136) 을 NAND 플래시 스토리지 (104) 에 저장하도록 지시할 수도 있다.
다른 실시형태들에서, 애플리케이션 설치자 컴포넌트 (202) 는 또한, 애플리케이션이 압축된 형태로 시스템 (100) 에 의해 직접 수신되는 경우에 압축된 애플리케이션을 직접 설치할 수도 있다. 예를 들어, 플랫폼 "App store" 는 앱들을 컴퓨팅 디바이스들에 다운로딩할 때 대역폭을 절약하기 위해 애플리케이션들 또는 "앱들 (apps)" 을 압축된 형태로 유지할 수도 있다. 이들 경우들에서, 바로 수신된 압축된 애플리케이션을 압축해제하기 위해 매칭되는 압축/압축해제 알고리즘이 사용될 수도 있다. 이러한 경우들에서, 압축해제 메타데이터 테이블 (124) 에서 저장된 메타데이터가 처음으로 생성될 수도 있고, 압축된 애플리케이션은 종래의 방식으로 애플리케이션 론처 컴포넌트 (202) 에 의해 압축해제되고 론칭된다. 선제적 스케줄링 및 선제적 압축해제는 애플리케이션이 장래에 론칭될 때 압축된 애플리케이션 및 그것의 압축된 오브젝트들의 임의의 장래의 압축해제를 위해 효력이 발생하게 될 것이다.
동작 시에, 애플리케이션 설치자 컴포넌트 (202) 는 애플리케이션 (134) 의 설치를 개시하기 위한 설치 명령을 수신한다 (참조 번호 201). 그 설치 명령에 응답하여, 애플리케이션 론처 컴포넌트 (202) 는 정정 메타데이터 생성을 개시하고 (참조 번호 203), 압축/압축해제 모듈(들) (118) 에게 압축되지않은 컴포넌트들 (204) 을 압축하고 대응하는 압축된 컴포넌트들 (136) 을 NAND 플래시 스토리지 (104) 에 저장하도록 지시한다 (참조 번호 205). 도 2 에서 예시된 바와 같이, 정적 메타데이터 생성 모듈 (206) 은 하나 이상의 종속 오브젝트들을 정의하는 메타데이터를 생성하도록 구성될 수도 있다. 애플리케이션 (134) 을 위한 생성된 메타데이터는 압축해제 메타테이블 (124) 에 저장될 수도 있다 (참조 번호 207).
종속 오브젝트들에 대한 메타데이터는, 예를 들어, 애플리케이션 실행 환경 (210), O/S (122), 애플리케이션 코드의 타입, O/S (122) 에 의해 사용되는 패키지 파일 포맷 등에 의존하여 다양한 방식들로, 애플리케이션 설치 시간 동안, 정적으로 생성될 수도 있다. 예를 들어, O/S (122) 가 안드로이드 모바일 오퍼레이팅 시스템을 포함하는 경우에, 정적 메타데이터 생성 모듈 (206) 은 안드로이드 애플리케이션 패키지 (APK) 로부터 메타데이터를 정적으로 생성할 수도 있다. 다른 실시형태들에서, 패키지 파일 포맷은 Unix 오퍼레이팅 시스템들에 대해 사용되는 ELF (Executable and Linkable Format) 및 Window 오퍼레이팅 시스템들에 대해 사용되는 PE (Portable Execution) 포맷을 포함할 수도 있다. 패키지 파일 포맷과 무관하게, 정적 메타데이터 생성 모듈 (206) 은 실행가능체/오브젝트-파일/라이브러리들로부터 하나 이상의 종속 오브젝트들 또는 컴포넌트들을 생성한다.
도 4 는 압축해제 메타데이터 테이블 (124) 의 일 예시적인 실시형태를 나타낸다. 테이블 (124) 은 정적 메타데이터 생성 모듈 (206) 에 의해 생성된 대응하는 메타데이터 (404) 를 갖는, NAND 플래시 스토리지 (104) 에서 설치된 하나 이상의 애플리케이션들 (애플리케이션 식별자 1 (406) ... 애플리케이션 식별자 N (407)) 에 대한 애플리케이션 식별자 (402) 를 포함한다. 도 4 의 실시형태에서, 메타데이터 (404) 는, 대응하는 우선순위 값으로 애플리케이션 (134) 에 의해 액세스되는, 모든 라이브러리 종속성들, 공유된 라이브러리들, 파일들, 데이터 오브젝트들 등의 평탄화된 리스트를 포함한다. 평탄화된 리스트는 종속 오브젝트(들)의 전체 설치되는 경로 및 명칭을 정의할 수도 있다. 우선순위 값 (priority value) 은 압축해제를 선제적으로 스케줄링할 때 사용될 수도 있다. 예를 들어, 우선순위 값들은 압축해제의 순서를 스케줄링하기 위해 사용될 수도 있다. 도 4 를 참조하면, <전체 설치된 경로 및 명칭> (408) 및 우선순위 값 (410) 은 종속 오브젝트 (411) 에 대응할 수도 있다. <전체 설치된 경로 및 명칭> (412) 및 우선순위 값 (414) 은 종속 오브젝트 (415) 에 대응할 수도 있다.
도 4 에서 추가로 예시되는 바와 같이, 메타데이터 (404) 는 우선순위 값 (418) 및 블록 인덱스 및 사이즈 (<블록 인덱스, 사이즈>) 데이터 (416) 를 갖는 하나 이상의 사이즈-제약된 블록들을 추가로 정의할 수도 있다. 예를 들어, 데이터 및/또는 코드의 블록들은 압축되지않은 사이즈에 대한 최소 (MIN) 제한 (예컨대, 1 MB, 16 MB, 64 MB 등) 을 설정할 수도 있음을 이해하여야 한다. 사이즈-제약된 블록들은 식별자로서 블록의 인덱스를 이용하여 NAND 플래시 스토리지 (104) 에 압축 및 저장될 수도 있다. 블록-기반 접근법은, 전체 라이브러리가 상당히 큰 사이즈를 가지고 단일 프로세스보다는 부분들로 로딩되는 경우에 사용될 수도 있음을 이해하여야 한다. 블록들의 MIN 사이즈 제한은 오버헤드를 증가시킬 수 있는 블록들의 수에서의 임의의 "폭발 (blow up)" 을 제한하기 위해 설정될 수도 있다. 정적 메타데이터 생성 모듈 (206) 은 사이즈 제한 미만의 임의의 블록들을 무시할 수도 있다.
정적 메타데이터 생성 모듈 (206) 을 일반적으로 설명하였지만, 예시적인 패키지 파일 포맷들을 참조하여 다양한 실시형태들이 설명될 것이다. 하나의 실시형태에서, 애플리케이션 (134) 은 네이티브 (native) 안드로이드 애플리케이션을 포함한다. 당해 기술분야에서 알려진 바와 같이, 안드로이드 애플리케이션을 위한 컴포넌트들 (204) 은 애플리케이션에 의해 필요한 리소스들, 라이브러리들 등에 관한 정보를 포함하는 APK 파일들을 포함할 수도 있다. 정적 메타데이터 생성 모듈 (206) 은 다양한 APK 파일들로부터 하나 이상의 종속 오브젝트들을 결정할 수도 있다. "매니페스트 (MANIFEST)" 파일은 애플리케이션이 링크되어야만하는 라이브러리들을 열거한다. "매니페스트" 파일은 애플리케이션이 링크되어야만하는 하나 이상의 공유된 라이브러리들을 명시할 수도 있다. 이들 종속 오브젝트들은 시스템 (100) 에게 패키지에 대한 클래스 로더에서 공유된 라이브러리들에 대한 코드를 포함하도록 지시한다. APK 에서의 "lib" 오브젝트는 애플리케이션에 의해 필요한 모든 컴파일링된 코드 (바이너리 오브젝트 파일들 등) 를 갖는다. "res" 오브젝트는 "resources.arsc" 파일 내로 컴파일링되지 않은 리소스들을 포함하는 디렉토리를 포함한다. "assets" 오브젝트는 애플리케이션 애셋들을 포함하는 디렉토리를 포함한다. "classes.dex" 파일은 dex 파일 포맷으로 컴파일링되고 가상 머신에 의해 사용되는 클래스들을 정의한다. "resources.arsc" 파일은 프리컴파일링된 리소스들을 포함한다.
이들 임의의 또는 다른 오브젝트들이, 모든 공유된 라이브러리들, DEX 클래스 파일들, 및 애플리케이션에 의해 사용되는 다른 리소스 파일들을 결정하기 위해 사전에 사용될 수도 있고, 이는 압축해제 메타데이터 테이블 (124) 에서 메타데이터 (404) 로서 저장될 수도 있다. 이 메타데이터는, 사용자가 애플리케이션 론치를 트리거하자마자 NAND 플래시 (104) 에서 압축된 형태로 저장되는 항목들 중 임의의 것을 선제적으로 압축해제하기 위해 사용될 수 있음을 이해하여야 한다.
Linux, Unix, Android 오퍼레이팅 시스템들에서의 실행가능체들에 대해, ELF (Executable and Linkable Format) 는 실행가능체들, 오브젝트 코드, 및 공유된 라이브러리들에 대한 공통의 표준 파일 포맷이다. 이들 실시형태들에서, 정적 메타데이터 생성 모듈 (206) 은 ELF 실행가능체/라이브러리에 대한 동적으로 링크된 종속성들의 리스크를 얻을 수도 있다. Readelf, objdumo, lld 등과 같은 유틸리티들로부터의 기능성들이 동적으로 링크된 종속성들을 결정하기 위해 이용될 수도 있음을 이해하여야 한다. 아래의 표 1 은 다양한 인덱스들, 태그들, 및 값들을 나타낸다.
인덱스 태그
[0] POSFLAG_1 0x1 [LAZY]
[1] NEEDED 0x123 libdebug.so.1
[2] NEEDED 0x131 libelf.so.1
[3] NEEDED 0x13d libc.so.1
표 1: 동적으로 링크된 종속성들의 결정
표 1 을 참조하면, [LAZY] 의 값을 갖는 태그 POSFLAG_1 은 다음의 NEEDED 엔트리, libdebug.so.1 가 느릿느릿하게 로딩되어야 하는 것을 지정한다. libelf.so.1 이 선행하는 LAZY 플래그를 갖지 않음에 따라, 이 라이브러리는 프로그램의 초기 시동 시에 로딩된다. 동적 링커가 오브젝트 파일에 대한 메모리 세그먼트들을 생성할 때, (동적 구조의 DT_NEEDED 엔트리들에서 레코딩된) 종속성들은 프로그램 서비스들을 공급하기 위해 무슨 공유된 오브젝트들이 필요한지를 정의한다. 참조된 공유된 오브젝트들 및 그것들의 종속성들을 반복적으로 연결함으로써, 동적 링커는 완전한 프로세스 이미지를 구축한다. "레이지 (lazy)" 바인딩에서, 심볼 참조들은 오직 이미지가 실제로 그 심볼들을 이용할 때에만 바인딩된다. LAZY 정보는, 프로그램 로드 동안 로딩되는 (레이지로 마킹되지 않는) 다른 라이브러리들과는 달리, 동적 링커로 하여금 오직 필요할 때에만 공유된 라이브러리를 로딩하도록 지시한다.
다른 실시형태들에서, 압축해제는 압축해제 시간을 흡수하도록 미리 LAZY 및 비-LAZY 공유된 라이브러리들 양자에 대해 스케줄링될 수도 있다. 동적 링커가 프로그램 로드를 행할 때 압축해제를 실행하는 것은 애플리케이션 론치 시간을 느리게 할 수도 있다. 레이지 바인딩 동안 압축해제를 실행하는 것은 실행 성능을 더 느리게 할 수도 있다.
(LAZY 및 LAZY 로 마킹되지 않은 것들 양자에 대한) 이 데이터는, 애플리케이션에 대해 (모든 종속 레벨들에 대한) 전체 공유된 라이브러리 트리를 결정하고 그것들을 애플리케이션에 대한 압축해제 메타데이터 테이블 (124) 에 저장하기 위해 애플리케이션 설치 시간 동안 사용될 수도 있음을 이해하여야 한다. O/S (122) 에서의 소프트웨어 모듈(들)은 설치 시간 동안 라이브러리들의 종속성 트리를 결정할 수도 있다. 이것은 전체 라이브러리에 대해 행해지기 때문에, 이것은 라이브러리의 부분인 코드, 데이터 등에 적용될 수도 있다. 메타데이터 (404) 는, 비록 동적 링커가 종속성들을 재귀적으로 발견하고 모든 종속성 라이브러리들을 로딩하기 전에도, 사용자가 애플리케이션 론치를 트리거하자 마자, NAND 플래시 (104) 에 저장되는 라이브러리들 중 임의의 것을 선제적으로 압축해제하기 위해 사용될 수 있다. 이러한 방식으로, 동적 링커가 각각의 종속 라이브러리들을 재귀적으로 발견할 때, 라이브러리는 압축해제된 형태로 이미 이용가능하고, 이에 의해, 애플리케이션 론치/실행 시에 동적 로딩의 결정적 경로로부터 디코딩/압축해제 활동을 제거한다.
PE (Portable Executable) 포맷은 실행가능체들, 오브젝트 코드, 동적 링크 라이브러리 (DLL) 들, FON 폰트 파일들, 및 Windows 오퍼레이팅 시스템들의 32-비트 및 64-비트 버전들에서 사용되는 다른 것들에 대한 파일 포맷이다. PE 포맷은 랩핑된 실행가능 코드를 관리하기 위해 Windows O/S 로더를 위해 필요한 정보를 인캡슐레이션하는 데이터 구조이다. 이것은 API 엑스포트 및 임포트 테이블들, 리소스 관리 데이터, 및 TLS (thread-local storate) 데이터를 링크하기 위한 동적 라이브러리 참조들을 포함한다. ELF 실행가능체들/오브젝트-파일들에 대한 방법과 유사하게, PE 실행가능체들/오브젝트들/라이브러리들로부터의 정보는 전체 공유된 라이브러리 트리를 결정하고 애플리케이션의 메타데이터 (404) 에서 그것들을 이용가능하게 유지하기 위해 사전에 사용될 수도 있다. 메타데이터 (404) 는 NAND 플래시 (104) 에서 압축된 형태로 저장되는 라이브러리들의 임의의 것을 선제적으로 압축해제하기 위해 사용될 수도 있다.
도 2 를 다시 참조하면, 애플리케이션 (134) 이 사용자에 의해 론칭될 때, 애플리케이션 론처 컴포넌트 (208) 는 선제적 NAND 압축해제 스케줄러 (126) 에게 통지할 수도 있다 (참조 번호 209). 애플리케이션 론처 컴포넌트 (208) 로부터의 통지에 응답하여, 선제적 NAND 압축해제 스케줄러 (126) 는 압축해제 메타데이터 테이블 (124) 을 액세스하고 애플리케이션 (134) 에 대한 대응하는 메타데이터 (404) 를 획득한다 (참조 번호 211). 압축해제 메타데이터 테이블 (124) 은, 애플리케이션 (134) 이 시스템 (100) 에서 설치되는 한 O/S (122) 의 제어 하에서 지속적으로 세이브될 수도 있다. 애플리케이션이 설치해제되는 경우에, 애플리케이션을 위한 메타데이터 (404) 는 삭제될 수도 있다. O/S (122) 가 애플리케이션 론치 트리거 (예컨대, 사용자가 애플리케이션 아이콘을 터치하는 것 등) 를 검출할 때, O/S (122) 는 NAND 플래시 (104) 에서 존재하는 임의의 종속 오브젝트들 또는 리소스들 (예컨대, 코드, 라이브러리들, 데이터 파일들, 사이즈-제약된 블록들 등) 을 선제적으로 압축해제하기 위해 즉시 신호를 준다.
도 2 의 실시형태를 참조하면, 참조 번호 213 에서, 선제적 NAND 압축해제 스케줄러 (126) 는 예를 들어 애플리케이션 실행 환경 (210) 을 통해 종속 오브젝트들의 압축해제를 선제적으로 스케줄링할 수도 있다. 종속 오브젝트들의 압축해제는, 애플리케이션 실행 환경 (210) 이 종속성들을 해소하고 NAND 플래시 (104) 로부터 압축되지않은 형태로 종속 오브젝트들을 로딩하기 전에 발생함을 이해하여야 한다 (참조 번호 215).
상기 언급된 바와 같이, 압축해제 메타데이터 테이블 (124) 은 실행 활동에 기초하여 애플리케이션 (134) 의 실행 동안 동적으로 업데이트될 수도 있다. 애플리케이션 (134) 의 실행 동안, 동적 메타데이터 생성 모듈 (212) 은 애플리케이션 (134) 의 실행을 위해 파일, 라이브러리, 및 블록 액세스를 검출할 수도 있다 (참조 번호 217). 애플리케이션 (134) 의 하나 이상의 런들 (runs) 로부터의 실행 활동에 기초하여, 동적 메타데이터 생성 모듈 (212) 은 추가적인 종속성들을 동적으로 추출하고 추가적인 종속 오브젝트들을 포함하도록 압축해제 메타데이터 테이블 (124) 을 업데이트할 수도 있다 (참조 번호 219).
도 3 은 시스템 (100) 에서 종속 오브젝트들을 선제적으로 압축해제하기 위한 방법 (300) 의 일 실시형태를 나타낸다. 블록 (302) 에서, NAND 플래시 (104) 에의 애플리케이션 (134) 의 설치가 개시된다. 상술된 바와 같이 애플리케이션 (134) 은 복수의 오브젝트들을 포함할 수도 있다. 블록 (304) 에서, 압축/압축해제 모듈 (118) 은 애플리케이션 오브젝트들을 압축한다. 상기 언급된 바와 같이, 애플리케이션 (134) 은 설치 동안 압축된 형태로 바로 이용가능할 수도 있다. 이 경우에, 애플리케이션 (134) 은 기존의 압축된 형태로 바로 설치될 수도 있거나, 그것은 압축해제된 다음에 다시 하지만 원래의 압축된 형태에 비해 다른 형태로 그리고 다른 압축 알고리즘 및/또는 파라미터들을 이용하여 압축될 수 있다. 압축된 애플리케이션이 압축해제된 다음에 NAND 내로의 설치 동안 다시 압축되는 경우에, 메타데이터는 설치 시간 동안 생성될 수도 있다. 하지만, 압축된 형태에서의 수신된 애플리케이션이 NAND (104) 에서 설치되는 경우에, 처음에 애플리케이션이 론칭되는 동안 애플리케이션 (134) 이 처음으로 압축해제될 때 메타데이터가 생성될 수도 있다. 이러한 방식으로, 선제적 스케줄링 및 압축해제의 혜택들은, 일단 메타데이터가 생성되고 나면 임의의 장래의 후속하는 애플리케이션 론치들에서 효과를 발휘할 수도 있다.
블록 (306) 에서, 압축된 애플리케이션 오브젝트들은 플래시 제어기 (108) 를 통해 NAND 플래시에서 저장된다. (예컨대, 블록 (302) 에서의) 애플리케이션 설치 동안, 블록 (308) 에서, 정적 메타데이터 생성 모듈 (206) 은 NAND 플래시 (104) 에서 저장될 하나 이상의 종속 오브젝트들 또는 리소스들 (예컨대, 코드, 라이브러리들, 데이터 파일들, 사이즈-제약된 블록들 등) 을 정의하는 메타데이터 (404) 를 생성한다. 블록 (310) 에서, 생성된 메타데이터 (404) 는, O/S (122) 에 의해 관리될 수도 있는, 압축해제 메타데이터 테이블 (124) 에 저장된다. 애플리케이션이 론칭되는 것에 응답하여 (결정 블록 (312)), 선제적 NAND 압축해제 스케줄러 (126) 는 NAND 플래시 (104) 에 저장된 론칭될 애플리케이션 (134) 에 대해 메타데이터 (404) 를 판독한다 (블록 (314)). 블록 (316) 에서, 선제적 NAND 압축해제 스케줄러 (126) 는 메타데이터 (404) 에 의해 정의된 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링한다. 블록 (318) 에서, 종속 오브젝트들은, 애플리케이션 론처 컴포넌트 (208) 가 종속성들을 해소하고 NAND 플래시 (104) 로부터 종속 오브젝트들을 로딩하기 전에 (참조 번호 322) 압축/압축해제 모듈 (118) 에 의해 압축해제된다.
도 5 는 애플리케이션의 하나 이상의 런들 동안 애플리케이션 (134) 에 대한 메타데이터 (404) 를 동적으로 업데이트하기 위한 방법 (500) 의 일 실시형태를 나타낸다. 블록 (502) 에서, NAND 플래시 (104) 에서 저장된 압축된 애플리케이션 (134) 이 론칭된다. 블록 (504) 에서, 압축된 애플리케이션은 종래의 방식으로 (또는 메타데이터 (404) 에 기초하여 상술된 방식으로) 압축해제되고 실행될 수도 있다. 블록 (506) 에서, 동적 메타데이터 생성 모듈 (212) 은 예를 들어 파일, 라이브러리, 및 블록 액세스를 검출할 수도 있다. 블록 (508) 에서, 동적 메타데이터 생성 모듈 (212) 은 애플리케이션 실행 활동에 기초하여 추가적인 종속성들을 추출하거나 그 외에 결정한다. 블록 (510) 에서, 동적 메타데이터 생성 모듈 (212) 은 실행 활동 동안 결정된 추가적인 종속성들로 애플리케이션 (134) 에 대한 메타데이터 (404) 를 업데이트한다.
추가적인 메타데이터는 설치된 APK 의 미리결정된 또는 계산된 수의 초기 런들 또는 그것이 이용하거나 액세스하는 파일들, 라이브러리들, 사이즈-제약된 블록들, 데이터 셋트들에 관한 코드로부터 생성될 수도 있다. 업데이트된 메타데이터는, 애플리케이션 (134) 이 론칭되자마자, 종속 파일들, 라이브러리들, 사이즈-제약된 블록들, 데이터 셋트들 등을 선제적으로 압축해제하기 위해 애플리케이션의 장래의 실행들에서 사용될 수도 있다. 애플리케이션 (134) 에 대한 메타데이터는 애플리케이션 (134) 의 몇몇 런들 후에 안정화될 수도 있고 디바이스에서 설치된 애플리케이션 (134) 의 전체 수명 동안 사용될 수 있다. 코드, 라이브러리들, 및 파일들에 대해, 메타데이터는 그것들의 저장 경로들 및 파일명칭들과 연관된 데이터를 유지할 수도 있다. 사이즈-제약된 블록들에 대해, 메타데이터는 블록 인덱스 및 사이즈를 정의할 수도 있다. 애플리케이션 데이터에 대해, 메타데이터는 애플리케이션 (134) 이 액세스되는 페이지 인덱스들의 정보를 추적할 수도 있다. O/S (122) 는 NAND 플래시 (104) 에서 페이지들이 존재하는 곳의 추적을 유지하기 위해 사용될 수도 있다. 메타데이터는 O/S (122) 의 제어 하에서 그리고 지속적으로 세이브될 수도 있다. O/S (122) 가 애플리케이션 론치 트리거를 검출할 때, 그것은 NAND 플래시 (104) 에서 존재하는 임의의 종속 리소스들 (예컨대, 코드, 라이브러리들, 데이터, 파일들) 을 선제적으로 압축해제하기 위해 즉시 신호를 준다.
레이지 바인딩을 통해 로딩된 공유된 라이브러리들에 대한 선제적 압축해제는 예를 들어 dlopen() 및 dlsym() 과 같은 대안적 방법들을 이용할 수도 있음을 추가로 이해하여야 한다. dlopen() 함수는 프로그램 실행 동안 프로그램을 호출에 이용가능한 경로명칭 및 파일명칭에 의해 명시된 실행가능 오브젝트 파일을 만든다. dlopen() 호출은 런타임에서 경로명칭 및 파일명칭에 의해 명시되는 실행가능 오브젝트 파일의 동적 로딩을 유효하게 행한다. 호출 프로그램은 그 다음에, dlsym() 호출들을 이용하여 동적으로 로딩된 오브젝트 파일에서 구현된 심볼들 및 함수들을 발견함으로써 동적으로 로딩된 실행가능 오브젝트에 의해 제공된 기능성들을 이용하여 시작될 수도 있다. 성공적인 dlopen() 함수는 호출 프로그램이 dlsym() 를 이용하여 후속 호출들에서 이용할 필요가 있을 핸들을 리턴한다. dlsym() 함수는 dlopen() 호출을 통해 액세스가능하게 만들어진 동적으로 로딩된 오브젝트 파일 런타임 내에서 정의된 심볼의 어드레스를 획득한다. 문자 스트링으로서 심볼의 명칭은 런타임에서 동적으로 로딩된 모든 오브젝트들에서 몇몇된 심볼에 대해 검색하는 dlsym() 함수에 인수로서 패스된다.
메타데이터 정보는 dlopen() API 들을 이용하여 로딩된 라이브러리들을 인터셉트함으로써 애플리케이션의 실행 동안 동적으로 획득될 수 있다. 라이브러리 명칭을 캡처하고 애플리케이션 (134) 에 대한 메타데이터 (404) 를 세이브 (save) 하기 위해 dlopen() API 에서 변경들이 이루어질 수 있다. 메타데이터 (404) 는 O/S 에 의해 관리되기 때문에, 정보는 압축해제 메타데이터 테이블 (124) 에서 쉽게 세이브될 수 있다. 애플리케이션 (134) 이 론칭되는 다음 시간에 라이브러리들을 선제적으로 압축해제하기 위해 메타데이터 (404) 가 사용될 수 있다. 애플리케이션 실행 활동에 기초한 메타데이터의 동적 생성은 압축해제 메타데이터 테이블 (124) 의 주기적 또는 계속적 업데이트를 제공하고, 정적 메타데이터 생성 모듈 (206) 에 의해 제외될 수도 있는 임의의 미싱 라이브러리들/파일들, 사이즈-제약괸 블록들 등을 검출할 수 있다.
추가적인 실시형태들에서, 선제적 압축해제는 NAND 플래시 (104) 상에서 애플리케이션들 (134) 에 의해 세이브되고 캐시되는 데이터에 대해 수행될 수도 있다. 캐시된 데이터는 전체 경로를 갖는 파일 명칭들로서 존재할 수도 있다 (예컨대, 모바일 브라우저 APK 를 위한 지속성 캐시들). 동적 메타데이터 생성 모듈 (212) 은 애플리케이션이 세이브하는 데이터 및 캐시들에 대한 전체 경로들 및 명칭들을 검출할 수도 있고, 파일들이 액세스됨에 따라 그리고 파일들이 액세스될 대 애플리케이션 (134) 에 대한 압축해제 메타데이터 테이블 (124) 에서 그것들을 포함할 수 있다. 데이터 및 캐시 파일들은 애플리케이션이 론칭되자마자 선제적으로 압축해제될 수 있다.
사이즈-제약된 데이터 블록들에 대해, 블록 인덱스 및 사이즈는 식별을 위해 사용될 수도 있다. 정적 메타데이터 생성 모듈 (206) 은 압축해제 메타데이터 테이블 (124) 을 위한 초기 시드 (seed) 를 제공하고, 애플리케이션 (134) 이 론칭되는 처음에 보조할 수도 있다. 동적 메타데이터 생성 모듈 (212) 은 초기 메타데이터를 업데이트하고 정제 (refine) 하는 것을 돕고, 예를 들어, 식별자들로서 블록 인덱스를 이용하여 코드 및/또는 데이터의 사이즈-제약된 블록들을 커버할 수 있다. 우선순위 값 (예컨대, 도 4 에서의 410, 414, 및 418) 은, 그 항목이 애플리케이션 (34) 에 의해 얼마나 활발하게/자주 그것이 론칭될 때마다 사용되는지 그리고 애플리케이션 실행 국면에서 얼마나 일직 그 항목이 이용되는지를 나타내기 위해 압축해제 메타데이터 테이블 (124) 에서 각각의 엔트리와 연관된다. 우선순위 값(들)은 동적 메타데이터 생성 모듈 (212) 에 의해 주기적으로 업데이트될 수도 있다. 특정 애플리케이션 (134) 에 대한 필요한 항목들에 대한 압축해제 활동은 우선권 순서를 따를 수도 있다. 예를 들어, 자주 사용되고 사용지 애플리케이션 실행에서 조기에 나타나는 항목은, 그 항목을 선제적으로 압축해제하는 것은 가장 영향력이 있을 수도 있기 때문에, 더 높은 우선순위를 할당받을 수도 있다.
상기 언급된 바와 같이, 시스템 (100) 은 임의의 바람직한 컴퓨팅 시스템 내로 통합될 수도 있다. 도 6 은 일 예시적인 포터블 컴퓨팅 디바이스 (PCD) (600) 에서 통합된 시스템 (100) 을 나타낸다. 시스템 (100) 의 소정의 컴포넌트들은 SoC (322) 상에 포함될 수도 있는 한편 (데이터 압축 컴포넌트 (118) 및 선제적 NAND 압축해제 스케줄러 (126)), 다른 컴포넌트들 (예컨대, DRAM (106), NAND 플래시 (104)) 은 SoC (322) 에 커플링된 외부 컴포넌트들일 수도 있음을 쉽게 이해할 것이다. SoC (322) 는 멀티코어 CPU (602) 를 포함할 수도 있다. 멀티코어 CPU (602) 는 0 번째 코어 (610), 1 번째 코어 (612), 및 N 번째 코어 (614) 를 포함할 수도 있다. 코어들 중 하나는 예를 들어 그래픽 프로세싱 유닛 (GPU) 을 포함할 수도 있고, 다른 것들 중 하나 이상은 CPU 를 포함한다.
디스플레이 제어기 (328) 및 터치스크린 제어기 (330) 는 CPU (602) 에 커플링될 수도 있다. 차례로, 온-칩 시스템 (322) 의 외부에 있는 터치스크린 디스플레이 (606) 는 디스플레이 제어기 (328) 및 터치스크린 제어기 (330) 에 커플링될 수도 있다.
도 6 은 또한 비디오 디코더 (334), 예를 들어 PAL (phase alternating line) 인코더, SECAM (sequential color a memoire) 인코더, 또는 NTSC (national television system(s) committee) 인코더가 멀티코어 CPU (602) 에 커플링되는 것을 보여준다. 또한, 비디오 증폭기 (336) 는 비디오 인코더 (334) 및 터치스크린 디스플레이 (606) 에 커플링된다. 또한, 비디오 포트 (338) 는 비디오 증폭기 (336) 에 커플링된다. 도 6 에 도시된 바와 같이, 유니버셜 시리얼 버스 (USB) 제어기 (340) 는 멀티코어 CPU (602) 에 커플링된다. 또한 USB 포트 (342) 는 USB 제어기 (340) 에 커플링된다.
또한, 도 6 에 도시된 바와 같이, 디지털 카메라 (348) 가 멀티코어 CPU (602) 에 커플링될 수도 있다. 예시적인 양태에서, 디지털 카메라 (348) 는 전하 결합 디바이스 (CCD) 카메라 또는 상보적 금속 산화물 반도체 (CMOS) 카메라이다.
또한 도 6 에 도시된 바와 같이, 스테레오 오디오 코더-디코더 (CODEC) (350) 이 멀티코어 CPU (602) 에 커플링될 수도 있다. 게다가, 오디오 증폭기 (352) 는 스테레오 오디오 CODEC (350) 에 커플링될 수도 있다. 예시적인 양태에서, 제 1 스테레오 스피커 (354) 및 제 2 스테레오 스피커 (356) 이 오디오 증폭기 (352) 에 커플링된다. 도 6 은 마이크로폰 증폭기 (358) 가 또한 스테레오 오디오 CODEC (350) 에 커플링될 수도 있다는 것을 보여준다. 또한, 마이크로폰 (360) 은 마이크로폰 증폭기 (358) 에 커플링될 수도 있다. 특정의 양태에서, 주파수 변조 (FM) 라디오 튜너 (362) 가 스테레오 오디오 CODEC (350) 에 커플링될 수도 있다. 또한, FM 안테나 (364) 가 FM 라디오 튜너 (362) 에 커플링된다. 또한, 스테레오 헤드폰들 (366) 은 스테레오 오디오 CODEC (350) 에 커플링될 수도 있다.
도 6 은 또한 무선 주파수 (RF) 송수신기 (368) 가 멀티코어 CPU (602) 에 커플링될 수도 있다는 것을 도시한다. RF 스위치 (370) 가 RF 송수신기 (368) 및 RF 안테나 (372) 에 커플링될 수도 있다. 키패드 (204) 가 멀티코어 CPU (602) 에 커플링될 수도 있다. 또한, 마이크로폰 (376) 을 갖는 모노 헤드셋이 멀티코어 CPU (602) 에 커플링될 수도 있다. 또한, 진동기 디바이스 (378) 가 멀티코어 CPU (602) 에 커플링될 수도 있다.
도 6 은 또한 전력 공급 장치 (380) 가 온-칩 시스템 (322) 에 커플링되는 것을 보여준다. 특정의 양태에서, 전력 공급 장치 (380) 는 전력을 요구하는 PCD (600) 의 여러 컴포넌트들로 전력을 제공하는 직류 (DC) 전력 공급 장치이다. 또한, 특정의 양태에서, 전력 공급 장치는 AC 전원에 연결되는 교류 (AC) 대 DC 변환기로부터 도출되는 재충전가능한 DC 배터리 또는 DC 전력 공급 장치이다.
도 6 은 또한 PCD (600) 가 데이터 네트워크, 예를 들어, 로컬 영역 네트워크, 개인 영역 네트워크, 또는 임의의 다른 네트워크를 액세스하기 위해 사용될 수도 있는 네트워크 카드 (388) 를 또한 포함할 수도 있다는 것을 나타낸다. 네트워크 카드 (388) 는 블루투스 네트워크 카드, WiFi 네트워크 카드, 개인 영역 네트워크 (PAN) 카드, 개인 영역 네트워크 초저전력 (ultra-low-power) 기술 (PeANUT) 네트워크 카드, 텔레비젼/케이블/위성 튜너, 또는 본 기술에서 잘 알려진 임의의 다른 네트워크 카드일 수도 있다. 또한, 네트워크 카드 (388) 는 칩으로 통합될 수도 있으며, 즉 네트워크 카드 (388) 는 칩 내의 풀 솔루션 (full solution) 일 수도 있고, 별개의 네트워크 카드 (388) 가 아닐 수도 있다.
도 6 에 도시된 바와 같이, 터치스크린 디스플레이 (606), 비디오 포트 (338), USB 포트 (342), 카메라 (348), 제 1 스테레오 스피커 (354), 제 2 스테레오 스피커 (356), 마이크로폰 (360), FM 안테나 (364), 스테레오 헤드폰들 (366), RF 스위치 (370), RF 안테나 (372), 키패드 (374), 모노 헤드셋 (376), 진동기 (378), 및 전력 공급 장치 (380) 는 온-칩 시스템 (322) 의 외부에 있을 수도 있다.
본원에 기술된 방법 단계들의 하나 이상은 상술된 모듈들과 같이 컴퓨터 프로그램 명령들로서 메모리에 저장될 수 있음을 이해하여야 한다. 이들 명령들은 본원에 기술된 방법들을 수행하기 위해 대응하는 모듈과 결합하여 또는 협력하여 임의의 적합한 프로세서에 의해 실행될 수도 있다.
본 명세서에 기술된 프로세스들 또는 프로세스 흐름들에서의 소정의 단계들은 당연히 본 발명이 기술된 바와 같이 기능하기 위해 다른 것들보다 우선한다. 그러나, 본 발명은 그러한 순서 또는 시퀀스가 본 발명의 기능성을 변경하지 않는다면 기술된 단계들의 순서에 제한되지 않는다. 즉, 일부 단계들은 본 발명의 범위 및 사상으로부터 일탈하지 않고 다른 단계들 전에, 후에, 또는 다른 단계들과 병행하여 (실질적으로 동시에) 수행될 수도 있다는 것이 인정된다. 일부 예들에서, 소정의 단계들은 본 발명으로부터 일탈하지 않고 생략되거나 수행되지 않을 수도 있다. 또한, "이후에", "그 후", "다음" 등과 같은 단어들은 단계들의 순서를 제한하도록 의도되지 않는다. 이들 단어들은 단지 예시적인 방법의 설명을 통해 독자를 안내하기 위해 사용된다.
또한, 프로그래밍 분야에서의 통상의 기술자는 예를 들어 본 명세서에서의 플로우챠트들 및 연관된 설명에 기초하여 어려움 없이 개시된 발명을 구현하기 위해 컴퓨터 코드를 기입하거나 적절한 하드웨어 및/또는 회로들을 식별할 수 있다.
따라서, 프로그램 코드 명령들 또는 상세한 하드웨어 디바이스들의 특정의 세트의 개시는 본 발명을 실시 및 사용하는 방법의 적절한 이해를 위해 필요한 것으로 고려되지 않는다. 청구된 컴퓨터 구현되는 프로세스들의 본 발명의 기능은 다양한 프로세스 플로우들을 예시할 수도 있는 도면들과 함께 상기 설명에서 보다 자세히 설명되었다.
하나 이상의 예시적인 양태들에서, 기술된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 그의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현될 경우, 기능들은 하나 이상의 명령들 또는 코드로서, 컴퓨터-판독가능 매체 상에 저장되거나, 컴퓨터-판독가능 매체를 통해 송신될 수도 있다. 컴퓨터-판독가능 매체들은 하나의 장소로부터 또 다른 장소까지의 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체들 및 컴퓨터 저장 매체들 양자를 포함한다. 저장 매체들은 컴퓨터에 의해 액세스될 수도 있는 임의의 이용가능한 매체들일 수도 있다. 제한이 아닌 예로써, 이러한 컴퓨터-판독가능 매체들은 RAM, ROM, EEPROM, NAND 플래시, NOR 플래시, M-RAM, P-RAM, R-RAM, CD-ROM 또는 다른 광학 디스크 스토리지, 자기 디스크 스토리지, 또는 다른 자기 저장 디바이스들, 또는 명령들 또는 데이터 구조들의 형태로 희망하는 프로그램 코드를 운반하거나 저장하기 위해 이용될 수 있으며, 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다.
또한, 임의의 접속은 컴퓨터-판독가능 매체로 적절하게 칭해질 수도 있다. 예를 들어, 동축 케이블, 광섬유 케이블, 트위스트 페어 (twisted pair), 디지털 가입자 회선 (digital subscriber line; DSL), 또는 적외선, 라디오, 및 마이크로파와 같은 무선 기술들을 이용하여, 소프트웨어가 웹사이트, 서버, 또는 다른 원격 소스로부터 송신될 경우, 동축 케이블, 광섬유 케이블, 트위스트 페어, 또는 DSL 또는 적외선, 라디오, 및 마이크로파와 같은 무선 기술들은 매체의 정의 내에 포함된다.
본원에서 이용된 바와 같은 디스크 (disk) 및 디스크 (disc) 는 컴팩트 디스크 (compact disc; CD), 레이저 디스크 (laser disc), 광학 디스크 (optical disc), 디지털 다기능 디스크 (digital versatile disc; DVD), 플로피 디스크 (floppy disk) 및 블루레이 디스크 (blu-ray disc) 를 포함하고, 여기서, 디스크 (disk) 들은 통상 데이터를 자기적으로 재생하는 반면, 디스크 (disc) 들은 데이터를 레이저로 광학적으로 재생한다. 상기의 조합들은 컴퓨터-판독가능 매체들의 범위 내에 또한 포함되어야 한다.
대안적인 실시형태들은 본 발명이 그것의 사상 및 범위로부터 일탈하지 않고 통상의 기술자에게 명백할 것이다. 따라서, 선택된 양태들은 상세하게 도시 및 기술되었지만, 여러 대체들 및 변경들이 다음의 청구범위에 정의된 바와 같은, 본 발명의 사상 및 범위로부터 일탈하지 않고 여기에 행해질 수도 있다는 것이 이해될 것이다.

Claims (30)

  1. 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 방법으로서, 상기 방법은,
    플래시 메모리 디바이스 상에서 설치된 압축된 애플리케이션에 대한 메타데이터를 생성하는 단계로서, 상기 메타데이터는 상기 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들을 정의하는, 상기 메타데이터를 생성하는 단계;
    상기 메타데이터를 메모리에 저장하는 단계; 및
    상기 압축된 애플리케이션의 론치에 응답하여,
    론칭될 상기 압축된 애플리케이션과 연관된 상기 하나 이상의 종속 오브젝트들을 저장된 상기 메타데이터로부터 결정하는 단계; 및
    상기 저장된 메타데이터에 기초하여 상기 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링하는 단계를 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 방법.
  2. 제 1 항에 있어서,
    애플리케이션 론처가 상기 종속 오브젝트들을 로딩하기 전에 상기 하나 이상의 종속 오브젝트들을 압축해제하는 단계를 더 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 방법.
  3. 제 1 항에 있어서,
    상기 하나 이상의 종속 오브젝트들은 종속 파일, 종속 라이브러리, 공유 라이브러리, 및 하나 이상의 사이즈-제약된 블록들 중 하나 이상을 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 방법.
  4. 제 1 항에 있어서,
    상기 메타데이터는 상기 하나 이상의 종속 오브젝트들을 압축해제하기 위한 순서를 결정하기 위한 설치된 경로들 및 파일명칭들, 복수의 블록 인덱스들 및 사이즈들, 및 우선순위 값의 리스트를 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 방법.
  5. 제 1 항에 있어서,
    상기 플래시 메모리 디바이스는 NAND 플래시를 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 방법.
  6. 제 1 항에 있어서,
    압축해제된 상기 애플리케이션의 실행 동안, 하나 이상의 추가적인 종속 오브젝트들을 결정하는 단계; 및
    상기 하나 이상의 추가적인 종속 오브젝트들로 상기 저장된 메타데이터를 업데이트하는 단계를 더 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 방법.
  7. 제 1 항에 있어서,
    상기 저장된 메타데이터에 기초하여 상기 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링하는 단계는, 상기 하나 이상의 종속 오브젝트들과 연관된 종속성들을 동적 링커가 해소하기 전에 상기 하나 이상의 종속 오브젝트들의 압축해제를 스케줄링하는 단계를 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 방법.
  8. 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템으로서, 상기 시스템은,
    플래시 메모리 디바이스 상에서 설치된 압축된 애플리케이션에 대한 메타데이터를 생성하는 수단으로서, 상기 메타데이터는 상기 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들을 정의하는, 상기 메타데이터를 생성하는 수단;
    상기 메타데이터를 메모리에 저장하는 수단; 및
    상기 압축된 애플리케이션의 론치에 응답하여,
    론칭될 상기 압축된 애플리케이션과 연관된 상기 하나 이상의 종속 오브젝트들을 저장된 상기 메타데이터로부터 결정하는 수단; 및
    상기 저장된 메타데이터에 기초하여 상기 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링하는 수단을 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  9. 제 8 항에 있어서,
    애플리케이션 론처가 상기 종속 오브젝트들을 로딩하기 전에 상기 하나 이상의 종속 오브젝트들을 압축해제하는 수단을 더 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  10. 제 9 항에 있어서,
    상기 하나 이상의 종속 오브젝트들을 압축해제하는 수단은, 중앙 프로세싱 유닛 (CPU) 및 전용 랜덤 액세스 메모리 (RAM) 를 갖는 압축 코-프로세서 중 하나를 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  11. 제 9 항에 있어서,
    상기 하나 이상의 종속 오브젝트들은 종속 파일, 종속 라이브러리, 공유 라이브러리, 및 하나 이상의 사이즈-제약된 블록들 중 하나 이상을 포함하고, 상기 파일들 및 블록들의 콘텐츠들은, 론칭되고 있는 특정 애플리케이션에 의해 요구되는, 바이너리, 텍스트, 바이트코드, 중간 프로그램 표현들, HTML, XML, 임의의 종류의 소프트웨어 코드, 임의의 포맷의 데이터 등일 수 있는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  12. 제 8 항에 있어서,
    상기 메타데이터는 상기 하나 이상의 종속 오브젝트들을 압축해제하기 위한 순서를 결정하기 위한 설치된 경로들 및 파일명칭들 및 우선순위 값의 리스트를 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  13. 제 8 항에 있어서,
    상기 플래시 메모리 디바이스는 NAND 플래시를 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  14. 제 8 항에 있어서,
    압축해제된 상기 애플리케이션의 실행 동안, 하나 이상의 추가적인 종속 오브젝트들을 결정하는 수단; 및
    상기 하나 이상의 추가적인 종속 오브젝트들로 상기 저장된 메타데이터를 업데이트하는 수단을 더 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  15. 제 8 항에 있어서,
    상기 저장된 메타데이터에 기초하여 상기 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링하는 수단은, 상기 하나 이상의 종속 오브젝트들과 연관된 종속성들을 동적 링커가 해소하기 전에 상기 하나 이상의 종속 오브젝트들의 압축해제를 스케줄링하는 수단을 포함하는, 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  16. 플래시 스토리지에서 압축된 애플리케이션의 압축해제를 스케줄링하기 위해 프로세서에 의해 실행가능하고 메모리에 포함된 컴퓨터 프로그램으로서,
    상기 컴퓨터 프로그램은,
    플래시 메모리 디바이스 상에서 설치된 압축된 애플리케이션에 대한 메타데이터를 생성하는 것으로서, 상기 메타데이터는 상기 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들을 정의하는, 상기 메타데이터를 생성하는 것을 행하고;
    상기 메타데이터를 메모리에 저장하며; 그리고
    상기 압축된 애플리케이션의 론치에 응답하여,
    론칭될 상기 압축된 애플리케이션과 연관된 상기 하나 이상의 종속 오브젝트들을 저장된 상기 메타데이터로부터 결정하고; 그리고
    상기 저장된 메타데이터에 기초하여 상기 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링하도록
    구성된 로직을 포함하는, 컴퓨터 프로그램.
  17. 제 16 항에 있어서,
    애플리케이션 론처가 상기 종속 오브젝트들을 로딩하기 전에 상기 하나 이상의 종속 오브젝트들을 압축해제하도록 구성된 로직을 더 포함하는, 컴퓨터 프로그램.
  18. 제 16 항에 있어서,
    상기 하나 이상의 종속 오브젝트들은 종속 파일, 종속 라이브러리, 공유 라이브러리, 및 하나 이상의 사이즈-제약된 블록들 중 하나 이상을 포함하고, 상기 파일들 및 블록들의 콘텐츠들은, 론칭되고 있는 특정 애플리케이션에 의해 요구되는, 바이너리, 텍스트, 바이트코드, 중간 프로그램 표현들, HTML, XML, 임의의 종류의 소프트웨어 코드, 임의의 포맷의 데이터 등일 수 있는, 컴퓨터 프로그램.
  19. 제 16 항에 있어서,
    상기 메타데이터는 상기 하나 이상의 종속 오브젝트들을 압축해제하기 위한 순서를 결정하기 위한 설치된 경로들 및 파일명칭들 및 우선순위 값의 리스트를 포함하는, 컴퓨터 프로그램.
  20. 제 16 항에 있어서,
    상기 플래시 메모리 디바이스는 NAND 플래시를 포함하는, 컴퓨터 프로그램.
  21. 제 16 항에 있어서,
    압축해제된 상기 애플리케이션의 실행 동안, 하나 이상의 추가적인 종속 오브젝트들을 결정하고; 그리고
    상기 하나 이상의 추가적인 종속 오브젝트들로 상기 저장된 메타데이터를 업데이트하도록
    구성된 로직을 더 포함하는, 컴퓨터 프로그램.
  22. 제 16 항에 있어서,
    상기 저장된 메타데이터에 기초하여 상기 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링하도록 구성된 로직은, 상기 하나 이상의 종속 오브젝트들과 연관된 종속성들을 동적 링커가 해소하기 전에 상기 하나 이상의 종속 오브젝트들의 압축해제를 스케줄링하도록 구성된 로직을 포함하는, 컴퓨터 프로그램.
  23. 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템으로서, 상기 시스템은,
    플래시 메모리 디바이스; 및
    애플리케이션 설치자 컴포넌트가 상기 플래시 메모리 디바이스에 압축된 애플리케이션을 설치하는 것에 응답하여, 상기 압축된 애플리케이션과 연관된 하나 이상의 종속 오브젝트들을 정의하는 메타데이터를 생성하고 저장하며;
    애플리케이션 론처 컴포넌트에 의한 상기 압축된 애플리케이션의 론치에 응답하여, 론칭될 상기 압축된 애플리케이션과 연관된 상기 하나 이상의 종속 오브젝트들을 저장된 상기 메타데이터로부터 결정하고; 그리고
    상기 저장된 메타데이터에 기초하여 상기 하나 이상의 종속 오브젝트들의 압축해제를 선제적으로 스케줄링하도록
    구성된 로직을 포함하는 선제적 압축해제 스케줄러 컴포넌트를 포함하는, 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  24. 제 23 항에 있어서,
    애플리케이션 론처가 상기 종속 오브젝트들을 로딩하기 전에 상기 하나 이상의 종속 오브젝트들을 압축해제하도록 구성된 압축/압축해제 컴포넌트를 더 포함하는, 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  25. 제 24 항에 있어서,
    상기 하나 이상의 종속 오브젝트들은 종속 파일, 종속 라이브러리, 공유 라이브러리, 및 하나 이상의 사이즈-제약된 블록들 중 하나 이상을 포함하는, 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  26. 제 23 항에 있어서,
    상기 메타데이터는 상기 하나 이상의 종속 오브젝트들을 압축해제하기 위한 순서를 결정하기 위한 설치된 경로들 및 파일명칭들 및 우선순위 값의 리스트를 포함하는, 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  27. 제 23 항에 있어서,
    상기 플래시 메모리 디바이스는 NAND 플래시를 포함하는, 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  28. 제 23 항에 있어서,
    압축해제된 상기 애플리케이션의 실행 동안, 하나 이상의 추가적인 종속 오브젝트들을 결정하고; 그리고
    상기 하나 이상의 추가적인 종속 오브젝트들로 상기 저장된 메타데이터를 업데이트하도록
    구성된 동적 메타데이터 생성 모듈을 더 포함하는, 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  29. 제 23 항에 있어서,
    상기 선제적 압축해제 스케줄러 컴포넌트는, 상기 하나 이상의 종속 오브젝트들과 연관된 종속성들을 동적 링커가 해소하기 전에 상기 하나 이상의 종속 오브젝트들의 압축해제를 스케줄링하도록 구성되는, 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
  30. 제 23 항에 있어서,
    상기 선제적 압축해제 스케줄러 컴포넌트는, 상기 플래시 메모리 디바이스에 전기적으로 커플링된 시스템 온 칩 (SoC) 상에 존재하는, 플래시 스토리지로부터의 애플리케이션의 압축해제를 스케줄링하기 위한 시스템.
KR1020187036789A 2016-06-23 2017-05-26 Nand 스토리지 디바이스에 대한 선제적 압축해제 스케줄링 KR20190020677A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/191,400 2016-06-23
US15/191,400 US10817224B2 (en) 2016-06-23 2016-06-23 Preemptive decompression scheduling for a NAND storage device
PCT/US2017/034858 WO2017222752A1 (en) 2016-06-23 2017-05-26 Preemptive decompression scheduling for a nand storage device

Publications (1)

Publication Number Publication Date
KR20190020677A true KR20190020677A (ko) 2019-03-04

Family

ID=59054238

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187036789A KR20190020677A (ko) 2016-06-23 2017-05-26 Nand 스토리지 디바이스에 대한 선제적 압축해제 스케줄링

Country Status (7)

Country Link
US (1) US10817224B2 (ko)
EP (1) EP3475814A1 (ko)
JP (1) JP2019523480A (ko)
KR (1) KR20190020677A (ko)
CN (1) CN109313562A (ko)
BR (1) BR112018076211A2 (ko)
WO (1) WO2017222752A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11340914B2 (en) * 2020-10-21 2022-05-24 Red Hat, Inc. Run-time identification of dependencies during dynamic linking
FR3118513B1 (fr) * 2020-12-29 2023-04-07 Stmicroelectronics Grand Ouest Sas Procédé d’augmentation du nombre d’applications dans un dispositif à mémoire limitée
CN112732365B (zh) * 2021-01-28 2024-07-12 北京字跳网络技术有限公司 预装应用程序启动方法、装置、电子设备及存储介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6003115A (en) * 1997-07-29 1999-12-14 Quarterdeck Corporation Method and apparatus for predictive loading of a cache
US6195024B1 (en) * 1998-12-11 2001-02-27 Realtime Data, Llc Content independent data compression method and system
US6748457B2 (en) * 2000-02-03 2004-06-08 Realtime Data, Llc Data storewidth accelerator
US6510499B1 (en) * 2000-06-22 2003-01-21 International Business Machines Corporation Method, apparatus, and article of manufacture for providing access to data stored in compressed files
US6918106B1 (en) * 2000-07-31 2005-07-12 Sun Microsystems, Inc. Method and apparatus for collocating dynamically loaded program files
FR2825810A1 (fr) 2001-06-06 2002-12-13 Koninkl Philips Electronics Nv Dispositif electronique a processeur pipeline utilisant un compactage de code et procede de gestion d'un tel processeur
JP4806888B2 (ja) 2002-07-19 2011-11-02 ソニー株式会社 復号化装置及び復号化方法
US20050013181A1 (en) 2003-07-17 2005-01-20 Adelmann Todd C. Assisted memory device with integrated cache
JP4180547B2 (ja) * 2004-07-27 2008-11-12 富士通株式会社 動画像データ復号装置、および復号プログラム
US7831894B2 (en) 2006-10-10 2010-11-09 Broadcom Corporation Address generation for contention-free memory mappings of turbo codes with ARP (almost regular permutation) interleaves
US8255631B2 (en) * 2008-02-01 2012-08-28 International Business Machines Corporation Priority-based prefetch requests scheduling and throttling
CN101848549B (zh) * 2010-04-29 2012-06-20 中国人民解放军国防科学技术大学 无线传感器网络节点任务调度方法
US10002021B2 (en) * 2012-07-20 2018-06-19 Qualcomm Incorporated Deferred preemption techniques for scheduling graphics processing unit command streams
US9582204B2 (en) * 2014-01-07 2017-02-28 Apple Inc. Speculative prefetching of data stored in flash memory
US10671545B2 (en) 2014-06-28 2020-06-02 Vmware, Inc. Asynchronous encryption and decryption of virtual machine memory for live migration

Also Published As

Publication number Publication date
BR112018076211A2 (pt) 2019-03-26
CN109313562A (zh) 2019-02-05
US10817224B2 (en) 2020-10-27
EP3475814A1 (en) 2019-05-01
WO2017222752A1 (en) 2017-12-28
US20170371595A1 (en) 2017-12-28
JP2019523480A (ja) 2019-08-22

Similar Documents

Publication Publication Date Title
CN102231117B (zh) 一种在嵌入式平台安装软件的方法和系统
US8739147B2 (en) Class isolation to minimize memory usage in a device
EP1926022B1 (en) Apparatus and method for efficient memory use in portable terminal
EP3267308B1 (en) Application loading method and device
US20170124345A1 (en) Reducing Resource Consumption Associated with Storage and Operation of Containers
CN105074666A (zh) 执行在具有不同指令集架构的处理器上的操作系统
CN104182255A (zh) 一种系统应用的库文件升级方法及终端
JP2003157170A (ja) プログラムバイナリをデコードおよび実行する方法
CN104375849A (zh) 加载内核的方法及装置
KR101759801B1 (ko) 소프트웨어 애플리케이션 전달 및 개시 시스템
CN102750174A (zh) 文件加载方法及装置
US20210200668A1 (en) Reserved memory in memory management system
US20150261686A1 (en) Systems and methods for supporting demand paging for subsystems in a portable computing environment with restricted memory resources
US8918776B2 (en) Self-adapting software system
JP2004530201A (ja) 組込み環境においてアプリケーションをロードして実行するための方法
KR20190020677A (ko) Nand 스토리지 디바이스에 대한 선제적 압축해제 스케줄링
US20160378452A1 (en) Policy-Based Compression of Machine Code Generated by a Virtual Machine
CN102667714A (zh) 支持访问由操作系统环境外的资源提供的功能的方法和系统
JP2009528608A (ja) ライブラリ中の特定の関数をアウトライン化することによるコードサイズ削減
KR101036675B1 (ko) Efi 기반 펌웨어에서의 프리 efi 초기화 모듈의 전역변수 사용법
CN104050001A (zh) 基于Android系统的资源处理方法、装置和设备
US7900197B2 (en) Program initiation methods and embedded systems utilizing the same
CN111708548A (zh) 软件安装方法、装置、设备及存储介质
US10552135B1 (en) Reducing a size of an application package
US10474512B1 (en) Inter-process intra-application communications