JP2023169287A - コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング - Google Patents

コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング Download PDF

Info

Publication number
JP2023169287A
JP2023169287A JP2023149222A JP2023149222A JP2023169287A JP 2023169287 A JP2023169287 A JP 2023169287A JP 2023149222 A JP2023149222 A JP 2023149222A JP 2023149222 A JP2023149222 A JP 2023149222A JP 2023169287 A JP2023169287 A JP 2023169287A
Authority
JP
Japan
Prior art keywords
virtual asset
patch
application
computing device
segments
Prior art date
Legal status (The legal status 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 status listed.)
Pending
Application number
JP2023149222A
Other languages
English (en)
Inventor
シュナイダー,ジェイコブ
Schneider Jakob
チャーチル,マーティン・デイビッド
David Churchill Martin
ドビス,アレッサンドロ
Dovis Alessandro
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
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 Google LLC filed Critical Google LLC
Publication of JP2023169287A publication Critical patent/JP2023169287A/ja
Pending legal-status Critical Current

Links

Images

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

Figure 2023169287000001
【課題】コンピューティングデバイスのためのメモリ効率のよいパッチングを実行する方法、サーバコンピューティングデバイス及び記憶媒体を提供する。
【解決手段】コンピューティングシステム100において、アプリケーションプロバイダサーバのメモリは、パッチされていないアプリケーションを形成する第1の複数のアセットと、パッチされたアプリケーションを形成する第2の複数のアセットとを格納する。プロセッサは、単一の第1の仮想アセットと単一の第2の仮想アセットとの間の差に基づいて、パッチを取得する。パッチは、単一の第2の仮想アセットを得るために単一の第1の仮想アセットをどのように更新するかを識別する。プロセッサはまた、パッチを複数のセグメントにセグメント化し、コンピューティングデバイスによる個々の適用のために、複数のセグメントからの単一のセグメントをコンピューティングデバイスに出力する。
【選択図】図1

Description

背景
ソフトウェア開発者は、アプリケーションの機能を向上させるために1つまたは複数のアプリケーション更新情報または「パッチ」を提供し得る。パッチは、コンパイルされたソースコード(バイトコードなどの、実行可能なコードまたはそのさまざまな抽象概念であり得る)、テクスチャ、画像、動画、映像ファイル、音声ファイル、または、実行可能なコードによって参照されるその他のリソースなどの、1つまたは複数のアプリケーション要素を含んでいてもよい。いくつかの分散環境においては、ユーザコンピューティングデバイス(たとえば、スマートフォン)は、アプリケーションストアアプリケーション(「アプリケーションストア」と称されることもある)を使用してパッチを取得およびインストールしてもよく、これらのパッチは、アプリケーションストアの実行をサポートするリモートサーバコンピューティングシステムによって提供される。
いくつかの例においては、ユーザがユーザコンピューティングデバイス上の既存のインストールされたアプリケーションを更新のために選択すると、ユーザコンピューティングデバイスは、全てのアプリケーション更新情報を含むいわゆる「パッチ」をダウンロードしてもよい。したがって、「パッチ」という表現は、コンパイルされたソースコードとコンパイルされたソースコードの最新版との間の差を意味し得る。次いで、ユーザコンピューティングデバイスは、インストールされたアプリケーションのコンパイルされたソースコード(実行可能なバイナリファイルであってもよい)のコピーを作成して、このコンパイルされたソースコードのコピーにパッチをインストールして、最新のコンパイルされたソースコードを得てもよい。このようなアプリケーション更新プロセスは、インストールされたアプリケーションのコンパイルされたソースコード、パッチ(圧縮が利用される場合には、パッチの圧縮版が、パッチの別の復元版をもたらし得る復元を必要とするので、おそらく2回)および最新のコンパイルされたソースコードを格納するのに十分な記憶空間をユーザコンピューティングデバイスが有することを要求し得る。
概要
一般に、本開示の技術は、ユーザコンピューティングデバイスが(メモリ消費量の点で)より効率的にパッチをインストールすることを可能にし得る。ユーザコンピューティングデバイスは、サーバコンピューティングデバイス(「サーバ」と称されることもある)からパッチを得てもよい。サーバは、このパッチをパッチされていないアプリケーションとパッチされたアプリケーションとの間の差として生成してもよく、パッチは、パッチされていないアプリケーションからパッチされたアプリケーションを作成するためのデータを削除するか、コピーするか、書き込むかを示す一連のコマンドを定義してもよい。パッチは、パッチされたアプリケーションを作成するために書き込まれる追加データを含んでいてもよい。サーバは、このパッチを、パッチ全体よりも合計バイト数が少ない1つまたは複数のセグメントにセグメント化してもよく、これらのセグメントの各々は、パッチされていないアプリケーションに対して個々にインストール可能である。サーバは、1つまたは複数のセグメントの各セグメントを個々にユーザコンピューティングデバイスに送信してもよい。
ユーザコンピューティングデバイスは、1つまたは複数のセグメントの各々の個々のセグメントの形式でパッチを受信し、次いで各々の個々のセグメントを一度に1つインストールしてもよい。各セグメントをインストールした後、ユーザコンピューティングデバイ
スは、1つまたは複数のセグメントの次のセグメントを要求してもよく、パッチ全体がパッチされていないアプリケーションに体系的に適用されるまでこのプロセスを繰り返す。また、サーバは、ユーザコンピューティングデバイスがパッチされていないアプリケーションのさまざまなアセットをいつ削除し得るかを示す追加のメタデータを送信してもよく、それによって、パッチされていないアプリケーションの一部を削除することでさらなるメモリが解放され得る(または、言い換えれば、利用可能なメモリが増加し得る)ので、ユーザコンピューティングデバイスがパッチの適用中に消費するメモリをさらに少なくすることができるであろう。
したがって、記載されている技術は、ユーザコンピューティングデバイスおよびユーザコンピューティングデバイスとサーバとを含むコンピューティングシステムの動作を向上させることができる。パッチを受信してセグメントにインストールすることによって、記載されている技術は、パッチをインストールするためにユーザコンピューティングデバイスで必要とされるストレージの量を減少させ、ユーザコンピューティングデバイスの性能を向上させることができる(パッチングは、経時的に抽出されることによって、パッチの適用中の処理スループットを向上させ、メモリ帯域幅利用を含む帯域幅利用を減少させることができるため)。また、パッチされていないアプリケーションへのパッチのセグメントの適用中にパッチされていないアプリケーションの一部の削除を可能にすることにより、メモリ利用をさらに減少させ、それによって、ユーザコンピューティングデバイスの性能を向上させることができる。
一例において、これらの技術のさまざまな局面は、方法を対象としており、上記方法は、1つまたは複数のプロセッサが、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るステップと、上記1つまたは複数のプロセッサが、パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得るステップと、上記1つまたは複数のプロセッサが、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るステップとを備え、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記方法はさらに、上記1つまたは複数のプロセッサが、上記パッチを複数のセグメントにセグメント化するステップと、上記1つまたは複数のプロセッサが、ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力するステップとを備える。
別の例において、これらの技術のさまざまな局面は、サーバコンピューティングデバイスを対象としており、上記サーバコンピューティングデバイスは、パッチされていないアプリケーションを形成する第1の複数のアセットと、パッチされたアプリケーションを形成する第2の複数のアセットとを格納するように構成されたメモリと、1つまたは複数のプロセッサとを備え、上記1つまたは複数のプロセッサは、上記第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るように構成され、パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得るように構成され、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るように構成され、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記1つまたは複数のプロセッサはさらに、上記パッチを複数のセグメントにセグメント化するように構成され、ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを
上記ユーザコンピューティングデバイスに出力するように構成される。
別の例において、これらの技術のさまざまな局面は、命令が格納された非一時的なコンピュータ読取可能記憶媒体を対象としており、上記命令は、実行されると、1つまたは複数のプロセッサに、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得させ、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部、上記命令はさらに、実行されると、上記1つまたは複数のプロセッサに、上記パッチを複数のセグメントにセグメント化させ、ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力させる。
別の例において、これらの技術のさまざまな局面は、方法を対象としており、上記方法は、ユーザコンピューティングデバイスの1つまたは複数のプロセッサが、複数のセグメントのうちの単一のセグメントをサーバコンピューティングデバイスから得るステップを備え、上記複数のセグメントは、パッチを表し、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想化されたアセットを得るために、パッチされていないアプリケーションを表す第1の仮想化されたアセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記方法はさらに、上記1つまたは複数のプロセッサが、上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得るステップと、上記1つまたは複数のプロセッサが、上記単一のセグメントを上記単一の第1の仮想アセットに適用して、単一の第2の仮想アセットの少なくとも一部を構築するステップとを備え、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含む。
別の例において、これらの技術のさまざまな局面は、ユーザコンピューティングデバイスを対象としており、上記ユーザコンピューティングデバイスは、サーバコンピューティングデバイスによって提供された複数のセグメントのうちの単一のセグメントを格納するように構成されたメモリを備え、上記複数のセグメントは、パッチを表し、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想アセットを得るために、パッチされていないアプリケーションを表す単一の第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記ユーザコンピューティングデバイスはさらに、1つまたは複数のプロセッサを備え、上記1つまたは複数のプロセッサは、上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得るように構成され、上記単一のセグメントを上記単一の第1の仮想アセットに適用して、単一の第2の仮想アセットの少なくとも一部を構築するように構成され、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含む。
別の例において、これらの技術のさまざまな局面は、命令が格納された非一時的なコンピュータ読取可能記憶媒体を対象としており、上記命令は、実行されると、ユーザコンピューティングデバイスの1つまたは複数のプロセッサに、複数のセグメントのうちの単一のセグメントをサーバコンピューティングデバイスから得させ、上記複数のセグメントは
、パッチを表し、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想化されたアセットを得るために、パッチされていないアプリケーションを表す第1の仮想化されたアセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記命令はさらに、実行されると、上記ユーザコンピューティングデバイスの上記1つまたは複数のプロセッサに、上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得させ、上記単一のセグメントを上記単一の第1の仮想アセットに適用して、単一の第2の仮想アセットの少なくとも一部を構築させ、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含む。
別の例において、これらの技術のさまざまな局面は、方法を対象としており、上記方法は、1つまたは複数のプロセッサが、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るステップと、上記1つまたは複数のプロセッサが、パッチされたアプリケーションを形成する第2の複数のアセットを仮想化して、単一の第2の仮想アセットを得るステップと、上記1つまたは複数のプロセッサが、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るステップとを備え、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記方法はさらに、上記1つまたは複数のプロセッサが、上記パッチを得ながら、ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを生成するステップと、上記1つまたは複数のプロセッサが、上記パッチおよび上記メタデータを上記ユーザコンピューティングデバイスに出力するステップとを備える。
別の例において、これらの技術のさまざまな局面は、サーバコンピューティングデバイスを対象としており、上記サーバコンピューティングデバイスは、パッチされていないアプリケーションを形成する第1の複数のアセットと、パッチされたアプリケーションを形成する第2の複数のアセットとを格納するように構成されたメモリと、1つまたは複数のプロセッサとを備え、上記1つまたは複数のプロセッサは、上記第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るように構成され、上記第2の複数のアセットを仮想化して、単一の第2の仮想アセットを得るように構成され、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るように構成され、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記1つまたは複数のプロセッサはさらに、上記パッチを得ながら、ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを生成するように構成され、上記パッチおよび上記メタデータを上記ユーザコンピューティングデバイスに出力するように構成される。
別の例において、これらの技術のさまざまな局面は、命令が格納された非一時的なコンピュータ読取可能記憶媒体を対象としており、上記命令は、実行されると、1つまたは複数のプロセッサに、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、パッチされたアプリケーションを形成する複数のアセットを仮想化して、単一の第2の仮想アセットを得させ、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される
上記第2の仮想アセットの一部、上記命令はさらに、実行されると、上記1つまたは複数のプロセッサに、上記パッチを得ながら、ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを生成させ、上記パッチおよび上記メタデータを上記ユーザコンピューティングデバイスに出力させる。
別の例において、これらの技術のさまざまな局面は、方法を対象としており、上記方法は、ユーザコンピューティングデバイスの1つまたは複数のプロセッサが、パッチをサーバコンピューティングデバイスから得るステップを備え、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想化されたアセットを得るために、パッチされていないアプリケーションを表す第1の仮想化されたアセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記方法はさらに、上記1つまたは複数のプロセッサが、上記ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを上記サーバコンピューティングデバイスから得るステップと、上記1つまたは複数のプロセッサが、上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得るステップと、上記1つまたは複数のプロセッサが、上記パッチを上記単一の第1の仮想アセットに適用して、上記単一の第2の仮想アセットを構築するステップとを備え、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含み、上記方法はさらに、上記パッチの適用中に、上記メタデータに基づいて、上記単一の第1の仮想アセットの上記一部を削除するステップを備える。
別の例において、これらの技術のさまざまな局面は、ユーザコンピューティングデバイスを対象としており、上記ユーザコンピューティングデバイスは、パッチを格納するように構成されたメモリを備え、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想アセットを得るために、パッチされていないアプリケーションを表す第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記ユーザコンピューティングデバイスはさらに、1つまたは複数のプロセッサを備え、上記1つまたは複数のプロセッサは、上記パッチを上記単一の第1の仮想アセットに適用して、上記単一の第2の仮想アセットを構築するように構成され、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含み、上記1つまたは複数のプロセッサはさらに、上記パッチの適用中に、上記メタデータに基づいて、上記単一の第1の仮想アセットの上記一部を削除するように構成される。
別の例において、これらの技術のさまざまな局面は、命令が格納された非一時的なコンピュータ読取可能記憶媒体を対象としており、上記命令は、実行されると、ユーザコンピューティングデバイスの1つまたは複数のプロセッサに、パッチをサーバコンピューティングデバイスから得させ、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想化されたアセットを得るために、パッチされていないアプリケーションを表す第1の仮想化されたアセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記命令はさらに、実行されると、上記ユーザコンピューティングデバイスの上記1つまたは複数のプロセッサに、上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得させ、上記パッチを上記単一の第1の仮想アセットに適用して、上記単一の第2の仮想アセットを構築させ、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含み、上記命令はさらに、実行されると、上記ユーザコンピューティングデバイスの上記1つまたは複数のプロセ
ッサに、上記パッチの適用中に、上記メタデータに基づいて、上記単一の第1の仮想アセットの上記一部を削除させる。
1つまたは複数の例の詳細は、添付の図面および以下の説明に記載されている。本開示の他の特徴、目的および利点は、説明および図面ならびに特許請求の範囲から明らかであろう。
本開示に記載されているセグメント化されたアプリケーションの更新技術のさまざまな局面を実行するように構成されたコンピューティングシステムの一例を示す概念図である。 本開示に記載されている効率的なパッチング技術のさまざまな局面を実行するように構成されたアプリケーションプロバイダサーバの一例を示すブロック図である。 本開示の1つまたは複数の局面に従った、1つまたは複数のパッチをダウンロードしてインストールするように構成されたコンピューティングデバイスの一例を示すブロック図である。 本開示に記載されている技術のさまざまな局面に従った、図1のシステムによって生成される仮想アセットの一例を示すブロック図である。 本開示に記載されているメモリ効率のよいパッチング技術に従った、図3の例に示されるコンピューティングデバイスにパッチを提供する際の、図2の例に示されるアプリケーションプロバイダサーバの動作の一例を示すフローチャートである。 本開示に記載されているメモリ効率のよいパッチング技術に従った、図3の例に示されるコンピューティングデバイスにパッチを提供する際の、図2の例に示されるアプリケーションプロバイダサーバの動作の一例を示すフローチャートである。 本開示に記載されているメモリ効率のよいパッチング技術に従った、図3の例に示されるコンピューティングデバイスにパッチを提供する際の、図2の例に示されるアプリケーションプロバイダサーバの動作の一例を示す別のフローチャートである。
詳細な説明
図1は、本開示に記載されているメモリ効率のよいパッチング技術のさまざまな局面をコンピューティングデバイスが実行し得るコンピューティングシステムの一例を示す概念図である。図1に示されるように、コンピューティングシステム100は、コンピューティングデバイス102と、アプリケーションプロバイダサーバ104とを含んでいてもよい。コンピューティングデバイス102は、アプリケーション130Aなどのアプリケーションを実行することができる任意のタイプのデバイスに相当し得て、このようなアプリケーションへのソフトウェアパッチ(「パッチ」と称されることもある)の適用をサポートする。たとえば、コンピューティングデバイス102は、携帯電話もしくはハンドセット(いわゆる「スマートフォン」を含む)、ストリーミングメディアデバイス(テレビのポートに直接挿入されるものを含む)、専用のゲームシステム、携帯型ゲームシステム、ストリーミングゲームシステム、テレビ(いわゆる「スマートテレビ」を含む)、ワイヤレススピーカ、スマートハブ、時計(いわゆる「スマートウォッチ」を含む)、スマートグラス、スマートリングもしくは他のウェアラブルデバイス、エクステンデッド・リアリティ・デバイス(仮想現実(VR)デバイス、拡張現実(AR)デバイスなど)、デジタルビデオディスク(DVD)プレーヤ、ブルーレイ(商標)プレーヤ、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、または、アプリケーションを実行することができるその他のデバイスに相当し得る。
図1の例に示されるように、コンピューティングデバイス102は、ユーザインターフェイスコンポーネント(UIC)144と、UIモジュール146と、アプリケーション
インストーラ148と、アプリケーション130Aのためのパッチを受信する前のアプリケーション130Aとを含む。コンピューティングデバイス102のUIC144は、コンピューティングデバイス102のための入力および/または出力デバイスとして機能してもよい。UIC144は、さまざまな技術を使用して実現されてもよい。たとえば、UIC144は、抵抗型タッチスクリーン、表面弾性波タッチスクリーン、容量式タッチスクリーン、投影型静電容量タッチスクリーン、感圧スクリーン、音響パルス認識タッチスクリーン、または別の存在感知表示技術などの存在感知入力スクリーンを使用した入力デバイスとして機能してもよい。
UIモジュール146は、UIC144およびコンピューティングデバイス102の他のコンポーネントとのユーザ対話を管理してもよい。UIC144およびUIモジュール146は、ユーザがUIC144によって表示されるユーザインターフェイスと対話するときに入力(たとえば、音声入力、ジェスチャ入力など)の1つまたは複数の表示をユーザから受信してもよい。パッチされていないアプリケーション130Aは、コンピューティングデバイス102に現在インストールされているアプリケーションに相当し得る。図1の例は、コンピューティングデバイス102に現在インストールされている単一のアプリケーション130Aを示しているが、任意の個数のアプリケーションがコンピューティングデバイス102上にインストールされてもよく、コンピューティングデバイス102は、必ずしも、アプリケーションを1つだけコンピューティングデバイス102にインストールさせることに限定されるものではない、ということが理解されるべきである。
アプリケーションインストーラ148は、パッチされていないアプリケーション130Aをコンピューティングデバイス102にインストールするように構成されたモジュールまたはユニットに相当し得る。また、アプリケーションインストーラ148は、アプリケーションプロバイダサーバ104によって提供されるインターフェイスを表示してもよく、コンピューティングデバイス102のユーザは、UIC144および/またはUIモジュール146を介してこのインターフェイスと対話して、パッチされていないアプリケーション130Aをダウンロードしてもよい。アプリケーションインストーラ148は、アプリケーションプロバイダサーバ104と通信して、パッチされていないアプリケーション130Aのダウンロードの準備をしてもよく、アプリケーションインストーラ148は、パッチされていないアプリケーション130Aを受信すると、パッチされていないアプリケーション130Aの復元(「解凍」と称されることもある)、メモリ管理などの、パッチされていないアプリケーション130Aをインストールするためのさまざまな動作を実行してもよい。
UIC144、UIモジュール146、アプリケーションインストーラ148、およびパッチされていないアプリケーション130Aは、コンピューティングデバイス102内に存在するおよび/またはコンピューティングデバイス102で実行されるハードウェアまたはハードウェアとソフトウェアおよび/もしくはファームウェアとの組み合わせを使用して、本明細書に記載されている動作を実行してもよい。コンピューティングデバイス102は、複数のプロセッサまたは複数のデバイスを用いて、UIモジュール146、アプリケーションインストーラ148、およびパッチされていないアプリケーション130Aを実行してもよい。場合によっては、コンピューティングデバイス102は、基盤となるハードウェア上で実行される仮想マシンとしてUIモジュール146および/またはアプリケーションインストーラ148を実行してもよい。また、UIモジュール146および/またはアプリケーションインストーラ148は、オペレーティングシステムもしくはコンピューティングプラットフォームの1つもしくは複数のサービスとして、または、コンピューティングプラットフォームのアプリケーションレイヤにおける1つもしくは複数の実行可能なプログラムとして実行されてもよい。
アプリケーション130Aは、1つまたは複数のアセット132A~132N(「アセット132」)を含んでいてもよい。アセット132は、アプリケーションの実行中にアクセスされるリソース(たとえば、画像、テクスチャ、ファイル、スクリプト、映像データ、音声データなど)などを意味し得る。パッチされていないアプリケーション130Aのアセット132は、パッチされていないアプリケーション130Aの明確な許可なしには、コンピューティングデバイス102にインストールされた他のアプリケーションがアクセスできない、ということが理解されるべきである。したがって、アセット132は、複数の異なるアプリケーションによってアクセスされる共有ライブラリまたは他のデータを含み得ない。同様に、パッチされていないアプリケーション130Aは、異なるアプリケーションのアセットにアクセスすることができない。いくつかの例においては、コンピューティングデバイス102は、パッチされていないアプリケーション130Aのアセット132を他のアプリケーションから隔離するサンドボックス環境において、パッチされていないアプリケーション130Aを実行してもよい。
図1の例にさらに示されるように、コンピューティングデバイス102は、ネットワーク108を介してアプリケーションプロバイダサーバ104と通信してもよく、ネットワーク108は、コンピューティングシステム間、サーバ間およびコンピューティングデバイス間でデータを送信するための任意のパブリックまたはプライベート通信ネットワーク、たとえば、セルラー、Wi-Fiおよび/または他のタイプのネットワークに相当し得る。ネットワーク108は、作動的に相互結合されることによってアプリケーションプロバイダサーバ104とコンピューティングデバイス102との間での情報のやりとりを提供する1つまたは複数のネットワークハブ、ネットワークスイッチ、ネットワークルータ、またはその他のネットワーク機器を含んでいてもよい。コンピューティングデバイス102およびアプリケーションプロバイダサーバ104は、任意の好適な通信技術を使用してネットワーク108を介してデータを送受信してもよい。コンピューティングデバイス102およびアプリケーションプロバイダサーバ104の各々は、それぞれのネットワークリンクを使用してネットワーク108に作動的に結合されてもよい。コンピューティングデバイス102およびアプリケーションプロバイダサーバ104をネットワーク108に結合するリンクは、イーサネット(登録商標)または他のタイプのネットワーク接続であってもよく、このような接続は、無線接続および/または有線接続であってもよい。
アプリケーションプロバイダサーバ104は、ネットワーク108などのネットワークとの間で情報を送受信することができる、1つまたは複数のデスクトップコンピュータ、ラップトップコンピュータ、メインフレーム、サーバ、クラウドコンピューティングシステムなどの任意の好適なリモートコンピューティングシステムに相当し得る。アプリケーションプロバイダサーバ104は、アプリケーションをホストし(または、少なくともアプリケーションへのアクセスを提供し)、上記のインターフェイス(アプリケーションストアなど(説明しやすくする目的で図1の例には図示せず))を表示し、このインターフェイスによって、コンピューティングデバイス102は、アプリケーションにアクセスしてネットワーク108を介してコンピューティングデバイス102にダウンロードしてもよい。
アプリケーションプロバイダサーバ104は、アプリケーションプロバイダサーバ104内に存在するおよび/またはアプリケーションプロバイダサーバ104で実行されるハードウェアまたはハードウェアとソフトウェアとファームウェアとの混合物を使用して、記載されている動作を実行してもよい。アプリケーションプロバイダサーバ104は、複数のプロセッサまたは複数のデバイスを用いて、本明細書に記載されているさまざまな動作を実行してもよい。また、アプリケーションプロバイダサーバ104は、以下により詳細に記載されているさまざまなモジュールまたはユニットを、基盤となるハードウェア上で実行される仮想マシンとして実行してもよい。いくつかの例においては、アプリケーシ
ョンプロバイダサーバ104は、インターフェイスを実行してもよく、このインターフェイスによって、オペレーティングシステムもしくはコンピューティングプラットフォームの1つもしくは複数のサービスとして、または、コンピューティングプラットフォームのアプリケーションレイヤにおける1つもしくは複数の実行可能なプログラムとしてアプリケーションにアクセスする。
アプリケーションプロバイダサーバ104は、パッチ生成ユニット116を含んでいてもよく、パッチ生成ユニット116は、パッチされていないアプリケーション110Aのためのパッチ117を生成してもよい。パッチ生成ユニット116は、属差(diff)(「Gdiff」)、bsdiffなどのパッチ117を生成するようにさまざまなパッチングアルゴリズムを実行してもよく、パッチされていないアプリケーション110Aとパッチされたアプリケーション110Bとの間の基盤となるバイナリ差を生成し、場合によってはこれらのバイナリ差を(バイナリ差に対して実行される他の動作とともに)圧縮して、パッチ117を形成してもよい。
すなわち、パッチされていないアプリケーション110Aおよびパッチされたアプリケーション110Bの各々は、さまざまな動作を実行するようにプロセッサ(または、他のハードウェア)を構成またはプログラムするコンパイルされたソースコード(または、言い換えれば、バイトコードなどの、実行可能なバイナリコードまたはその何らかの派生物)に相当し得る。パッチ生成ユニット116は、パッチされていないアプリケーション110Aとパッチされたアプリケーション110Bとの間の差を求めて、パッチされていないアプリケーション110Aをパッチされたアプリケーション110Bに更新するためのコマンド121および差123(「diff123」)(コマンド121も差123もパッチ117を形成する)のリストを出力するように構成されたユニットに相当し得る。コマンド121は、1つもしくは複数の削除動作、1つもしくは複数のコピー動作、および/または、1つもしくは複数の書き込み動作(または、それらの任意の組み合わせ)を識別してもよく、これらの動作は、パッチされたアプリケーション130Bを生成するためにパッチされていないアプリケーション130Aをどのように操作するかをコンピューティングデバイス102に指示する(パッチされていないアプリケーション130Aは、パッチされていないアプリケーション110Aの異なるインスタンスに相当し得て、パッチされたアプリケーション130Bは、パッチされたアプリケーション110Bの異なるインスタンスに相当し得る)。
パッチ117を生成すると、アプリケーションプロバイダサーバ104は、コンピューティングデバイス102によって実行されるアプリインストーラ148に接続して、パッチ117がダウンロードに利用可能であることを表示してもよい。場合によっては、アプリインストーラ148は、パッチ117が利用可能であるという表示に応答して、パッチされていないアプリケーション130Aのためのパッチ117がダウンロードおよびインストールに利用可能であるという通知または他の表示を生成してもよい。この場合、コンピューティングデバイス102のユーザは、UIC144および/またはUIモジュール146を介してアプリインストーラ148に接続して、パッチ117のダウンロードおよびインストールを開始してもよい。他の場合には、アプリインストーラ148は、パッチ117が利用可能であるという表示に応答してパッチ117を自動的にダウンロードおよびインストールしてもよい。ユーザは、システム設定でまたはアプリケーション当たり自動パッチングがイネーブルにされることを指定してもよく、自動パッチングが行われ得る時間および/または日を特定する。
にもかかわらず、コンピューティングデバイス102は、アプリケーションプロバイダサーバ104からパッチ117を得て、パッチされていないアプリケーション130Aにパッチ117をインストールして、パッチされたアプリケーション130Bを生成しても
よい。このようなパッチングが行われる目的は、アプリケーション110A/130Aの開発者が、全く新しいアプリケーション(大きいために、相当な帯域幅、すなわちネットワーク108の帯域幅と、コンピューティングデバイス102のメモリおよび/または格納帯域幅との両方、コンピューティングデバイス102のプロセッササイクルなど、を消費し得る)をダウンロードする必要なしに、追加機能を追加したり、ソフトウェアエラー(いわゆる「ソフトウェアバグ」)を修正したり、悪質な攻撃を予防したり、グラフィック機能または他の機能を更新したりすることを可能にするためである。
パッチングは、一般に、アプリケーション110A/130Aの動作を向上させることによってコンピューティングデバイス102の動作を向上させ得るが、パッチ117は、特定の場合には依然として大きいであろう(およそ数ギガバイト(たとえば、数ギガバイト~数十ギガバイト)、およそ数メガバイト(たとえば、数百メガバイト)など)。たとえば、開発者は、パッチされていないアプリケーションのアセット112A~112N(「アセット112」)(アセット132のインスタンスを意味する)を更新して、グラフィック忠実度を向上させたり、テクスチャを更新したり、映像データおよび/もしくは音声データを追加または除去したり、またはパッチされていないアプリケーション110Aのユーザエクスペリエンスを向上させる他の例示的な更新を行ったりしてもよい。したがって、パッチされたアプリケーション110Bは、異なる一組のアセット122A~122N(「アセット122」)を含んでいてもよく、アセット122のうちの1つまたはそれ以上は、アセット112とは異なっていてもよい(しかし、場合によっては、アセット122のうちの1つまたはそれ以上は、アセット112と同一であってもよい)。この例においては、パッチ生成ユニット116は、パッチされていないアプリケーション110Aのコンパイルされたソースコードとパッチされたアプリケーション110Bのコンパイルされたソースコードとの間にもしあるのなら大きな差があることを判断するのではなく、アセット112と122との間に差があることを指摘するだけでよく、その結果、アセット112のアセットに取って代わるアセットまたはアセット112のアセットに加えるアセットを含むアセット122を主に含むdiff123を生じさせる。
場合によっては、パッチングプロセスのために、コンピューティングデバイス102は、パッチされていないアプリケーション130A、パッチされたアプリケーション130Bおよびパッチ117を格納するには不十分な記憶空間(たとえば、メモリおよび/または記憶空間)を有し得る。言い換えれば、パッチ117を適用するために、コンピューティングデバイス102は、パッチされていないアプリケーション130A全体を格納しながら、パッチ117全体をダウンロードして、メモリおよび/またはストレージ内の利用可能な空間をパッチされたアプリケーション130Bのために確保してもよい。次いで、コンピューティングデバイス102は、パッチ117のコマンド121を繰り返し実行して、パッチされていないアプリケーション130Aおよびdiff123からパッチされたアプリケーション130Bを構築するための上記の動作のうちの1つまたはそれ以上を実行してもよい。これらの技術のさまざまな局面は、アセットに関して記載されているが、これらの技術は、本開示に詳細に記載されていないコンパイルされたソースコードもしくは他のタイプのファイル、リソース、および/または、データに対して実行されてもよい。
メモリおよび/またはストレージに制限があるコンピューティングデバイスがこのプロセスによってどのように影響を受けるかを説明するために、コンピューティングデバイス102が、利用可能なメモリを1.4ギガバイト(GB)しか有しておらず、1GBのサイズを有するパッチされていないアプリケーション130Aに対して400メガバイト(MB)のサイズを有するパッチ117をインストールすることによって、パッチされたアプリケーション130Bのサイズが1.2GBになると仮定する。この例示的な説明では、コンピューティングデバイス102は、1.4GBの利用可能なメモリのうちの400
MBを消費するパッチ117をダウンロードすることによって、利用可能なメモリが1GBだけになる。コンピューティングデバイス102が1.2GBのメモリをパッチされたアプリケーション130Bのために確保しようとする場合、コンピューティングデバイス102のメモリマネージャ(例示しやすくする目的で図示せず)は、利用可能なメモリが不十分である(1.2GBは、1GBの利用可能なメモリよりも大きいため)ことにより要求を拒否し得る。したがって、コンピューティングデバイス102は、パッチ117をパッチされていないアプリケーション130Aに適用することができない。
パッチ117を適用することができないことにより、コンピューティングデバイス102は、パッチされたアプリケーション130Bを実行することができず、それによって、追加機能、更新されたグラフィックス、音声エクスペリエンス、映像エクスペリエンスなどをユーザから剥奪したり、コンピューティングデバイス102をセキュリティ脆弱性にさらしたりするであろう。コンピューティングデバイス102などのコンピューティングデバイスは、進化し続けるので、このようなコンピューティングデバイスは、ますます多くの時間利用されて、利用可能なメモリの不足が往々にして適切なパッチ適用の障壁になる(映像、テキスト(テキストメッセージ、電子メールなどを含む)、画像(写真など)などの形式の大量の個人情報を格納するスマートフォンの場合など)。
本開示に記載されている技術のさまざまな局面に従って、アプリケーションプロバイダサーバ104は、パッチ117を複数のパッチセグメント127A~127N(「セグメント127」)にセグメント化して、セグメント127をコンピューティングデバイス102(「ユーザコンピューティングデバイス」の一例に相当し得る)に提供してもよく、それによって、コンピューティングデバイス102が(メモリ消費量の点で)より効率的にパッチをインストールすることを可能にするであろう。コンピューティングデバイス102は、アプリケーションプロバイダサーバ104(「サーバ」と称されることもある)からパッチ117を得てもよい。アプリケーションプロバイダサーバ104は、パッチ117を、パッチ117全体よりも総バイト数が少ない1つまたは複数のセグメント127にセグメント化してもよく、セグメント127の各々は、パッチされていないアプリケーション110A/130Aに対して個々にインストール可能である。アプリケーションプロバイダサーバ104は、1つまたは複数のセグメント127の各セグメントをコンピューティングデバイス102に個々に送信してもよい。
コンピューティングデバイス102は、1つまたは複数のセグメント127の各々の個々のセグメントの形式でパッチ117を受信し、次いで、各々の個々のセグメントを一度に1つインストールしてもよい(いくつかの場合にはこのように行われるが、他の場合には、2つまたはそれ以上のセグメント127は、diff123におけるアセット122Aのいくつかのより大きな部分または全体をインストールすることを要求されてもよい)。各セグメントをインストールした後、コンピューティングデバイス102は、セグメント127のうちの次のセグメントを要求し、パッチ117全体がパッチされていないアプリケーション130Aに体系的に適用されるまでこのプロセスを繰り返してもよい。また、アプリケーションプロバイダサーバ104は、コンピューティングデバイス102がパッチされていないアプリケーション130Aのさまざまなアセット132をいつ削除し得るかを示す追加のメタデータ119を送信してもよく、それによって、パッチされていないアプリケーション130Aの一部を削除することでさらなるメモリが解放され得る(または、言い換えれば、利用可能なメモリが増加し得る)ので、ユーザコンピューティングデバイス102が(セグメント127の反復適用の形式での)パッチ117の適用中に消費するメモリをさらに少なくすることができるであろう。
動作時、ソフトウェア開発者は、アプリケーションプロバイダサーバ104に接続して、パッチされたアプリケーション110Bをアップロードして、アプリケーションプロバ
イダサーバ104がパッチ117を生成するように要求してもよい。アプリケーションプロバイダサーバ104がパッチ117を生成することを求める要求に応答して、アプリケーションプロバイダサーバ104は、パッチ生成ユニット116を呼び出してもよく、パッチ生成ユニット116は、上記のパッチングアルゴリズムのうちの1つまたはそれ以上を実行して、パッチされていないアプリケーション110Aとパッチされたアプリケーション110Bとの間の差に基づいてパッチ117を生成してもよい。
パッチングアルゴリズムがファイル全体にわたってではなくファイルごとにdiffを実行してもよいので、パッチ生成ユニット116は、全てのアセット112を含むパッチされていないアプリケーション110Aを単一の仮想アセット114として仮想化してもよい。パッチ生成ユニット116は、アセット112を含むパッチされていないアプリケーション110Aが単一の仮想アセット114Aとして格納されるフォルダおよびサブフォルダを有する多層メモリおよび/またはストレージファイル階層を提供する仮想化アルゴリズムを実行してもよい。また、パッチ生成ユニット116は、アセット122を含むパッチされていないアプリケーション110Bが単一の仮想アセット114Bとして格納されるフォルダおよびサブフォルダを有する多層メモリおよび/またはストレージファイル階層を提供するように、アセット122を含むパッチされたアプリケーション110Bを仮想化してもよい。次いで、パッチ生成ユニット116は、単一の仮想アセット114Bに対してパッチングアルゴリズムを実行して、パッチ117のコマンド121およびdiff123を生成してもよく、コマンド121は、部分的にdiff123に基づいてパッチされたアプリケーション110Bを生成するための、パッチされていないアプリケーション110Aに対して実行すべき動作を識別する。
仮想化を実行するものとして説明しているが、サーバ104がアセットをアーカイブ(別の言い方をすれば、仮想化されたアセット)として受信し得る場合には、パッチ生成ユニット116は仮想化を実行しなくてもよい。その代わりに、サーバ104は、開発者によるアップロード時にアセット122を仮想化して、その後、仮想化されたアセットを仮想アセット114Bとして格納してもよい。
パッチ生成ユニット116は、パッチ117を出力してもよく、その結果、アプリケーションプロバイダサーバ104は、パッチ117についてコンピューティングデバイス102に通知するように上記の態様で接続してもよい。次いで、コンピューティングデバイス102は、上記のインターフェイスを介してアプリケーションプロバイダサーバ104からパッチ117を要求してもよく、パッチ117をダウンロードしてインストールするようにアプリインストーラ148を呼び出す。パッチ117に対する要求に応答して、アプリケーションプロバイダサーバ104は、パッチセグメント化ユニット118を呼び出してもよい。パッチセグメント化ユニット118は、パッチ117を1つまたは複数のパッチセグメント127にセグメント化するように構成されたモジュールまたはユニットに相当し得る。パッチセグメント化ユニット118は、コマンド121の一部のサブセットおよびdiff123の対応する部分がセグメント127の各々の中に完全に含まれるようにセグメント127の各々を作成してもよい。
場合によっては、パッチセグメント化ユニット118は、セグメント127のうちの1つに含まれるコマンド121のうちのあるコマンドによって参照されるdiff123の所与の部分を全て格納することができず、その結果、diff123の当該部分が2つまたはそれ以上のセグメント127にわたって若干断片化する。これらの場合には、パッチセグメント化ユニット118は、diff123の当該部分を2つまたはそれ以上のセグメント127にわたって分散させてもよく、その結果、diff123の当該部分全体がパッチされたアプリケーション130Bへの格納に利用できるようになるまで、コンピューティングデバイス102は、セグメント127のうちの特定のセグメントをキャッシュ
してもよい。しかし、他の例においては、パッチセグメント化ユニット118は、セグメント127の各々がコンピューティングデバイス102によって個々にインストール可能であるようにセグメント127を生成してもよい。
説明を容易にするために、セグメント127の各々がコンピューティングデバイス102によって個々にインストール可能であると仮定して、アプリケーションプロバイダサーバ104は、セグメント127の各々をコンピューティングデバイス102に個々に(たとえば、一度に1つ)出力してもよい。コンピューティングデバイス102は、コマンド121のサブセット(たとえば、コマンド121A~121N(「コマンドサブセット121」と称されることもある))と、コマンドサブセット121によって参照されるdiffセグメント123のサブセット(たとえば、「diff seg123A~123N」(「diff seg123」と称されることもある))とを含む、図1の例に示されるセグメント127Aなどのセグメントを受信してもよい。
セグメント127Aを受信したことに応答して、コンピューティングデバイス102は、セグメント化パッチアプリケーションユニット136を呼び出してもよく、セグメント化パッチアプリケーションユニット136は、パッチ117をセグメント127のシーケンスとして反復的に適用するように構成されたユニットに相当する。セグメント127Aを適用するために、セグメント化パッチアプリケーションユニット136は、まず、パッチ生成ユニット116に関して上記した態様と実質的に同様とまではいかなくても同様の態様で、パッチされていないアプリケーション130Aを仮想化して、仮想アセット134Aを作成してもよい。
次に、セグメント化パッチアプリケーションユニット136は、コマンド121を実行して、パッチされたアプリケーション130Bを表す仮想アセット134Bからアセット142を削除し、仮想アセット134Aから仮想アセット134Bにコピーし、パッチされたアプリケーション130Bを表す仮想アセットの(diffセグメント123の形式の)1つまたは複数の部分を仮想アセット134Bに書き込んでもよい。すなわち、コマンド121は、単一の仮想アセット134Bを得るために単一の仮想アセット134Aをどのように更新するかを示してもよい。したがって、セグメント化パッチアプリケーションユニット136は、単一のセグメント127Aを仮想アセット134Aに適用して、仮想アセット134Bをポピュレート、または言い換えれば構築してもよい。
加えてまたは代替例として、パッチ生成ユニット116は、パッチ117を得ながら、コンピューティングデバイス102が仮想アセット134Aの一部をいつ削除できるかを示すメタデータ119を生成してもよい。パッチ生成ユニット116は、メタデータ119を一連の1つまたは複数の命令129A~129Nとして生成してもよく、一連の1つまたは複数の命令129A~129Nの各々は、読み取りインデックスと、その後に続く、アセット132のうちの関連付けられたアセットまたはパッチされていないアプリケーション130Aの他の部分を識別する表示とを含む。図1において、命令129は、-1および213という読み取りインデックスの後に、アセット名、参照または他の識別子(図1の例においては「ASSET」と表記される)が続く2つの例を含む。
パッチ生成ユニット116は、パッチされていないアプリケーション110Aの各読み取り後にパッチ生成ユニット116がインクリメントする読み取りカウンタ139(「RC139」)を含んでいてもよい。アセット112のうちの1つの読み取りが行われると、パッチ生成ユニット116は、アセット112のうちの1つの読み取りインデックスが読み取りカウンタ139に等しいことを示すようにメタデータ119を更新して、読み取りインデックスの後のアセット112のうちの1つを識別する表示を特定してもよい。パッチ生成ユニット116は、このようにメタデータ119を体系的に生成して、アセット
112の各々または仮想アセット114A/134Aによって表されるパッチされていないアプリケーション110A/130Aの他の部分がいつ削除され得るか(または、言い換えれば、利用可能なメモリおよび/またはストレージとして印を付けられ得るか)を示してもよい。パッチ生成ユニット116は、この読み取りインデックスおよび対応するアセット識別子をメタデータ119内の命令129として特定してもよい。
パッチ生成ユニット116は、メタデータ119をパッチセグメント化ユニット118に提供してもよく、パッチセグメント化ユニット118は、メタデータ119を、コンピューティングデバイス102に送信された第1のセグメント(例示の目的で、セグメント127Aであると仮定される)に付加してもよい。アプリケーションプロバイダサーバ104は、セグメント127Aを有するコンピューティングデバイス102にメタデータ119を送信してもよい。
上記のように、コンピューティングデバイス102は、セグメント化パッチアプリケーションユニット136を呼び出してセグメント127Aを処理してもよく、その結果、セグメント化パッチアプリケーションユニット136は、セグメント127Aからメタデータ119をパーズしてもよい。次いで、セグメント化パッチアプリケーションユニット136は、パッチ生成ユニット116に関して上記したのと同じように読み取りカウンタ139を維持してもよい。メタデータ119内の読み取りインデックスが読み取りカウンタ139と一致するたびに、セグメント化パッチアプリケーションユニット136は、対応するアセット識別子によって識別されるアセット132のうちの1つ(より一般的には、パッチされていないアプリケーション130Aの任意の部分を意味し得る)を削除してもよい。
いくつかの例においては、読み取りインデックスは、負の値(-1など)を有していてもよく、これは、読み取りカウンタ139を参照することなくアセット132のうちの対応するアセットを削除できる(たとえば、それが反対された、交換された、または完全に除去されたため)ことを意味する。これらの例においては、セグメント化パッチアプリケーションユニット136は、最初に、負の値を有する対応する読み取りインデックスを備えた、アプリケーション識別子によって識別される全てのアセット132を先を見越して削除するようにメタデータ119を処理してもよい。
このように、セグメント化パッチアプリケーションユニット136は、セグメント127を繰り返し受信し続けて、セグメント127のうちの連続的なセグメントを適用する前にセグメント127の各々を個々に適用してもよい。いくつかの例においては、セグメント化パッチアプリケーションユニット136は、アプリケーションプロバイダサーバ104に接続して、セグメント127のうちの前回のセグメントが成功裏に適用されたことの確認を提供し、この確認を受信して初めて、アプリケーションプロバイダサーバ104は、セグメント127のうちの次のセグメントを送信してもよく、パッチ117の適用が成功裏に完了するように利用可能なメモリリソースを節約することを確実にするであろう。
同様に、セグメント化パッチアプリケーションユニット136は、セグメント127が仮想アセット134Aに繰り返し適用されるので読み取りカウンタ139を維持し続けてもよい。セグメント化パッチアプリケーションユニット136は、メタデータ119の命令129に対して読み取りカウンタ139を参照し続けて、読み取りカウンタ139が命令129のうちの1つの読み取りインデックスに一致するたびに、アセット132のうちの対応するアセットを削除してもよい。
したがって、記載されている技術は、コンピューティングデバイス102およびコンピューティングデバイス102とアプリケーションプロバイダサーバ104とを含むコンピ
ューティングシステムの動作を向上させることができる。パッチ117を受信してセグメント127にインストールすることによって、記載されている技術は、パッチ127をインストールするためにコンピューティングデバイス102で必要とされるストレージの量を減少させ、コンピューティングデバイス102の性能を向上させることができる(パッチングは、経時的に抽出されることによって、パッチの適用中の処理スループットを向上させ、メモリ帯域幅利用を含む帯域幅利用を減少させることができるため)。また、パッチされていないアプリケーション130Aへのパッチ117のセグメント127の適用中にパッチされていないアプリケーション130Aの一部の削除を可能にすることにより、メモリ利用をさらに減少させ、それによって、コンピューティングデバイス102の性能を向上させることができる。
図2は、本開示に記載されている効率のよいパッチング技術のさまざまな局面を実行するように構成されたアプリケーションプロバイダサーバの一例を示すブロック図である。図2は、アプリケーションプロバイダサーバ204の特定の例を1つだけ示しており、他の例においては、アプリケーションプロバイダサーバ204の多くの他の例が使用されてもよい。他の例においては、アプリケーションプロバイダサーバは、アプリケーションプロバイダサーバ104の一例に含まれるコンポーネントのサブセットを含んでいてもよく、または図2に図示されていない追加のコンポーネントを含んでいてもよい。たとえば、アプリケーションプロバイダサーバ204は、サーバのクラスタを備えていてもよく、アプリケーションプロバイダサーバ204を構成するサーバのクラスタを構成するサーバの各々は、本明細書に開示されている技術を実行するために、図2における本明細書に記載されているコンポーネントのうちの全てまたは一部を含んでいてもよい。したがって、アプリケーションプロバイダサーバ204は、アプリケーションプロバイダサーバ104の一例に相当する。
図2の例に示されるように、アプリケーションプロバイダサーバ204は、1つまたは複数のプロセッサ240と、1つまたは複数の通信ユニット242と、1つまたは複数のストレージデバイス248とを含む。プロセッサ240は、機能を実行し、および/または、アプリケーションプロバイダサーバ204に関連付けられた命令を実行してもよい。プロセッサ240の例としては、アプリケーションプロセッサ、ディスプレイコントローラ、補助プロセッサ、1つまたは複数のセンサハブ、および、プロセッサ、処理ユニットまたは処理デバイスとして機能するように構成されたその他のハードウェアが挙げられる。パッチ生成ユニット116、パッチセグメント化ユニット118およびアプリケーションストアインターフェイス260は、アプリケーションプロバイダサーバ204のさまざまなアクション、動作または機能を実行するようにプロセッサ236によって実行されてもよい。たとえば、プロセッサ240は、ストレージデバイス248によって格納された(および、パッチ生成ユニット116、パッチセグメント化ユニット118およびアプリケーションストアインターフェイス260によって表される)命令を検索して実行してもよく、これらの命令は、パッチ生成ユニット116、パッチセグメント化ユニット118およびアプリケーションストアインターフェイス260に関して本明細書に記載されている動作をプロセッサ240に実行させる。これらの命令は、プロセッサ240によって実行されると、アプリケーションプロバイダサーバ204に情報をストレージデバイス248内に格納させてもよい。
通信ユニット242は、1つまたは複数のネットワークを介してネットワーク信号を送受信することによって1つまたは複数の有線および/または無線ネットワーク(たとえば、ネットワーク108)を介して外部装置(たとえば、コンピューティングデバイス102)と通信するように構成されたユニットに相当し得る。通信ユニット242の例としては、ネットワークインターフェイスカード(たとえば、イーサネットカードなど)、光送受信機、無線周波数送受信機、グローバルポジショニング衛星(GPS)受信機、セルラ
ー送受信機、または、データを送受信することができるその他のタイプのデバイスが挙げられる。通信ユニット242の他の例としては、短波無線機、セルラーデータ無線機、ワイヤレスネットワーク無線機およびユニバーサルシリアルバス(USB)コントローラを挙げることができる。
ストレージデバイス248は、アプリケーションプロバイダサーバ204の動作中に処理するために情報を格納するように構成された1つまたは複数のメモリおよび/またはストレージデバイスに相当し得る。いくつかの例においては、ストレージデバイス248は、一時的なメモリに相当し得て、これは、ストレージデバイス248の主な目的が長期格納ではないことを意味している。ストレージデバイス248は、揮発性メモリとして情報を短期間格納し、したがって電源オフされると格納されたコンテンツを保持しないように構成されてもよい。揮発性メモリの例としては、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、および当該技術分野において公知の他の形態の揮発性メモリが挙げられる。
いくつかの例においては、ストレージデバイス248は、1つまたは複数のコンピュータ読取可能記憶媒体も含んでいてもよい。ストレージデバイス248は、1つまたは複数の非一時的なコンピュータ読取可能記憶媒体を含んでいてもよい。ストレージデバイス248は、一般的に揮発性メモリによって格納される情報の量よりも多くの量の情報を格納するように構成されてもよい。ストレージデバイス248はさらに、不揮発性メモリ空間として情報を長期間格納して、電源オン/オフサイクル後も情報を保持するように構成されてもよい。不揮発性メモリの例としては、磁気ハードディスク、光ディスク、フロッピー(登録商標)ディスク、フラッシュメモリ、または、電気的にプログラム可能なメモリ(EPROM)もしくは電気的に消去可能およびプログラム可能なメモリ(EEPROM)の形態が挙げられる。ストレージデバイス248は、パッチ生成ユニット116、パッチセグメント化ユニット118および/またはアプリケーションストアインターフェイス260に関連付けられたプログラム命令および/または情報(たとえば、データ)を格納してもよい。ストレージデバイス248は、パッチ生成ユニット116、パッチセグメント化ユニット118および/またはアプリケーションストアインターフェイス260に関連付けられたデータまたは他の情報を格納するように構成されたメモリを含んでいてもよい。
アプリケーションプロバイダサーバ204は、最初に、パッチされたアプリケーション110Bを、アプリケーション110Aをサポートすることを担当するソフトウェア開発者からアプリケーションストアインターフェイス260(アプリケーション110Aなどのアプリケーションをダウンロードするまたは得るための基盤となる電子市場と対話するための、ソフトウェア開発者、ユーザおよび他のエンティティに提供されるインターフェイスに相当し得る)を介して受信してもよい。パッチされたアプリケーション110Bを受信したことに応答して、アプリケーションプロバイダサーバ204は、パッチ生成ユニット116を呼び出して、パッチされていないアプリケーション110Aとパッチされたアプリケーション110Bとの間の差を表すパッチ117を生成してもよい。
パッチ117を生成するために、パッチ生成ユニット116は、まず、仮想化ユニット262を呼び出してもよい。仮想化ユニット262は、それぞれのパッチされていないアプリケーション110Aおよびパッチされたアプリケーション110Bなどのアプリケーションを形成するアセット112および122の各々などの複数のアセットを仮想化するように構成されたユニットに相当し得る。一例として、仮想化ユニット262は、単一のRandomAccessFileオブジェクトが複数のファイルまたは他のアセットを含むように、「RandomAccessFile」と称されるJava(登録商標)ク
ラスを拡張することによって、単一の仮想アセットとして現れるようにアセットを仮想化してもよい。言い換えれば、仮想化ユニット262は、複数の異なるアセットを互いに付加して、付加されたアセットをRandomAccessFileオブジェクト(付加されたアセットがどのようにアクセスされて、基盤となるファイルシステムに格納されるかを処理するための拡張機能を有する)に封入してもよい。このように、仮想化ユニット262は、パッチされていないアプリケーション110Aを仮想化して、仮想アセット114Aを得てもよく、パッチされたアプリケーション110Bを仮想化して、仮想アセット114Bを得てもよい。
次に、パッチ生成ユニット116は、上記のパッチングアルゴリズムのうちの1つまたはそれ以上を仮想アセット114Aおよび仮想アセット114Bに適用して、コマンド121およびdiff123を得てもよい。パッチングアルゴリズムの適用中、パッチ生成ユニット116は、メタデータ生成ユニット264を呼び出してもよく、メタデータ生成ユニット264は、パッチされていないアプリケーション(図1の例に示されるコンピューティングデバイス102のパッチされていないアプリケーション130Aなど)の他のインスタンスへのパッチ117の適用中にパッチされていないアプリケーション110Aのアセット112がいつ削除され得るかを示すメタデータ119を生成するように構成されたユニットに相当し得る。
メタデータ生成ユニット264は、アセット112に対して実行される各メモリ/ストレージデバイス読み取り動作を反映するように読み取りカウンタ139をインクリメントしてもよい。アセットの最後の読み取りが行われるたびに、メタデータ生成ユニット264は、アセット識別子とともに読み取りカウンタ139の現在の値を読み取りインデックスとして特定し、それによって、コンピューティングデバイス102に維持されている対応する読み取りカウンタ139が読み取りインデックスに等しい場合に、識別されたアセットが削除され得ることを表示してもよい。また、メタデータ生成ユニット264は、メタデータ119において、アプリケーション識別子とともに読み取りインデックスに対して負の値(-1など)を特定することによって、アセットが直ちに削除され得る(アセットは、パッチ117の生成全体を通して読み取られるわけではないため)ことをメタデータ119において表示してもよい。
パッチ117を生成した後、アプリケーションプロバイダサーバ204は、アプリケーションストアインターフェイス260を呼び出して、通信ユニット242を介してコンピューティングデバイス102に接続して、パッチ117がダウンロードに利用可能であることを表示してもよい。その後、アプリケーションプロバイダサーバ204は、パッチ117に対する要求を受信し、おそらくこの要求または別の通信を介してデバイス情報267を受信してもよい。デバイス情報267は、コンピューティングデバイス102についての1つまたは複数のタイプの情報を含んでいてもよいが、利用することができるメモリ(「利用可能なメモリ」と称されることもある)の量も特定してもよい。次に、アプリケーションプロバイダサーバ204は、パッチセグメント化ユニット118を呼び出して、デバイス情報267をパッチセグメント化ユニット118に渡してもよい。
パッチセグメント化ユニット118は、おそらくデバイス情報267に基づいて、パッチ117をセグメント127にセグメント化してもよい。すなわち、利用可能なメモリが閾値を下回っていることをデバイス情報267が示す場合、利用可能なメモリが閾値を上回っていることをデバイス情報267が示す場合に選択される(または、予め規定される)であろうサイズよりも小さいサイズをセグメント127の各々について選択してもよい。しかし、場合によっては、パッチセグメント化ユニット118は、デバイス情報267にかかわらずパッチ117をセグメント127にセグメント化してもよく、セグメント127の各々のサイズは、同一であってもよく、各セグメントについて予め規定されている
が必ずしも同一でなくてもよく、または、さまざまな基準(個々にインストール可能であることなど)に基づいて適合されてもよい。
セグメント127を生成すると、パッチセグメント化ユニット118は、圧縮ユニット266を呼び出して、(セグメント127の各々が個々に復元されるように)セグメント127の各々を互いに独立して圧縮してもよい。圧縮ユニット266は、1つまたは複数の圧縮アルゴリズムをdiffセグメント127およびおそらくコマンド121に適用するように構成されたユニットに相当し得る。セグメント127を圧縮する際、圧縮ユニット266は、セグメント127のさまざまな部分が表すコンテンツのタイプに応じて、さまざまな圧縮アルゴリズムを呼び出してもよい。すなわち、セグメント127は、やはり画像、映像、テクスチャ、テキスト、音声などに相当し得るアセット122全体を含んでいてもよく、圧縮ユニット266は、画像のための画像圧縮アルゴリズム、映像のための映像圧縮アルゴリズム、テクスチャのためのテクスチャ圧縮アルゴリズム、音声のための音声圧縮アルゴリズムなどを適用してもよい。この点において、セグメント127は、パッチ117の圧縮された部分またはセグメントに相当し得る。
次いで、アプリケーションプロバイダサーバ204は、セグメント127をコンピューティングデバイス102に繰り返し(おそらく一度に1つ)出力してもよい(1つのセグメントは、メタデータ119を含んでいてもよく、パッチ生成ユニット116は、メタデータ119をパッチ117とともにパッチセグメント化ユニット118に渡す)。アプリケーションプロバイダサーバ204は、現在のセグメントが、パッチされていないアプリケーション130Aを表す仮想アセット134Aに成功裏に適用されたことを示すコンピューティングデバイス102からの確認に応答して、連続的なセグメントのみを出力してもよい。アプリケーションプロバイダサーバ204は、このように繰り返し実行して、仮想アセット134Bを生成するために、セグメント127の各々が仮想アセット134Aに成功裏に適用されるまでセグメント127のうちの単一のセグメントを一度に供給してもよい。
図3は、本開示の1つまたは複数の局面に係る、1つまたは複数のパッチをダウンロードしてインストールするように構成されたコンピューティングデバイスの一例を示すブロック図である。図3は、コンピューティングデバイス302の特定の例を1つだけ示しており、他の例においては、コンピューティングデバイス302の多くの他の例が使用されてもよく、コンピューティングデバイス302の多くの他の例は、コンピューティングデバイス302の一例に含まれるコンポーネントのサブセットを含んでいてもよく、または図3に図示されていない追加のコンポーネントを含んでいてもよい。コンピューティングデバイス302は、図1の例に示されるコンピューティングデバイス102の一例に相当し得る。
図3の例に示されるように、コンピューティングデバイス302は、ユーザインターフェイスコンポーネント(UIC)344と、1つまたは複数のプロセッサ336と、1つまたは複数の通信ユニット338と、1つまたは複数のストレージデバイス328とを含み、それらの各々は、通信チャネル330(図2の例に示される通信チャネル250と同一とまではいかなくても同様であってもよい)によって相互接続されている。UIC314は、図1の例に示されるUIC144と同一とまではいかなくても同様であってもよい。プロセッサ336は、図2の例に示されるプロセッサ240と同一とまではいかなくても同様であってもよい。通信ユニット338は、図2の例に示される通信ユニット242と同一とまではいかなくても同様であってもよい。ストレージデバイス328は、図2の例に示されるストレージデバイス248と同一とまではいかなくても同様であってもよい。
図3の例にさらに示されるように、ユーザインターフェイスコンポーネント344は、1つまたは複数の入力コンポーネント332と、1つまたは複数の出力コンポーネント334とを含んでいてもよい。コンピューティングデバイス302の1つまたは複数の入力コンポーネント332は、入力を受信してもよい。入力の例は、触知可能な入力、音声入力および映像入力である。一例においては、入力コンポーネント332は、存在感知入力デバイス(たとえば、タッチセンシティブスクリーン、存在感知ディスプレイ)、マウス、キーボード、音声応答システム、ビデオカメラ、マイク、または、人間もしくは機械からの入力を検出するためのその他のタイプのデバイスを含む。いくつかの例においては、入力コンポーネント332は、1つまたは複数の位置センサ(GPSコンポーネント、Wi-Fiコンポーネント、セルラーコンポーネント)などの1つまたは複数のセンサコンポーネント、1つまたは複数の温度センサ、1つまたは複数の運動センサ(たとえば、加速度計、ジャイロ)、1つまたは複数の圧力センサ(たとえば、気圧計)、1つまたは複数の環境光センサ、および1つまたは複数の他のセンサ(たとえば、マイク、カメラ、赤外線近接センサ、湿度計など)を含んでいてもよい。他のセンサは、いくつかの他の非限定的な例を挙げると、心拍数センサ、磁気計、グルコースセンサ、湿度計センサ、嗅覚センサ、コンパスセンサ、ステップカウンタセンサを含んでいてもよい。
コンピューティングデバイス302の1つまたは複数の出力コンポーネント334は、出力を生成してもよい。出力の例は、触知可能な出力、音声出力および映像出力である。一例においては、コンピューティングデバイス302の出力コンポーネント334は、PSD、サウンドカード、映像グラフィックスアダプタカード、スピーカ、陰極線管(CRT)モニタ、液晶ディスプレイ(LCD)、または、人間もしくは機械への出力を生成するためのその他のタイプのデバイスを含む。
UIC344は、コンピューティングデバイス302の内部コンポーネントとして示されているが、入力および出力を送受信するためのデータ経路をコンピューティングデバイス302と共有する外部コンポーネントにも相当し得る。たとえば、一例においては、UIC344は、コンピューティングデバイス302の外部パッケージング内に位置し、コンピューティングデバイス302の外部パッケージングに物理的に接続されたコンピューティングデバイス302の内蔵コンポーネント(たとえば、携帯電話の画面)に相当する。別の例においては、UIC344は、コンピューティングデバイス302のパッケージングまたはハウジング外に位置し、コンピューティングデバイス302のパッケージングまたはハウジングから物理的に分離されたコンピューティングデバイス302の外部コンポーネント(たとえば、コンピューティングデバイス302と有線および/または無線データ経路を共有するモニタ、プロジェクタなど)に相当する。
コンピューティングデバイス302内の1つまたは複数のストレージデバイス328は、コンピューティングデバイス302の動作中に処理するために情報を格納してもよい(たとえば、コンピューティングデバイス302は、コンピューティングデバイス302による実行中にUIモジュール146、アプリケーションインストーラ148、パッチされていないアプリケーション130Aおよび1つまたは複数のセグメント127によってアクセスされるデータを格納してもよい)。ストレージデバイス328は、セグメント化パッチアプリケーションユニット136、UIモジュール146、アプリケーションインストーラ148、アプリケーション130Aおよびセグメント127Aに関連付けられたプログラム命令および/または情報(たとえば、データ)を格納してもよい。ストレージコンポーネントコンポーネント328は、セグメント化パッチアプリケーションユニット136、UIモジュール146、アプリケーションインストーラ148、アプリケーション130Aおよびセグメント127Aに関連付けられたデータまたは他の情報を格納するように構成されたメモリを含んでいてもよい。
上記のように、アプリケーションインストーラ148は、コンピューティングデバイス302にパッチをインストールするようにプロセッサ236によって実行されてもよい。アプリケーションインストーラ148は、ユーザがUIC344を介してアプリケーションストアインターフェイス260と対話して、図2の例に示されるアプリケーションプロバイダサーバ204などのアプリケーションプロバイダサーバからパッチをブラウジング、ダウンロードおよびインストールすることを可能にするアプリケーションマーケットプレイスアプリケーションの機能を実行してもよい。UIC344は、パッチされていないアプリケーション130Aのために、パッチ117などのパッチをダウンロードする要求を示す表示を受信してもよく、UIモジュール146は、この要求をアプリケーションインストーラ148に転送してもよい。パッチ117をダウンロードする要求の表示に応答して、アプリケーションインストーラ148は、次いで、この要求をアプリケーションプロバイダサーバ204に送信してもよい。
パッチ117に対する要求をアプリケーションプロバイダサーバ204に送信したことに応答して、アプリケーションインストーラ148は、パッチ117をセグメント127の各々の個々のセグメントの形式でアプリケーションプロバイダサーバ204から受信してもよい。アプリケーションインストーラ148は、アプリケーション130Aのためにパッチ117のセグメント127Aを圧縮された形式で受信してもよく、その目的は、セグメント127Aをダウンロードするのに必要な時間を減少させて、ダウンロードに使用されるネットワークリソースを減少させるためであろう。セグメント127Aのdiffセグメント123内の各アセット142(または、その一部)は、ネットワークを介してコンピューティングデバイス302に送信されるセグメント127Aのサイズを小さくするために、アセット142のタイプに特有の圧縮アルゴリズムを使用して、(たとえば、アプリケーションプロバイダサーバ204によって)圧縮されていてもよい。したがって、アプリケーションセグメント127Aが、2つまたはそれ以上の異なるタイプの2つまたはそれ以上のアセット142を含む場合、2つまたはそれ以上のタイプのアセット142の各々は、詳細に上記した異なる圧縮アルゴリズムを使用して圧縮されていてもよい。
セグメント127Aのdiffセグメント123として表されるアセット142を復元するために、セグメント化パッチアプリケーションユニット136は、復元ユニット366を呼び出してもよく、復元ユニット366は、辞書ベースの圧縮アルゴリズムを使用して圧縮されたアセットのために圧縮辞書を格納していてもよく、辞書ベースの圧縮アルゴリズムでは、圧縮辞書内のデータのブロックの位置を参照することによって、文字列などのデータのブロックを置換することができる。圧縮辞書は、データを圧縮および復元するために辞書ベースの圧縮アルゴリズムが索引付けし得るデータのブロックのインデックスを含み得る。辞書ベースの圧縮アルゴリズムを使用して圧縮されたアプリケーション要素を復元するために、復元ユニット366は、圧縮されたアセットにおける参照を、圧縮辞書内の対応する参照位置におけるデータのブロックと置換してもよい。
コンピューティングデバイス302がセグメント127Aをダウンロードすると、セグメント化パッチアプリケーションユニット136は、仮想化ユニット362を呼び出してもよい。仮想化ユニット362は、図2の例に示されるアプリケーションプロバイダサーバ204の仮想化ユニット262に関して上記した態様と実質的に同様とまではいかなくても同様の態様でパッチされていないアプリケーション130Aを仮想化するように構成されたユニットに相当し得る。仮想化ユニット362は、アセット132を含むパッチされていないアプリケーション130Aが単一のファイルとして現れるようにする単一の仮想アセット134Aを作成してもよい。
次に、セグメント化パッチアプリケーションユニット136は、コマンド121を抽出して、コマンド121に従ってdiffセグメント123の適用を開始してもよい。コマ
ンド121のコピーコマンドでは、セグメント化パッチアプリケーションユニット136は、1つまたは複数のアセット132(または、その一部)を仮想アセット134Aから仮想アセット134Bに移動させてもよく、このようなコピーされたアセットは、ここではアセット142として示される。コマンド121の削除コマンドでは、セグメント化パッチアプリケーションユニット136は、アセット132のうちの識別されたアセットを削除してもよい。コマンド121の書き込みコマンドでは、セグメント化パッチアプリケーションユニット136は、diffセグメント123のうちの1つまたはそれ以上を仮想アセット134Bに書き込んでもよく、仮想アセット134Bは、やはりアセット142として示される。
上記のように、パッチ生成ユニット116は、diffセグメント123を圧縮するために圧縮ユニット266を呼び出してもよい。したがって、diffセグメント123を書き込むために、セグメント化パッチアプリケーションユニット136は、復元ユニット366を呼び出してもよく、復元ユニット366は、セグメント127Aを復元することによって、セグメント127A内に含まれるコマンド121によって参照されるアセット142を復元してもよい。しかし、抽出(別の言い方をすれば、復元)中、圧縮されたアセットおよびアセットの一時的なコピーの両方を格納するのではなく、復元ユニット366は、ファイルシステム内の最終位置でアセットを直接抽出することによって、メモリ消費量をさらに節約してもよい。基盤となるファイルシステムへの直接的な書き込みを容易にするために、アプリケーションプロバイダサーバ204のパッチ生成ユニット116は、新たなアセットの各々(たとえば、アセット142のうちの1つまたはそれ以上)が、新たなアセットの各々の格納場所を示すパッチ117に格納される前に、さらなるヘッダ(ローカルファイルヘッダ(LFH)と称される)を書き込んでもよい。
復元ユニット366は、ローカルファイルヘッダの各々を参照して、ローカルファイルヘッダをメモリに保存してもよい。ローカルファイルヘッダを参照して、復元ユニット366は、ローカルファイルヘッダにおいて特定された位置で、ファイルシステムに対して直接的にdiffセグメント123を抽出してもよい。したがって、復元ユニット366は、diffセグメント123のコピーをファイルシステム内の対応する位置に移動させる前にdiffセグメント123の一時的なコピーをメモリ内に維持することを回避することができる。
いずれにしても、セグメント化パッチアプリケーションユニット136は、各々がコマンド121によって参照されるときに各diffセグメント123について復元ユニット366を呼び出してもよい。なぜなら、抽出は、復元された形式のdiffセグメント123の各々を仮想アセット134Bに(アセット142のうちの1つとして)直接書き込むからである。このように、セグメント化パッチアプリケーションユニット136は、おそらくメモリ効率がよりよい態様でセグメント127Aを処理することができる。セグメント化パッチアプリケーションユニット136は、パッチ127が完全にインストールされるまで、セグメント127の各々についてこのプロセスを繰り返してもよい。
いくつかの例においては、セグメント化パッチアプリケーションユニット136は、セグメント(たとえば、セグメント127A)のインストール中にシステム障害を検出してもよく、チェックポイント要素を定期的に生成することによってセグメントのインストールを再開させてもよい。図3の例においては、セグメント127Aのためのチェックポイント要素367は、定期的に生成されてもよく、ストレージコンポーネント228内に格納されてもよい。チェックポイント要素367は、アセット名、アセットステータス、アセットオフセット、セグメント127Aのインストール中に適用されていたアセットの残りのバイト、および適用される次のセグメントの表示のうちの1つまたはそれ以上を含んでいてもよい。アセット名は、システム障害時に適用されていたアセットを示す。
アセットステータスは、アセットインストールプロセス中またはアセットのためのローカルファイルヘッダ読み取りプロセス中にシステム障害が発生したことを示す。これらの例のうちの1つにおいては、ゼロという値は、アセットインストールプロセス中にシステム障害が発生したことを示してもよく、1という値は、ローカルファイルヘッダ読み取りプロセス中にシステム障害が発生したことを示してもよい。
アセットオフセットは、次のセグメントを適用し始める位置を示す。残りのバイトは、アセットのインストールを再開する位置を示す。次のセグメント要素は、インストールする次のセグメントを示す。このように、チェックポイント要素367を使用して、セグメント化パッチアプリケーションユニット136は、システム障害が発生したときにセグメントのインストールを再開させてもよい。
また、セグメント化パッチアプリケーションユニット136は、セグメント化パッチアプリケーションユニット136がアセット132をいつ削除し得るかを識別するメタデータ119も受信してもよい。すなわち、セグメント化パッチアプリケーションユニット136は、コンピューティングデバイス302に送信された第1のセグメント(たとえば、セグメント127A)とともにメタデータ119を受信してもよく、いくつかの例においては、メタデータ119は、セグメント127Aに付加されてもよい。セグメント127Aを受信したことに応答して、セグメント化パッチアプリケーションユニット136は、メタデータ処理ユニット364を呼び出してもよい。メタデータ処理ユニット364は、セグメント127Aからメタデータ119をパーズするように構成されたユニットに相当し、次いで、セグメント127の適用中に(または、言い換えれば、パッチ117の適用中に)アセット132を除去するようにメタデータ119を処理してもよい。
次いで、メタデータ処理ユニット364は、パッチ生成ユニット116に関して上記したのと同様に読み取りカウンタ139を維持してもよい。メタデータ119内の読み取りインデックスが読み取りカウンタ139に一致するたびに、セグメント化パッチアプリケーションユニット136は、対応するアセット識別子によって識別されるアセット132のうちの1つ(より一般的には、パッチされていないアプリケーション130Aの任意の部分を意味し得る)を削除してもよい。
いくつかの例においては、読み取りインデックスは、負の値(-1など)を有していてもよく、これは、読み取りカウンタ139を参照することなくアセット132のうちの対応するアセットを削除できる(たとえば、それが反対された、交換された、または完全に除去されたため)ことを意味する。これらの例においては、メタデータ処理ユニット364は、最初に、負の値を有する対応する読み取りインデックスを備えた、アプリケーション識別子によって識別される全てのアセット132(たとえば、アセット132A)を先を見越して削除するようにメタデータ119を処理してもよい。
このように、セグメント化パッチアプリケーションユニット136は、セグメント127を繰り返し受信し続けて、セグメント127のうちの連続的なセグメントを適用する前にセグメント127の各々を個々に適用してもよい。いくつかの例においては、セグメント化パッチアプリケーションユニット136は、アプリケーションプロバイダサーバ204に接続して、セグメント127のうちの前回のセグメントが成功裏に適用されたことの確認を提供し、この確認を受信して初めて、アプリケーションプロバイダサーバ104は、セグメント127のうちの次のセグメントを送信してもよく、パッチ117の適用が成功裏に完了するように利用可能なメモリリソースを節約することを確実にするであろう。
同様に、メタデータ処理ユニット364は、セグメント127が仮想アセット134A
に繰り返し適用されるので読み取りカウンタ139を維持し続けてもよい。メタデータ処理ユニット364は、メタデータ119の命令129に対して読み取りカウンタ139を参照し続けて、読み取りカウンタ139が命令129のうちの1つの読み取りインデックスに一致するたびに、アセット132のうちの対応するアセットを削除してもよい。
図4は、本開示に記載されている技術のさまざまな局面に係る、図1のシステムによって生成される仮想アセットの一例を示すブロック図である。図4の例においては、仮想アセット418は、仮想アセット114A,114B,134Aおよび/または134Bのうちのいずれか1つの例に相当し得る。仮想アセット418は、アセット416A~416N(「アセット416」)と、アセット416のうちの関連付けられたアセットを格納するためのメモリ内の対応する位置を示し得るローカルファイルヘッダ(LFH)440A~440N(「LFH440」)と、アセット416が格納されるセントラルディレクトリを基盤となるファイルシステムに規定するセントラルディレクトリ422とを含んでいてもよい。
仮想アセット418を生成するために、システム100(アプリケーションプロバイダサーバ104およびコンピューティングデバイス102のいずれかまたは両方)は、ファイルシステム階層にわたって複数のファイルを処理することができる修正RandomAccessFile機能を呼び出してもよく、フォルダとサブフォルダとの間を移動して、セントラルディレクトリ422に格納されたアセット416の各々を識別する。したがって、システム100は、アセット416の各々についてLFH440を作成し、セントラルディレクトリ422に対してアセット416の位置を識別するLFH440のうちのLFHをアセット416の各々について生成し、それによって、復元中にアセット416の各々の格納位置でアセット416の各々を直接抽出することを可能にしてもよい(それによって、図3の例に関して上記した一時的なコピーを回避する)。
図5Aおよび図5Bは、本開示に記載されているメモリ効率のよいパッチング技術に従って、図3の例に示されるコンピューティングデバイスにパッチを提供する際の、図2の例に示されるアプリケーションプロバイダサーバの動作の一例を示すフローチャートである。アプリケーションプロバイダサーバ204は、最初に、アプリケーションストアインターフェイス260を介して、パッチされていないアプリケーション110Aを受信し(498)、その後、パッチされたアプリケーション110Bを、アプリケーション110Aをサポートすることを担当するソフトウェア開発者から受信してもよい(500)。パッチされたアプリケーション110Bを受信したことに応答して、アプリケーションプロバイダサーバ204は、パッチ生成ユニット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を得てもよい(5
04)。
次に、パッチ生成ユニット116は、上記のパッチングアルゴリズムのうちの1つまたはそれ以上を仮想アセット114Aおよび仮想アセット114Bに適用して、コマンド121およびdiff123を得てもよく、コマンド121およびdiff123はまとめてパッチ117に相当し得る(506)。パッチ117を生成した後、アプリケーションプロバイダサーバ204は、アプリケーションストアインターフェイス260を呼び出して、通信ユニット242を介してコンピューティングデバイス102に接続して、パッチ117がダウンロードに利用可能であることを表示してもよい(508)。コンピューティングデバイス302のUIC344は、パッチされていないアプリケーション130Aのために、パッチ117などのパッチをダウンロードする要求を示す表示を受信してもよく(510)、UIモジュール146は、この要求をアプリケーションインストーラ148に転送してもよい。パッチ117をダウンロードする要求の表示に応答して、アプリケーションインストーラ148は、パッチ117に対する要求をアプリケーションプロバイダサーバ204に送信してもよい(512)。
その後、アプリケーションプロバイダサーバ204は、パッチ117に対する要求を受信してもよく(514)、おそらくこの要求または別の通信を介してデバイス情報267を受信してもよい。デバイス情報267は、コンピューティングデバイス102についての1つまたは複数のタイプの情報を含んでいてもよいが、利用することができるメモリ(「利用可能なメモリ」と称されることもある)の量も特定してもよい。次に、アプリケーションプロバイダサーバ204は、パッチセグメント化ユニット118を呼び出して、デバイス情報267をパッチセグメント化ユニット118に渡してもよい。
パッチセグメント化ユニット118は、おそらくデバイス情報267に基づいて、パッチ117をセグメント127にセグメント化してもよい(516)。すなわち、利用可能なメモリが閾値を下回っていることをデバイス情報267が示す場合、パッチセグメント化ユニット118は、利用可能なメモリが閾値を上回っていることをデバイス情報267が示す場合に選択される(または、予め規定される)であろうサイズよりも小さいサイズをセグメント127の各々について選択してもよい。しかし、場合によっては、パッチセグメント化ユニット118は、デバイス情報267にかかわらずパッチ117をセグメント127にセグメント化してもよく、セグメント127の各々のサイズは、同一であってもよく、各セグメントについて予め規定されているが必ずしも同一でなくてもよく、または、さまざまな基準(個々にインストール可能であることなど)に基づいて適合されてもよい。
セグメント127を生成すると、パッチセグメント化ユニット118は、圧縮ユニット266を呼び出して、セグメント127の各々を互いに独立して(セグメント127の各々が個々に復元されるように)圧縮してもよい(518)。次いで、アプリケーションプロバイダサーバ204は、セグメント127をコンピューティングデバイス102に繰り返し(おそらく一度に1つ)出力してもよく(1つのセグメントは、メタデータ119を含んでいてもよい)、パッチ生成ユニット116は、セグメント127をパッチ117とともにパッチセグメント化ユニット118に渡してもよい。アプリケーションプロバイダサーバ204は、セグメント127の最初のセグメントを出力してもよい(520)。
アプリケーションインストーラ148は、アプリケーション130Aのためにパッチ117の最初のセグメント127Aを圧縮された形式で受信してもよく、その目的は、セグメント127Aをダウンロードするのに必要な時間を減少させて、ダウンロードに使用されるネットワークリソースを減少させるためであろう。したがって、アプリケーションインストーラ148は、圧縮された最初のセグメント127Aを受信してもよい(522)
。セグメント127Aのdiffセグメント123として表されるアセット142を復元するために、セグメント化パッチアプリケーションユニット136は、復元ユニット366を呼び出してもよく、復元ユニット366は、セグメント127Aを復元してもよい(524)。
次に、仮想化ユニット362は、図2の例に示されるアプリケーションプロバイダサーバ204の仮想化ユニット262に関して上記した態様と実質的に同様とまではいかなくても同様の態様で、パッチされていないアプリケーション130Aを仮想化してもよい(526)。仮想化ユニット362は、アセット132を含むパッチされていないアプリケーション130Aが単一のファイルとして現れるようにする単一の仮想アセット134Aを作成してもよい。
次に、セグメント化パッチアプリケーションユニット136は、コマンド121を抽出して、コマンド121に従ってdiffセグメント123の適用を開始してもよい。セグメント化パッチアプリケーションユニット136は、各々がコマンド121によって参照されるときに各diffセグメント123について復元ユニット366を呼び出してもよい。なぜなら、抽出は、復元された形式のdiffセグメント123の各々を仮想アセット134Bに(アセット142のうちの1つとして)直接書き込むからである。このように、セグメント化パッチアプリケーションユニット136は、おそらくメモリ効率がよりよい態様でセグメント127Aを処理することができる。このように、セグメント化パッチアプリケーションユニット136は、最初のセグメント127Aを復元して(527)、最初のセグメント127を第1の仮想アセットに適用して、第2の仮想アセットを得てもよい(528)。
最初のセグメント127Aの適用が成功すると、セグメント化パッチアプリケーションユニット136は、最初のセグメント127Aの適用が完了したことの確認を生成して、この確認をアプリケーションプロバイダサーバ204に送信してもよい(530,532)。アプリケーションプロバイダサーバ204は、この確認を受信して(534)、送信すべきさらなるセグメント127があるか否かを判断してもよい(536)。送信すべきさらなるセグメント127がある場合、アプリケーションプロバイダサーバ204は、セグメント127のうちの次のセグメントを出力し(538)、コンピューティングデバイス302は、この次のセグメントを上記のように受信して、復元して、適用してもよい(540~544)。コンピューティングデバイス302は、受信したセグメントの適用が完了したことの別の確認を生成して、この確認を上記のように出力してもよい(546,532)。
このプロセスは、さらなるセグメントがないとアプリケーションプロバイダサーバ204が判断する(532~546)まで継続してもよい。コンピューティングデバイス302に送信すべきさらなるセグメントが残されていない場合(536において「NO」)、アプリケーションプロバイダサーバ204は、さらなるセグメントがない(または、言い換えれば、パッチ全体が提供および適用された)という表示を送信してもよい(548)。
図6は、本開示に記載されているメモリ効率のよいパッチング技術に従って、図3の例に示されるコンピューティングデバイスにパッチを提供する際の、図2の例に示されるアプリケーションプロバイダサーバの動作の一例を示す別のフローチャートである。上記のように、アプリケーションプロバイダサーバ204は、最初に、アプリケーションストアインターフェイス260を介して、パッチされたアプリケーション110Bを、アプリケーション110Aをサポートすることを担当するソフトウェア開発者から受信してもよい(600)。パッチされたアプリケーション110Bを受信したことに応答して、アプリ
ケーションプロバイダサーバ204は、パッチ生成ユニット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は、上記のパッチングアルゴリズムのうちの1つまたはそれ以上を仮想アセット114Aおよび仮想アセット114Bに適用して、コマンド121およびdiff123を得てもよく、コマンド121およびdiff123はまとめてパッチ117に相当し得る(606)。パッチングアルゴリズムの適用中に、パッチ生成ユニット116は、メタデータ生成ユニット264を呼び出してもよく、メタデータ生成ユニット264は、パッチされていないアプリケーション(図1の例に示されるコンピューティングデバイス102のパッチされていないアプリケーション130Aなど)の他のインスタンスへのパッチ117の適用中にパッチされていないアプリケーション110Aのアセット112がいつ削除され得るかを示すメタデータ119を生成するように構成されたユニットに相当し得る(608)。
パッチ117を生成した後、アプリケーションプロバイダサーバ204は、アプリケーションストアインターフェイス260を呼び出して、通信ユニット242を介してコンピューティングデバイス102に接続して、パッチ117がダウンロードに利用可能であることを表示してもよい(610)。コンピューティングデバイス302のUIC344は、パッチされていないアプリケーション130Aのために、パッチ117などのパッチをダウンロードする要求を示す表示を受信してもよく(612)、UIモジュール146は、この要求をアプリケーションインストーラ148に転送してもよい。パッチ117をダウンロードする要求の表示に応答して、アプリケーションインストーラ148は、次いで、パッチ117に対する要求をアプリケーションプロバイダサーバ204に送信してもよい(614)。
その後、アプリケーションプロバイダサーバ204は、パッチ117に対する要求を受信して(616)、メタデータ119とともにパッチ117を(おそらく、上記の1つまたは複数のセグメント127として)出力してもよい(618)。セグメント化パッチアプリケーションユニット136は、パッチ117およびメタデータ119を受信してもよく(620)、メタデータ119は、セグメント化パッチアプリケーションユニット136がいつアセット132を削除し得るかを識別してもよい。いくつかの例においては、セグメント化パッチアプリケーションユニット136は、コンピューティングデバイス302に送信された第1のセグメント(たとえば、セグメント127A)とともにメタデータ119を受信してもよく、いくつかの例においては、メタデータ119は、セグメント127Aに付加されてもよい。セグメント127Aを受信したことに応答して、セグメント
化パッチアプリケーションユニット136は、メタデータ処理ユニット364を呼び出してもよい。メタデータ処理ユニット364は、セグメント127Aからメタデータ119をパーズし、次いで、セグメント127の適用中に(または、言い換えれば、パッチ117の適用中に)アセット132を除去するようにメタデータ119を処理してもよい(622)。
このように、セグメント化パッチアプリケーションユニット136は、セグメント127を繰り返し受信し続けて、セグメント127のうちの連続的なセグメントを適用する前にセグメント127の各々を個々に適用してもよい。いくつかの例においては、セグメント化パッチアプリケーションユニット136は、アプリケーションプロバイダサーバ204に接続して、セグメント127のうちの前回のセグメントが成功裏に適用されたことの確認を提供してもよく、この確認を受信して初めて、アプリケーションプロバイダサーバ104は、セグメント127のうちの次のセグメントを送信してもよく、パッチ117の適用が成功裏に完了するように利用可能なメモリリソースを節約することを確実にするであろう。
これらの技術のさまざまな局面は、以下の項に関して以下に記載されているさまざまな例を可能にし得る。
第1A項
方法であって、
1つまたは複数のプロセッサが、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るステップと、
上記1つまたは複数のプロセッサが、パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得るステップと、
上記1つまたは複数のプロセッサが、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るステップとを備え、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記方法はさらに、
上記1つまたは複数のプロセッサが、上記パッチを複数のセグメントにセグメント化するステップと、
上記1つまたは複数のプロセッサが、ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力するステップとを備える、方法。
第2A項
上記単一のセグメントは、コピーコマンドと、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを示す書き込みコマンドとを含む、第1A項に記載の方法。
第3A項
上記単一の第1の仮想アセットの一部をいつ削除するかを示すメタデータを生成するステップと、
上記メタデータを上記ユーザコンピューティングデバイスに出力するステップとをさらに備える、第1A項および第2A項の任意の組み合わせに記載の方法。
第4A項
上記メタデータは、読み取りインデックスを含み、上記読み取りインデックスは、上記
読み取りインデックスの後に、上記単一の第1の仮想アセットの一部を削除するために、上記複数のセグメントの適用中に累積メモリが読み取るものを示す、第3A項に記載の方法。
第5A項
上記読み取りインデックスは、上記単一の第1の仮想アセットの上記一部の削除を示す負の値を含む、第4A項に記載の方法。
第6A項
上記単一の第1の仮想アセットの上記一部は、上記第1の複数のアセットのうちのアセットを含む、第3A項~第5A項の任意の組み合わせに記載の方法。
第7A項
上記複数のセグメントの各々を圧縮して、複数の圧縮されたセグメントを得るステップをさらに備える、第1A項~第5A項の任意の組み合わせに記載の方法。
第8A項
上記単一のセグメントを出力するステップは、上記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を上記ユーザコンピューティングデバイスから受信して初めて、上記単一のセグメントを出力するステップを含む、第1A項~第6A項の任意の組み合わせに記載の方法。
第9A項
上記パッチを複数のセグメントにセグメント化するステップは、
上記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るステップと、
上記ユーザコンピューティングデバイスの上記利用可能なメモリサイズに基づいて、上記複数のセグメントからの各セグメントのサイズを決定するステップとを備える、第1A項~第8A項の任意の組み合わせに記載の方法。
第10A項
上記複数のセグメントのうちの少なくとも2つのサイズは同一である、第1A項~第9A項の任意の組み合わせに記載の方法。
第11A項
上記複数のセグメントからの各セグメントのサイズは、予め規定されている、第1A項~第9A項の任意の組み合わせに記載の方法。
第12A項
上記第1の複数のアセットおよび上記第2の複数のアセットの各々は、画像、動画、テクスチャ、音声データおよび映像データのうちの1つまたはそれ以上を備える、第1A項~第11A項の任意の組み合わせに記載の方法。
第13A項
サーバコンピューティングデバイスであって、
パッチされていないアプリケーションを形成する第1の複数のアセットと、パッチされたアプリケーションを形成する第2の複数のアセットとを格納するように構成されたメモリと、
1つまたは複数のプロセッサとを備え、上記1つまたは複数のプロセッサは、
上記第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るように構
成され、
パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得るように構成され、
上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るように構成され、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記1つまたは複数のプロセッサはさらに、
上記パッチを複数のセグメントにセグメント化するように構成され、
ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力するように構成される、サーバコンピューティングデバイス。
第14A項
上記単一のセグメントは、コピーコマンドと、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを示す書き込みコマンドとを含む、第13A項に記載のサーバコンピューティングデバイス。
第15A項
上記1つまたは複数のプロセッサはさらに、
上記単一の第1の仮想アセットの一部をいつ削除するかを示すメタデータを生成するように構成され、
上記メタデータを上記ユーザコンピューティングデバイスに出力するように構成される、第13A項および第14A項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第16A項
上記メタデータは、読み取りインデックスを含み、上記読み取りインデックスは、上記読み取りインデックスの後に、上記単一の第1の仮想アセットの一部を削除するために、上記複数のセグメントの適用中に累積メモリが読み取るものを示す、第15A項に記載のサーバコンピューティングデバイス。
第17A項
上記読み取りインデックスは、上記単一の第1の仮想アセットの上記一部の削除を示す負の値を含む、第16A項に記載のサーバコンピューティングデバイス。
第18A項
上記単一の第1の仮想アセットの上記一部は、上記第1の複数のアセットのうちのアセットを含む、第15A項~第17A項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第19A項
上記1つまたは複数のプロセッサは、上記複数のセグメントの各々を圧縮して、複数の圧縮されたセグメントを得るようにさらに構成される、第13A項~第17A項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第20A項
上記1つまたは複数のプロセッサは、上記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を上記ユーザコンピューティングデバイスから
受信して初めて、上記単一のセグメントを出力するように構成される、第13A項~第18A項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第21A項
上記1つまたは複数のプロセッサは、
上記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るように構成され、
上記ユーザコンピューティングデバイスの上記利用可能なメモリサイズに基づいて、上記複数のセグメントからの各セグメントのサイズを決定するように構成される、第13A項~第20A項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第22A項
上記複数のセグメントのうちの少なくとも2つのサイズは同一である、第13A項~第21A項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第23A項
上記複数のセグメントからの各セグメントのサイズは、予め規定されている、第13A項~第21A項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第24A項
上記第1の複数のアセットおよび上記第2の複数のアセットの各々は、画像、動画、テクスチャ、音声データおよび映像データのうちの1つまたはそれ以上を備える、第13A項~第23A項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第25A項
命令が格納された非一時的なコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、1つまたは複数のプロセッサに、
パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、
パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得させ、
上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部、上記命令はさらに、実行されると、上記1つまたは複数のプロセッサに、
上記パッチを複数のセグメントにセグメント化させ、
ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力させる、非一時的なコンピュータ読取可能記憶媒体。
第1B項
方法であって、
ユーザコンピューティングデバイスの1つまたは複数のプロセッサが、複数のセグメントのうちの単一のセグメントをサーバコンピューティングデバイスから得るステップを備え、上記複数のセグメントは、パッチを表し、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想化されたアセットを得るために、パッチされていないアプリケーションを表す第1の仮想化されたアセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの
一部を含み、上記方法はさらに、
上記1つまたは複数のプロセッサが、上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得るステップと、
上記1つまたは複数のプロセッサが、上記単一のセグメントを上記単一の第1の仮想アセットに適用して、単一の第2の仮想アセットの少なくとも一部を構築するステップとを備え、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含む、方法。
第2B項
上記単一のセグメントは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを示す、削除コマンド、コピーコマンドおよび書き込みコマンドのうちの1つまたはそれ以上を含む、第1B項に記載の方法。
第3B項
上記単一の第1の仮想アセットの一部をいつ削除するかを示すメタデータを得るステップと、
上記メタデータに基づいて上記単一の第1の仮想アセットの一部を削除するステップとをさらに備える、第1B項および第2B項の任意の組み合わせに記載の方法。
第4B項
上記メタデータは、読み取りインデックスを含み、上記読み取りインデックスは、上記読み取りインデックスの後に、上記単一の第1の仮想アセットの一部を削除するために、上記複数のセグメントの適用中に累積メモリが読み取るものを示し、
上記方法はさらに、
上記複数のセグメントの適用中に上記単一の第1の仮想アセットの複数回の読み取りを反映する読み取りカウンタを維持するステップと、
上記読み取りカウンタが上記読み取りインデックスに等しい場合に、上記単一の第1の仮想アセットの上記一部を削除するステップとを備える、第3B項に記載の方法。
第5B項
上記読み取りインデックスは、上記読み取りカウンタを参照することなく上記単一の第1の仮想アセットの上記一部の削除を示す負の値を含む、第4B項に記載の方法。
第6B項
上記単一の第1の仮想アセットの上記一部は、上記第1の複数のアセットのうちのアセットを含む、第3B項~第5B項の任意の組み合わせに記載の方法。
第7B項
上記パッチは、圧縮されたパッチを含み、
上記方法は、上記単一のセグメントを復元して、上記第2の仮想アセットの上記一部のうちの1つを上記パッチされたアプリケーションに直接書き込むステップを備える、第1B項~第5B項の任意の組み合わせに記載の方法。
第8B項
上記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を上記サーバコンピューティングデバイスに出力するステップをさらに備え、上記単一のセグメントを得るステップは、上記確認を出力したことに応答して上記単一のセグメントを受信するステップを備える、第1B項~第6B項の任意の組み合わせに記載の方法。
第9B項
上記単一のセグメントを上記単一の第1の仮想アセットに適用した後、上記複数のセグメントのうちの連続的な単一のセグメントを受信する前に上記単一のセグメントを削除するステップをさらに備える、第1B項~第8B項の任意の組み合わせに記載の方法。
第10B項
上記単一の第2の仮想アセットの上記一部のうちのある部分が上記単一のセグメントに十分に提供されていないことを判断するステップと、
上記部分が上記単一のセグメントに十分に提供されていないと判断したことに応答して、上記単一のセグメントをキャッシュするステップと、
上記複数のセグメントのうちの連続的なセグメントを上記サーバコンピューティングデバイスから要求するステップと、
上記連続的なセグメントに対する上記要求に応答して、上記連続的なセグメントを受信するステップと、
上記単一のセグメントおよび上記連続的なセグメントを上記単一の第1の仮想アセットに適用して、少なくとも上記単一の第2の仮想アセットの上記部分を構築するステップとをさらに備える、第1B項~第9B項の任意の組み合わせに記載の方法。
第11B項
上記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るステップと、
上記デバイス情報を上記サーバコンピューティングデバイスに出力して、上記サーバコンピューティングデバイスが上記複数のセグメントからの各セグメントのサイズを決定することを可能にするステップとをさらに備える、第1B項~第10B項の任意の組み合わせに記載の方法。
第12B項
上記複数のセグメントのうちの少なくとも2つのサイズは同一である、第1B項~第10B項の任意の組み合わせに記載の方法。
第13B項
上記複数のセグメントからの各セグメントのサイズは、予め規定されている、第1B項~第10B項の任意の組み合わせに記載の方法。
第14B項
上記第1の複数のアセットおよび上記第2の複数のアセットの各々は、画像、動画、テクスチャ、音声データおよび映像データのうちの1つまたはそれ以上を備える、第1B項~第13B項の任意の組み合わせに記載の方法。
第15B項
ユーザコンピューティングデバイスであって、
サーバコンピューティングデバイスによって提供された複数のセグメントのうちの単一のセグメントを格納するように構成されたメモリを備え、上記複数のセグメントは、パッチを表し、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想アセットを得るために、パッチされていないアプリケーションを表す単一の第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記ユーザコンピューティングデバイスはさらに、
1つまたは複数のプロセッサを備え、上記1つまたは複数のプロセッサは、
上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得るように構成され、
上記単一のセグメントを上記単一の第1の仮想アセットに適用して、単一の第2の仮想アセットの少なくとも一部を構築するように構成され、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含む、ユーザコンピューティングデバイス。
第16B項
上記単一のセグメントは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを示す、削除コマンド、コピーコマンドおよび書き込みコマンドのうちの1つまたはそれ以上を含む、第15B項に記載のユーザコンピューティングデバイス。
第17B項
上記1つまたは複数のプロセッサはさらに、
上記単一の第1の仮想アセットの一部をいつ削除するかを示すメタデータを得るように構成され、
上記メタデータに基づいて上記単一の第1の仮想アセットの一部を削除するように構成される、第15B項および第16B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第18B項
上記メタデータは、読み取りインデックスを含み、上記読み取りインデックスは、上記読み取りインデックスの後に、上記単一の第1の仮想アセットの一部を削除するために、上記複数のセグメントの適用中に累積メモリが読み取るものを示し、
上記1つまたは複数のプロセッサはさらに、
上記複数のセグメントの適用中に上記単一の第1の仮想アセットの複数回の読み取りを反映する読み取りカウンタを維持するように構成され、
上記読み取りカウンタが上記読み取りインデックスに等しい場合に、上記単一の第1の仮想アセットの上記一部を削除するように構成される、第17B項に記載のユーザコンピューティングデバイス。
第19B項
上記読み取りインデックスは、上記読み取りカウンタを参照することなく上記単一の第1の仮想アセットの上記一部の削除を示す負の値を含む、第18B項に記載のユーザコンピューティングデバイス。
第20B項
上記単一の第1の仮想アセットの上記一部は、上記第1の複数のアセットのうちのアセットを含む、第17B項~第19B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第21B項
上記単一のセグメントは、単一の圧縮されたセグメントを含み、
上記1つまたは複数のプロセッサは、上記単一の圧縮されたセグメントを復元して、上記第2の仮想アセットの上記一部のうちの1つを上記パッチされたアプリケーションに直接書き込むようにさらに構成される、第15B項~第19B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第22B項
上記1つまたは複数のプロセッサは、上記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を上記サーバコンピューティングデバイスに出力するようにさらに構成され、上記1つまたは複数のプロセッサは、上記確認を出力したことに応答して上記単一のセグメントを受信するように構成される、第15B項~第20B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第23B項
上記1つまたは複数のプロセッサは、上記単一のセグメントを上記単一の第1の仮想アセットに適用した後、上記複数のセグメントのうちの連続的な単一のセグメントを受信する前に上記単一のセグメントを削除するようにさらに構成される、第15B項~第22B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第24B項
上記1つまたは複数のプロセッサはさらに、
上記単一の第2の仮想アセットの上記一部のうちのある部分が上記単一のセグメントに十分に提供されていないことを判断するように構成され、
上記部分が上記単一のセグメントに十分に提供されていないと判断したことに応答して、上記単一のセグメントをキャッシュするように構成され、
上記複数のセグメントのうちの連続的なセグメントを上記サーバコンピューティングデバイスから要求するように構成され、
上記連続的なセグメントに対する上記要求に応答して、上記連続的なセグメントを受信するように構成され、
上記単一のセグメントおよび上記連続的なセグメントを上記単一の第1の仮想アセットに適用して、少なくとも上記単一の第2の仮想アセットの上記部分を構築するように構成される、第15B項~第23B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第25B項
上記1つまたは複数のプロセッサはさらに、
上記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るように構成され、
上記デバイス情報を上記サーバコンピューティングデバイスに出力して、上記サーバコンピューティングデバイスが上記複数のセグメントからの各セグメントのサイズを決定することを可能にするように構成される、第15B項~第24B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第26B項
上記複数のセグメントのうちの少なくとも2つのサイズは同一である、第15B項~第24B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第27B項
上記複数のセグメントからの各セグメントのサイズは、予め規定されている、第15B項~第24B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第28B項
上記第1の複数のアセットおよび上記第2の複数のアセットの各々は、画像、動画、テクスチャ、音声データおよび映像データのうちの1つまたはそれ以上を備える、第15B項~第27B項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第29B項
命令が格納された非一時的なコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、ユーザコンピューティングデバイスの1つまたは複数のプロセッサに、
複数のセグメントのうちの単一のセグメントをサーバコンピューティングデバイスから得させ、上記複数のセグメントは、パッチを表し、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想化されたアセットを得るために、パッチされていないアプリケーションを表す第1の仮想化されたアセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記命令はさらに、実行されると、上記ユーザコンピューティングデバイスの上記1つまたは複数のプロセッサに、
上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得させ、
上記単一のセグメントを上記単一の第1の仮想アセットに適用して、単一の第2の仮想アセットの少なくとも一部を構築させ、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含む、非一時的なコンピュータ読取可能記憶媒体。
第1C項
方法であって、
1つまたは複数のプロセッサが、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るステップと、
上記1つまたは複数のプロセッサが、パッチされたアプリケーションを形成する第2の複数のアセットを仮想化して、単一の第2の仮想アセットを得るステップと、
上記1つまたは複数のプロセッサが、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るステップとを備え、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記方法はさらに、
上記1つまたは複数のプロセッサが、上記パッチを得ながら、ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを生成するステップと、
上記1つまたは複数のプロセッサが、上記パッチおよび上記メタデータを上記ユーザコンピューティングデバイスに出力するステップとを備える、方法。
第2C項
上記メタデータは、読み取りインデックスを含み、上記読み取りインデックスは、上記読み取りインデックスの後に、上記ユーザコンピューティングデバイスによって格納された上記単一の第1の仮想アセットの一部を削除するために、上記パッチの適用中に累積メモリが読み取るものを示す、第1C項に記載の方法。
第3C項
上記読み取りインデックスは、上記ユーザコンピューティングデバイスによって格納された上記単一の第1の仮想アセットの上記一部の削除を示す負の値を含む、第2C項に記載の方法。
第4C項
上記単一の第1の仮想アセットの上記一部は、上記第1の複数のアセットのうちのアセットを含む、第2C項および第3C項の任意の組み合わせに記載の方法。
第5C項
上記パッチを圧縮して、圧縮されたパッチを得るステップをさらに備える、第1C項~第4C項の任意の組み合わせに記載の方法。
第6C項
上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを示す、削除コマンド、コピーコマンドおよび書き込みコマンドのうちの1つまたはそれ以上を含む、第1C項~第5C項の任意の組み合わせに記載の方法。
第7C項
上記パッチを複数のセグメントにセグメント化するステップをさらに備え、
上記パッチを出力するステップは、上記ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力するステップを備える、第1C項~第6C項の任意の組み合わせに記載の方法。
第8C項
上記単一のセグメントを出力するステップは、上記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を上記ユーザコンピューティングデバイスから受信して初めて、上記単一のセグメントを出力するステップを含む、第7C項に記載の方法。
第9C項
上記パッチを複数のセグメントにセグメント化するステップは、
上記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るステップと、
上記ユーザコンピューティングデバイスの上記利用可能なメモリサイズに基づいて、上記複数のセグメントからの各セグメントのサイズを決定するステップとを備える、第7C項および第8C項の任意の組み合わせに記載の方法。
第10C項
上記複数のセグメントのうちの少なくとも2つのサイズは同一である、第6C項~第9C項の任意の組み合わせに記載の方法。
第11C項
上記複数のセグメントからの各セグメントのサイズは、予め規定されている、第6C項~第9C項の任意の組み合わせに記載の方法。
第12C項
上記第1の複数のアセットおよび上記第2の複数のアセットの各々は、画像、動画、テクスチャ、音声データおよび映像データのうちの1つまたはそれ以上を備える、第1C項~第11C項の任意の組み合わせに記載の方法。
第13C項
サーバコンピューティングデバイスであって、
パッチされていないアプリケーションを形成する第1の複数のアセットと、パッチされたアプリケーションを形成する第2の複数のアセットとを格納するように構成されたメモリと、
1つまたは複数のプロセッサとを備え、上記1つまたは複数のプロセッサは、
上記第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るように構成され、
上記第2の複数のアセットを仮想化して、単一の第2の仮想アセットを得るように構成され、
上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るように構成され、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記1つまたは複数のプロセッサはさらに、
上記パッチを得ながら、ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを生成するように構成され、
上記パッチおよび上記メタデータを上記ユーザコンピューティングデバイスに出力するように構成される、サーバコンピューティングデバイス。
第14C項
上記メタデータは、読み取りインデックスを含み、上記読み取りインデックスは、上記読み取りインデックスの後に、上記ユーザコンピューティングデバイスによって格納された上記単一の第1の仮想アセットの一部を削除するために、上記パッチの適用中に累積メモリが読み取るものを示す、第13C項に記載のサーバコンピューティングデバイス。
第15C項
上記読み取りインデックスは、上記ユーザコンピューティングデバイスによって格納された上記単一の第1の仮想アセットの上記一部の削除を示す負の値を含む、第14C項に記載のサーバコンピューティングデバイス。
第16C項
上記単一の第1の仮想アセットの上記一部は、上記第1の複数のアセットのうちのアセットを含む、第14C項および第15C項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第17C項
上記1つまたは複数のプロセッサは、上記パッチを圧縮して、圧縮されたパッチを得るようにさらに構成される、第13C項~第16C項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第18C項
上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを示す、削除コマンド、コピーコマンドおよび書き込みコマンドのうちの1つまたはそれ以上を含む、第13C項~第17C項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第19C項
上記1つまたは複数のプロセッサは、上記パッチを複数のセグメントにセグメント化するようにさらに構成され、
上記1つまたは複数のプロセッサは、上記ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力するように構成される、第13C項~第18C項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第20C項
上記1つまたは複数のプロセッサは、上記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を上記ユーザコンピューティングデバイスから受信して初めて、上記単一のセグメントを出力するように構成される、第19C項に記載のサーバコンピューティングデバイス。
第21C項
上記1つまたは複数のプロセッサは、
上記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るように構成され、
上記ユーザコンピューティングデバイスの上記利用可能なメモリサイズに基づいて、上記複数のセグメントからの各セグメントのサイズを決定するように構成される、第19C項および第20C項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第22C項
上記複数のセグメントのうちの少なくとも2つのサイズは同一である、第18C項~第21C項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第23C項
上記複数のセグメントからの各セグメントのサイズは、予め規定されている、第18C項~第21C項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第24C項
上記第1の複数のアセットおよび上記第2の複数のアセットの各々は、画像、動画、テクスチャ、音声データおよび映像データのうちの1つまたはそれ以上を備える、第13C項~第23C項の任意の組み合わせに記載のサーバコンピューティングデバイス。
第25C項
命令が格納された非一時的なコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、1つまたは複数のプロセッサに、
パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、
パッチされたアプリケーションを形成する複数のアセットを仮想化して、単一の第2の仮想アセットを得させ、
上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部、上記命令はさらに、実行されると、上記1つまたは複数のプロセッサに、
上記パッチを得ながら、ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを生成させ、
上記パッチおよび上記メタデータを上記ユーザコンピューティングデバイスに出力させる、非一時的なコンピュータ読取可能記憶媒体。
第1D項
方法であって、
ユーザコンピューティングデバイスの1つまたは複数のプロセッサが、パッチをサーバコンピューティングデバイスから得るステップを備え、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想化されたアセットを得るために、パッチされていないアプリケーションを表す第1の仮想化されたアセットをどのように更新するかを識別し
、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記方法はさらに、
上記1つまたは複数のプロセッサが、上記ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを上記サーバコンピューティングデバイスから得るステップと、
上記1つまたは複数のプロセッサが、上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得るステップと、
上記1つまたは複数のプロセッサが、上記パッチを上記単一の第1の仮想アセットに適用して、上記単一の第2の仮想アセットを構築するステップとを備え、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含み、上記方法はさらに、
上記パッチの適用中に、上記メタデータに基づいて、上記単一の第1の仮想アセットの上記一部を削除するステップを備える。
第2D項
上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを示す、削除コマンド、コピーコマンドおよび書き込みコマンドのうちの1つまたはそれ以上を含む、第1D項に記載の方法。
第3D項
上記メタデータは、読み取りインデックスを含み、上記読み取りインデックスは、上記読み取りインデックスの後に、上記単一の第1の仮想アセットの上記一部を削除するために、上記パッチの適用中に累積メモリが読み取るものを示し、
上記パッチの適用中に、上記単一の第1の仮想アセットの上記一部を削除するステップは、
上記パッチの適用中に上記単一の第1の仮想アセットの複数回の読み取りを反映する読み取りカウンタを維持するステップと、
上記読み取りカウンタが上記読み取りインデックスに等しい場合に、上記単一の第1の仮想アセットの上記一部を削除するステップとを備える、第1D項および第2D項の任意の組み合わせに記載の方法。
第4D項
上記読み取りインデックスは、上記読み取りカウンタを参照することなく上記単一の第1の仮想アセットの上記一部の削除を示す負の値を含む、第3D項に記載の方法。
第5D項
上記単一の第1の仮想アセットの上記一部は、上記第1の複数のアセットのうちのアセットを含む、第1D項~第4D項の任意の組み合わせに記載の方法。
第6D項
上記パッチは、圧縮されたパッチを含み、
上記方法は、上記パッチを復元して、上記第2の仮想アセットの上記一部のうちの1つを上記パッチされたアプリケーションに直接書き込むステップを備える、第1D項~第5D項の任意の組み合わせに記載の方法。
第7D項
上記パッチを得るステップは、複数のセグメントのうちの単一のセグメントを得るステップを備え、上記複数のセグメントは、上記パッチを表し、
上記パッチを適用するステップは、上記単一のセグメントを上記単一の第1の仮想アセ
ットに適用して、少なくとも上記単一の第2の仮想アセットの上記一部を構築するステップを備える、第1D項~第6D項の任意の組み合わせに記載の方法。
第8D項
上記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を上記サーバコンピューティングデバイスに出力するステップをさらに備え、上記単一のセグメントを得るステップは、上記確認を出力したことに応答して上記単一のセグメントを受信するステップを備える、第7D項に記載の方法。
第9D項
上記単一のセグメントを上記単一の第1の仮想アセットに適用した後、上記複数のセグメントのうちの連続的な単一のセグメントを受信する前に上記単一のセグメントを削除するステップをさらに備える、第7D項および第8D項の任意の組み合わせに記載の方法。
第10D項
上記単一の第2の仮想アセットの上記一部のうちのある部分が上記単一のセグメントに十分に提供されていないことを判断するステップと、
上記部分が上記単一のセグメントに十分に提供されていないと判断したことに応答して、上記単一のセグメントをキャッシュするステップと、
上記複数のセグメントのうちの連続的なセグメントを上記サーバコンピューティングデバイスから要求するステップと、
上記連続的なセグメントに対する上記要求に応答して、上記連続的なセグメントを受信するステップと、
上記単一のセグメントおよび上記連続的なセグメントを上記単一の第1の仮想アセットに適用して、少なくとも上記単一の第2の仮想アセットの上記部分を構築するステップとをさらに備える、第7D項~第9D項の任意の組み合わせに記載の方法。
第11D項
上記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るステップと、
上記デバイス情報を上記サーバコンピューティングデバイスに出力して、上記サーバコンピューティングデバイスが上記複数のセグメントからの各セグメントのサイズを決定することを可能にするステップとをさらに備える、第7D項~第10D項の任意の組み合わせに記載の方法。
第12D項
上記複数のセグメントのうちの少なくとも2つのサイズは同一である、第7D項~第10D項の任意の組み合わせに記載の方法。
第13D項
上記複数のセグメントからの各セグメントのサイズは、予め規定されている、第7D項~第10D項の任意の組み合わせに記載の方法。
第14D項
上記第1の複数のアセットおよび上記第2の複数のアセットの各々は、画像、動画、テクスチャ、音声データおよび映像データのうちの1つまたはそれ以上を備える、第1D項~第13D項の任意の組み合わせに記載の方法。
第15D項
ユーザコンピューティングデバイスであって、
パッチを格納するように構成されたメモリを備え、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想アセットを得るために、パッチされていないアプリケーションを表す単一の第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記ユーザコンピューティングデバイスはさらに、
1つまたは複数のプロセッサを備え、上記1つまたは複数のプロセッサは、
上記パッチを上記単一の第1の仮想アセットに適用して、上記単一の第2の仮想アセットを構築するように構成され、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含み、上記1つまたは複数のプロセッサはさらに、
上記パッチの適用中に、メタデータに基づいて、上記単一の第1の仮想アセットの一部を削除するように構成される、ユーザコンピューティングデバイス。
第16D項
上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを示す、削除コマンド、コピーコマンドおよび書き込みコマンドのうちの1つまたはそれ以上を含む、第15D項に記載のユーザコンピューティングデバイス。
第17D項
上記メタデータは、読み取りインデックスを含み、上記読み取りインデックスは、上記読み取りインデックスの後に、上記単一の第1の仮想アセットの上記一部を削除するために、上記パッチの適用中に累積メモリが読み取るものを示し、
上記パッチの適用中に、上記単一の第1の仮想アセットの上記一部を削除するステップは、
上記パッチの適用中に上記単一の第1の仮想アセットの複数回の読み取りを反映する読み取りカウンタを維持するステップと、
上記読み取りカウンタが上記読み取りインデックスに等しい場合に、上記単一の第1の仮想アセットの上記一部を削除するステップとを備える、第15D項および第16D項の任意の組み合わせに記載の方法。
第18D項
上記読み取りインデックスは、上記読み取りカウンタを参照することなく上記単一の第1の仮想アセットの上記一部の削除を示す負の値を含む、第17D項に記載のユーザコンピューティングデバイス。
第19D項
上記単一の第1の仮想アセットの上記一部は、上記第1の複数のアセットのうちのアセットを含む、第15D項~第18D項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第20D項
上記単一のセグメントは、単一の圧縮されたセグメントを含み、
上記1つまたは複数のプロセッサは、上記単一の圧縮されたパッチを復元して、上記第2の仮想アセットの上記一部のうちの1つを上記パッチされたアプリケーションに直接書き込むように構成される、第15D項~第19D項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第21D項
上記1つまたは複数のプロセッサは、複数のセグメントのうちの単一のセグメントを得
るように構成され、上記複数のセグメントは、上記パッチを表し、
上記1つまたは複数のプロセッサは、上記単一のセグメントを上記単一の第1の仮想アセットに適用して、少なくとも上記単一の第2の仮想アセットの上記一部を構築するように構成される、請求項15D~請求項20Dの任意の組み合わせに記載のユーザコンピューティングデバイス。
第22D項
上記1つまたは複数のプロセッサは、上記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を上記サーバコンピューティングデバイスに出力するようにさらに構成され、
上記単一のセグメントを得ることは、上記確認を出力したことに応答して上記単一のセグメントを受信することを備える、第21D項に記載のユーザコンピューティングデバイス。
第23D項
上記1つまたは複数のプロセッサは、上記単一のセグメントを上記単一の第1の仮想アセットに適用した後、上記複数のセグメントのうちの連続的な単一のセグメントを受信する前に上記単一のセグメントを削除するようにさらに構成される、第21D項および第22D項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第24D項
上記1つまたは複数のプロセッサはさらに、
上記単一の第2の仮想アセットの上記一部のうちのある部分が上記単一のセグメントに十分に提供されていないことを判断するように構成され、
上記部分が上記単一のセグメントに十分に提供されていないと判断したことに応答して、上記単一のセグメントをキャッシュするように構成され、
上記複数のセグメントのうちの連続的なセグメントを上記サーバコンピューティングデバイスから要求するように構成され、
上記連続的なセグメントに対する上記要求に応答して、上記連続的なセグメントを受信するように構成され、
上記単一のセグメントおよび上記連続的なセグメントを上記単一の第1の仮想アセットに適用して、少なくとも上記単一の第2の仮想アセットの上記部分を構築するように構成される、第21D項~第23D項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第25D項
上記1つまたは複数のプロセッサはさらに、
上記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るように構成され、
上記デバイス情報を上記サーバコンピューティングデバイスに出力して、上記サーバコンピューティングデバイスが上記複数のセグメントからの各セグメントのサイズを決定することを可能にするように構成される、第21D項~第24D項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第26D項
上記複数のセグメントのうちの少なくとも2つのサイズは同一である、第21D項~第24D項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第27D項
上記複数のセグメントからの各セグメントのサイズは、予め規定されている、第21D
項~第24D項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第28D項
上記第1の複数のアセットおよび上記第2の複数のアセットの各々は、画像、動画、テクスチャ、音声データおよび映像データのうちの1つまたはそれ以上を備える、第15D項~第27D項の任意の組み合わせに記載のユーザコンピューティングデバイス。
第29D項
命令が格納された非一時的なコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、ユーザコンピューティングデバイスの1つまたは複数のプロセッサに、
パッチをサーバコンピューティングデバイスから得させ、上記パッチは、パッチされたアプリケーションを表す単一の第2の仮想化されたアセットを得るために、パッチされていないアプリケーションを表す第1の仮想化されたアセットをどのように更新するかを識別し、上記単一の第1の仮想化されたアセットの更新に使用される上記第2の仮想化されたアセットの一部を含み、上記命令はさらに、実行されると、上記ユーザコンピューティングデバイスの上記1つまたは複数のプロセッサに、
上記ユーザコンピューティングデバイスにインストールされた上記パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、上記単一の第1の仮想アセットを得させ、
上記パッチを上記単一の第1の仮想アセットに適用して、上記単一の第2の仮想アセットを構築させ、上記単一の第2の仮想アセットは、パッチされたアプリケーションを形成する第2の複数のアセットを含み、上記命令はさらに、実行されると、上記ユーザコンピューティングデバイスの上記1つまたは複数のプロセッサに、
上記パッチの適用中に、上記メタデータに基づいて、上記単一の第1の仮想アセットの一部を削除させる、非一時的なコンピュータ読取可能記憶媒体。
1つまたは複数の例においては、記載されている機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせで実現されてもよい。ソフトウェアで実現される場合、これらの機能は、1つまたは複数の命令またはコードとして、コンピュータ読取可能媒体に格納されるか、またはコンピュータ読取可能媒体を介して送信されて、ハードウェアベースの処理ユニットによって実行されてもよい。コンピュータ読取可能媒体は、コンピュータ読取可能記憶媒体を含んでいてもよく、コンピュータ読取可能記憶媒体は、データ記憶媒体などの有形の媒体、または、たとえば通信プロトコルに従った1つの場所から別の場所へのコンピュータプログラムの転送を容易にする任意の媒体を含む通信媒体に対応する。このように、コンピュータ読取可能媒体は、一般に、(1)非一時的である有形のコンピュータ読取可能記憶媒体、または、(2)信号もしくは搬送波などの通信媒体に対応してもよい。データ記憶媒体は、1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスされて、本開示に記載されている技術の実現のために命令、コードおよび/またはデータ構造を検索することができる任意の利用可能な媒体であってもよい。コンピュータプログラム製品は、コンピュータ読取可能媒体を含んでいてもよい。
限定ではなく一例として、このようなコンピュータ読取可能記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気記憶装置、フラッシュメモリ、またはその他の媒体を備えていてもよく、これらは、所望のプログラムコードを命令またはデータ構造の形式で格納するのに使用されることができ、コンピュータによってアクセスされることができる。また、任意の接続もコンピュータ読取可能媒体と呼ぶにふさわしい。たとえば、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者線(DSL)、またはワイヤレス技術(赤外線、無線およびマイクロ波など)を使用してウェブサイト、サーバまたは他のリモ
ートソースから命令が送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、またはワイヤレス技術(赤外線、無線およびマイクロ波など)は、媒体の定義に含まれる。しかし、コンピュータ読取可能記憶媒体およびデータ記憶媒体は、接続、搬送波、信号または他の一時的な媒体を含むのではなく、その代わりに非一時的な有形の記憶媒体を対象とする、ということが理解されるべきである。本明細書におけるdiskおよびdiscは、コンパクトディスク(CD)、レーザディスク、光ディスク、デジタル多用途ディスク(DVD)、フロッピーディスクおよびブルーレイディスクを含み、diskは通常はデータを磁気的に再生するのに対して、discはレーザを用いてデータを光学的に再生する。上記の組み合わせもコンピュータ読取可能媒体の範囲内に含まれるべきである。
命令は、1つまたは複数のプロセッサ(1つもしくは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、または他の等価の集積もしくは個別論理回路など)によって実行されてもよい。したがって、本明細書における「プロセッサ」という用語は、本明細書に記載されている技術の実現に適した上記の構造またはその他の構造のいずれかを意味し得る。また、いくつかの局面においては、本明細書に記載されている機能は、専用のハードウェアおよび/またはソフトウェアモジュール内で提供されてもよい。また、これらの技術は、1つまたは複数の回路または論理要素において完全に実現されてもよい。
本開示の技術は、ワイヤレスハンドセット、集積回路(IC)または一組のIC(たとえば、チップセット)を含む多種多様なデバイスまたは装置において実現されてもよい。開示されている技術を実行するように構成されたデバイスの機能的側面を強調するためにさまざまなコンポーネント、モジュールまたはユニットが本開示に記載されているが、さまざまなハードウェアユニットによる実現を必ずしも必要とするわけではない。むしろ、上記のように、さまざまなユニットは、ハードウェアユニット内で組み合わせられてもよく、または、好適なソフトウェアおよび/またはファームウェアとともに、上記の1つまたは複数のプロセッサを含む相互運用可能なハードウェアユニットの集合体によって提供されてもよい。
本開示のさまざまな局面について説明してきた。これらのおよび他の局面は、以下の特許請求の範囲の範囲内である。
別の例において、これらの技術のさまざまな局面は、命令が格納された非一時的なコンピュータ読取可能記憶媒体を対象としており、上記命令は、実行されると、1つまたは複数のプロセッサに、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得させ、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記命令はさらに、実行されると、上記1つまたは複数のプロセッサに、上記パッチを複数のセグメントにセグメント化させ、ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力させる。
別の例において、これらの技術のさまざまな局面は、命令が格納された非一時的なコンピュータ読取可能記憶媒体を対象としており、上記命令は、実行されると、1つまたは複数のプロセッサに、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、パッチされたアプリケーションを形成する複数のアセットを仮想化して、単一の第2の仮想アセットを得させ、上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記命令はさらに、実行されると、上記1つまたは複数のプロセッサに、上記パッチを得ながら、ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを生成させ、上記パッチおよび上記メタデータを上記ユーザコンピューティングデバイスに出力させる。
したがって、記載されている技術は、コンピューティングデバイス102およびコンピューティングデバイス102とアプリケーションプロバイダサーバ104とを含むコンピューティングシステムの動作を向上させることができる。パッチ117を受信してセグメント127にインストールすることによって、記載されている技術は、パッチ117をインストールするためにコンピューティングデバイス102で必要とされるストレージの量を減少させ、コンピューティングデバイス102の性能を向上させることができる(パッチングは、経時的に抽出されることによって、パッチの適用中の処理スループットを向上させ、メモリ帯域幅利用を含む帯域幅利用を減少させることができるため)。また、パッチされていないアプリケーション130Aへのパッチ117のセグメント127の適用中にパッチされていないアプリケーション130Aの一部の削除を可能にすることにより、メモリ利用をさらに減少させ、それによって、コンピューティングデバイス102の性能を向上させることができる。
いくつかの例においては、セグメント化パッチアプリケーションユニット136は、セグメント(たとえば、セグメント127A)のインストール中にシステム障害を検出してもよく、チェックポイント要素を定期的に生成することによってセグメントのインストールを再開させてもよい。図3の例においては、セグメント127Aのためのチェックポイント要素367は、定期的に生成されてもよく、ストレージコンポーネント328内に格納されてもよい。チェックポイント要素367は、アセット名、アセットステータス、アセットオフセット、セグメント127Aのインストール中に適用されていたアセットの残りのバイト、および適用される次のセグメントの表示のうちの1つまたはそれ以上を含んでいてもよい。アセット名は、システム障害時に適用されていたアセットを示す。
第25A項
命令が格納された非一時的なコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、1つまたは複数のプロセッサに、
パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、
パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得させ、
上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記命令はさらに、実行されると、上記1つまたは複数のプロセッサに、
上記パッチを複数のセグメントにセグメント化させ、
ユーザコンピューティングデバイスによる上記パッチされていないアプリケーションへの個々のインストールのために、上記複数のセグメントからの単一のセグメントを上記ユーザコンピューティングデバイスに出力させる、非一時的なコンピュータ読取可能記憶媒体。
第25C項
命令が格納された非一時的なコンピュータ読取可能記憶媒体であって、上記命令は、実行されると、1つまたは複数のプロセッサに、
パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、
パッチされたアプリケーションを形成する複数のアセットを仮想化して、単一の第2の仮想アセットを得させ、
上記単一の第1の仮想アセットと上記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、上記パッチは、上記単一の第2の仮想アセットを得るために上記第1の仮想アセットをどのように更新するかを識別し、上記単一の第1の仮想アセットの更新に使用される上記第2の仮想アセットの一部を含み、上記命令はさらに、実行されると、上記1つまたは複数のプロセッサに、
上記パッチを得ながら、ユーザコンピューティングデバイスが上記単一の第1の仮想アセットの一部をいつ削除できるかを示すメタデータを生成させ、
上記パッチおよび上記メタデータを上記ユーザコンピューティングデバイスに出力させる、非一時的なコンピュータ読取可能記憶媒体。

Claims (15)

  1. 方法であって、
    1つまたは複数のプロセッサが、パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るステップと、
    前記1つまたは複数のプロセッサが、パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得るステップと、
    前記1つまたは複数のプロセッサが、前記単一の第1の仮想アセットと前記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るステップとを備え、前記パッチは、前記単一の第2の仮想アセットを得るために前記単一の第1の仮想アセットをどのように更新するかを識別し、前記単一の第1の仮想アセットの更新に使用される前記単一の第2の仮想アセットの一部を含み、前記方法はさらに、
    前記1つまたは複数のプロセッサが、前記パッチを複数のセグメントにセグメント化するステップと、
    前記1つまたは複数のプロセッサが、ユーザコンピューティングデバイスによる前記パッチされていないアプリケーションへの個々の適用のために、前記複数のセグメントからの単一のセグメントを前記ユーザコンピューティングデバイスに出力するステップとを備える、方法。
  2. 前記単一のセグメントは、コピーコマンドと、前記単一の第2の仮想アセットを得るために前記第1の仮想アセットをどのように更新するかを示す書き込みコマンドとを含む、請求項1に記載の方法。
  3. 前記単一の第1の仮想アセットの一部をいつ削除するかを示すメタデータを生成するステップと、
    前記メタデータを前記ユーザコンピューティングデバイスに出力するステップとをさらに備える、請求項1および請求項2の任意の組み合わせに記載の方法。
  4. 前記メタデータは、読み取りインデックスを含み、前記読み取りインデックスは、前記読み取りインデックスの後に、前記単一の第1の仮想アセットの一部を削除するために、前記複数のセグメントからの前記単一のセグメントの前記個々の適用中に累積メモリが読み取るものを示す、請求項3に記載の方法。
  5. 前記読み取りインデックスは、前記単一の第1の仮想アセットの前記一部の削除を示す負の値を含む、請求項4に記載の方法。
  6. 前記単一の第1の仮想アセットの前記一部は、前記第1の複数のアセットのうちのアセットを含む、請求項3~請求項5の任意の組み合わせに記載の方法。
  7. 前記複数のセグメントの各々を圧縮して、複数の圧縮されたセグメントを得るステップをさらに備える、請求項1~請求項5の任意の組み合わせに記載の方法。
  8. 前記単一のセグメントを出力するステップは、前記複数のセグメントからの以前に送信されたセグメントがインストールされたことの確認を前記ユーザコンピューティングデバイスから受信して初めて、前記単一のセグメントを出力するステップを含む、請求項1~請求項6の任意の組み合わせに記載の方法。
  9. 前記パッチを複数のセグメントにセグメント化するステップは、
    前記ユーザコンピューティングデバイスの利用可能なメモリサイズを記載するデバイス情報を得るステップと、
    前記ユーザコンピューティングデバイスの前記利用可能なメモリサイズに基づいて、前記複数のセグメントからの各セグメントのサイズを決定するステップとを備える、請求項1~請求項8の任意の組み合わせに記載の方法。
  10. 前記複数のセグメントのうちの少なくとも2つのサイズは同一である、請求項1~請求項9の任意の組み合わせに記載の方法。
  11. 前記複数のセグメントからの各セグメントのサイズは、予め規定されている、請求項1~請求項9の任意の組み合わせに記載の方法。
  12. 前記第1の複数のアセットおよび前記第2の複数のアセットの各々は、1つまたは複数の画像、動画、テクスチャ、音声データまたは映像データを備える、請求項1~請求項11の任意の組み合わせに記載の方法。
  13. サーバコンピューティングデバイスであって、
    パッチされていないアプリケーションを形成する第1の複数のアセットと、パッチされたアプリケーションを形成する第2の複数のアセットとを格納するように構成されたメモリと、
    1つまたは複数のプロセッサとを備え、前記1つまたは複数のプロセッサは、
    前記第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得るように構成され、
    前記第2の複数のアセットを表す単一の第2の仮想アセットを得るように構成され、
    前記単一の第1の仮想アセットと前記単一の第2の仮想アセットとの間の差に基づいて、パッチを得るように構成され、前記パッチは、前記単一の第2の仮想アセットを得るために前記単一の第1の仮想アセットをどのように更新するかを識別し、前記単一の第1の仮想アセットの更新に使用される前記単一の第2の仮想アセットの一部を含み、前記1つまたは複数のプロセッサはさらに、
    前記パッチを複数のセグメントにセグメント化するように構成され、
    ユーザコンピューティングデバイスによる前記パッチされていないアプリケーションへの個々の適用のために、前記複数のセグメントからの単一のセグメントを前記ユーザコンピューティングデバイスに出力するように構成される、サーバコンピューティングデバイス。
  14. 前記1つまたは複数のプロセッサはさらに、
    前記単一の第1の仮想アセットの一部をいつ削除するかを示すメタデータを生成するように構成され、
    前記メタデータを前記ユーザコンピューティングデバイスに出力するように構成される、請求項13および請求項14の任意の組み合わせに記載のサーバコンピューティングデバイス。
  15. 命令が格納された非一時的なコンピュータ読取可能記憶媒体であって、前記命令は、実行されると、1つまたは複数のプロセッサに、
    パッチされていないアプリケーションを形成する第1の複数のアセットを仮想化して、単一の第1の仮想アセットを得させ、
    パッチされたアプリケーションを形成する第2の複数のアセットを表す単一の第2の仮想アセットを得させ、
    前記単一の第1の仮想アセットと前記単一の第2の仮想アセットとの間の差に基づいて、パッチを得させ、前記パッチは、前記単一の第2の仮想アセットを得るために前記単一の第1の仮想アセットをどのように更新するかを識別し、前記単一の第1の仮想アセットの更新に使用される前記単一の第2の仮想アセットの一部、前記命令はさらに、実行され
    ると、前記1つまたは複数のプロセッサに、
    前記パッチを複数のセグメントにセグメント化させ、
    ユーザコンピューティングデバイスによる前記パッチされていないアプリケーションへの個々の適用のために、前記複数のセグメントからの単一のセグメントを前記ユーザコンピューティングデバイスに出力させる、非一時的なコンピュータ読取可能記憶媒体。
JP2023149222A 2019-10-31 2023-09-14 コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング Pending JP2023169287A (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962928748P 2019-10-31 2019-10-31
US62/928,748 2019-10-31
JP2021549810A JP7351917B2 (ja) 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
JP2021549810A Division JP7351917B2 (ja) 2019-10-31 2019-12-30 コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング

Publications (1)

Publication Number Publication Date
JP2023169287A true JP2023169287A (ja) 2023-11-29

Family

ID=69185764

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2021549810A Active JP7351917B2 (ja) 2019-10-31 2019-12-30 コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング
JP2023149222A Pending JP2023169287A (ja) 2019-10-31 2023-09-14 コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2021549810A Active JP7351917B2 (ja) 2019-10-31 2019-12-30 コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング

Country Status (6)

Country Link
US (1) US20210373881A1 (ja)
EP (1) EP3874365A1 (ja)
JP (2) JP7351917B2 (ja)
KR (2) KR102574280B1 (ja)
CN (1) CN113678102A (ja)
WO (1) WO2021086423A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230205514A1 (en) * 2021-12-27 2023-06-29 Honeywell International Inc. Bsidiff delta upgrade in external storage

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040003266A1 (en) * 2000-09-22 2004-01-01 Patchlink Corporation Non-invasive automatic offsite patch fingerprinting and updating system and method
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
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 腾讯科技(深圳)有限公司 终端应用的更新方法、服务器和终端
US9946533B2 (en) * 2015-09-30 2018-04-17 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 理想科学工業株式会社 ファームウェア更新制御装置
US10261771B1 (en) * 2017-11-30 2019-04-16 Bank Of America Corporation Environment mapping and patching synthesis

Also Published As

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

Similar Documents

Publication Publication Date Title
US10938954B2 (en) Method and system for mobile applications update in the cloud
JP2023548373A (ja) 非同期領域間ブロックボリューム複製
CN105474200A (zh) 具有占位符的水合和脱水
US11288059B2 (en) Leveraging previously installed application elements to install an application
US9940066B2 (en) Snapshot management in hierarchical storage infrastructure
JP2023169287A (ja) コンピューティングデバイス上でアプリケーションを更新するための、メモリ効率のよいソフトウェアパッチング
US20220334815A1 (en) Accelerating application and sub-package installations
US10169027B2 (en) Upgrade of an operating system of a virtual machine
CN110119386B (zh) 数据处理方法、数据处理装置、介质和计算设备
US10496493B1 (en) Method and system for restoring applications of particular point in time
WO2023066246A1 (zh) 云手机安装应用的方法、系统和客户端云手机
CN115336237A (zh) 远程存储的文件的预测性供应
US11093176B2 (en) FaaS-based global object compression
CN115509563B (zh) 镜像文件制作方法、装置、设备及介质
US20210349651A1 (en) Method, device, and computer program for migrating backup system
US10976952B2 (en) System and method for orchestrated application protection
CN114138409B (zh) 虚拟机镜像文件迁移的方法、装置及存储介质
US11513829B2 (en) Method and system for instant recovery of application data using virtual machine backups
CN113138975A (zh) 一种数据迁移方法和装置
CN118132204A (zh) 一种容器管理方法、装置、设备及介质
CN115951907A (zh) 软件防删除方法、装置、设备以及存储介质
CN111580953A (zh) 调度仿真场景的制作方法及装置、存储介质及电子设备
CN115421785A (zh) 应用程序的移植处理方法、装置和介质
CN113765688A (zh) 一种专有云平台管理方法、系统以及专有云平台
CN112052128A (zh) 容灾方法、装置和电子设备

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20231013

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20231013