KR20230132602A - 컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기 - Google Patents

컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기 Download PDF

Info

Publication number
KR20230132602A
KR20230132602A KR1020237029583A KR20237029583A KR20230132602A KR 20230132602 A KR20230132602 A KR 20230132602A KR 1020237029583 A KR1020237029583 A KR 1020237029583A KR 20237029583 A KR20237029583 A KR 20237029583A KR 20230132602 A KR20230132602 A KR 20230132602A
Authority
KR
South Korea
Prior art keywords
application
virtual asset
computing device
patch
segment
Prior art date
Application number
KR1020237029583A
Other languages
English (en)
Other versions
KR102700120B1 (ko
Inventor
야콥 슈나이더
마틴 데이비드 처칠
알레산드로 도비스
Original Assignee
구글 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Publication of KR20230132602A publication Critical patent/KR20230132602A/ko
Application granted granted Critical
Publication of KR102700120B1 publication Critical patent/KR102700120B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/658Incremental updates; Differential updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/654Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

일반적으로, 컴퓨팅 디바이스에 대한 메모리 효율적인 패치를 수행하는 기법이 설명된다. 메모리 및 프로세서를 포함하는 서버 컴퓨팅 디바이스는 상기 기법을 수행하도록 구성될 수 있다. 메모리는 패치되지 않은 애플리케이션을 형성하는 제1 에셋과 패치된 애플리케이션을 형성하는 제2 에셋을 저장할 수 있다. 프로세서는 제1 에셋을 가상화하여 단일 제1 가상 에셋을 획득하고, 제2 에셋을 나타내는 단일 제2 가상 에셋을 획득할 수 있다. 프로세서는 단일 제1 가상 에셋과 단일 제2 가상 에셋 간의 차이에 기초하여, 단일 제2 가상 에셋을 획득하기 위해 단일 제1 가상 에셋을 업데이트하는 방법을 식별하는 패치를 획득할 수 있다. 프로세서는 다음으로 패치를 복수의 세그먼트들로 세그먼트화하고, 사용자 컴퓨팅 디바이스에 의한 개별 적용을 위해 복수의 세그먼트들 중 단일 세그먼트를 사용자 컴퓨팅 디바이스에 출력할 수 있다.

Description

컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기{MEMORY EFFICIENT SOFTWARE PATCHING FOR UPDATING APPLICATIONS ON COMPUTING DEVICES}
소프트웨어 개발자는 애플리케이션의 기능을 향상시키기 위해 하나 이상의 애플리케이션 업데이트 또는 "패치"를 제공할 수 있다. 패치는 컴파일된 소스 코드(실행 코드 또는 바이트 코드와 같은 다양한 추상화일 수 있음), 텍스처, 이미지, 애니메이션, 비디오 파일, 오디오 파일 또는 실행 가능한 코드에 의해 참조되는 임의의 기타 리소스와 같은 하나 이상의 애플리케이션 엘리먼트를 포함할 수 있다. 일부 분산 환경에서, 사용자 컴퓨팅 디바이스(예: 스마트폰)는 애플리케이션 스토어의 실행을 지원하는 원격 서버 컴퓨팅 시스템에 의해 제공되는 패치를 획득하고 설치하기 위해 애플리케이션 스토어 애플리케이션("애플리케이션 스토어"라고도 함)을 사용할 수 있다.
일부 예에서, 사용자가 사용자 컴퓨팅 디바이스에 기존에 설치된 애플리케이션을 선택하여 업데이트 할 때, 사용자 컴퓨팅 디바이스는 모든 애플리케이션 업데이트를 포함하는 소위 "패치"를 다운로드할 수 있다. 이와 같이, "패치"라는 용어는 컴파일된 소스 코드와 컴파일된 소스 코드의 업데이트된 버전 간의 차이를 지칭할 수 있다. 사용자 컴퓨팅 디바이스는 설치된 애플리케이션의 컴파일된 소스 코드(이진 실행 파일일 수 있음)의 복사본을 만들고, 컴파일된 소스 코드의 복사본에 패치를 설치하여 업데이트된 컴파일된 소스 코드를 얻을 수 있다. 이러한 애플리케이션 업데이트 프로세스는 사용자 컴퓨팅 디바이스에 설치된 애플리케이션의 컴파일된 소스 코드, 패치(압축이 이용되는 경우 패치의 압축된 버전이 패치의 다른 비압축된 버전을 결과로 할 수 있는 압축 해제를 요구하므로 두배) 및 업데이트된 컴파일된 소스 코드를 저장할 수 있는 충분한 저장 공간이 필요할 수 있다.
일반적으로, 본 개시의 기법은 사용자 컴퓨팅 디바이스가 (메모리 소비 측면에서) 패치를 보다 효율적으로 설치할 수 있도록 할 수 있다. 사용자 컴퓨팅 디바이스는 서버 컴퓨팅 디바이스("서버"라고도 함)로부터 패치를 얻을 수 있다. 서버는 패치되지 않은 애플리케이션과 패치된 애플리케이션 간의 차이로서 패치를 생성할 수 있고, 여기서 패치는 패치되지 않은 애플리케이션으로부터 패치된 애플리케이션을 생성하기 위해 데이터를 삭제, 복사 또는 기록할지 여부를 나타내는 일련의 명령을 정의할 수 있다. 패치는 패치된 애플리케이션을 생성하기 위해 작성될 추가 데이터를 포함할 수 있다. 서버는 패치를 전체 패치에 비해 적은 총 바이트 수를 갖는 하나 이상의 세그먼트들로 세그먼트화할 수 있으며, 여기서 각 세그먼트는 패치되지 않은 애플리케이션에 대해 개별적으로 설치될 수 있다. 서버는 하나 이상의 세그먼트들 중 각 세그먼트를 개별적으로 사용자 컴퓨팅 디바이스에 송신할 수 있다.
사용자 컴퓨팅 디바이스는 하나 이상의 세그먼트들 중 각 개별 세그먼트의 형태로 패치를 수신한 다음, 각 개별 세그먼트를 한 번에 하나씩 설치할 수 있다. 각 세그먼트를 설치한 후, 사용자 컴퓨팅 디바이스는 하나 이상의 세그먼트들 중 다음 세그먼트를 요청할 수 있으며, 전체 패치가 패치되지 않은 애플리케이션에 시스템적으로 적용될 때까지 이 프로세스를 반복한다. 서버는 또한 사용자 컴퓨팅 디바이스가 패치되지 않은 애플리케이션의 상이한 에셋을 삭제할 수 있는 시기를 나타내는 추가 메타데이터를 송신할 수 있으며, 이에 따라 패치되지 않은 애플리케이션의 일부를 삭제하면 추가 메모리를 확보할 수 있으므로(즉, 가용 메모리 증가), 사용자 컴퓨팅 디바이스가 패치를 적용하는 동안 더 적은 메모리를 소비하게 한다.
따라서, 설명된 기법은 사용자 컴퓨팅 디바이스 및 사용자 컴퓨팅 디바이스 및 서버를 포함하는 컴퓨팅 시스템의 동작을 개선할 수 있다. 패치를 세그먼트로 수신하고 설치함으로써, 설명된 기법은 패치를 설치하기 위해 사용자 컴퓨팅 디바이스에 필요한 스토리지 양을 줄이고, 사용자 컴퓨팅 디바이스 성능을 향상시킬 수 있다(패치하는 것이 시간이 지남에 따라 길어짐에 따른 패치의 적용 중의 프로세싱 처리량을 개선하고, 메모리 대역폭 활용을 포함하는 대역폭 활용을 감소시킴). 또한, 패치의 세그먼트를 패치되지 않은 애플리케이션에 적용하는 동안 패치되지 않은 애플리케이션의 일부의 삭제를 허용하는 것은 메모리 활용을 더욱 감소시켜 사용자 컴퓨팅 디바이스의 성능을 향상시킬 수 있다.
일 예시에서, 기법의 다양한 양태는 방법에 관한 것이며, 상기 방법은: 하나 이상의 프로세서에 의해, 단일 제1 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 표현하는 단일 제2 가상 에셋을 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋과 상기 제2 가상 에셋 간의 차이에 기초하여, 상기 제2 가상 에셋을 획득하기 위해 상기 단일 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 패치를 복수의 세그먼트들로 세그먼트화하는 단계; 및 상기 하나 이상의 프로세서에 의해, 상기 사용자 컴퓨팅 디바이스에 의한 개별 설치를 위해 상기 패치되지 않은 애플리케이션에 대한 상기 복수의 세그먼트들 중 단일 세그먼트를 사용자 컴퓨팅 디바이스에 출력하는 단계를 포함한다.
다른 예시에서, 기법의 다양한 양태는 서버 컴퓨팅 디바이스에 관한 것이며, 상기 서버 컴퓨팅 디바이스는: 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들 및 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 저장하도록 구성된 메모리; 및 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는: 단일 제1 가상 에셋을 획득하기 위해 상기 제1 복수의 에셋들을 가상화하고; 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 표현하는 단일 제2 가상 에셋을 획득하고; 상기 단일 제1 가상 에셋과 상기 단일 제2 가상 에셋 간의 차이에 기초하여, 상기 단일 제2 가상 에셋을 획득하기 위해 상기 단일 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하고; 상기 패치를 복수의 세그먼트들로 세그먼트화하고; 그리고 상기 사용자 컴퓨팅 디바이스에 의한 개별 설치를 위해 상기 패치되지 않은 애플리케이션에 대한 상기 복수의 세그먼트들 중 단일 세그먼트를 사용자 컴퓨팅 디바이스에 출력하도록 구성된다.
다른 예시에서, 기법의 다양한 양태는 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체에 관한 것이며, 상기 명령어는 실행시 하나 이상의 프로세서로 하여금: 단일 제1 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하게 하고; 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 표현하는 단일 제2 가상 에셋을 획득하게 하고; 상기 단일 제1 가상 에셋과 상기 단일 제2 가상 에셋 간의 차이에 기초하여, 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하게 하고; 상기 패치를 복수의 세그먼트들로 세그먼트화하게 하고; 그리고 상기 사용자 컴퓨팅 디바이스에 의한 개별 설치를 위해 상기 패치되지 않은 애플리케이션에 대한 상기 복수의 세그먼트들 중 단일 세그먼트를 사용자 컴퓨팅 디바이스에 출력하게 한다.
다른 예시에서, 기법의 다양한 양태는 방법에 관한 것이며, 상기 방법은: 사용자 컴퓨팅 디바이스의 하나 이상의 프로세서에 의해, 서버 컴퓨팅 디바이스로부터 복수의 세그먼트들 중 단일 세그먼트를 획득하는 단계, 상기 복수의 세그먼트들은 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 표현하며; 상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하는 단계를 포함하며, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함한다.
다른 예시에서, 기법의 다양한 양태는 서버 컴퓨팅 디바이스에 관한 것이며, 상기 사용자 컴퓨팅 디바이스는: 서버 컴퓨팅 디바이스에 의해 제공된 복수의 세그먼트들 중 단일 세그먼트를 저장하도록 구성된 메모리, 상기 복수의 세그먼트들은 패치된 애플리케이션을 표현하는 단일 제2 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 표현하며; 그리고 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는: 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하고; 그리고 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하며, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함한다.
다른 예시에서, 기법의 다양한 양태는 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체에 관한 것이며, 상기 명령어는 실행시 사용자 컴퓨팅 디바이스의 하나 이상의 프로세서로 하여금: 서버 컴퓨팅 디바이스로부터 복수의 세그먼트들 중 단일 세그먼트를 획득하게 하고, 상기 복수의 세그먼트들은 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 표현하며; 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하게 하고; 그리고 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하게 하며, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함한다.
다른 예시에서, 기법의 다양한 양태는 방법에 관한 것이며, 상기 방법은: 하나 이상의 프로세서에 의해, 단일 제1 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 단일 제2 가상 에셋을 획득하기 위해 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋과 상기 제2 가상 에셋 간의 차이에 기초하여, 상기 제2 가상 에셋을 획득하기 위해 상기 단일 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 패치를 획득하는 동안, 사용자 컴퓨팅 디바이스가 상기 단일 제1 가상 에셋의 일부를 삭제할 수 있는 때를 나타내는 메타데이터를 생성하는 단계; 및 상기 하나 이상의 프로세서에 의해, 상기 패치 및 상기 메타데이터를 상기 사용자 컴퓨팅 디바이스에 출력하는 단계를 포함한다.
다른 예시에서, 기법의 다양한 양태는 서버 컴퓨팅 디바이스에 관한 것이며, 상기 서버 컴퓨팅 디바이스는: 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들 및 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 저장하도록 구성된 메모리; 및 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는: 단일 제1 가상 에셋을 획득하기 위해 상기 제1 복수의 에셋들을 가상화하고; 단일 제2 가상 에셋을 획득하기 위해 상기 제2 복수의 에셋들을 가상화하고; 상기 단일 제1 가상 에셋과 상기 단일 제2 가상 에셋 간의 차이에 기초하여, 상기 단일 제2 가상 에셋을 획득하기 위해 상기 단일 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하고; 상기 패치를 획득하는 동안, 사용자 컴퓨팅 디바이스가 상기 단일 제1 가상 에셋의 일부를 삭제할 수 있는 때를 나타내는 메타데이터를 생성하고; 그리고 상기 패치 및 상기 메타데이터를 상기 사용자 컴퓨팅 디바이스에 출력하도록 구성된다.
다른 예시에서, 기법의 다양한 양태는 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체에 관한 것이며, 상기 명령어는 실행시 하나 이상의 프로세서로 하여금: 단일 제1 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하게 하고; 단일 제2 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 복수의 에셋들을 가상화하게 하고; 상기 단일 제1 가상 에셋과 상기 단일 제2 가상 에셋 간의 차이에 기초하여, 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하게 하고; 상기 패치를 획득하는 동안, 사용자 컴퓨팅 디바이스가 상기 단일 제1 가상 에셋의 일부를 삭제할 수 있는 때를 나타내는 메타데이터를 생성하게 하고; 그리고 상기 패치 및 상기 메타데이터를 상기 사용자 컴퓨팅 디바이스에 출력하게 하도록 구성된다.
다른 예시에서, 기법의 다양한 양태는 방법에 관한 것이며, 상기 방법은: 사용자 컴퓨팅 디바이스의 하나 이상의 프로세서에 의해, 서버 컴퓨팅 디바이스로부터, 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 사용자 컴퓨팅 디바이스가 상기 단일 제1 가상 에셋의 일부를 삭제할 수 있는 때를 나타내는 메타데이터를 상기 서버 컴퓨팅 디바이스로부터 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 단일 제2 가상 에셋을 구성하기 위해 상기 패치를 상기 단일 제1 가상 에셋에 적용하는 단계, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함하며; 및 상기 패치의 적용 동안, 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계를 포함한다.
다른 예시에서, 기법의 다양한 양태는 서버 컴퓨팅 디바이스에 관한 것이며, 상기 사용자 컴퓨팅 디바이스는: 패치된 애플리케이션을 표현하는 단일 제2 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 저장하도록 구성된 메모리; 그리고 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는: 단일 제2 가상 에셋을 구성하기 위해 상기 패치를 상기 단일 제1 가상 에셋에 적용하고, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함하며; 그리고 상기 패치의 적용 동안, 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하도록 구성된다.
다른 예시에서, 기법의 다양한 양태는 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체에 관한 것이며, 상기 명령어는 실행시 사용자 컴퓨팅 디바이스의 하나 이상의 프로세서로 하여금: 서버 컴퓨팅 디바이스로부터, 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 획득하게 하고; 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하게 하고; 그리고 단일 제2 가상 에셋을 구성하기 위해 상기 패치를 상기 단일 제1 가상 에셋에 적용하고, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함하며; 그리고 상기 패치의 적용 동안, 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하도록 구성된다.
하나 이상의 예시들의 세부 사항은 첨부 도면과 아래의 설명에서 기술된다. 본 개시의 다른 구성, 오브젝트 및 이점은 설명, 도면 및 청구항으로부터 명백해질 것이다.
도 1은 본 개시에 설명된 세그먼트화된 애플리케이션 업데이트 기법의 다양한 양태를 수행하도록 구성된 예시적 컴퓨팅 시스템을 도시하는 개념도이다.
도 2는 본 개시에 설명된 효율적인 패칭 기법의 다양한 양태를 수행하도록 구성된 예시적 애플리케이션 제공자 서버를 도시하는 블록도이다.
도 3은 본 발명의 하나 이상의 양태에 따라, 하나 이상의 패치를 다운로드하고 설치하도록 구성된 예시적 컴퓨팅 디바이스를 도시하는 블록도이다.
도 4는 본 발명에 설명된 기법의 다양한 양태에 따라 도 1의 시스템에 의해 생성된 예시적 가상 에셋을 도시하는 블록도이다.
도 5a 및 5b는 본 개시에서 설명된 메모리 효율적 패칭 기법에 따라 도 3의 예에 도시된 컴퓨팅 디바이스의 패치를 제공하는 것에서 도 2의 예에 도시된 애플리케이션 제공자 서버의 예시적 동작을 도시하는 흐름도이다.
도 6은 본 개시에서 설명된 메모리 효율적 패칭 기법에 따라 도 3의 예에서 도시된 컴퓨팅 디바이스에 패치를 제공하는 것에서 도 2의 예에 도시된 애플리케이션 제공자 서버의 예시적 동작을 도시하는 다른 흐름도이다.
도 1은 컴퓨팅 디바이스가 본 개시에 설명된 메모리 효율적인 패칭 기법의 다양한 양태를 수행할 수 있는 예시적 컴퓨팅 시스템을 도시하는 개념도이다. 도 1에 도시된 바와 같이, 컴퓨팅 시스템(100)은 컴퓨팅 디바이스(102) 및 애플리케이션 제공자 서버(104)를 포함할 수 있다. 컴퓨팅 디바이스(102)는 애플리케이션(130A)과 같은 애플리케이션을 실행할 수 있는 임의의 유형의 디바이스를 나타낼 수 있고, 그러한 애플리케이션에 대한 소프트웨어 패치("패치"라고도 지칭될 수 있음)의 적용을 지원할 수 있다. 예를 들어, 컴퓨팅 디바이스(102)는 휴대 전화 또는 핸드셋(소위 "스마트 전화"포함), 스트리밍 미디어 디바이스(텔레비전 포트에 직접 삽입되는 것 포함), 전용 게임 시스템, 휴대용 게임 시스템, 스트리밍 게임 시스템, 텔레비전(소위 "스마트 TV"포함), 무선 스피커, 스마트 허브, 시계(소위 "스마트 시계"포함), 스마트 글래스, 스마트 링 또는 기타 웨어러블 디바이스, 확장 현실 디바이스(예: 가상 현실 - VR - 디바이스, 증강 현실 - AR - 디바이스 등), 디지털 비디오 디스크(DVD) 플레이어, Blueray™플레이어, 랩톱 컴퓨터, 데스크톱 컴퓨터, 워크스테이션 또는 애플리케이션을 실행할 수 있는 기타 디바이스를 표현할 수 있다.
도 1에 도시된 바와 같이, 컴퓨팅 디바이스(102)는 사용자 인터페이스 컴포넌트(UIC)(144), UI 모듈(146), 애플리케이션 인스톨러(148)를 포함하고, 애플리케이션(130A)에 대한 패치를 수신하기 전의 애플리케이션(130A)을 포함한다. 컴퓨팅 디바이스(102)의 UIC(144)는 컴퓨팅 디바이스(102)의 입력 및/또는 출력 디바이스로서 기능할 수 있다. UIC(144)는 다양한 기술들을 사용하여 구현될 수 있다. 예를 들어, UIC(144)는 저항성 터치스크린, 표면 어코스틱 웨이브 터치스크린, 용량성 터치스크린, 투영 정전 터치스크린, 압력 감응형 스크린, 어코스틱 펄스 인식 터치스크린과 같은 존재 감응형 입력 스크린 또는 다른 존재-감응형 디스플레이 기술을 사용하여 입력 디바이스로서 기능할 수 있다.
UI 모듈(146)은 UIC(144) 및 컴퓨팅 디바이스(102)의 다른 컴포넌트와의 사용자 인터렉션을 관리할 수 있다. UIC(144) 및 UI 모듈(146)은 사용자가 UIC(144)에 의해 제시된 사용자 인터페이스와 인터렉션할 때 사용자로부터 입력의 하나 이상의 표시(예를 들어, 음성 입력, 제스처 입력 등)를 수신할 수 있다. 패치되지 않은 애플리케이션(130A)은 현재 컴퓨팅 디바이스(102)에 설치된 애플리케이션을 나타낼 수 있다. 도 1의 예는 현재 컴퓨팅 디바이스(102)에 설치된 단일 애플리케이션(130A)을 도시하지만, 임의의 수의 애플리케이션이 컴퓨팅 디바이스(102)에 설치될 수 있으며, 컴퓨팅 디바이스(102)는 컴퓨팅 디바이스(102)에 설치된 단일 애플리케이션만을 갖는 것으로 반드시 제한되지 않음을 이해해야 한다.
애플리케이션 인스톨러(148)는 컴퓨팅 디바이스(102) 상에 패치되지 않은 애플리케이션(130A)을 설치하도록 구성된 모듈 또는 유닛을 나타낼 수 있다. 애플리케이션 인스톨러(148)는 또한 컴퓨팅 디바이스(102)의 사용자가 패치되지 않은 애플리케이션(130A)을 다운로드하기 위해 UIC(144) 및/또는 UI 모듈(146)을 통해 인터렉션할 수 있는 애플리케이션 제공자 서버(104)에 의해 제공되는 인터페이스를 제공할 수 있다. 애플리케이션 인스톨러(148)는 패치되지 않은 애플리케이션(130A)의 다운로드를 준비하기 위해 애플리케이션 제공자 서버(104)와 통신할 수 있으며, 여기서 애플리케이션 인스톨러(148)는 패치되지 않은 애플리케이션(130A)을 수신할 때, 패치되지 않은 애플리케이션(130A)의 압축 해제("언집"으로도 지칭됨), 메모리 관리 등과 같은 패치되지 않은 애플리케이션(130A)을 설치하기 위한 다양한 동작을 수행할 수 있다.
UIC(144), UI 모듈(146), 애플리케이션 인스톨러(148) 및 패치되지 않은 애플리케이션(130A)은 하드웨어 또는 하드웨어와 소프트웨어의 조합 및/또는 컴퓨팅 디바이스(102)에 상주하고 및/또는 컴퓨팅 디바이스(102)에서 실행되는 펌웨어를 사용하여 본 명세서에 기술된 동작을 수행할 수 있다. 컴퓨팅 디바이스(102)는 다수의 프로세서들 또는 다수의 디바이스들로 UI 모듈(146), 애플리케이션 인스톨러(148) 및 패치되지 않은 애플리케이션(130A)을 실행할 수 있다. 일부 예시에서, 컴퓨팅 디바이스(102)는 UI 모듈(146) 및/또는 애플리케이션 인스톨러(148)를 기본 하드웨어에서 실행되는 가상 머신들로서 실행할 수 있다. UI 모듈(146) 및/또는 애플리케이션 인스톨러(148)는 운영 체제 또는 컴퓨팅 플랫폼의 하나 이상의 서비스로서 또는 컴퓨팅 플랫폼의 애플리케이션 레이어에서 하나 이상의 실행가능한 프로그램들로서 실행될 수 있다.
애플리케이션(130A)은 하나 이상의 에셋(132A-132N)("에셋 132")을 포함할 수 있다. 에셋(132)은 애플리케이션 등의 실행 중에 액세스되는 리소스(예를 들어, 이미지, 텍스처, 파일, 스크립트, 비디오 데이터, 오디오 데이터 등)를 지칭할 수 있다. 패치되지 않은 애플리케이션(130A)의 에셋(132)은 패치되지 않은 애플리케이션(130A)의 명시적인 허가 없이 컴퓨팅 디바이스(102)에 설치된 다른 애플리케이션에 의해 액세스될 수 없음을 이해해야 한다. 따라서, 에셋(132)은 다수의 상이한 애플리케이션에 의해 액세스되는 공유 라이브러리 또는 다른 데이터를 포함하지 않을 수 있다. 마찬가지로, 패치되지 않은 애플리케이션(130A)은 상이한 애플리케이션의 에셋에 액세스할 수 없을 수 있다. 일부 예에서, 컴퓨팅 디바이스(102)는 패치되지 않은 애플리케이션(130A)의 에셋(132)을 다른 애플리케이션으로부터 격리하는 샌드 박스 환경에서 패치되지 않은 애플리케이션(130A)을 실행할 수 있다.
도 1의 예에 더 도시된 바와 같이, 컴퓨팅 디바이스(102)는 네트워크(108)를 통해 애플리케이션 제공자 서버(104)와 통신할 수 있고, 네트워크(108)는 예를 들어, 셀룰러, Wi-Fi 및/또는 컴퓨팅 시스템, 서버 및 컴퓨팅 디바이스들 간 데이터를 전송하기 위한 기타 유형의 네트워크와 같은 임의의 공용 또는 개인용 통신 네트워크를 나타낸다. 네트워크(108)는 하나 이상의 네트워크 허브들, 네트워크 스위치들, 네트워크 라우터들 또는 임의의 기타 네트워크 장치를 포함할 수 있고, 그들은 상호 결합되어 애플리케이션 제공자 서버(104)와 컴퓨팅 디바이스(102) 간의 정보의 교환을 제공한다. 컴퓨팅 디바이스(102)와 애플리케이션 제공자 서버(104)는 임의의 적절한 통신 기법들을 사용하여 네트워크(108)를 통해 데이터를 전송하고 수신할 수 있다. 컴퓨팅 디바이스(102)와 애플리케이션 제공자 서버(104)는 각각의 네트워크 링크들을 사용하여 네트워크(108)에 동작적으로 연결될 수 있다. 컴퓨팅 디바이스(102)와 애플리케이션 제공자 서버(104)를 네트워크(108)에 연결하는 링크는 이더넷 또는 기타 유형의 네트워크 연결일 수 있고, 상기 연결은 무선 및/또는 유선 연결일 수 있다.
애플리케이션 제공자 서버(104)는 네트워크(108)와 같은 네트워크에 그리고 네트워크로부터 정보를 송수신할 수 있는 하나 이상의 데스크톱 컴퓨터, 랩톱 컴퓨터, 메인프레임, 서버 클라우드 컴퓨팅 시스템 등 과 같은 임의의 적절한 원격 컴퓨팅 시스템을 나타낸다. 애플리케이션 제공자 서버(104)는 애플리케이션을 호스팅(또는 적어도 액세스를 제공)하고, 상기 언급된 인터페이스(예를 들어, 단순화를 위해 도 1의 예에 도시되지 않은 애플리케이션 스토어)를 제시하며, 그에 의해 컴퓨팅 디바이스(102)는 네트워크(108)를 통해 컴퓨팅 디바이스(102)로 다운로드하기 위해 애플리케이션에 액세스할 수 있다.
애플리케이션 제공자 서버(104)는 애플리케이션 제공자 서버(104)에 상주하는 및/또는 실행되는 하드웨어 또는 하드웨어, 소프트웨어 및 펌웨어의 조합을 사용하여 본 명세서에 기술된 동작들을 수행할 수 있다. 애플리케이션 제공자 서버(104)는 다중 프로세서 또는 다중 디바이스를 사용하여 본 명세서에 기술된 다양한 동작을 수행할 수 있다. 애플리케이션 제공자 서버(104)는 또한 기본 하드웨어에서 실행되는 가상 머신으로서 아래에서 더 상세히 설명되는 다양한 모듈 또는 유닛을 실행할 수 있다. 일부 예시에서, 애플리케이션 제공자 서버(104)는 인터페이스를 실행할 수 있고, 상기 인터페이스에 의해 운영 체제 또는 컴퓨팅 플랫폼의 하나 이상의 서비스로서 또는 컴퓨팅 플랫폼의 애플리케이션 레이어에서 하나 이상의 실행가능한 프로그램들로서의 애플리케이션에 엑세스할 수 있다.
애플리케이션 제공자 서버(104)는 패치되지 않은 애플리케이션(110A)에 대한 패치(117)를 생성할 수 있는 패치 생성 유닛(116)을 포함할 수 있다. 패치 생성 유닛(116)은 제네릭 차이(generic diff)("Gdiff"), bsdiff 등과 같은 패치(117)를 생성하기 위해 다양한 패치 알고리즘을 실행할 수 있으며, 이는 패치(117)를 형성하기 위해 패치되지 않은 애플리케이션(110A)과 패치된 애플리케이션(110B) 간의 근본적인 바이너리 차이를 (이와 관련하여 수행되는 다른 동작과 함께) 생성하고 잠재적으로 압축할 수 있다.
즉, 패치되지 않은 애플리케이션(110A) 및 패치된 애플리케이션(110B) 각각은 다양한 동작을 수행하기 위해 프로세서(또는 다른 하드웨어)를 구성하거나 다른 방식으로 프로그래밍하는 컴파일된 소스 코드(즉, 실행 가능한 바이너리 코드 또는 바이트 코드와 같은 일부 파생물)를 나타낼 수 있다. 패치 생성 유닛(116)은 패치되지 않은 애플리케이션(110A)과 패치된 애플리케이션(110B) 사이의 차이를 결정하도록 구성된 유닛을 나타낼 수 있고, 패치되지 않은 애플리케이션(110A)을 패치된 애플리케이션(110B)으로 업데이트하기 위한 명령들(121)의 리스트 및 차이(123)("diff(123)")를 출력할 수 있고, 명령들(121)의 리스트 및 차이(123) 둘 모두는 패치(117)를 형성한다. 명령(121)은 하나 이상의 삭제 동작, 하나 이상의 복사 동작 및/또는 하나 이상의 쓰기 동작(또는 이들의 임의의 조합)을 식별할 수 있으며, 컴퓨팅 디바이스(102)에 패치되지 않은 애플리케이션(130A)을 조작하여 패치된 애플리케이션(130B)을 생성하는 방법을 지시한다(여기서, 패치되지 않은 애플리케이션(130A)은 패치되지 않은 애플리케이션(110A)의 다른 인스턴스를 나타낼 수 있고, 패치된 애플리케이션(130B)은 패치된 애플리케이션(110B)의 다른 인스턴스를 나타낼 수 있다).
패치(117)를 생성할 때, 애플리케이션 제공자 서버(104)는 컴퓨팅 디바이스(102)에 의해 실행되는 앱 인스톨러(148)와 인터페이싱하여 패치(117)가 다운로드 가능함을 표시할 수 있다. 앱 인스톨러(148)는 일부 경우에, 패치(117)가 사용 가능하다는 표시, 패치되지 않은 애플리케이션(130A)에 대한 패치(117)가 다운로드 및 설치에 사용 가능하다는 알림 또는 다른 표시에 응답하여 생성할 수 있다. 컴퓨팅 디바이스(102)의 사용자는 이 경우에 UIC(144) 및/또는 UI 모듈(146)을 통해 앱 인스톨러(148)와 인터페이스하여 패치(117)의 다운로드 및 설치를 개시할 수 있다. 다른 경우에, 앱 인스톨러(148)는 패치(117)가 사용 가능하다는 표시에 응답하여 패치(117)를 자동으로 다운로드하고 설치할 수 있다. 사용자는 자동 패치가 시스템 설정 또는 애플리케이션 별로 활성화되도록 지정할 수 있고, 자동 패치가 가능한 시간 및/또는 요일을 식별한다.
그럼에도 불구하고, 컴퓨팅 디바이스(102)는 애플리케이션 제공자 서버(104)로부터 패치(117)를 얻고, 패치되지 않은 애플리케이션(130A)에 패치(117)를 설치하여 패치된 애플리케이션(130B)을 생성할 수 있다. 이러한 방식으로 패치를 적용하면, 애플리케이션(110A/130A)의 개발자는 추가 기능을 추가하고, 소프트웨어 오류("소프트웨어 버그"라고 함)를 수정하고, 악성 공격을 방지하고, 그래픽 기능이나 기타 기능을 업데이트하는 등의 작업을 완전히 새로운 애플리케이션(크고 따라서 상당한 대역폭을 소비할 수 있음 - 네트워크(108)의 대역폭 및 컴퓨팅 디바이스(102)의 메모리 및/또는 저장 대역폭, 컴퓨팅 디바이스(102)의 프로세서 사이클 등)을 다운로드할 필요없이 수행할 수 있다.
패치는 일반적으로 애플리케이션(110A/130A)의 동작을 개선하여 컴퓨팅 디바이스(102)의 동작을 개선할 수 있지만, 패치(117)는 여전히 특정 경우에 클 수 있다(예를 들어, 수 기가 바이트에서 수십 기가 바이트, 수 메가 바이트 - 예: 수백 메가 바이트 등). 예를 들어, 개발자는 패치되지 않은 애플리케이션(에셋(132)의 인스턴스를 지칭)의 에셋(112A-112N)("에셋 112")을 업데이트하여, 그래픽 충실도를 개선하고, 텍스처를 업데이트하고, 비디오 데이터 및/또는 오디오 데이터를 추가 또는 제거하거나, 패치되지 않은 애플리케이션(110A)의 사용자 경험을 개선하는 다른 예시적 업데이트를 수행할 수 있다. 이와 같이, 패치된 애플리케이션(110B)은 에셋들(122) 중 하나 이상이 에셋(112)(일부 경우에 에셋(122) 중 하나 이상이 에셋(112)와 동일)과 상이할 수 있는 상이한 에셋들의 세트(122A-122N)("에셋 122")를 포함할 수 있다. 이 예에서, 패치 생성 유닛(116)은 패치되지 않은 애플리케이션(110A)과 패치된 애플리케이션(110B)의 컴파일된 소스 코드 사이에 큰 차이가 없다고 판단할 수 있지만, 에셋들(112)의 에셋을 대체하거나 추가하는 에셋을 포함하는 에셋들(122)을 주로 포함하는 에셋들(112 및 122) 사이에 차이가 있다는 것에 주목하며, 이는 diff(123)가 된다.
일부 예에서, 패치 프로세스로 인해, 컴퓨팅 디바이스(102)는 패치되지 않은 애플리케이션(130A), 패치된 애플리케이션(130B) 및 패치(117)를 저장하기에 불충분한 저장 공간(예를 들어, 메모리 및/또는 저장 공간)을 가질 수 있다. 다시 말하면, 패치(117)를 적용하기 위해, 컴퓨팅 디바이스(102)는 패치(117)를 전체적으로 다운로드하고 패치되지 않은 애플리케이션(130A)을 전체적으로 저장하면서 패치된 애플리케이션(130B)을 위한 메모리 및/또는 스토리지에 가용 공간을 예약할 수 있다. 컴퓨팅 디바이스(102)는 패치(117)의 명령(121)을 통해 반복할 수 있고, 패치되지 않은 애플리케이션(130A) 및 diff(123)로부터 패치된 애플리케이션(130B)을 구성하기 위해 상기 동작 중 하나 이상을 수행할 수 있다. 기법의 다양한 양태가 에셋과 관련하여 설명되지만, 기법은 컴파일된 소스 코드 또는 본 개시에서 상세하게 설명되지 않은 다른 유형의 파일, 리소스 및/또는 데이터와 관련하여 구현될 수 있다.
메모리 및/또는 스토리지가 제한된 컴퓨팅 디바이스가 이 프로세스에 의해 어떻게 영향을 받을 수 있는지를 설명하기 위해, 컴퓨팅 디바이스(102)가 1.4GB의 가용 메모리만 가지고 있고, 1GB 크기의 패치되지 않은 애플리케이션(130A)에 크기가 400MB인 패치(117)를 설치하여 1.2GB 크기의 패치된 애플리케이션(130B)가 된다고 가정한다. 이 예시에서, 컴퓨팅 디바이스(102)는 1.4GB의 가용 메모리 중 400MB를 소비하는 패치(117)를 다운로드하여 단지 1GB의 가용 메모리를 가질 수 있다. 컴퓨팅 디바이스(102)가 패치된 애플리케이션(130B)을 위해 1.2GB의 메모리를 예약하려고 시도할 때, 컴퓨팅 디바이스(102)의 메모리 관리자(예시의 편의를 위해 도시되지 않음)는 가용 메모리가 부족하여 요청을 거부할 수 있다(1GB의 가용 메모리보다 1.2GB가 더 크기 때문에). 이와 같이, 컴퓨팅 디바이스(102)는 패치되지 않은 애플리케이션(130A)에 패치(117)를 적용하지 못할 수 있다.
패치(117)를 적용할 수 없는 것은 컴퓨팅 디바이스(102)가 패치된 애플리케이션(130B)을 실행할 수 없게 하여 잠재적으로 사용자에게 추가된 기능, 업데이트된 그래픽, 오디오 경험, 비디오 경험 등을 박탈하고 컴퓨팅 디바이스(102)를 보안 취약성에 노출시킬 수 있다. 컴퓨팅 디바이스(102)와 같은 컴퓨팅 디바이스가 계속 발전함에 따라, 이러한 컴퓨팅 디바이스는 점점 더 많은 시간 동안 사용되어 가용 메모리 부족이 종종 적절한 패치 적용에 대한 장벽이 될 수 있다(예: 비디오, 텍스트(문자 메시지, 이메일 등), 이미지(사진 등)의 형태로 대량의 개인 정보를 저장하는 스마트폰의 경우).
본 개시에 설명된 기법의 다양한 양태에 따라, 애플리케이션 제공자 서버(104)는 패치(117)를 다수의 패치 세그먼트들(127A-127N)("세그먼트(127)")로 세그먼트화하고, 세그먼트(127)를 컴퓨팅 디바이스(102)("사용자 컴퓨팅 디바이스"의 일 예를 나타낼 수 있음)에 제공하여, 잠재적으로 컴퓨팅 디바이스(102)가 (메모리 소비 측면에서) 패치를 더 효율적으로 설치할 수 있게 한다. 컴퓨팅 디바이스(102)는 애플리케이션 제공자 서버(104)("서버"로 지칭될 수 있음)로부터 패치(117)를 획득할 수 있다. 애플리케이션 제공자 서버(104)는 패치(117)를 전체적으로 패치(117)보다 더 적은 총 바이트 수를 갖는 하나 이상의 세그먼트(127)로 분할할 수 있으며, 여기서 세그먼트(127) 각각은 패치되지 않은 애플리케이션(110A/130A)에 대해 개별적으로 설치 가능하다. 애플리케이션 제공자 서버(104)는 하나 이상의 세그먼트(127)의 각 세그먼트를 개별적으로 컴퓨팅 디바이스(102)로 전송할 수 있다.
컴퓨팅 디바이스(102)는 하나 이상의 세그먼트(127) 중 각각의 개별 세그먼트의 형태로 패치(117)를 수신할 수 있고, 그 다음 각각의 개별 세그먼트를 한 번에 하나씩 설치할 수 있다(일부 경우에, 두 개 이상의 세그먼트(127)가 diff(123)에서 에셋(122A)의 일부 또는 전체 에셋을 설치할 수 있음). 각 세그먼트를 설치한 후, 컴퓨팅 디바이스(102)는 세그먼트(127)의 다음 세그먼트를 요청할 수 있으며, 전체 패치(117)가 패치되지 않은 애플리케이션(130A)에 체계적으로 적용될 때까지 이 프로세스를 반복한다. 애플리케이션 제공자 서버(104)는 또한 컴퓨팅 디바이스(102)가 패치되지 않은 애플리케이션(130A)의 서로 다른 에셋(132)을 삭제할 수 있는 시기를 나타내는 추가 메타데이터(119)를 송신할 수 있으며, 이에 따라 잠재적으로 컴퓨팅 디바이스(102)가 패치(117)(세그먼트(127)의 반복 적용의 형태)를 적용하는 동안 더 적은 메모리를 소비하게 한다. 패치되지 않는 애플리케이션(130A)의 일부의 삭제는 추가 메모리를 확보할 수 있기 때문이다(즉, 가용 메모리 증가).
동작 중에, 소프트웨어 개발자는 패치된 애플리케이션(110B)을 업로드하기 위해 애플리케이션 제공자 서버(104)와 인터페이싱하고, 애플리케이션 제공자 서버(104)가 패치(117)를 생성하도록 요청할 수 있다. 애플리케이션 제공자 서버(104)가 패치(117)를 생성하라는 요청에 응답하여, 애플리케이션 제공자 서버(104)는 패치 생성 유닛(116)을 호출할 수 있으며, 패치 생성 유닛(116)은 패치되지 않은 애플리케이션(110A)과 패치된 애플리케이션(110B) 간의 차이에 기초하여 패치(117)를 생성하기 위해 위에서 언급된 하나 이상의 패치 알고리즘을 실행할 수 있다.
패치 알고리즘이 파일에 걸쳐가 아니라 파일 단위로 diff를 수행할 수 있으므로, 패치 생성 유닛(116)은 모든 에셋(112)을 포함하는 패치되지 않은 애플리케이션(110A)을 단일 가상 에셋(114)으로 가상화할 수 있다. 패치 생성 유닛(116)은 에셋(112)을 포함하여 패치되지 않은 애플리케이션(110A)이 단일 가상 에셋(114A)으로서 저장되는 폴더 및 서브 폴더를 갖는 다중 계층 메모리 및/또는 스토리지 파일 계층을 제공하는 가상화 알고리즘을 실행할 수 있다. 패치 생성 유닛(116)은 또한 에셋(122)을 포함하는 패치된 애플리케이션(110B)을 가상화하여 에셋(122)을 포함하여 패치되지 않은 애플리케이션(110B)이 단일 가상 에셋(114B)으로서 저장되는 폴더 및 서브 폴더를 갖는 다중 계층 메모리 및/또는 스토리지 파일 계층을 제공할 수 있다. 패치 생성 유닛(116)은 패치(117)의 명령(121) 및 diff(123)을 생성하기 위해 단일 가상 에셋(114B)에 대한 패치 알고리즘을 실행할 수 있으며, 여기서 명령(121)은 diff(123)에 부분적으로 기초하여 패치된 애플리케이션(110B)을 생성할 패치되지 않은 애플리케이션(110A)에 대해 수행할 동작을 식별한다.
가상화를 수행하는 것으로 설명되었지만, 패치 생성 유닛(116)은 서버(104)가 에셋을 아카이브(가상화된 에셋을 지칭하는 또 다른 방법)로서 수신할 수 있는 경우에 가상화를 수행하지 않을 수 있다. 대안적으로, 서버(104)는 개발자에 의해 업로드될 때 에셋(122)을 가상화하고 그 후에 가상화된 에셋을 가상 에셋(114B)으로서 저장할 수 있다.
패치 생성 유닛(116)은 패치(117)를 출력할 수 있으며, 이에 따라 애플리케이션 제공자 서버(104)는 전술한 방식으로 컴퓨팅 디바이스(102)에 패치(117)를 알리기 위해 인터페이싱할 수 있다. 컴퓨팅 디바이스(102)는 상기 언급된 인터페이스를 통해 애플리케이션 제공자 서버(104)로부터 패치(117)를 요청할 수 있으며, 패치(117)를 다운로드 및 설치하기 위해 앱 인스톨러(148)를 호출할 수 있다. 패치(117)에 대한 요청에 응답하여, 애플리케이션 제공자 서버(104)는 패치 세그먼트화 유닛(118)을 호출할 수 있다. 패치 세그먼트화 유닛(118)은 패치(117)를 하나 이상의 패치 세그먼트(127)로 세그먼트화하도록 구성된 모듈 또는 유닛을 나타낼 수 있다. 패치 세그먼트화 유닛(118)은 명령(121)의 일부 서브세트 및 diff(123)의 대응하는 부분이 각각의 세그먼트(127) 내에 완전히 포함되도록 각각의 세그먼트(127)를 생성할 수 있다.
일부 예에서, 패치 세그먼트화 유닛(118)은 세그먼트(127) 중 하나에 포함된 명령들(121) 중 한 명령에 의해 참조되는 diff(123)의 주어진 부분을 모두 저장할 수 없어서, 둘 이상의 세그먼트(127)에 걸쳐 diff(123) 부분의 일부를 단편화한다. 이러한 예에서, 패치 세그먼트화 유닛(118)은 둘 이상의 세그먼트(127)에 걸쳐 diff(123)의 일부를 확산시킬 수 있으며, 이는 컴퓨팅 디바이스(102)가 diff(123)의 전체 부분이 패치된 애플리케이션(130B)에 저장을 위해 이용 가능할 때까지 세그먼트(127)의 특정 세그먼트를 캐싱하게 할 수 있다. 그러나, 다른 경우에, 패치 세그먼트화 유닛(118)은 세그먼트(127) 각각이 컴퓨팅 디바이스(102)에 의해 개별적으로 설치될 수 있도록 세그먼트(127)를 생성할 수 있다.
설명의 편의를 위해, 각각의 세그먼트(127)가 컴퓨팅 디바이스(102)에 의해 개별적으로 설치될 수 있다고 가정하면, 애플리케이션 제공자 서버(104)는 컴퓨팅 디바이스(102)에 각각의 세그먼트(127)를 개별적으로(예를 들어, 한 번에 하나씩) 출력할 수 있다. 컴퓨팅 디바이스(102)는 도 1의 예에 도시된 바와 같이 세그먼트(127A)와 같은 세그먼트를 수신할 수 있고, 상기 세그먼트는 명령(121)의 서브세트(예를 들어, "명령 서브세트(121)"로 지칭될 수 있는 명령(121A-121N)) 및 명령 서브세트(121)에 의해 참조되는 diff 세그먼트의 서브세트(예를 들어, diff 세그먼트(123)으로 참조될 수 있는 "diff 세그먼트(123A-123N)"를 포함한다.
세그먼트(127A)에 수신에 응답하여, 컴퓨팅 디바이스(102)는 세그먼트(127)의 시퀀스로서 반복적인 방식으로 패치(117)를 적용하도록 구성된 유닛을 나타내는 세그먼트화된 패치 적용 유닛(136)을 호출할 수 있다. 세그먼트(127A)를 적용하기 위해, 세그먼트화된 패치 적용 유닛(136)은 가상 에셋(134A)을 생성하기 위해 패치 생성 유닛(116)에 대해 위에서 설명된 것과 유사한 방식으로, 실질적으로 유사하지는 않지만 유사한 방식으로 패치되지 않은 애플리케이션(130A)을 먼저 가상화할 수 있다.
세그먼트화된 패치 적용 유닛(136)은 다음에 패치된 애플리케이션(130B)을 나타내는 가상 에셋(134B)으로부터 에셋(142)을 삭제하고, 가상 에셋(134A)으로부터 가상 에셋(134B)으로 복사하고, 패치된 애플리케이션(130B)을 나타내는 가상 에셋의 하나 이상의 부분을 가상 에셋(134B)에 기록하는 명령(121)을 실행할 수 있다(diff 세그먼트(123)의 형태로). 즉, 명령(121)은 단일 가상 에셋(134B)을 획득하기 위해 단일 가상 에셋(134A)을 업데이트하는 방법을 나타낼 수 있다. 이와 같이, 세그먼트화된 패치 적용 유닛(136)은 단일 세그먼트(127A)를 가상 에셋(134A)에 적용하여 채우거나, 즉 가상 에셋(134B)을 구성할 수 있다.
추가로 또는 대안으로서, 패치 생성 유닛(116)은 패치(117)를 획득하는 동안 컴퓨팅 디바이스(102)가 가상 에셋(134A)의 일부를 삭제할 수 있는 시기를 나타내는 메타데이터(119)를 생성할 수 있다. 패치 생성 유닛(116)은 일련의 하나 이상의 명령어(129A-129N)로서 메타데이터(119)를 생성할 수 있으며, 이들 각각은 에셋들(132) 중 연관된 에셋 또는 패치되지 않은 애플리케이션(130A)의 다른 부분을 식별하는 표시가 뒤따르는 읽기 인덱스를 포함한다. 도 1에서, 명령어(129)는 -1 및 213의 읽기 인덱스 다음에 에셋 이름, 참조 또는 다른 식별자(도 1의 예에서 "ASSET"로 라벨링됨)가 뒤따르는 2개의 예를 포함한다.
패치 생성 유닛(116)은 패치 생성 유닛(116)이 패치되지 않은 애플리케이션(110A)의 각각의 읽기 후에 증가하는 읽기 카운터(139)("RC 139")를 포함할 수 있다. 에셋들(112) 중 하나의 읽기가 발생할 때, 패치 생성 유닛(116)은 에셋들(112) 중 하나에 대한 읽기 인덱스가 읽기 카운터(139)와 동일함을 나타내기 위해 메타데이터(119)를 업데이트할 수 있으며, 읽기 인덱스 이후에 에셋들(112) 중 하나를 식별하는 표시를 지정한다. 패치 생성 유닛(116)은 가상 에셋(114A/134A)에 의해 표현된 바와 같이 각각의 에셋들(112) 또는 패치되지 않은 애플리케이션(110A/130A)의 다른 부분이 삭제될 수 있는(또는, 가용 메모리 및/또는 스토리지로 마크됨) 시기를 표시하기 위해 이러한 방식으로 메타데이터(119)를 체계적으로 생성할 수 있다. 패치 생성 유닛(116)은 메타데이터(119)의 명령어(129)로서 이 읽기 인덱스 및 대응 에셋 식별자를 지정할 수 있다.
패치 생성 유닛(116)은 메타데이터(119)를 패치 세그먼트화 유닛(118)에 제공할 수 있으며, 이는 메타데이터(119)를 컴퓨팅 디바이스(102)로 송신된 제1 세그먼트(예시를 위해 세그먼트(127A)로 가정됨)에 첨부할 수 있다. 애플리케이션 제공자 서버(104)는 메타데이터(119)를 세그먼트(127A)와 함께 컴퓨팅 디바이스(102)에 송신할 수 있다.
컴퓨팅 디바이스(102)는 위에서 언급한 바와 같이 세그먼트(127A)를 처리하기 위해 세그먼트화된 패치 적용 유닛(136)을 호출할 수 있으며, 그에 따라 세그먼트화된 패치 적용 유닛(136)은 세그먼트(127A)로부터 메타데이터(119)를 파싱할 수 있다. 세그먼트화된 패치 적용 유닛(136)은 패치 생성 유닛(116)과 관련하여 위에서 설명된 것과 동일한 방식으로 읽기 카운터(139)를 유지할 수 있다. 메타데이터(119)의 읽기 인덱스가 읽기 카운터(139)와 일치할 때마다, 세그먼트화된 패치 적용 유닛(136)은 대응하는 에셋 식별자(더 일반적으로 패치되지 않은 애플리케이션(130A)의 임의의 부분을 지칭할 수 있음)에 의해 식별된 에셋들(132) 중 하나를 삭제할 수 있다.
일부 예에서, 읽기 인덱스는 음수 값(예: 음수 1(-1))을 가질 수 있으며, 이는 에셋들(132) 중 대응하는 에셋이 읽기 카운터(139)를 참조하지 않고 삭제될 수 있음을 나타낸다(예를 들어, 더 이상 사용되지 않거나 대체되거나 완전히 제거됨). 이러한 예에서, 세그먼트화된 패치 적용 유닛(136)은 초기에 메타데이터(119)를 프로세싱하여 음의 값을 갖는 대응하는 읽기 인덱스를 갖는 애플리케이션 식별자에 의해 식별된 모든 에셋(132)을 사전에 삭제할 수 있다.
세그먼트화된 패치 적용 유닛(136)은 이러한 방식으로 계속하여 세그먼트(127)를 반복적으로 수신하고, 세그먼트들(127) 중 연속적인 세그먼트를 적용하기 전에 세그먼트들(127) 각각을 개별적으로 적용할 수 있다. 일부 예에서, 세그먼트화된 패치 적용 유닛(136)은 세그먼트들(127) 중 이전 세그먼트가 성공적으로 적용되었다는 확인을 제공하기 위해 애플리케이션 제공자 서버(104)와 인터페이싱할 수 있고, 확인을 수신한 후에만 애플리케이션 제공자 서버(104)가 세그먼트들(127) 중 다음 세그먼트를 전송할 수 있어서, 패치(117)의 적용이 성공적으로 완료될 수 있도록 가용 메모리 리소스가 보존되는 것을 잠재적으로 보장한다.
마찬가지로, 세그먼트(127)가 가상 에셋(134A)에 반복적으로 적용될 때 세그먼트화된 패치 적용 유닛(136)은 읽기 카운터(139)를 계속 유지할 수 있다. 세그먼트화된 패치 적용 유닛(136)은 메타데이터(119)의 명령어(129)에 대해 읽기 카운터(139)를 계속 참조할 수 있고, 읽기 카운터(139)가 명령어(129) 중 하나의 읽기 인덱스와 일치할 때마다 에셋들(132) 중 대응하는 에셋을 삭제한다.
따라서, 설명된 기법은 컴퓨팅 디바이스(102) 및 컴퓨팅 디바이스(102) 및 애플리케이션 제공자 서버(104)를 포함하는 컴퓨팅 시스템의 동작을 개선할 수 있다. 세그먼트(127)에 패치(117)를 수신 및 설치함으로써, 설명된 기법은 패치(127)를 설치하기 위해 컴퓨팅 디바이스(102)에 필요한 저장 용량을 줄이고, 컴퓨팅 디바이스(102) 성능을 향상시킬 수 있다(패치하는 것이 시간이 지남에 따라 길어짐에 따라 패치의 적용 중의 프로세싱 처리량을 개선하고, 메모리 대역폭 활용을 포함하는 대역폭 활용을 감소시킴). 또한, 패치(117)의 세그먼트(127)를 패치되지 않은 애플리케이션(130A)에 적용하는 동안 패치되지 않은 애플리케이션(130A)의 일부의 삭제를 허용하는 것은 메모리 사용을 더욱 감소시켜 컴퓨팅 디바이스(102)의 성능을 개선할 수 있다.
도 2는 본 개시에 설명된 효율적인 패칭 기법의 다양한 양태를 수행하도록 구성된 예시적 애플리케이션 제공자 서버를 도시하는 블록도이다. 도 2는 애플리케이션 제공자 서버(204)의 하나의 특정한 예만을 도시하고, 애플리케이션 제공자 서버(204)의 많은 다른 예가 다른 경우에 사용될 수 있다. 다른 예에서, 애플리케이션 제공자 서버(204)는 예시적 애플리케이션 제공자 서버(104)에 포함된 컴포넌트의 서브셋을 포함하거나 또는 도 2에 도시되지 않은 추가 컴포넌트를 포함할 수 있다. 예를 들어, 애플리케이션 제공자 서버(204)는 서버의 클러스터를 포함할 수 있고, 애플리케이션 제공자 서버(204)를 구성하는 서버의 클러스터를 포함하는 각각의 서버는 본 명세서에 개시된 기법을 수행하기 위해 도 2에서 본 명세서에 설명된 컴포넌트의 전부 또는 일부를 포함할 수 있다. 이와 같이, 애플리케이션 제공자 서버(204)는 애플리케이션 제공자 서버(104)의 일례를 나타낸다.
도 2의 예에서 도시된 바와 같이, 애플리케이션 제공자 서버(204)는 하나 이상의 프로세서(240), 하나 이상의 통신 유닛(242) 및 하나 이상의 저장 디바이스(248)를 포함한다. 프로세서(240)는 기능을 구현하고 및/또는 애플리케이션 제공자 서버(204)와 연관된 명령어를 실행할 수 있다. 프로세서들(240)의 예들은 어플리케이션 프로세서, 디스플레이 제어기, 보조 프로세서, 하나 이상의 센서 허브 및 프로세서, 프로세싱 유닛, 또는 프로세싱 디바이스로서 기능하도록 구성된 임의의 다른 하드웨어를 포함한다. 패치 생성 유닛(116), 패치 세그먼트화 유닛(118) 및 애플리케이션 스토어 인터페이스(260)는 애플리케이션 제공자 서버(204)의 다양한 액션, 동작 또는 기능을 수행하기 위해 프로세서(236)에 의해 실행될 수 있다. 예를 들어, 프로세서(240)는 프로세서(240)가 패치 생성 유닛(116), 패치 세그먼트화 유닛(118) 및 애플리케이션 스토어 인터페이스(260)와 관련하여 본 명세서에 설명된 동작을 수행하게 하는 저장 디바이스(248)(패치 생성 유닛(116), 패치 세그먼트화 유닛(118) 및 애플리케이션 스토어 인터페이스(260)에 의해 표현됨)에 의해 저장된 명령어를 검색하고 실행할 수 있다. 명령어는 프로세서(240)에 의해 실행될 때, 애플리케이션 제공자 서버(204)로 하여금 저장 디바이스(248) 내에 정보를 저장하게 한다.
통신 유닛(242)은 하나 이상의 네트워크를 통해 네트워크 신호를 전송 및/또는 수신함으로써 하나 이상의 유선 및/또는 무선 네트워크(예를 들어, 네트워크(108))를 통해 외부 디바이스(예: 컴퓨팅 디바이스(102))와 통신하도록 구성된 유닛을 나타낼 수 있다. 통신 유닛(242)의 예시들은(이더넷 카드와 같은) 네트워크 인터페이스 카드, 광학적 트랜스시버, 라디오 주파수 트랜스시버, GPS 수신기, 셀룰러 트랜시버 또는 데이터를 송신 및/또는 수신할 수 있는 임의의 기타 유형의 디바이스를 포함한다. 통신 유닛들(242)의 다른 예시들은 단파 라디오, 셀룰러 데이터 라디오, 무선 네트워크 라디오 뿐만 아니라 USB 제어기를 포함할 수 있다.
저장 디바이스(248)는 애플리케이션 제공자 서버(204)의 동작 동안 프로세싱하기 위한 정보를 저장하도록 구성된 하나 이상의 메모리 및/또는 저장 디바이스를 나타낼 수 있다. 일부 예시에서, 저장 디바이스들(248)은 저장 디바이스들(248)의 주목적이 장기간 저장이 아님을 의미하는 임시적 메모리를 나타낼 수 있다. 저장 디바이스(248) 상의 저장 디바이스들(274)은 휘발성 메모리로서 정보의 단기 저장을 위해 구성될 수 있고, 따라서 전원이 꺼지면 저장된 콘텐츠를 보유하지 않는다. 휘발성 메모리들의 예시들은 RAM(random access memory), DRAM(dynamic random access memory), SRAM(static random access memory) 및 당업계에서 공지된 기타 형태의 휘발성 메모리를 포함할 수 있다.
일부 예시에서, 저장 디바이스(248)는 하나 이상의 컴퓨터 판독가능 저장 매체를 포함할 수 있다. 저장 디바이스(248)는 하나 이상의 비일시적 컴퓨터 판독가능 저장 매체를 포함할 수 있다. 저장 디바이스(248)는 일반적으로 휘발성 메모리에 저장되는 것보다 많은 양의 정보를 저장하도록 구성될 수 있다. 저장 디바이스(248)는 비휘발성 메모리 공간으로서 정보의 장기 저장을 위해 구성될 수 있고 전원 켜짐/꺼짐 순환 이후에도 정보를 보유한다. 비휘발성 메모리의 예시들은 자기적 하드 디스크, 광학 디스크, 플로피 디스크, 플래시 메모리 또는 EPROM 또는 EEPROM의 형태를 포함한다. 저장 디바이스(248)는 프로그램 명령어 및/또는 패치 생성 유닛(116), 패치 세그먼트화 유닛(118) 및/또는 애플리케이션 스토어 인터페이스(260)와 연관된 정보(예를 들어, 데이터)를 저장할 수 있다. 저장 디바이스(248)는 패치 생성 유닛(116), 패치 세그먼트화 유닛(118) 및/또는 애플리케이션 스토어 인터페이스(260)와 연관된 데이터 또는 기타 정보를 저장하도록 구성된 메모리를 포함할 수 있다.
애플리케이션 제공자 서버(204)는 초기적으로 애플리케이션 스토어 인터페이스(260)(애플리케이션(110A)과 같은 애플리케이션을 다운로드하거나 획득하기 위한 기본 전자 마켓 플레이스와 인터렉션하기 위해 소프트웨어 개발자, 사용자 및 기타 엔티티에게 제시되는 인터페이스를 나타낼 수 있음)를 통해 애플리케이션(110A)를 지원하는 소프트웨어 개발자로부터 패치된 애플리케이션(110B)를 수신할 수 있다. 애플리케이션 제공자 서버(204)는 패치된 애플리케이션(110B)의 수신에 응답하여 패치 생성 유닛(116)을 호출하여, 패치되지 않은 애플리케이션(110A)과 패치된 애플리케이션(110B) 사이의 차이를 나타내는 패치(117)를 생성할 수 있다.
패치(117)를 생성하기 위해, 패치 생성 유닛(116)은 먼저 가상화 유닛(262)을 호출할 수 있다. 가상화 유닛(262)은 각각의 패치되지 않은 애플리케이션(110A) 및 패치된 애플리케이션(110B)과 같은 애플리케이션을 형성하는 에셋(112 및 122) 각각과 같은 다수의 에셋을 가상화하도록 구성된 유닛을 나타낼 수 있다. 가상화 유닛(262)은 일례로서 "RandomAccessFile"이라고 하는 Java 클래스를 확장하여 단일 RandomAccessFile 객체가 다수의 파일 또는 다른 에셋을 포함할 수 있도록 함으로써 에셋을 단일 가상 에셋으로 보이도록 가상화할 수 있다. 다시 말해서, 가상화 유닛(262)은 다수의 상이한 에셋을 서로에 추가하고 추가된 에셋이 어떻게 기본 파일 시스템에 액세스되고 저장되는지를 처리하기 위해 확장된 기능을 갖는 RandomAccessFile 객체에 추가된 에셋을 캡슐화할 수 있다. 가상화 유닛(262)은 이러한 방식으로 패치되지 않은 애플리케이션(110A)을 가상화하여 가상 에셋(114A)을 획득하고 패치된 애플리케이션(110B)을 가상화하여 가상 에셋(114B)을 획득할 수 있다.
다음으로, 패치 생성 유닛(116)은 명령(121) 및 diff(123)을 획득하기 위해 가상 에셋(114A) 및 가상 에셋(114B)에 대해 전술한 패치 알고리즘 중 하나 이상을 적용할 수 있다. 패치 알고리즘을 적용하는 동안, 패치 생성 유닛(116)은 메타데이터 생성 유닛(264)을 호출할 수 있으며, 이는 패치되지 않은 애플리케이션(110A)의 에셋(112)이 패치되지 않은 애플리케이션(예를 들어, 도 1의 예에 도시된 컴퓨팅 디바이스(102)의 패치되지 않은 애플리케이션(130A))의 다른 인스턴스에 패치(117)를 적용하는 동안 삭제될 수 있는 시기를 나타내는 메타데이터(119)를 생성하도록 구성된 유닛을 나타낼 수 있다.
메타데이터 생성 유닛(264)은 에셋(112)에 대해 수행된 각각의 메모리/저장 디바이스 읽기 동작을 반영하기 위해 읽기 카운터(139)를 증가시킬 수 있다. 에셋의 마지막 읽기가 발생할 때마다, 메타데이터 생성 유닛(264)은 읽기 카운터(139)의 현재 값을 에셋 식별자와 함께 읽기 인덱스로 지정할 수 있으며, 이에 따라 컴퓨팅 디바이스(102)에서 유지되는 대응하는 읽기 카운터(139)가 읽기 인덱스와 동일한 경우 식별된 에셋이 삭제될 수 있다고 나타낼 수 있다. 메타데이터 생성 유닛(264)은 또한 애플리케이션 식별자와 함께 읽기 인덱스에 대해 음수 값(예: -1)을 지정하여 에셋이 즉시 삭제될 수 있음을 메타데이터(119)에 표시할 수 있다(패치(117) 생성 전체에 걸쳐 에셋이 읽히지 않기 때문).
패치(117)를 생성한 후, 애플리케이션 제공자 서버(204)는 애플리케이션 스토어 인터페이스(260)를 호출하여, 통신 유닛(242)을 통해 컴퓨팅 디바이스(102)와 인터페이스하여 패치(117)가 다운로드 가능함을 나타낼 수 있다. 이후 애플리케이션 제공자 서버(204)는 패치(117)에 대한 요청을 수신할 수 있으며, 가능하면 이 요청 또는 별도의 통신을 통해 디바이스 정보(267)를 수신할 수 있다. 디바이스 정보(267)는 컴퓨팅 디바이스(102)에 관한 하나 이상의 유형의 정보를 포함할 수 있지만, 또한 가용 메모리의 양("가용 메모리"로 지칭될 수 있음)을 특정할 수 있다. 애플리케이션 제공자 서버(204)는 다음으로 패치 세그먼트화 유닛(118)을 호출하여 디바이스 정보(267)를 패치 세그먼트화 유닛(118)에 전달할 수 있다.
패치 세그먼트화 유닛(118)은 가능하게는 디바이스 정보(267)에 기초하여 패치(117)를 세그먼트(127)로 세그먼트화할 수 있다. 즉, 디바이스 정보(267)가 가용 메모리가 임계치 미만임을 나타내면, 패치 세그멘트화 유닛(118)은 디바이스 정보(267)가 가용 메모리가 임계치 이상임을 나타내는 경우 세그먼트(127) 각각에 대해 임계치 이상이면 선택(또는 미리 정의)되는 것보다 더 작은 크기를 선택할 수 있다 그러나 일부 예에서, 패치 세그먼트화 유닛(118)은 디바이스 정보(267)에 관계없이 패치(117)를 세그먼트(127)로 세그먼트화할 수 있으며, 여기서 세그먼트(127)의 각각의 크기는 동일할 수 있고, 각 세그먼트에 대해 미리 정의될 수 있다. 다만, 반드시 동일할 필요는 없으며, 다양한 기준(예: 개별 설치 기능)에 적응할 수 있다.
패치 세그먼테이션 유닛(118)은 세그먼트(127)를 생성할 때 압축 유닛(266)을 호출하여 서로 독립적으로 세그먼트(127) 각각을 압축할 수 있다(세그먼트(127) 각각이 개별적으로 압축 해제될 수 있도록). 압축 유닛(266)은 diff 세그먼트(127) 및 가능하게는 명령(121)에 대해 하나 이상의 압축 알고리즘을 적용하도록 구성된 유닛을 나타낼 수 있다. 세그먼트(127)를 압축할 때, 압축 유닛(266)은 세그먼트(127)의 다양한 부분을 나타내는 콘텐츠의 유형에 따라 다른 압축 알고리즘을 호출할 수 있다. 즉, 세그먼트(127)는 에셋들(122) 중 이미지, 비디오, 텍스처, 텍스트, 오디오 등을 다시 나타낼 수 있는 전체 에셋을 포함할 수 있으며, 압축 유닛(266)은 이미지에 대한 이미지 압축 알고리즘, 비디오에 대한 비디오 압축 알고리즘, 텍스처에 대한 텍스처 압축 알고리즘, 오디오에 대한 오디오 압축 알고리즘 등을 적용할 수 있다. 이 점에서, 세그먼트(127)는 패치(117)의 압축된 부분 또는 세그먼트를 나타낼 수 있다.
그 다음, 애플리케이션 제공자 서버(204)는 세그먼트(127)를 컴퓨팅 디바이스(102)에 반복적으로 출력할 수 있다(한 번에 하나씩)(하나의 세그먼트는 메타데이터(119)를 포함할 수 있으며, 패치 생성 유닛(116)이 메타데이터를 패치(117)과 함께 패치 세그먼트화 유닛(118)에 전달함). 애플리케이션 제공자 서버(204)는 현재 세그먼트가 패치되지 않은 애플리케이션(130A)을 나타내는 가상 에셋(134A)에 성공적으로 적용되었음을 나타내는 컴퓨팅 디바이스(102)로부터의 확인에 응답하여 연속적인 세그먼트만을 출력할 수 있다. 애플리케이션 제공자 서버(204)는 가상 에셋(134B)을 생성하기 위해 세그먼트(127) 각각이 가상 에셋(134A)에 성공적으로 적용될 때까지 한 번에 세그먼트(127)들 중 단일 세그먼트를 제공하면서 이러한 방식으로 반복할 수 있다.
도 3은 본 발명의 하나 이상의 양태에 따라, 하나 이상의 패치를 다운로드하고 설치하도록 구성된 예시적 컴퓨팅 디바이스를 도시하는 블록도이다. 도 3는 컴퓨팅 디바이스(302)의 단지 하나의 특정한 예시를 도시하며, 컴퓨팅 디바이스(302)의 많은 다른 예시들이 다른 경우들에 사용될 수 있고, 예시적 컴퓨팅 디바이스(302)에 포함된 컴포넌트들의 서브셋을 포함하거나 또는 도 3에서 도시되지 않은 추가적인 컴포넌트들을 포함할 수 있다. 컴퓨터 디바이스(302)는 도 1의 예에 도시된 컴퓨팅 디바이스(102)의 일례를 나타낼 수 있다.
도 3의 예에서 도시된 바와 같이, 컴퓨팅 디바이스(302)는 사용자 인터페이스 컴포넌트(UIC)(344), 하나 이상의 프로세서(336), 하나 이상의 통신 유닛(338) 및 하나 이상의 저장 디바이스(328)를 포함하며, 이들 각각은 통신 채널(330)에 의해 상호 연결된다(도 2의 예에 도시된 통신 채널(250)과 동일하지 않더라도 유사하게). UIC(314)는 도 1의 예에 도시된 UIC(144)와 동일하지 않더라도 유사할 수 있다. 프로세서(336)는 도 2의 예에 도시된 프로세서(240)와 동일하지 않더라도 유사할 수 있다. 통신 유닛(338)은 도 2의 예에 도시된 통신 유닛(242)과 동일하지 않더라도 유사할 수 있다. 저장 디바이스(328)는 도 2의 예에 도시된 저장 디바이스(248)와 동일하지 않더라도 유사할 수 있다.
도 3의 예에 더 도시된 바와 같이, 사용자 인터페이스 컴포넌트(344)는 하나 이상의 입력 컴포넌트(332) 및 하나 이상의 출력 컴포넌트(334)를 포함할 수 있다. 컴퓨팅 디바이스(302)의 하나 이상의 입력 컴포넌트(332)는 입력을 수신할 수 있다. 입력의 예는 촉각, 오디오 및 비디오 입력이다. 일 예에서, 입력 컴포넌트(242)는 존재 감응형 입력 디바이스(예를 들어, 터치 감지 스크린, 존재 감응형 디스플레이), 마우스, 키보드, 음성 응답 시스템, 비디오 카메라, 마이크로폰 또는 인간 또는 기계로부터의 입력을 검출하는 임의의 기타 유형의 디바이스를 포함한다. 일부 예시에서, 입력 컴포넌트(332)는 하나 이상의 센서 컴포넌트들 예를 들면 하나 이상의 위치 센서(GPS 컴포넌트, Wi-Fi 컴포넌트, 셀룰러 컴포넌트), 하나 이상의 온도 센서, 하나 이상의 움직임 센서(예: 가속도계, 자이로스코프), 하나 이상의 압력 센서(예: 기압계), 하나 이상의 주변 광 센서 및 하나 이상의 기타 센서(예: 마이크로폰, 카메라, 적외선 근접 센서, 습도계 등)를 포함할 수 있다. 기타 센서들은 몇 가지 다른 비-한정적인 예를 들면, 심장 박동 센서, 자력계, 포도당 센서, 습도계 센서, 후각 센서, 나침반 센서, 스텝 카운터 센서를 포함할 수 있다.
컴퓨팅 디바이스(302)의 하나 이상의 출력 컴포넌트들(334)은 출력을 생성할 수 있다. 출력의 예는 촉각, 오디오 및 비디오 출력이다. 일 예시에서, 컴퓨팅 디바이스(302)의 출력 컴포넌트들(334)은 PSD, 사운드 카드, 비디오 그래픽 어댑터 카드, 스피커, 음극선관(CRT) 모니터, 액정 디스플레이(LCD)또는 사람 또는 기계에 출력을 생성하기 위한 임의의 기타 유형의 디바이스를 포함한다.
컴퓨팅 디바이스(302)의 내부 컴포넌트로서 도시되어 있지만, UIC(344)는 입력 및 출력을 송신 및/또는 수신하기 위해 컴퓨팅 디바이스(302)와 데이터 경로를 공유하는 외부 컴포넌트를 나타낼 수 있다. 예를 들어, 일 예시에서, UIC(344)는 컴퓨팅 디바이스(302)의 외부 패키징(예를 들어, 모바일폰 상의 스크린) 내에 위치되고 물리적으로 연결된 컴퓨팅 디바이스(302)의 내장 컴포넌트를 나타낼 수 있다. 다른 예시에서, UIC(344)는 컴퓨팅 디바이스(302)의 패키징 또는 하우징(예를 들어, 컴퓨팅 디바이스(302)와 유선 및/또는 무선을 데이터 경로를 공유하는 모니터, 프로젝터)의 외부에 위치되고 물리적으로 분리된 컴퓨팅 디바이스(302)의 외부 컴포넌트를 나타낼 수 있다.
컴퓨팅 디바이스(302) 내의 하나 이상의 저장 디바이스(328)는 컴퓨팅 디바이스(302)의 동작 동안 프로세싱을 위한 정보를 저장할 수 있다(예를 들어, 컴퓨팅 디바이스(302)는 컴퓨팅 디바이스(302)에서의 실행 중에 UI 모듈(146), 애플리케이션 인스톨러(148), 패치되지 않은 애플리케이션(130A) 및 하나 이상의 세그먼트(127)에 의해 액세스되는 데이터를 저장할 수 있다). 저장 디바이스(328)는 세그먼트화된 패치 적용 유닛(136), UI 모듈(146), 애플리케이션 인스톨러(148), 애플리케이션(130A) 및 세그먼트(127A)와 연관된 프로그램 명령어들 및/또는 정보(예를 들어, 데이터)를 저장할 수 있다. 저장 컴포넌트들(328)은 세그먼트화된 패치 적용 유닛(136), UI 모듈(146), 애플리케이션 인스톨러(148), 애플리케이션(130A) 및 세그먼트(127A)와 연관된 데이터 및/또는 다른 정보를 저장하도록 구성된 메모리를 포함할 수 있다.
위에서 논의된 바와 같이, 애플리케이션 인스톨러(148)은 컴퓨팅 디바이스(302)에 패치를 설치하기 위해 프로세서(236)에 의해 실행될 수 있다. 애플리케이션 인스톨러(148)은 사용자가 UIC(344)를 통해 애플리케이션 스토어 인터페이스(260)와 인터렉션하여 도 2의 예에 도시된 애플리케이션 제공자 서버(204)와 같은 애플리케이션 제공자 서버로부터 패치를 검색, 다운로드 및 설치할 수 있도록 하는 애플리케이션 마켓 플레이스 애플리케이션의 기능을 수행할 수 있다. UIC(344)는 패치되지 않은 애플리케이션(130A)에 대한 패치(117)와 같은 패치를 다운로드하기 위한 요청을 나타내는 표시를 수신할 수 있고, UI 모듈(146)은 요청을 애플리케이션 인스톨러(148)에 포워딩할 수 있다. 패치(117)를 다운로드하기 위한 요청의 표시에 응답하여, 애플리케이션 인스톨러(148)은 요청을 애플리케이션 제공자 서버(204)로 송신할 수 있다.
패치(117)에 대한 요청을 애플리케이션 제공자 서버(204)에 송신하는 것에 응답하여, 애플리케이션 인스톨러(148)는 애플리케이션 제공자 서버(204)로부터 세그먼트들(127) 중 각각의 개별 세그먼트의 형태로 패치(117)를 수신할 수 있다. 애플리케이션 인스톨러(148)는 세그먼트(127A)를 다운로드하는데 필요한 시간을 잠재적으로 감소시키고 다운로드에 사용되는 네트워크 리소스를 감소시키기 위해 애플리케이션(130A)에 대한 패치(117)의 세그먼트(127A)를 압축된 형태로 수신할 수 있다. 세그먼트(127A)의 diff 세그먼트(123) 내의 각각의 에셋(142)(또는 그 일부)은 네트워크를 통해 컴퓨팅 디바이스(302)로 전송되는 세그먼트(127A)의 크기를 줄이기 위해 에셋(142)의 유형에 특정한 압축 알고리즘을 사용하여(예를 들어, 애플리케이션 제공자 서버(204)에 의해) 압축되었을 수 있다. 따라서, 애플리케이션 세그먼트(127A)가 둘 이상의 상이한 유형의 둘 이상의 에셋(142)을 포함하는 경우, 둘 이상의 유형의 에셋(142) 각각은 위에서 상세히 논의된 바와 같이 상이한 압축 알고리즘을 사용하여 압축되었을 수 있다.
세그먼트(127A)의 diff 세그먼트(123)로 표현된 에셋(142)을 압축 해제하기 위해, 세그먼트화된 패치 적용 유닛(136)은 압축 해제 유닛(366)을 호출할 수 있으며, 이는 문자열과 같은 데이터 블록이 압축 사전에서 데이터 블록의 포지션에 대한 참조로 대체될 수 있는 사전 기반 압축 알고리즘을 사용하여 압축된 에셋에 대한 압축 사전을 저장할 수 있다. 압축 사전은 사전 기반 압축 알고리즘이 데이터를 압축 및 압축 해제하기 위해 인덱싱할 수 있는 데이터 블록의 인덱스를 포함할 수 있다. 사전 기반 압축 알고리즘을 사용하여 압축된 애플리케이션 엘리먼트를 압축 해제하기 위해, 압축 해제 유닛(366)은 압축된 에셋의 참조를 압축 사전의 대응하는 참조 위치의 데이터 블록으로 대체할 수 있다.
컴퓨팅 디바이스(302)가 세그먼트(127A)를 다운로드하면, 세그먼트화된 패치 적용 유닛(136)은 가상화 유닛(362)을 호출할 수 있다. 가상화 유닛(362)은 도 2의 예에 도시된 바와 같이 애플리케이션 제공자 서버(204)의 가상화 유닛(262)에 대해 위에서 설명된 것과 실질적으로 유사하지는 않지만 유사한 방식으로 패치되지 않은 애플리케이션(130A)을 가상화하도록 구성된 유닛을 나타낼 수 있다. 가상화 유닛(362)은 에셋(132)을 포함하는 패치되지 않은 애플리케이션(130A)이 단일 파일로 보이게 하는 단일 가상 에셋(134A)을 생성할 수 있다.
세그먼트화된 패치 적용 유닛(136)은 명령(121)을 추출하고 명령(121)에 따라 diff 세그먼트(123)의 적용을 시작할 수 있다. 명령(121) 중 복사 명령에 대해, 세그먼트화된 패치 적용 유닛(136)은 하나 이상의 에셋(132)(또는 그 일부)을 가상 에셋(134A)로부터 가상 에셋(134B)으로 이동할 수 있으며, 여기서 그러한 복사된 에셋은 이제 에셋(142)으로 표시된다. 명령(121) 중 삭제 명령에 대해, 세그먼트화된 패치 적용 유닛(136)은 에셋(132) 중 식별된 에셋을 삭제할 수 있다. 명령(121) 중 쓰기 명령에 대해, 세그먼트화된 패치 적용 유닛(136)은 에셋(142)으로 다시 도시된 가상 에셋(134B)에 하나 이상의 diff 세그먼트(123)를 기록할 수 있다.
전술한 바와 같이, 패치 생성 유닛(116)은 diff 세그먼트(123)를 압축하기 위해 압축 유닛(266)을 호출할 수 있다. 이와 같이, diff 세그먼트(123)를 기록하기 위해, 세그먼트화된 패치 적용 유닛(136)은 압축 해제 유닛(366)을 호출할 수 있으며, 이는 세그먼트(127A)를 압축 해제할 수 있고 이에 따라 세그먼트(127A) 내에 포함된 명령(121)에 의해 참조되는 에셋(142)을 압축 해제할 수 있다. 그러나, 압축된 에셋 및 에셋의 임시 사본을 모두 저장하는 대신 추출(압축 해제를 참조하는 또 다른 방법) 중에 압축 해제 유닛(366)은 에셋을 파일 시스템 내의 최종 위치로 직접 추출하여 메모리 소비를 추가로 절약할 수 있다. 기본 파일 시스템에 대한 직접 쓰기를 용이하게 하기 위해, 애플리케이션 공급자 서버(204)의 패치 생성 유닛(116)은 각각의 새로운 에셋이 저장될 위치를 나타내는 패치(117)에 저장되는 각각의 새로운 에셋(예를 들어, 하나 이상의 에셋(142)) 이전에 추가 헤더(로컬 파일 헤더-LFH라고 함)를 기록할 수 있다.
압축 해제 유닛(366)은 로컬 파일 헤더 각각을 참조하여 로컬 파일 헤더를 메모리에 저장할 수 있다. 로컬 파일 헤더를 참조하면, 압축 해제 유닛(366)은 로컬 파일 헤더에 지정된 위치에 있는 파일 시스템으로 직접 diff 세그먼트(123)를 추출할 수 있다. 이와 같이, 압축 해제 유닛(366)은 diff 세그먼트(123)의 복사본을 파일 시스템의 대응하는 위치로 이동시키기 전에, 메모리에 diff 세그먼트(123)의 임시 복사본을 유지하는 것을 피할 수 있다.
임의의 경우에, 세그먼트화된 패치 적용 유닛(136)은 각각 명령(121)에 의해 참조되므로 각각의 diff 세그먼트(123)에 대해 압축 해체 유닛(366)을 호출할 수 있고, 추출이 diff 세그먼트(123)의 각각의 압축 해제된 형태를 (에셋들(142) 한 에셋으로서) 가상 에셋(134B)에 직접 기록하기 때문이다. 이러한 방식으로, 세그먼트화된 패치 적용 유닛(136)은 잠재적으로 더 메모리 효율적인 방식으로 세그먼트(127A)를 프로세싱할 수 있다. 세그먼트화된 패치 적용 유닛(136)은 패치(127)가 완전히 설치될 때까지 세그먼트(127) 각각에 대해 이 프로세스를 반복할 수 있다.
일부 예에서, 세그먼트화된 패치 적용 유닛(136)은 세그먼트(예를 들어, 세그먼트 127A)의 설치 동안 시스템 장애를 검출할 수 있고, 체크 포인트 엘리먼트를 주기적으로 생성함으로써 세그먼트의 설치를 재개할 수 있다. 도 3의 예에서, 세그먼트(127A)에 대한 체크 포인트 엘리먼트(367)는 주기적으로 생성될 수 있고 저장 컴포넌트(228) 내에 저장될 수 있다. 체크 포인트 엘리먼트(367)는 에셋 이름, 에셋 상태, 에셋 오프셋, 세그먼트(127A)의 설치 동안 적용되고 있던 에셋에 대한 잔여 바이트 및 적용될 다음 세그먼트의 표시 중 하나 이상을 포함할 수 있다. 에셋 이름은 시스템 장애시 적용되었던 에셋을 나타낸다.
에셋 상태는 에셋 설치 프로세스 중에 시스템 오류가 발생했거나 에셋에 대한 로컬 파일 헤더 읽기 프로세스 중에 시스템 오류가 발생했음을 나타낸다. 예 중 하나에서, 0 값은 에셋 설치 프로세스 중에 발생한 시스템 오류를 나타낼 수 있고, 1 값은 로컬 파일 헤더 읽기 프로세스 동안 발생한 시스템 오류를 나타낼 수 있다.
에셋 오프셋은 다음 세그먼트 적용을 시작할 위치를 나타낸다. 잔여 바이트는 에셋 설치를 재개할 위치를 나타낸다. 다음 세그먼트 엘리먼트는 설치할 다음 세그먼트를 나타낸다. 이러한 방식으로, 체크 포인트 엘리먼트(367)를 사용하여, 세그먼트화된 패치 적용 유닛(136)은 시스템 장애가 발생할 때 세그먼트의 설치를 재개할 수 있다.
또한, 세그먼트화된 패치 적용 유닛(136)은 또한 세그먼트화된 패치 적용 유닛(136)이 에셋(132)을 삭제할 수 있는 시기를 식별하는 메타데이터(119)를 수신할 수 있다. 즉, 세그먼트화된 패치 적용 유닛(136)은 컴퓨팅 디바이스(302)(예를 들어, 세그먼트 127A)로 전송된 제1 세그먼트와 함께 메타데이터(119)를 수신할 수 있으며, 여기서 메타데이터(119)는 일부 예에서 세그먼트(127A)에 첨부될 수 있다. 세그먼트(127A) 수신에 응답하여, 세그먼트화된 패치 적용 유닛(136)은 메타데이터 프로세싱 유닛(364)을 호출할 수 있다. 메타데이터 프로세싱 유닛(364)은 세그먼트(127A)로부터 메타데이터(119)를 파싱한 다음, 세그먼트(127)의 적용 동안(즉, 패치(117)의 적용 동안) 에셋(132)을 제거하기 위해 메타데이터(119)를 프로세싱하도록 구성된 유닛을 나타낼 수 있다.
메타데이터 프로세싱 유닛(364)은 패치 생성 유닛(116)과 관련하여 위에서 설명된 것과 동일한 방식으로 읽기 카운터(139)를 유지할 수 있다. 메타데이터(119)의 읽기 인덱스가 읽기 카운터(139)와 일치할 때마다, 세그먼트화된 패치 적용 유닛(136)은 대응하는 에셋 식별자(더 일반적으로 패치되지 않은 애플리케이션(130A)의 임의의 부분을 지칭할 수 있음)에 의해 식별된 에셋들(132) 중 하나를 삭제할 수 있다.
일부 예에서, 읽기 인덱스는 음수 값(예: 음수 1(-1))을 가질 수 있으며, 이는 에셋들(132) 중 대응하는 에셋이 읽기 카운터(139)를 참조하지 않고 삭제될 수 있음을 나타낸다(예를 들어, 더 이상 사용되지 않거나 대체되거나 완전히 제거됨). 이러한 예에서, 메타데이터 프로세싱 유닛(364)은 초기에 메타데이터(119)를 프로세싱하여 음의 값을 갖는 대응하는 읽기 인덱스를 갖는 애플리케이션 식별자에 의해 식별된 모든 에셋(132)을 사전에 삭제할 수 있다(예: 에셋(132A)).
세그먼트화된 패치 적용 유닛(136)은 이러한 방식으로 계속하여 세그먼트(127)를 반복적으로 수신하고, 세그먼트들(127) 중 연속적인 세그먼트를 적용하기 전에 세그먼트들(127) 각각을 개별적으로 적용할 수 있다. 일부 예에서, 세그먼트화된 패치 적용 유닛(136)은 세그먼트들(127) 중 이전 세그먼트가 성공적으로 적용되었다는 확인을 제공하기 위해 애플리케이션 제공자 서버(204)와 인터페이싱할 수 있고, 확인을 수신한 후에만 애플리케이션 제공자 서버(104)가 세그먼트들(127) 중 다음 세그먼트를 전송할 수 있어서, 패치(117)의 적용이 성공적으로 완료될 수 있도록 가용 메모리 리소스가 보존되는 것을 잠재적으로 보장한다.
마찬가지로, 세그먼트(127)가 가상 에셋(134A)에 반복적으로 적용될 때 메타데이터 프로세싱 유닛(364)은 읽기 카운터(139)를 계속 유지할 수 있다. 메타데이터 프로세싱 유닛(364)은 메타데이터(119)의 명령어(129)에 대해 읽기 카운터(139)를 계속 참조할 수 있고, 읽기 카운터(139)가 명령어(129) 중 하나의 읽기 인덱스와 일치할 때마다 에셋들(132) 중 대응하는 에셋을 삭제한다.
도 4는 본 발명에 설명된 기법의 다양한 양태에 따라 도 1의 시스템에 의해 생성된 예시적 가상 에셋을 도시하는 블록도이다. 도 4의 예에서, 가상 에셋(418)은 가상 에셋(114A, 114B, 134A 및/또는 134B) 중 어느 하나의 예를 나타낼 수 있다. 가상 에셋(418)은 에셋(416A-416N("에셋(416)"), 에셋(416) 중 연관된 에셋(416)을 저장하기 위해 메모리에서 대응하는 위치를 나타낼 수 있는 로컬 파일 헤더(LFH) (440A-440N)("LFH 440")) 및 에셋(416)이 저장되는 기본 파일 시스템에 대한 중앙 디렉토리를 정의하는 중앙 디렉토리(422)를 포함할 수 있다.
가상 에셋(418)을 생성하기 위해, 시스템(100)(애플리케이션 제공자 서버(104) 및 컴퓨팅 디바이스(102) 중 하나 또는 둘 다)은 파일 시스템 계층 구조에 걸쳐 다수의 파일을 프로세싱할 수 있는 수정된 RandomAccessFile 함수를 호출하여, 폴더와 하위 폴더 사이를 이동하여 중앙 디렉토리(422)에 저장된 각각의 에셋(416)을 식별할 수 있다. 이와 같이, 시스템(100)은 에셋(416) 각각에 대해 LFH(440)를 생성하고, 중앙 디렉토리(422)와 관련하여 에셋(416)의 위치를 식별하는 에셋(416) 각각에 대해 LFH(440)의 LFH를 생성하여, 에셋(416) 각각이 각각의 에셋(416)이 저장될 위치로 직접 압축을 푸는 동안 추출되도록 할 수 있다(그리고 이에 따라 도 3의 예와 관련하여 위에서 언급한 임시 사본을 피할 수 있다).
도 5a 및 5b는 본 개시에서 설명된 메모리 효율적 패칭 기법에 따라 도 3의 예에 도시된 컴퓨팅 디바이스의 패치를 제공하는 것에서 도 2의 예에 도시된 애플리케이션 제공자 서버의 예시적 동작을 도시하는 흐름도이다. 애플리케이션 제공자 서버(204)는 초기적으로 애플리케이션 스토어 인터페이스(260)를 통해 패치되지 않은 애플리케이션(110A)을 수신할 수 있고(498), 이후 애플리케이션(110A)을 지원하는 소프트웨어 개발자로부터 패치된 애플리케이션(110B)을 수신할 수 있다(500). 애플리케이션 제공자 서버(204)는 패치된 애플리케이션(110B)의 수신에 응답하여 패치 생성 유닛(116)을 호출하여, 패치되지 않은 애플리케이션(110A)과 패치된 애플리케이션(110B) 사이의 차이를 나타내는 패치(117)를 생성할 수 있다. 이와 관련하여, 패치 생성 유닛(116)은 패치되지 않은 애플리케이션(110A) 및 패치된 애플리케이션(110B)에 기초하여 패치(117)를 생성할 수 있다.
패치(117)를 생성하기 위해, 패치 생성 유닛(116)은 먼저 가상화 유닛(262)을 호출할 수 있다. 가상화 유닛(262)은 각각의 패치되지 않은 애플리케이션(110A) 및 패치된 애플리케이션(110B)과 같은 애플리케이션을 형성하는 에셋(112 및 122) 각각과 같은 다수의 에셋을 가상화할 수 있다. 가상화 유닛(262)은 다수의 상이한 에셋을 서로에 추가하고 추가된 에셋이 어떻게 기본 파일 시스템에 액세스되고 저장되는지를 처리하기 위해 확장된 기능을 갖는 단일 객체에 추가된 에셋을 캡슐화할 수 있다. 가상화 유닛(262)은 이러한 방식으로 패치되지 않은 애플리케이션(110A)을 가상화하여 제1 가상 에셋(114A)을 획득하고(502), 패치된 애플리케이션(110B)을 가상화하여 제2 가상 에셋(114B)을 획득할 수 있다(504).
다음으로, 패치 생성 유닛(116)은 집합적으로 패치(117)를 표현하는 명령(121) 및 diff(123)을 획득하기 위해 가상 에셋(114A) 및 가상 에셋(114B)에 대해 전술한 패치 알고리즘 중 하나 이상을 적용할 수 있다). 패치(117)를 생성한 후, 애플리케이션 제공자 서버(204)는 애플리케이션 스토어 인터페이스(260)를 호출하여, 통신 유닛(242)을 통해 컴퓨팅 디바이스(102)와 인터페이스하여 패치(117)가 다운로드 가능함을 나타낼 수 있다(508). 컴퓨팅 디바이스(302)의 UIC(344)는 패치되지 않은 애플리케이션(130A)에 대한 패치(117)와 같은 패치를 다운로드하기 위한 요청을 나타내는 표시를 수신할 수 있고(510), UI 모듈(146)은 요청을 애플리케이션 인스톨러(148)에 포워딩할 수 있다. 패치(117)를 다운로드하기 위한 요청의 표시에 응답하여, 애플리케이션 인스톨러(148)는 패치(117)에 대한 요청을 애플리케이션 제공자 서버(204)로 송신할 수 있다(512).
이후 애플리케이션 제공자 서버(204)는 패치(117(117)에 대한 요청을 수신할 수 있으며(514), 가능하면 이 요청 또는 별도의 통신을 통해 디바이스 정보(267)를 수신할 수 있다. 디바이스 정보(267)는 컴퓨팅 디바이스(102)에 관한 하나 이상의 유형의 정보를 포함할 수 있지만, 또한 가용 메모리의 양("가용 메모리"로 지칭될 수 있음)을 특정할 수 있다. 애플리케이션 제공자 서버(204)는 다음으로 패치 세그먼트화 유닛(118)을 호출하여 디바이스 정보(267)를 패치 세그먼트화 유닛(118)에 전달할 수 있다.
패치 세그먼트화 유닛(118)은 가능하게는 디바이스 정보(267)에 기초하여 패치(117)를 세그먼트(127)로 세그먼트화할 수 있다(516). 즉, 디바이스 정보(267)가 가용 메모리가 임계치 미만임을 나타내면, 패치 세그멘트화 유닛(118)은 디바이스 정보(267)가 가용 메모리가 임계치 이상임을 나타내는 경우 세그먼트(127) 각각에 대해 임계치 이상이면 선택(또는 미리 정의)되는 것보다 더 작은 크기를 선택할 수 있다 그러나 일부 예에서, 패치 세그먼트화 유닛(118)은 디바이스 정보(267)에 관계없이 패치(117)를 세그먼트(127)로 세그먼트화할 수 있으며, 여기서 세그먼트(127)의 각각의 크기는 동일할 수 있고, 각 세그먼트에 대해 미리 정의될 수 있다. 다만, 반드시 동일할 필요는 없으며, 다양한 기준(예: 개별 설치 기능)에 적응할 수 있다.
패치 세그먼테이션 유닛(118)은 세그먼트(127)를 생성할 때 압축 유닛(266)을 호출하여 서로 독립적으로 세그먼트(127) 각각을 압축할 수 있다(세그먼트(127) 각각이 개별적으로 압축 해제될 수 있도록)(518). 그 다음, 애플리케이션 제공자 서버(204)는 세그먼트(127)를 컴퓨팅 디바이스(102)에 반복적으로 출력할 수 있고(한 번에 하나씩)(하나의 세그먼트는 메타데이터(119)를 포함할 수 있으며), 패치 생성 유닛(116)은 메타데이터를 패치(117)과 함께 패치 세그먼트화 유닛(118)에 전달할 수 있다. 애플리케이션 제공자 서버(204)는 세그먼트들(127) 중 초기 세그먼트(520)를 출력할 수 있다.
애플리케이션 인스톨러(148)는 세그먼트(127A)를 다운로드하는데 필요한 시간을 잠재적으로 감소시키고 다운로드에 사용되는 네트워크 리소스를 감소시키기 위해 애플리케이션(130A)에 대한 패치(117)의 초기 세그먼트(127A)를 압축된 형태로 수신할 수 있다. 이와 같이, 애플리케이션 인스톨러(148)는 압축된 초기 세그먼트(127A)를 수신할 수 있다(522). 세그먼트(127A)의 diff 세그먼트(123)로 표현되는 에셋(142)을 압축 해제하기 위해, 세그먼트화된 패치 적용 유닛(136)은 세그먼트(127A)를 압축 해제할 수 있는 압축 해제 유닛(366)을 호출할 수 있다(524).
가상화 유닛(362)은 도 2(2의 예에 도시된 바와 같이 애플리케이션 제공자 서버(204)의 가상화 유닛(262)에 대해 위에서 설명된 것과 실질적으로 유사하지는 않지만 유사한 방식으로 패치되지 않은 애플리케이션(130A)을 가상화할 수 있다(526). 가상화 유닛(362)은 에셋(132)을 포함하는 패치되지 않은 애플리케이션(130A)이 단일 파일로 보이게 하는 단일 가상 에셋(134A)을 생성할 수 있다.
세그먼트화된 패치 적용 유닛(136)은 명령(121)을 추출하고 명령(121)에 따라 diff 세그먼트(123)의 적용을 시작할 수 있다. 세그먼트화된 패치 적용 유닛(136)은 각각 명령(121)에 의해 참조되므로 각각의 diff 세그먼트(123)에 대해 압축 해체 유닛(366)을 호출할 수 있고, 추출이 diff 세그먼트(123)의 각각의 압축 해제된 형태를 (에셋들(142) 한 에셋으로서) 가상 에셋(134B)에 직접 기록하기 때문이다. 이러한 방식으로, 세그먼트화된 패치 적용 유닛(136)은 잠재적으로 더 메모리 효율적인 방식으로 세그먼트(127A)를 프로세싱할 수 있다. 이러한 방식으로, 세그먼트화된 패치 적용 유닛(136)은 초기 세그먼트(127A)를 압축 해제하고(527), 초기 세그먼트(127)를 제1 가상 에셋에 적용하여 제2 가상 에셋을 획득할 수 있다(528).
세그먼트화된 패치 적용 유닛(136)은 초기 세그먼트(127A)의 성공적인 적용시, 초기 세그먼트(127A)의 적용이 완료되었다는 확인을 생성하고, 확인을 애플리케이션 제공자 서버(204)에 송신할 수 있다(530, 532). 애플리케이션 제공자 서버(204)는 확인을 수신하고(534), 송신할 추가 세그먼트(127)가 있는지 여부를 결정할 수 있다(536). 송신할 추가 세그먼트(127)가 있으면, 애플리케이션 제공자 서버(204)는 세그먼트(127)의 다음 세그먼트(538)를 출력하고, 컴퓨팅 디바이스(302)는 위에서 설명된 바와 같이 수신, 압축 해제 및 적용할 수 있다(540-544). 컴퓨팅 디바이스(302)는 수신된 세그먼트의 적용이 완료되었다는 또 다른 확인을 생성하여, 위에서 설명된 바와 같은 확인을 출력할 수 있다(546, 532).
이 프로세스는 애플리케이션 제공자 서버(204)가 추가적인 세그먼트가 없다고 결정할 때까지 계속될 수 있다(532-546). 컴퓨팅 디바이스(302)에 송신할 추가 세그먼트가 없을 때("NO" 536), 애플리케이션 제공자 서버(204)는 추가 세그먼트가 없다는 표시를 보낼 수 있다(즉, 전체 패치가 제공되고 적용되었다는 표시)(548).
도 6은 본 개시에서 설명된 메모리 효율적 패칭 기법에 따라 도 3의 예에서 도시된 컴퓨팅 디바이스에 패치를 제공하는 것에서 도 2의 예에 도시된 애플리케이션 제공자 서버의 예시적 동작을 도시하는 다른 흐름도이다. 상기 기술된 바와 같이, 애플리케이션 제공자 서버(204)는 초기적으로 애플리케이션 스토어 인터페이스(260)를 통해 애플리케이션(110A)을 지원하는 소프트웨어 개발자로부터 패치된 애플리케이션(110B)을 수신할 수 있다(600). 애플리케이션 제공자 서버(204)는 패치된 애플리케이션(110B)의 수신에 응답하여 패치 생성 유닛(116)을 호출하여, 패치되지 않은 애플리케이션(110A)과 패치된 애플리케이션(110B) 사이의 차이를 나타내는 패치(117)를 생성할 수 있다. 이와 관련하여, 패치 생성 유닛(116)은 패치되지 않은 애플리케이션(110A) 및 패치된 애플리케이션(110B)에 기초하여 패치(117)를 생성할 수 있다.
패치(117)를 생성하기 위해, 패치 생성 유닛(116)은 먼저 가상화 유닛(262)을 호출할 수 있다. 가상화 유닛(262)은 각각의 패치되지 않은 애플리케이션(110A) 및 패치된 애플리케이션(110B)과 같은 애플리케이션을 형성하는 에셋(112 및 122) 각각과 같은 다수의 에셋을 가상화할 수 있다. 가상화 유닛(262)은 다수의 상이한 에셋을 서로에 추가하고 추가된 에셋이 어떻게 기본 파일 시스템에 액세스되고 저장되는지를 처리하기 위해 확장된 기능을 갖는 단일 객체에 추가된 에셋을 캡슐화할 수 있다. 가상화 유닛(262)은 이러한 방식으로 패치되지 않은 애플리케이션(110A)을 가상화하여 제1 가상 에셋(114A)을 획득하고(602), 패치된 애플리케이션(110B)을 가상화하여 제2 가상 에셋(114B)을 획득할 수 있다(604).
다음으로, 패치 생성 유닛(116)은 집합적으로 패치(117)를 표현하는 명령(121) 및 diff(123)을 획득하기 위해 가상 에셋(114A) 및 가상 에셋(114B)에 대해 전술한 패치 알고리즘 중 하나 이상을 적용할 수 있다(606). 패치 알고리즘을 적용하는 동안, 패치 생성 유닛(116)은 메타데이터 생성 유닛(264)을 호출할 수 있으며, 이는 패치되지 않은 애플리케이션(110A)의 에셋(112)이 패치되지 않은 애플리케이션(예를 들어, 도 1의 예에 도시된 컴퓨팅 디바이스(102)의 패치되지 않은 애플리케이션(130A))의 다른 인스턴스에 패치(117)를 적용하는 동안 삭제될 수 있는 시기를 나타내는 메타데이터(119)를 생성하도록 구성된 유닛을 나타낼 수 있다(608).
패치(117)를 생성한 후, 애플리케이션 제공자 서버(204)는 애플리케이션 스토어 인터페이스(260)를 호출하여, 통신 유닛(242)을 통해 컴퓨팅 디바이스(102)와 인터페이스하여 패치(117)가 다운로드 가능함을 나타낼 수 있다(610). 컴퓨팅 디바이스(302)의 UIC(344)는 패치되지 않은 애플리케이션(130A)에 대한 패치(117)와 같은 패치를 다운로드하기 위한 요청을 나타내는 표시를 수신할 수 있고(612), UI 모듈(146)은 요청을 애플리케이션 인스톨러(148)에 포워딩할 수 있다. 패치(117)를 다운로드하기 위한 요청의 표시에 응답하여, 애플리케이션 인스톨러(148)는 패치(117)에 대한 요청을 애플리케이션 제공자 서버(204)로 송신할 수 있다(614).
그 후, 애플리케이션 제공자 서버(204)는 패치(117)에 대한 요청을 수신할 수 있고(616), 패치(117)를 메타데이터(119)와 함께 출력할 수 있다(가능하게는 상기 논의된 바와 같이 하나 이상의 세그먼트(127)로서)(618). 세그먼트화된 패치 적용 유닛(136)은 패치(117) 및 메타데이터(119)를 수신할 수 있으며(620), 여기서 메타데이터(119)는 세그먼트화된 패치 적용 유닛(136)이 에셋(132)을 삭제할 수 있는 시기를 식별할 수 있다. 일부 예에서, 세그먼트화된 패치 적용 유닛(136)은 컴퓨팅 디바이스(302)(예를 들어, 세그먼트 127A)로 전송된 제1 세그먼트와 함께 메타데이터(119)를 수신할 수 있으며, 여기서 메타데이터(119)는 일부 예에서 세그먼트(127A)에 첨부될 수 있다. 세그먼트(127A) 수신에 응답하여, 세그먼트화된 패치 적용 유닛(136)은 메타데이터 프로세싱 유닛(364)을 호출할 수 있다. 메타데이터 프로세싱 유닛(364)은 세그먼트(127A)로부터 메타데이터(119)를 파싱한 다음, 세그먼트(127)의 적용 동안(즉, 패치(117)(117)의 적용 동안) 에셋(132)을 제거하기 위해 메타데이터(119)를 프로세싱할 수 있다.
세그먼트화된 패치 적용 유닛(136)은 이러한 방식으로 계속하여 세그먼트(127)를 반복적으로 수신하고, 세그먼트들(127) 중 연속적인 세그먼트를 적용하기 전에 세그먼트들(127) 각각을 개별적으로 적용할 수 있다. 일부 예에서, 세그먼트화된 패치 적용 유닛(136)은 세그먼트들(127) 중 이전 세그먼트가 성공적으로 적용되었다는 확인을 제공하기 위해 애플리케이션 제공자 서버(204)와 인터페이싱할 수 있고, 확인을 수신한 후에만 애플리케이션 제공자 서버(104)가 세그먼트들(127) 중 다음 세그먼트를 전송할 수 있어서, 패치(117)의 적용이 성공적으로 완료될 수 있도록 가용 메모리 리소스가 보존되는 것을 잠재적으로 보장한다.
기법의 다양한 양태는 다음 절과 관련하여 아래에 설명된 다양한 예를 가능하게 할 수 있다.
제1A절. 방법으로서, 하나 이상의 프로세서에 의해, 단일 제1 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 표현하는 단일 제2 가상 에셋을 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋과 상기 제2 가상 에셋 간의 차이에 기초하여, 상기 제2 가상 에셋을 획득하기 위해 상기 단일 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 패치를 복수의 세그먼트들로 세그먼트화하는 단계; 및 상기 하나 이상의 프로세서에 의해, 상기 사용자 컴퓨팅 디바이스에 의한 개별 설치를 위해 상기 패치되지 않은 애플리케이션에 대한 상기 복수의 세그먼트들 중 단일 세그먼트를 사용자 컴퓨팅 디바이스에 출력하는 단계를 포함하는, 방법.
제2A절. 제1A절에 있어서, 상기 단일 세그먼트는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 쓰기 명령 및 복사 명령을 포함하는, 방법.
제3A절. 제1A절 및 제2A절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부를 삭제할 시기를 나타내는 메타데이터를 생성하는 단계; 및 상기 메타데이터를 상기 사용자 컴퓨팅 디바이스에 출력하는 단계를 더 포함하는, 방법.
제4A절. 제3A절에 있어서, 상기 메타데이터는 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 복수의 세그먼트들의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하는, 방법.
제5A절. 제4A절에 있어서, 상기 읽기 인덱스는 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 방법.
제6A절. 제3A절 내지 제5A절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 방법.
제7A절. 제1A절 내지 제5A절의 임의의 조합에 있어서, 압축된 세그먼트들을 획득하기 위해 상기 세그먼트들 각각을 압축하는 단계를 더 포함하는, 방법.
제8A절. 제1A절 내지 제6A절의 임의의 조합에 있어서, 상기 단일 세그먼트를 출력하는 단계는 상기 복수의 세그먼트들 중 이전에 보낸 세그먼트가 설치되었다는 확인을 상기 사용자 컴퓨팅 디바이스로부터 수신한 후에만 상기 단일 세그먼트를 출력하는 단계를 포함하는, 방법.
제9A절. 제1A절 내지 제8A절의 임의의 조합에 있어서, 상기 패치를 복수의 세그먼트들로 세그먼트화하는 단계는: 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하는 단계; 및 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기에 기초하여 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하는 단계를 포함하는, 방법.
제10A절. 제1A절 내지 제9A절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 방법.
*제11A절. 제1A절 내지 제9A절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 방법.
제12A절. 제1A절 내지 제11A절의 임의의 조합에 있어서, 상기 제1 복수의 에셋들 및 상기 제2 복수의 에셋들은 각각 하나 이상의 이미지, 애니메이션, 텍스처, 오디오 데이터 및 비디오 데이터를 포함하는, 방법.
제13A절. 서버 컴퓨팅 디바이스로서, 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들 및 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 저장하도록 구성된 메모리; 및 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는: 단일 제1 가상 에셋을 획득하기 위해 상기 제1 복수의 에셋들을 가상화하고; 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 표현하는 단일 제2 가상 에셋을 획득하고; 상기 단일 제1 가상 에셋과 상기 단일 제2 가상 에셋 간의 차이에 기초하여, 상기 단일 제2 가상 에셋을 획득하기 위해 상기 단일 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하고; 상기 패치를 복수의 세그먼트들로 세그먼트화하고; 그리고 상기 사용자 컴퓨팅 디바이스에 의한 개별 설치를 위해 상기 패치되지 않은 애플리케이션에 대한 상기 복수의 세그먼트들 중 단일 세그먼트를 사용자 컴퓨팅 디바이스에 출력하도록 구성되는, 서버 컴퓨팅 디바이스.
제14A절. 제13A절에 있어서, 상기 단일 세그먼트는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 쓰기 명령 및 복사 명령을 포함하는, 서버 컴퓨팅 디바이스.
제15A절. 제13A절 및 제14A절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는: 상기 단일 제1 가상 에셋의 일부를 삭제할 시기를 나타내는 메타데이터를 생성하는 단계; 및 상기 메타데이터를 상기 사용자 컴퓨팅 디바이스에 출력하도록 더 구성되는, 서버 컴퓨팅 디바이스.
제16A절. 제15A절에 있어서, 상기 메타데이터는 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 복수의 세그먼트들의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하는, 서버 컴퓨팅 디바이스.
제17A절. 제16A절에 있어서, 상기 읽기 인덱스는 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 서버 컴퓨팅 디바이스.
제18A절. 제15A절 내지 제17A절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 서버 컴퓨팅 디바이스.
제19A절. 제13A절 내지 제17A절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는 압축된 세그먼트들을 획득하기 위해 상기 세그먼트들 각각을 압축하도록 더 구성되는, 서버 컴퓨팅 디바이스.
제20A절. 제13A절 내지 제18A절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는 상기 복수의 세그먼트들 중 이전에 보낸 세그먼트가 설치되었다는 확인을 상기 사용자 컴퓨팅 디바이스로부터 수신한 후에만 상기 단일 세그먼트를 출력하도록 더 구성되는, 서버 컴퓨팅 디바이스.
제21A절. 제13A절 내지 제20A절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는: 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하고; 그리고 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기에 기초하여 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하도록 구성되는, 서버 컴퓨팅 디바이스.
제22A절. 제13A절 내지 제21A절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 서버 컴퓨팅 디바이스.
제23A절. 제13A절 내지 제21A절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 서버 컴퓨팅 디바이스.
제24A절. 제13A절 내지 제23A절의 임의의 조합에 있어서, 상기 제1 복수의 에셋들 및 상기 제2 복수의 에셋들은 각각 하나 이상의 이미지, 애니메이션, 텍스처, 오디오 데이터 및 비디오 데이터를 포함하는, 서버 컴퓨팅 디바이스.
제25A절. 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 명령어는 실행시 하나 이상의 프로세서로 하여금: 단일 제1 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하게 하고; 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 표현하는 단일 제2 가상 에셋을 획득하게 하고; 상기 단일 제1 가상 에셋과 상기 단일 제2 가상 에셋 간의 차이에 기초하여, 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하게 하고; 상기 패치를 복수의 세그먼트들로 세그먼트화하게 하고; 그리고 상기 사용자 컴퓨팅 디바이스에 의한 개별 설치를 위해 상기 패치되지 않은 애플리케이션에 대한 상기 복수의 세그먼트들 중 단일 세그먼트를 사용자 컴퓨팅 디바이스에 출력하게 하는, 비일시적 컴퓨터 판독가능 저장 매체.
제1B절. 방법으로서, 사용자 컴퓨팅 디바이스의 하나 이상의 프로세서에 의해, 서버 컴퓨팅 디바이스로부터 복수의 세그먼트들 중 단일 세그먼트를 획득하는 단계, 상기 복수의 세그먼트들은 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 표현하며; 상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하는 단계를 포함하며, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함한다.
제2B절. 제1B절에 있어서, 상기 단일 세그먼트는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 삭제 명령, 쓰기 명령 및 복사 명령 중 하나 이상을 포함하는, 방법.
제3B절. 제1B절 및 제2B절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부를 삭제할 시기를 나타내는 메타데이터를 획득하는 단계; 및 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계를 포함하는, 방법.
제4B절. 제3B절에 있어서, 상기 메타데이터는 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 복수의 세그먼트들의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하며, 상기 방법은: 상기 복수의 세그먼트들의 적용 동안 상기 단일 제1 가상 에셋의 읽기의 수를 반영하는 읽기 카운터를 유지하는 단계; 및 상기 읽기 카운터가 상기 읽기 인덱스와 동일하면, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계를 포함하는, 방법.
제5B절. 제4B절에 있어서, 상기 읽기 인덱스는 상기 읽기 카운터를 참조하지 않고 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 방법.
제6B절. 제3B절 내지 제5B절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 방법.
제7B절. 제1B절 내지 제5B절의 임의의 조합에 있어서, 상기 패치는 압축된 패치를 포함하고, 상기 방법은 상기 제2 가상 에셋의 일부 중 한 부분을 상기 패치된 애플리케이션에 직접 기록하기 위해 단일 세그먼트를 압축 해제하는 단계를 포함하는, 방법.
제8B절. 제1B절 내지 제6B절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 이전에 송신한 세그먼트가 설치되었다는 확인을 상기 서버 컴퓨팅 디바이스에 출력하는 단계를 더 포함하며, 상기 단일 세그먼트를 획득하는 단계는 상기 확인을 출력함에 응답하여 상기 단일 세그먼트를 수신하는 단계를 포함하는, 방법.
제9B절. 제1B절 내지 제8B절의 임의의 조합에 있어서, 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용한 후, 상기 복수의 세그먼트들 중 연속적 단일 세그먼트를 수신하기 전에 상기 단일 세그먼트를 삭제하는 단계를 더 포함하는, 방법.
제10B절. 제1B절 내지 제9B절의 임의의 조합에 있어서, 상기 단일 제2 가상 에셋의 부분들 중 일부는 상기 단일 세그먼트에서 완전히 제공되지 않았다고 결정하는 단계; 상기 부분이 상기 단일 세그먼트에서 완전히 제공되지 않았다는 결정에 응답하여, 상기 단일 세그먼트를 캐싱하는 단계; 상기 서버 컴퓨팅 디바이스로부터, 상기 복수의 세그먼트들 중 연속적인 세그먼트를 요청하는 단계; 상기 연속적인 세그먼트에 대한 요청에 응답하여, 연속적인 세그먼트를 수신하는 단계; 및 상기 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트 및 상기 연속적인 세그먼트를 상기 단일 제1 가상 에셋에 적용하는 단계를 포함하는, 방법.
제11B절. 제1B절 내지 제10B절의 임의의 조합에 있어서, 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하는 단계; 및 상기 서버 컴퓨팅 디바이스가 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하게 하는 상기 디바이스 정보를 상기 서버 컴퓨팅 디바이스에 출력하는 단계를 포함하는, 방법.
제12B절. 제1B절 내지 제10B절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 방법.
제13B절. 제1B절 내지 제10B절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 방법.
제14B절. 제1B절 내지 제13B절의 임의의 조합에 있어서, 상기 제1 복수의 에셋들 및 상기 제2 복수의 에셋들은 각각 하나 이상의 이미지, 애니메이션, 텍스처, 오디오 데이터 및 비디오 데이터를 포함하는, 방법.
제15B절. 사용자 컴퓨팅 디바이스로서, 서버 컴퓨팅 디바이스에 의해 제공된 복수의 세그먼트들 중 단일 세그먼트를 저장하도록 구성된 메모리, 상기 복수의 세그먼트들은 패치된 애플리케이션을 표현하는 단일 제2 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 표현하며; 그리고 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는: 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하고; 그리고 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하며, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함한다.
제16B절. 제15B절에 있어서, 상기 단일 세그먼트는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 삭제 명령, 쓰기 명령 및 복사 명령 중 하나 이상을 포함하는, 사용자 컴퓨팅 디바이스.
제17B절. 제15B절 및 제16B절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는: 상기 단일 제1 가상 에셋의 일부를 삭제할 시기를 나타내는 메타데이터를 획득하고; 그리고 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하도록 구성되는, 사용자 컴퓨팅 디바이스.
제18B절. 제17B절에 있어서, 상기 메타데이터는 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 복수의 세그먼트들의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하며, 상기 하나 이상의 프로세서는: 상기 복수의 세그먼트들의 적용 동안 상기 단일 제1 가상 에셋의 읽기의 수를 반영하는 읽기 카운터를 유지하고; 그리고 상기 읽기 카운터가 상기 읽기 인덱스와 동일하면, 상기 단일 제1 가상 에셋의 일부를 삭제하도록 더 구성되는, 사용자 컴퓨팅 디바이스.
제19B절. 제18B절에 있어서, 상기 읽기 인덱스는 상기 읽기 카운터를 참조하지 않고 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 사용자 컴퓨팅 디바이스.
제20B절. 제17B절 내지 제19B절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 사용자 컴퓨팅 디바이스.
제21B절. 제15B절 내지 제19B절의 임의의 조합에 있어서, 상기 패치는 단일의 압축된 패치를 포함하고, 상기 하나 이상의 프로세서는 상기 제2 가상 에셋의 일부 중 한 부분을 상기 패치된 애플리케이션에 직접 기록하기 위해 상기 단일의 압축된 세그먼트를 압축 해제하도록 더 구성되는, 사용자 컴퓨팅 디바이스.
제22B절. 제15B절 내지 제20B절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는 상기 복수의 세그먼트들 중 이전에 송신한 세그먼트가 설치되었다는 확인을 상기 서버 컴퓨팅 디바이스에 출력하도록 더 구성되며, 상기 하나 이상의 프로세서는 상기 확인을 출력함에 응답하여 상기 단일 세그먼트를 수신하도록 구성되는, 사용자 컴퓨팅 디바이스.
제23B절. 제15B절 내지 제22B절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용한 후, 상기 복수의 세그먼트들 중 연속적 단일 세그먼트를 수신하기 전에 상기 단일 세그먼트를 삭제하도록 더 구성되는, 사용자 컴퓨팅 디바이스.
제24B절. 제15B절 내지 제23B절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는: 상기 단일 제2 가상 에셋의 부분들 중 일부는 상기 단일 세그먼트에서 완전히 제공되지 않았다고 결정하고; 상기 부분이 상기 단일 세그먼트에서 완전히 제공되지 않았다는 결정에 응답하여, 상기 단일 세그먼트를 캐싱하고; 상기 서버 컴퓨팅 디바이스로부터, 상기 복수의 세그먼트들 중 연속적인 세그먼트를 요청하고; 상기 연속적인 세그먼트에 대한 요청에 응답하여, 연속적인 세그먼트를 수신하고; 그리고 상기 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트 및 상기 연속적인 세그먼트를 상기 단일 제1 가상 에셋에 적용하도록 더 구성되는, 사용자 컴퓨팅 디바이스.
제25B절. 제15B절 내지 제24B절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는: 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하고; 그리고 상기 서버 컴퓨팅 디바이스가 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하게 하는 상기 디바이스 정보를 상기 서버 컴퓨팅 디바이스에 출력하도록 구성되는, 사용자 컴퓨팅 디바이스.
제26B절. 제15B절 내지 제24B절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 사용자 컴퓨팅 디바이스.
제27B절. 제15B절 내지 제24B절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 사용자 컴퓨팅 디바이스.
제28B절. 제15B절 내지 제27B절의 임의의 조합에 있어서, 상기 제1 복수의 에셋들 및 상기 제2 복수의 에셋들은 각각 하나 이상의 이미지, 애니메이션, 텍스처, 오디오 데이터 및 비디오 데이터를 포함하는, 사용자 컴퓨팅 디바이스.
제29B절. 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 명령어는 실행시 사용자 컴퓨팅 디바이스의 하나 이상의 프로세서로 하여금: 서버 컴퓨팅 디바이스로부터 복수의 세그먼트들 중 단일 세그먼트를 획득하게 하고, 상기 복수의 세그먼트들은 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 표현하며; 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하게 하고; 그리고 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하게 하며, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함한다.
제1C절. 방법으로서, 하나 이상의 프로세서에 의해, 단일 제1 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 단일 제2 가상 에셋을 획득하기 위해 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋과 상기 제2 가상 에셋 간의 차이에 기초하여, 상기 제2 가상 에셋을 획득하기 위해 상기 단일 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 패치를 획득하는 동안, 사용자 컴퓨팅 디바이스가 상기 단일 제1 가상 에셋의 일부를 삭제할 수 있는 때를 나타내는 메타데이터를 생성하는 단계; 및 상기 하나 이상의 프로세서에 의해, 상기 패치 및 상기 메타데이터를 상기 사용자 컴퓨팅 디바이스에 출력하는 단계를 포함하는, 방법.
제2C절. 제1C절에 있어서, 상기 메타데이터는 상기 사용자 컴퓨팅 디바이스에 의해 저장된 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 패치의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하는, 방법.
제3C절. 제2C절에 있어서, 상기 읽기 인덱스는 상기 사용자 컴퓨팅 디바이스에 의해 저장된 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 방법.
제4C절. 제2C절 내지 제3C절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 방법.
제5C절. 제1C절 내지 제4C절의 임의의 조합에 있어서, 압축된 패치를 획득하기 위해 상기 패치를 압축하는 단계를 더 포함하는, 방법.
제6C절. 제1C절 내지 제5C절의 임의의 조합에 있어서, 상기 패치는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 삭제 명령, 쓰기 명령 및 복사 명령 중 하나 이상을 포함하는, 방법.
제7C절. 제1C절 내지 제6C절의 임의의 조합에 있어서, 상기 패치를 복수의 세그먼트들로 세그먼트화하는 단계를 더 포함하며, 상기 패치를 출력하는 단계는 상기 패치되지 않은 애플리케이션에 대한 상기 사용자 컴퓨팅 디바이스에 의한 개별 설치를 위해 상기 복수의 세그먼트들 중 단일 세그먼트를 상기 사용자 컴퓨팅 디바이스에 출력하는 단계를 포함하는, 방법.
제8C절. 제7C절에 있어서, 상기 단일 세그먼트를 출력하는 단계는 상기 복수의 세그먼트들 중 이전에 보낸 세그먼트가 설치되었다는 확인을 상기 사용자 컴퓨팅 디바이스로부터 수신한 후에만 상기 단일 세그먼트를 출력하는 단계를 포함하는, 방법.
제9C절. 제7C절 및 제8C절의 임의의 조합에 있어서, 상기 패치를 복수의 세그먼트들로 세그먼트화하는 단계는: 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하는 단계; 및 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기에 기초하여 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하는 단계를 포함하는, 방법.
제10C절. 제6C절 내지 제9C절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 방법.
제11C절. 제6C절 내지 제9C절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 방법.
제12C절. 제1C절 내지 제11C절의 임의의 조합에 있어서, 상기 제1 복수의 에셋들 및 상기 제2 복수의 에셋들은 각각 하나 이상의 이미지, 애니메이션, 텍스처, 오디오 데이터 및 비디오 데이터를 포함하는, 방법.
제13C절. 서버 컴퓨팅 디바이스로서, 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들 및 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 저장하도록 구성된 메모리; 및 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는: 단일 제1 가상 에셋을 획득하기 위해 상기 제1 복수의 에셋들을 가상화하고; 단일 제2 가상 에셋을 획득하기 위해 상기 제2 복수의 에셋들을 가상화하고; 상기 단일 제1 가상 에셋과 상기 단일 제2 가상 에셋 간의 차이에 기초하여, 상기 단일 제2 가상 에셋을 획득하기 위해 상기 단일 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하고; 상기 패치를 획득하는 동안, 사용자 컴퓨팅 디바이스가 상기 단일 제1 가상 에셋의 일부를 삭제할 수 있는 때를 나타내는 메타데이터를 생성하고; 그리고 상기 패치 및 상기 메타데이터를 상기 사용자 컴퓨팅 디바이스에 출력하도록 더 구성되는, 서버 컴퓨팅 디바이스.
제14C절. 제13C절에 있어서, 상기 메타데이터는 상기 사용자 컴퓨팅 디바이스에 의해 저장된 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 패치의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하는, 서버 컴퓨팅 디바이스.
제15C절. 제14C절에 있어서, 상기 읽기 인덱스는 상기 사용자 컴퓨팅 디바이스에 의해 저장된 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 서버 컴퓨팅 디바이스.
제16C절. 제14C절 내지 제15C절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 서버 컴퓨팅 디바이스.
제17C절. 제13C절 내지 제16C절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는 압축된 패치를 획득하기 위해 상기 패치를 압축하도록 더 구성되는, 서버 컴퓨팅 디바이스.
제18C절. 제13C절 내지 제17C절의 임의의 조합에 있어서, 상기 패치는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 삭제 명령, 쓰기 명령 및 복사 명령 중 하나 이상을 포함하는, 서버 컴퓨팅 디바이스.
제19C절. 제13C절 내지 제18C절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는 상기 패치를 복수의 세그먼트들로 세그먼트화하도록 더 구성되며, 상기 하나 이상의 프로세서는 상기 패치되지 않은 애플리케이션에 대한 상기 사용자 컴퓨팅 디바이스에 의한 개별 설치를 위해 상기 복수의 세그먼트들 중 단일 세그먼트를 상기 사용자 컴퓨팅 디바이스에 출력하도록 구성되는, 서버 컴퓨팅 디바이스.
제20C절. 제19C절에 있어서, 상기 하나 이상의 프로세서는 상기 복수의 세그먼트들 중 이전에 보낸 세그먼트가 설치되었다는 확인을 상기 사용자 컴퓨팅 디바이스로부터 수신한 후에만 상기 단일 세그먼트를 출력하도록 구성되는, 서버 컴퓨팅 디바이스.
제21C절. 제19C절 내지 제20C절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는: 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하고; 그리고 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기에 기초하여 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하도록 구성되는, 서버 컴퓨팅 디바이스.
제22C절. 제18C절 내지 제21C절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 서버 컴퓨팅 디바이스.
제23C절. 제18C절 내지 제21C절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 서버 컴퓨팅 디바이스.
제24C절. 제13C절 내지 제23C절의 임의의 조합에 있어서, 상기 제1 복수의 에셋들 및 상기 제2 복수의 에셋들은 각각 하나 이상의 이미지, 애니메이션, 텍스처, 오디오 데이터 및 비디오 데이터를 포함하는, 서버 컴퓨팅 디바이스.
제25C절. 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 명령어는 실행시 하나 이상의 프로세서로 하여금: 단일 제1 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하게 하고; 단일 제2 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 형성하는 복수의 에셋들을 가상화하게 하고; 상기 단일 제1 가상 에셋과 상기 단일 제2 가상 에셋 간의 차이에 기초하여, 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 식별하고, 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 획득하게 하고; 상기 패치를 획득하는 동안, 사용자 컴퓨팅 디바이스가 상기 단일 제1 가상 에셋의 일부를 삭제할 수 있는 때를 나타내는 메타데이터를 생성하게 하고; 그리고 상기 패치 및 상기 메타데이터를 상기 사용자 컴퓨팅 디바이스에 출력하게 하도록 더 구성되는, 비일시적 컴퓨터 판독가능 저장 매체.
제1D절. 방법으로서, 사용자 컴퓨팅 디바이스의 하나 이상의 프로세서에 의해, 서버 컴퓨팅 디바이스로부터, 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 사용자 컴퓨팅 디바이스가 상기 단일 제1 가상 에셋의 일부를 삭제할 수 있는 때를 나타내는 메타데이터를 상기 서버 컴퓨팅 디바이스로부터 획득하는 단계; 상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계; 상기 하나 이상의 프로세서에 의해, 단일 제2 가상 에셋을 구성하기 위해 상기 패치를 상기 단일 제1 가상 에셋에 적용하는 단계, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함하며; 및 상기 패치의 적용 동안, 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계를 포함한다.
제2D절. 제1D절에 있어서, 상기 패치는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 삭제 명령, 쓰기 명령 및 복사 명령 중 하나 이상을 포함하는, 방법.
제3D절. 제1D절 및 제2D절의 임의의 조합에 있어서, 상기 메타데이터는 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 패치의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하고, 그리고 상기 패치의 적용 동안, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계는: 상기 패치의 적용 동안 상기 단일 제1 가상 에셋의 읽기의 수를 반영하는 읽기 카운터를 유지하는 단계; 및 상기 읽기 카운터가 상기 읽기 인덱스와 동일하면, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계를 포함하는, 방법.
제4D절. 제3D절에 있어서, 상기 읽기 인덱스는 상기 읽기 카운터를 참조하지 않고 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 방법.
제5D절. 제1D절 내지 제4D절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 방법.
제6D절. 제1D절 내지 제5D절의 임의의 조합에 있어서,
상기 패치는 압축된 패치를 포함하고, 상기 방법은 상기 제2 가상 에셋의 일부 중 한 부분을 상기 패치된 애플리케이션에 직접 기록하기 위해 상기 패치를 압축 해제하는 단계를 포함하는, 방법.
제7D절. 제1D절 내지 제6D절의 임의의 조합에 있어서, 상기 패치를 획득하는 단계는 복수의 세그먼트들 중 단일 세그먼트를 획득하는 단계를 포함하며, 상기 복수의 세그먼트들은 상기 패치를 표현하며, 그리고 상기 패치를 적용하는 단계는 상기 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하는 단계를 포함하는, 방법.
제8D절. 제7D절에 있어서, 상기 복수의 세그먼트들 중 이전에 송신한 세그먼트가 설치되었다는 확인을 상기 서버 컴퓨팅 디바이스에 출력하는 단계를 더 포함하며, 상기 단일 세그먼트를 획득하는 단계는 상기 확인을 출력함에 응답하여 상기 단일 세그먼트를 수신하는 단계를 포함하는, 방법.
제9D절. 제7D절 내지 제8D절의 임의의 조합에 있어서, 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용한 후, 상기 복수의 세그먼트들 중 연속적 단일 세그먼트를 수신하기 전에 상기 단일 세그먼트를 삭제하는 단계를 더 포함하는, 방법.
제10D절. 제7D절 내지 제9D절의 임의의 조합에 있어서, 상기 단일 제2 가상 에셋의 부분들 중 일부는 상기 단일 세그먼트에서 완전히 제공되지 않았다고 결정하고; 상기 부분이 상기 단일 세그먼트에서 완전히 제공되지 않았다는 결정에 응답하여, 상기 단일 세그먼트를 캐싱하는 단계; 상기 서버 컴퓨팅 디바이스로부터, 상기 복수의 세그먼트들 중 연속적인 세그먼트를 요청하는 단계; 상기 연속적인 세그먼트에 대한 요청에 응답하여, 연속적인 세그먼트를 수신하는 단계; 및 상기 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트 및 상기 연속적인 세그먼트를 상기 단일 제1 가상 에셋에 적용하도록 더 구성되는, 사용자 컴퓨팅 디바이스.
제11D절. 제7D절 내지 제10D절의 임의의 조합에 있어서, 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하는 단계; 및 상기 서버 컴퓨팅 디바이스가 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하게 하는 상기 디바이스 정보를 상기 서버 컴퓨팅 디바이스에 출력하는 단계를 포함하는, 방법.
제12D절. 제7D절 내지 제10D절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 방법.
제13D절. 제7D절 내지 제10D절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 방법.
제14D절. 제1D절 내지 제13D절의 임의의 조합에 있어서, 상기 제1 복수의 에셋들 및 상기 제2 복수의 에셋들은 각각 하나 이상의 이미지, 애니메이션, 텍스처, 오디오 데이터 및 비디오 데이터를 포함하는, 방법.
제15D절. 사용자 컴퓨팅 디바이스로서, 패치된 애플리케이션을 표현하는 단일 제2 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 저장하도록 구성된 메모리; 그리고 하나 이상의 프로세서를 포함하며, 상기 하나 이상의 프로세서는: 단일 제2 가상 에셋을 구성하기 위해 상기 패치를 상기 단일 제1 가상 에셋에 적용하고, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함하며; 그리고 상기 패치의 적용 동안, 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하도록 구성된다.
제16D절. 제15D절에 있어서, 상기 패치는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 삭제 명령, 쓰기 명령 및 복사 명령 중 하나 이상을 포함하는, 사용자 컴퓨팅 디바이스.
제17D절. 제15D절 및 제16D절의 임의의 조합에 있어서, 상기 메타데이터는 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 패치의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하고, 상기 패치의 적용 동안, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계는: 상기 패치의 적용 동안 상기 단일 제1 가상 에셋의 읽기의 수를 반영하는 읽기 카운터를 유지하는 단계; 및 상기 읽기 카운터가 상기 읽기 인덱스와 동일하면, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계를 포함하는, 방법.
제18D절. 제17D절에 있어서, 상기 읽기 인덱스는 상기 읽기 카운터를 참조하지 않고 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 사용자 컴퓨팅 디바이스.
제19D절. 제15D절 내지 제18D절의 임의의 조합에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 사용자 컴퓨팅 디바이스.
제20D절. 제15D절 내지 제19D절의 임의의 조합에 있어서, 상기 패치는 단일의 압축된 패치를 포함하고, 상기 하나 이상의 프로세서는 상기 제2 가상 에셋의 일부 중 한 부분을 상기 패치된 애플리케이션에 직접 기록하기 위해 상기 단일의 압축된 패치를 압축 해제하도록 구성되는, 사용자 컴퓨팅 디바이스.
제21D절. 제15D절 내지 제20D절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는 복수의 세그먼트들 중 단일 세그먼트를 획득하도록 구성되며, 상기 복수의 세그먼트들은 상기 패치를 표현하며, 그리고 상기 하나 이상의 프로세서는 상기 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하도록 구성되는, 사용자 컴퓨팅 디바이스.
제22D절. 제21D절에 있어서, 상기 하나 이상의 프로세서는 상기 복수의 세그먼트들 중 이전에 송신한 세그먼트가 설치되었다는 확인을 상기 서버 컴퓨팅 디바이스에 출력하도록 더 구성되며, 상기 단일 세그먼트를 획득하는 것은 상기 확인을 출력함에 응답하여 상기 단일 세그먼트를 수신하는 것을 포함하는, 사용자 컴퓨팅 디바이스.
제23D절. 제21D절 내지 제22D절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용한 후, 상기 복수의 세그먼트들 중 연속적 단일 세그먼트를 수신하기 전에 상기 단일 세그먼트를 삭제하도록 더 구성되는, 사용자 컴퓨팅 디바이스.
제24D절. 제21D절 내지 제23D절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는: 상기 단일 제2 가상 에셋의 부분들 중 일부는 상기 단일 세그먼트에서 완전히 제공되지 않았다고 결정하고; 상기 부분이 상기 단일 세그먼트에서 완전히 제공되지 않았다는 결정에 응답하여, 상기 단일 세그먼트를 캐싱하고; 상기 서버 컴퓨팅 디바이스로부터, 상기 복수의 세그먼트들 중 연속적인 세그먼트를 요청하고; 상기 연속적인 세그먼트에 대한 요청에 응답하여, 연속적인 세그먼트를 수신하고; 및 상기 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트 및 상기 연속적인 세그먼트를 상기 단일 제1 가상 에셋에 적용하도록 더 구성되는, 사용자 컴퓨팅 디바이스.
제25D절. 제21D절 내지 제24D절의 임의의 조합에 있어서, 상기 하나 이상의 프로세서는: 상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하고; 그리고 상기 서버 컴퓨팅 디바이스가 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하게 하는 상기 디바이스 정보를 상기 서버 컴퓨팅 디바이스에 출력하도록 더 구성되는, 사용자 컴퓨팅 디바이스.
제26D절. 제21D절 내지 제24D절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 사용자 컴퓨팅 디바이스.
제27D절. 제21D절 내지 제24D절의 임의의 조합에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 사용자 컴퓨팅 디바이스.
제28D절. 제15D절 내지 제27D절의 임의의 조합에 있어서, 상기 제1 복수의 에셋들 및 상기 제2 복수의 에셋들은 각각 하나 이상의 이미지, 애니메이션, 텍스처, 오디오 데이터 및 비디오 데이터를 포함하는, 사용자 컴퓨팅 디바이스.
제29D절. 명령어가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 명령어는 실행시 사용자 컴퓨팅 디바이스의 하나 이상의 프로세서로 하여금: 서버 컴퓨팅 디바이스로부터, 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 획득하게 하고; 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하게 하고; 그리고 단일 제2 가상 에셋을 구성하기 위해 상기 패치를 상기 단일 제1 가상 에셋에 적용하게 하고, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함하며; 그리고 상기 패치의 적용 동안, 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하도록 구성된다.
하나 이상의 예시들에서, 기술된 기능들은 하드웨어, 소프트웨어, 펌웨어 또는 그것들의 임의의 조합에서 구현될 수 있다. 소프트웨어에서 구현되는 경우, 기능들은 하나 이상의 명령어들 또는 코드로서 컴퓨터 판독가능 매체에 저장되거나 컴퓨터 판독가능 매체를 통해 전송되고 하드웨어 기반 프로세싱 유닛에 의해 실행된다. 컴퓨터 판독가능 매체는 컴퓨터 판독가능 저장 매체 또는 매체들을 포함할 수 있고, 이는 데이터 저장 매체와 같은 유형적 매체 또는 예를 들어 통신 프로토콜에 따라 한 곳에서 다른 곳으로 컴퓨터 프로그램의 전송을 지원하는 임의의 매체를 포함하는 통신 매체에 대응한다. 하나 이상의 예시들에서, 기술된 기능들은 하드웨어, 소프트웨어, 펌웨어 또는 그것들의 임의의 조합에서 구현될 수 있다. 데이터 저장 매체는 본 개시에서 기술된 기법들의 구현을 위해 명령어들, 코드 및/또는 데이터 구조들을 검색하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 사용가능한 매체일 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독가능 매체를 포함할 수 있다.
제한이 아닌 예시로서, 그러한 컴퓨터 판독가능 저장 매체는 RAM, ROM, EEPROM, CD-ROM 또는 기타 광학 디스크 스토리지, 자기 디스크 스토리지, 또는 기타 자기 저장 디바이스들, 플래시 메모리 또는 명령어들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 기타 매체를 포함할 수 있다. 또한, 임의의 연결이 컴퓨터 판독가능 매체에 적절하게 명명될 수 있다. 예를 들면, 웹사이트, 서버 또는 동축 케이블, 광섬유 케이블, 꼬임쌍선, DSL 또는 적외선, 라디오 및 마이크로웨이브와 같은 무선 기술들을 사용하는 기타 원격 소스로부터 전송되는 경우, 동축 케이블, 광섬유 케이블, 꼬임쌍선, DSL 또는 적외선, 라디오 및 마이크로웨이브와 같은 무선 기술들은 매체의 정의에 포함된다. 그러나, 컴퓨터 판독가능 저장 매체 및 데이터 저장 매체는 연결, 반송파, 신호 또는 다른 일시적인 매체를 포함하지 않으나, 대신에 비일시적인 유형적 저장 매체를 지칭한다. 본 명세서에서 사용된 바와 같이, 디스크 및 디스크들은 컴팩트 디스크(CD), 레이저 디스크, 광학 디스크, DVD, 플로피 디스크 및 블루레이 디스크를 포함하며, 디스크들은 보통 데이터를 자기적으로 재생산하면서 디스크들은 데이터를 레이저로 광학적으로 재생산한다. 또한, 상기의 조합들은 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
명령어들은 하나 이상의 디지털 신호 프로세서들(DSP), 범용 마이크로프로세서들, 주문형 집적회로들(ASIC), 필드 프로그램가능 논리 배열들(FPGA) 또는 기타 균등한 통합 또는 이산 논리 회로와 같은 하나 이상의 프로세서들에 의해 실행될 수 있다. 따라서, 본 명세서에서 사용된 바와 같이, 용어 "프로세서"는 임의의 상기 구조 또는 본 명세서에 기술된 기법들의 구현에 적절한 임의의 기타 구조를 지칭할 수 있다. 추가로, 일부 양태에서, 본 명세서에 기술된 기능은 전용 하드웨어 및/또는 소프트웨어 모듈들 내에서 제공될 수 있다. 또한, 기법들은 하나 이상의 회로들 또는 논리 엘리먼트들에서 완전히 구현될 수 있다.
본 개시의 기법들은 무선 헤드셋, 집적 회로(IC) 또는 IC의 세트(예를 들어, 칩셋)를 포함하는 광범위한 디바이스들 또는 장치들에서 구현될 수 있다. 다양한 컴포넌트들, 모듈들 또는 유닛들이 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위해 본 개시에서 기술되었지만, 상이한 하드웨어 유닛들에 의한 실현을 필수적으로 요구하지 않는다. 오히려, 상기 기술된 바와 같이, 다양한 유닛들이 적절한 소프트웨어 및/또는 펌웨어와 함께 하드웨어 유닛에서 조합되거나 상기 기술된 바와 같은 하나 이상의 프로세서들을 포함하는 상호 동작적 하드웨어 유닛들의 집합에 의해 제공될 수 있다.
본 개시의 다양한 양태가 설명되었다. 이들 및 다른 양태들도 다음의 청구항들의 범위 내에 있다.

Claims (15)

  1. 방법으로서,
    사용자 컴퓨팅 디바이스의 하나 이상의 프로세서에 의해, 서버 컴퓨팅 디바이스로부터 복수의 세그먼트들 중 단일 세그먼트를 획득하는 단계, 상기 복수의 세그먼트들은 패치된 애플리케이션을 표현하는 단일 제2 가상화된 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상화된 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상화된 에셋을 업데이트하는데 사용되는 상기 제2 가상화된 에셋의 일부를 포함하는 패치를 표현하며;
    상기 하나 이상의 프로세서에 의해, 상기 단일 제1 가상 에셋을 획득하기 위해 상기 사용자 컴퓨팅 디바이스에 설치된 상기 패치되지 않은 애플리케이션을 형성하는 제1 복수의 에셋들을 가상화하는 단계;
    상기 하나 이상의 프로세서에 의해, 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용하는 단계를 포함하며, 상기 단일 제2 가상 에셋은 패치된 애플리케이션을 형성하는 제2 복수의 에셋들을 포함하는, 방법.
  2. 청구항 1에 있어서, 상기 단일 세그먼트는 상기 단일 제2 가상 에셋을 획득하기 위해 상기 제1 가상 에셋을 업데이트하는 방법을 나타내는 삭제 명령, 쓰기 명령 및 복사 명령 중 하나 이상을 포함하는, 방법.
  3. 청구항 1에 있어서,
    상기 단일 제1 가상 에셋의 일부를 삭제할 시기를 나타내는 메타데이터를 획득하는 단계; 및 상기 메타데이터에 기초하여, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계를 포함하는, 방법.
  4. 청구항 3에 있어서, 상기 메타데이터는 상기 단일 제1 가상 에셋의 일부를 삭제하기 위해 상기 복수의 세그먼트들의 적용 동안 누적 메모리가 읽혀진 후의 인덱스를 나타내는 읽기 인덱스를 포함하며, 상기 방법은:
    상기 복수의 세그먼트들의 적용 동안 상기 단일 제1 가상 에셋의 읽기의 수를 반영하는 읽기 카운터를 유지하는 단계; 및
    상기 읽기 카운터가 상기 읽기 인덱스와 동일하면, 상기 단일 제1 가상 에셋의 일부를 삭제하는 단계를 포함하는, 방법.
  5. 청구항 4에 있어서, 상기 읽기 인덱스는 상기 읽기 카운터를 참조하지 않고 상기 단일 제1 가상 에셋의 일부의 삭제를 나타내는 음의 값을 포함하는, 방법.
  6. 청구항 3에 있어서, 상기 단일 제1 가상 에셋의 일부는 상기 제1 복수의 에셋들 중의 에셋을 포함하는, 방법.
  7. 청구항 1에 있어서, 상기 패치는 압축된 패치를 포함하고, 상기 방법은 상기 제2 가상 에셋의 일부 중 한 부분을 상기 패치된 애플리케이션에 직접 기록하기 위해 단일 세그먼트를 압축 해제하는 단계를 포함하는, 방법.
  8. 청구항 1에 있어서, 상기 복수의 세그먼트들 중 이전에 송신한 세그먼트가 설치되었다는 확인을 상기 서버 컴퓨팅 디바이스에 출력하는 단계를 더 포함하며, 상기 단일 세그먼트를 획득하는 단계는 상기 확인을 출력함에 응답하여 상기 단일 세그먼트를 수신하는 단계를 포함하는, 방법.
  9. 청구항 1에 있어서, 상기 단일 세그먼트를 상기 단일 제1 가상 에셋에 적용한 후, 상기 복수의 세그먼트들 중 연속적 단일 세그먼트를 수신하기 전에 상기 단일 세그먼트를 삭제하는 단계를 더 포함하는, 방법.
  10. 청구항 1에 있어서,
    상기 단일 제2 가상 에셋의 부분들 중 일부는 상기 단일 세그먼트에서 완전히 제공되지 않았다고 결정하고;
    상기 부분이 상기 단일 세그먼트에서 완전히 제공되지 않았다는 결정에 응답하여, 상기 단일 세그먼트를 캐싱하고;
    상기 서버 컴퓨팅 디바이스로부터, 상기 복수의 세그먼트들 중 연속적인 세그먼트를 요청하고;
    상기 연속적인 세그먼트에 대한 요청에 응답하여, 연속적인 세그먼트를 수신하는 단계; 및
    상기 단일 제2 가상 에셋의 적어도 일부를 구성하기 위해 상기 단일 세그먼트 및 상기 연속적인 세그먼트를 상기 단일 제1 가상 에셋에 적용하는 단계를 더 포함하는, 방법.
  11. 청구항 1에 있어서,
    상기 사용자 컴퓨팅 디바이스의 가용 메모리 크기를 기술하는 디바이스 정보를 획득하는 단계; 및
    상기 서버 컴퓨팅 디바이스가 상기 복수의 세그먼트들 중 각 세그먼트의 크기를 결정하게 하는 상기 디바이스 정보를 상기 서버 컴퓨팅 디바이스에 출력하는 단계를 포함하는, 방법.
  12. 청구항 1에 있어서, 상기 복수의 세그먼트들 중 적어도 2개의 크기는 동일한, 방법.
  13. 청구항 1에 있어서, 상기 복수의 세그먼트들 중 각 세그먼트의 크기는 미리 정의되는, 방법.
  14. 사용자 컴퓨팅 디바이스로서,
    서버 컴퓨팅 디바이스에 의해 제공된 복수의 세그먼트들 중 단일 세그먼트를 저장하도록 구성된 메모리, 상기 복수의 세그먼트들은 패치된 애플리케이션을 표현하는 단일 제2 가상 에셋을 획득하기 위해 패치되지 않은 애플리케이션을 표현하는 제1 가상 에셋을 업데이트하는 방법을 식별하고 상기 단일 제1 가상 에셋을 업데이트하는데 사용되는 상기 제2 가상 에셋의 일부를 포함하는 패치를 표현하며; 및
    청구항 1 내지 13 중 어느 한 항의 방법을 수행하도록 구성된 하나의 프로세서를 포함하는, 사용자 컴퓨팅 디바이스.
  15. 명령어들을 저장하는 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 명령어들은 실행될 때, 컴퓨팅 디바이스의 하나 이상의 프로세서로 하여금 청구항 1 내지 13 중 어느 한 항의 방법을 수행하게 하는, 비일시적 컴퓨터 판독가능 저장 매체.
KR1020237029583A 2019-10-31 2019-12-30 컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기 KR102700120B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962928748P 2019-10-31 2019-10-31
US62/928,748 2019-10-31
KR1020217019195A KR102574280B1 (ko) 2019-10-31 2019-12-30 컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기
PCT/US2019/068973 WO2021086423A1 (en) 2019-10-31 2019-12-30 Memory efficient software patching for updating applications on computing devices

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020217019195A Division KR102574280B1 (ko) 2019-10-31 2019-12-30 컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기

Publications (2)

Publication Number Publication Date
KR20230132602A true KR20230132602A (ko) 2023-09-15
KR102700120B1 KR102700120B1 (ko) 2024-08-28

Family

ID=69185764

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237029583A KR102700120B1 (ko) 2019-10-31 2019-12-30 컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기
KR1020217019195A KR102574280B1 (ko) 2019-10-31 2019-12-30 컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020217019195A KR102574280B1 (ko) 2019-10-31 2019-12-30 컴퓨팅 디바이스에서 애플리케이션 업데이트를 위한 메모리 효율적인 소프트웨어 패치하기

Country Status (6)

Country Link
US (1) US12056483B2 (ko)
EP (1) EP3874365A1 (ko)
JP (2) JP7351917B2 (ko)
KR (2) KR102700120B1 (ko)
CN (1) CN113678102A (ko)
WO (1) WO2021086423A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12079622B2 (en) 2022-01-05 2024-09-03 Honeywell International Inc. Interruptable BSDIFF delta decompression

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140001172A (ko) * 2012-06-27 2014-01-06 구글 인코포레이티드 애플리케이션을 업데이트하는 방법
KR20180081847A (ko) * 2015-04-16 2018-07-17 구글 엘엘씨 가상 머신 시스템들

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US822531A (en) 1905-08-24 1906-06-05 Leon P Lowe Process of manufacturing gas.
GB2341249A (en) * 1998-08-17 2000-03-08 Connected Place Limited A method of generating a difference file defining differences between an updated file and a base file
US20040003266A1 (en) * 2000-09-22 2004-01-01 Patchlink Corporation Non-invasive automatic offsite patch fingerprinting and updating system and method
US8245216B2 (en) 2005-10-11 2012-08-14 Oracle International Corporation Patch management system
US8286238B2 (en) * 2006-09-29 2012-10-09 Intel Corporation Method and apparatus for run-time in-memory patching of code from a service processor
US8074218B2 (en) * 2007-03-29 2011-12-06 International Business Machines Corporation Method and system for constructing virtual resources
JP2009099071A (ja) * 2007-10-18 2009-05-07 Fuji Electric Holdings Co Ltd 情報配信システム、そのicカード利用機器、プログラム
US8015220B1 (en) 2008-08-05 2011-09-06 Smith Micro Software, Inc. Block-based differencing algorithm
US8225316B1 (en) * 2009-02-11 2012-07-17 Symantec Corporation Methods and systems for creating and applying patches for virtualized applications
US20120102480A1 (en) * 2010-10-20 2012-04-26 Microsoft Corporation High availability of machines during patching
US20130104119A1 (en) * 2011-10-24 2013-04-25 Brian Matsuo Streaming packetized binary patching system and method
CN103973475B (zh) * 2013-02-05 2018-07-06 腾讯科技(深圳)有限公司 差异补丁包生成方法及下载方法、服务器、客户端
JP6163802B2 (ja) 2013-03-14 2017-07-19 株式会社リコー サーバ装置、アップデートシステム、アップデート方法およびプログラム
JP6314775B2 (ja) 2014-09-29 2018-04-25 株式会社オートネットワーク技術研究所 通信システム、車載装置、通信装置、及びコンピュータプログラム
CN106302592B (zh) * 2015-05-28 2021-01-01 腾讯科技(深圳)有限公司 终端应用的更新方法、服务器和终端
US10860310B2 (en) * 2015-09-30 2020-12-08 Apple Inc. Software updating
JP6609508B2 (ja) 2016-04-27 2019-11-20 日立オートモティブシステムズ株式会社 車両用電子制御装置、プログラム更新方法
JP2018018307A (ja) * 2016-07-28 2018-02-01 日立建機株式会社 建設機械のソフトウェア遠隔更新システム
JP2018088034A (ja) * 2016-11-28 2018-06-07 理想科学工業株式会社 ファームウェア更新制御装置
CN106610857B (zh) * 2016-12-23 2019-01-22 优刻得科技股份有限公司 一种热补丁信息查询方法以及装置
US10261771B1 (en) * 2017-11-30 2019-04-16 Bank Of America Corporation Environment mapping and patching synthesis

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140001172A (ko) * 2012-06-27 2014-01-06 구글 인코포레이티드 애플리케이션을 업데이트하는 방법
KR20180081847A (ko) * 2015-04-16 2018-07-17 구글 엘엘씨 가상 머신 시스템들

Also Published As

Publication number Publication date
JP2023169287A (ja) 2023-11-29
KR102574280B1 (ko) 2023-09-04
CN113678102A (zh) 2021-11-19
WO2021086423A1 (en) 2021-05-06
JP7351917B2 (ja) 2023-09-27
KR20210114395A (ko) 2021-09-23
US12056483B2 (en) 2024-08-06
KR102700120B1 (ko) 2024-08-28
JP2022535477A (ja) 2022-08-09
EP3874365A1 (en) 2021-09-08
US20210373881A1 (en) 2021-12-02

Similar Documents

Publication Publication Date Title
US10152268B1 (en) System and methods for replication resource management in asymmetric secure multi-tenancy deployments in protection storage
US20200169382A1 (en) Encrypted and Compressed Data Transmission with Padding
CN108369487B (zh) 用于在去重虚拟文件系统中拍摄快照的系统和方法
US10057273B1 (en) System and method for ensuring per tenant mutual exclusion of data and administrative entities with low latency and high scale
KR20080097196A (ko) Fat 볼륨 상의 개별적인 파일들은 압축하고, 그 외의 파일들은 비압축 상태로 유지하기 위한 컴퓨터 구현 방법, 시스템 및 컴퓨터 판독 가능 매체
US10853185B1 (en) Virtual machine image backup to exclude system page file
US11416232B2 (en) Accelerating application and sub-package installations
US10496493B1 (en) Method and system for restoring applications of particular point in time
JP2023169287A (ja) コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング
US10127029B1 (en) Operating system installation using logical volumes
US11977559B2 (en) Providing instant and distributed access to a source blob via copy-on-read blobs and link blobs
US11768740B2 (en) Restoring operation of data storage systems at disaster recovery sites
US11093176B2 (en) FaaS-based global object compression
WO2023066246A1 (zh) 云手机安装应用的方法、系统和客户端云手机
CN115336237A (zh) 远程存储的文件的预测性供应
US9268496B2 (en) Choosing a multipath I/O (MPIO) path control module (PCM) for a logical unit number (LUN) on a host that supports multiple PCMS
US20220308783A1 (en) Consolidation and migration of cloud data
US10976952B2 (en) System and method for orchestrated application protection
US20160048582A1 (en) Dynamic alternate keys for use in file systems utilizing a keyed index
US11886889B2 (en) Managing configurations of system services running in a cluster of hosts by managing lifecycle of virtualization software
US11520664B2 (en) Metadata based data replication
US11762603B2 (en) Storing modified or unmodified portions of a file based on tape loading
US12079194B1 (en) Encoding table schema and storage metadata in a file store
CN109690523A (zh) 用于执行数据对象重命名操作的系统和方法

Legal Events

Date Code Title Description
A107 Divisional application of patent
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right