JP2015207145A - 情報処理装置および差分情報生成装置 - Google Patents

情報処理装置および差分情報生成装置 Download PDF

Info

Publication number
JP2015207145A
JP2015207145A JP2014087219A JP2014087219A JP2015207145A JP 2015207145 A JP2015207145 A JP 2015207145A JP 2014087219 A JP2014087219 A JP 2014087219A JP 2014087219 A JP2014087219 A JP 2014087219A JP 2015207145 A JP2015207145 A JP 2015207145A
Authority
JP
Japan
Prior art keywords
file
block
data
patch
difference information
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
JP2014087219A
Other languages
English (en)
Inventor
明之 畠山
Akiyuki Hatakeyama
明之 畠山
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.)
Sony Interactive Entertainment Inc
Original Assignee
Sony Computer Entertainment Inc
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 Sony Computer Entertainment Inc filed Critical Sony Computer Entertainment Inc
Priority to JP2014087219A priority Critical patent/JP2015207145A/ja
Priority to US14/684,757 priority patent/US9286059B2/en
Publication of JP2015207145A publication Critical patent/JP2015207145A/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/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating

Abstract

【課題】パッチデータを効率的にダウンロードする技術を提供する。【解決手段】アプリケーション記録部332はアプリケーションソフトウェアを記録する。パッチ取得部300は、サーバからパッチデータを取得し、パッチ記録部334に記録する。アプリケーション実行部310は、アプリケーションソフトウェアおよびパッチデータを用いて、アプリケーションを実行する。差分情報取得部302は、サーバが保持する最新のパッチファイルと、パッチ記録部334に記録しているパッチファイルとのデータブロックの差分情報を取得し、ダウンロード実行部304は、差分情報にしたがって、最新のパッチファイルから、更新があったデータブロックをダウンロードする。【選択図】図18

Description

本発明は、サーバからデータをダウンロードする技術に関し、またはダウンロードしたデータを利用する技術に関する。また本発明は、ダウンロード用のデータを生成する技術に関する。
従来よりゲームソフトウェアは、光ディスクや光磁気ディスク、ブルーレイディスクなどのROM媒体の形態で流通、販売されてきた。最近ではインターネットにおけるデータ通信の高速化により、サーバがインターネット経由でゲームソフトウェアのイメージファイルを配信できるようになっている。
ゲームソフトウェアは、起動ファイル、ゲームプログラムなどのゲームを実行するためのリソースファイル群、およびゲーム装置のオペレーティングシステム(OS:Operating System)が使用するファイル群を含んでいる。ゲーム装置のハードウェアスペックが飛躍的に向上したことにともない、ゲームソフトウェアに含まれるファイル数は多くなり、データサイズは大規模化する傾向にある。
近年では、ゲームソフトウェアにパッチをあてて、シナリオを修正または追加することが一般的に行われるようになっている。ゲーム装置は、サーバからパッチファイルをダウンロードし、ゲームソフトウェアとパッチファイルとを用いてゲームを実行する。ゲームソフトウェアおよびパッチファイルは、データ量を削減するために圧縮され、またデータセキュリティを高めるために、署名され暗号化されていることが好ましい。ゲーム装置は、このように圧縮署名暗号化されたパッチファイルのデータを効率的にダウンロードすることで、ゲームソフトウェアにパッチを速やかにあてて、ゲームを実行することが可能となる。
そこで本発明は、パッチデータを効率的にダウンロードする技術を提供することを目的とする。
上記課題を解決するために、本発明のある態様の情報処理装置は、アプリケーションソフトウェアを記録するアプリケーション記録部と、サーバから、パッチデータを取得するパッチ取得部と、取得したパッチデータを記録するパッチ記録部と、アプリケーションソフトウェアおよびパッチデータを用いて、アプリケーションを実行するアプリケーション実行部と、を備えた情報処理装置であって、パッチ取得部は、サーバが保持する最新のパッチファイルと、パッチ記録部に記録しているパッチファイルとのデータブロックの差分情報を取得する差分情報取得部と、差分情報にしたがって、最新のパッチファイルから、更新があったデータブロックをダウンロードするダウンロード実行部と、を備える。
本発明の別の態様は、第1パッチファイルと、第1パッチファイルの次のバージョンの第2パッチファイルとの第1差分情報と、第2パッチファイルと、第2パッチファイルの次のバージョンの第3パッチファイルとの第2差分情報とを記録する記録部と、第1差分情報と第2差分情報とに基づいて、第1パッチファイルと第3パッチファイルの差分情報を生成する合成部と、を備えた差分情報生成装置に関する。差分情報は、新しいバージョンのパッチファイルのデータブロックごとに、前のバージョンのパッチファイルから更新されているデータが含まれているか否かを示す情報を含んでおり、更新されているデータが含まれていない場合には、前のバージョンのパッチファイルにおけるデータ格納位置を示すアドレス情報が含まれる。
なお、以上の構成要素の任意の組合せ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
本発明の情報処理技術によると、パッチデータを効率的にダウンロードする技術を提供することが可能となる。
本発明の実施例にかかる情報処理システムを示す図である。 情報処理装置の機能ブロックを示す図である。 ゲームソフトウェアのファイル構成の概念図である。 ゲームソフトウェアの具体的なファイル構成例を示す図である。 グループとファイルの関係の一例を示す図である。 グループファイルの一例を示す図である。 ファイルのデータブロックのアドレッシングに使用されるデータ構造の参考例を説明するための図である。 ゲームデータのデータ構造の参考例を示す図である。 ゲームデータの作成方法を示すフローチャートである。 本実施例のゲームデータのイメージファイルの一例を示す図である。 本実施例における圧縮、暗号化の方法を説明するための図である。 圧縮署名暗号化されたファイルをダウンロードする方法を説明するための図である。 再利用可能な圧縮後ブロックの検索方法を説明するための図である。 ブロックの差分情報の生成方法を説明するための図である。 複数バージョンの差分情報の生成方法を説明するための図である。 差分情報の合成方法を説明するための図である。 差分情報生成装置の機能ブロックを示す図である。 情報処理装置におけるダウンロード処理を実行するための機能ブロックを示す図である。
図1は、本発明の実施例にかかる情報処理システム1を示す。情報処理システム1は、情報処理装置10と、ネットワークサーバ5と、デジタルコンテンツを配信するコンテンツサーバ12とを備え、これらはインターネットやLAN(Local Area Network)などのネットワーク3を介して接続している。コンテンツサーバ12は、アプリケーションソフトウェアおよびそのアプリケーションのパッチファイルなどのデジタルコンテンツを保持し、情報処理装置10に配信する。
アクセスポイント(以下、「AP」とよぶ)8は、無線アクセスポイントおよびルータの機能を有し、情報処理装置10は、無線または有線経由でAP8に接続して、ネットワーク3上のネットワークサーバ5、コンテンツサーバ12と通信可能に接続する。
情報処理装置10は、ユーザが操作する入力装置6と無線または有線で接続し、入力装置6はユーザの操作結果を示す操作情報を情報処理装置10に出力する。情報処理装置10は入力装置6から操作情報を受け付けるとOS(システムソフトウェア)やアプリケーションソフトウェアの処理に反映し、出力装置4から処理結果を出力させる。情報処理システム1において情報処理装置10はゲームソフトウェアを実行するゲーム装置であり、入力装置6はゲームコントローラなど情報処理装置10に対してユーザの操作情報を供給する機器であってよい。ユーザは情報処理装置10のOSにログインすることで、OSやアプリケーションソフトウェアを操作できる。
ネットワークサーバ5は情報処理システム1の運営主体により保守、管理され、情報処理システム1のユーザに対してネットワークサービスを提供する。ネットワークサーバ5はユーザを識別するネットワークアカウントを管理しており、ユーザは、ネットワークアカウントを用いて、ネットワークサーバ5が提供するネットワークサービスにサインインする。ユーザは情報処理装置10からネットワークサービスにサインインすることで、コンテンツサーバ12からデジタルコンテンツの配信を受けることができる。なおコンテンツサーバ12が、ネットワークサーバ5のユーザ管理機能を有してもよい。本実施例において、デジタルコンテンツは、様々な種類のアプリケーションソフトウェアおよび様々な種類のアプリケーションのパッチデータであってよいが、以下では、特にデジタルコンテンツがゲームソフトウェアおよびゲームのパッチデータである場合について説明する。
補助記憶装置2はHDD(ハードディスクドライブ)やフラッシュメモリなどの大容量記憶装置であり、USB(Universal Serial Bus)などによって情報処理装置10と接続する外部記憶装置であってよく、内蔵型記憶装置であってもよい。出力装置4は画像を出力するディスプレイおよび音声を出力するスピーカを有するテレビであってよく、またコンピュータディスプレイであってもよい。出力装置4は、情報処理装置10に有線ケーブルで接続されてよく、無線接続されてもよい。
入力装置6は複数のプッシュ式の操作ボタンや、アナログ量を入力できるアナログスティック、回動式ボタンなどの複数の入力部を有して構成される。撮像装置であるカメラ7は出力装置4の近傍に設けられ、出力装置4周辺の空間を撮像する。図1ではカメラ7が出力装置4の上部に取り付けられている例を示しているが、出力装置4の側方に配置されてもよく、いずれにしても出力装置4の前方でゲームをプレイするユーザを撮像できる位置に配置される。カメラ7は、ステレオカメラであってよい。情報処理装置10は、カメラ7の撮像画像からユーザを顔認証して、ログインさせる機能をもつ。
図2は、情報処理装置10の機能ブロック図を示す。情報処理装置10は、メイン電源ボタン20、電源ON用LED21、スタンバイ用LED22、システムコントローラ24、クロック26、デバイスコントローラ30、メディアドライブ32、USBモジュール34、フラッシュメモリ36、無線通信モジュール38、有線通信モジュール40、サブシステム50およびメインシステム60を有して構成される。
メインシステム60は、メインCPU(Central Processing Unit)、主記憶装置であるメモリおよびメモリコントローラ、GPU(Graphics Processing Unit)などを備える。GPUはゲームプログラムの演算処理に主として利用される。これらの機能はシステムオンチップとして構成されて、1つのチップ上に形成されてよい。メインCPUは、補助記憶装置2やROM媒体44に記録されたゲームソフトウェアを実行する機能をもつ。
サブシステム50は、サブCPU、主記憶装置であるメモリおよびメモリコントローラなどを備え、GPUを備えず、ゲームプログラムを実行する機能をもたない。サブCPUの回路ゲート数は、メインCPUの回路ゲート数よりも少なく、サブCPUの動作消費電力は、メインCPUの動作消費電力よりも少ない。サブCPUは、メインCPUがスタンバイ状態にある間においても動作し、消費電力を低く抑えるべく、その処理機能を制限されている。
メイン電源ボタン20は、ユーザからの操作入力が行われる入力部であって、情報処理装置10の筐体の前面に設けられ、情報処理装置10のメインシステム60への電源供給をオンまたはオフするために操作される。電源ON用LED21は、メイン電源ボタン20がオンされたときに点灯し、スタンバイ用LED22は、メイン電源ボタン20がオフされたときに点灯する。
システムコントローラ24は、ユーザによるメイン電源ボタン20の押下を検出する。メイン電源がオフ状態にあるときにメイン電源ボタン20が押下されると、システムコントローラ24は、その押下操作を「オン指示」として取得し、一方で、メイン電源がオン状態にあるときにメイン電源ボタン20が押下されると、システムコントローラ24は、その押下操作を「オフ指示」として取得する。
クロック26はリアルタイムクロックであって、現在の日時情報を生成し、システムコントローラ24やサブシステム50およびメインシステム60に供給する。
デバイスコントローラ30は、サウスブリッジのようにデバイス間の情報の受け渡しを実行するLSI(Large-Scale Integrated Circuit)として構成される。図示のように、デバイスコントローラ30には、システムコントローラ24、メディアドライブ32、USBモジュール34、フラッシュメモリ36、無線通信モジュール38、有線通信モジュール40、サブシステム50およびメインシステム60などのデバイスが接続される。デバイスコントローラ30は、それぞれのデバイスの電気特性の違いやデータ転送速度の差を吸収し、データ転送のタイミングを制御する。
メディアドライブ32は、ゲームなどのアプリケーションソフトウェア、およびライセンス情報を記録したROM媒体44を装着して駆動し、ROM媒体44からプログラムやデータなどを読み出すドライブ装置である。以下では、プログラムおよびデータを特に区別しない場合には、まとめてデータと呼ぶこともあるが、「データ」は、ファイルを構成する要素を表現するものとしても使用する。ROM媒体44は、光ディスクや光磁気ディスク、ブルーレイディスクなどの読出専用の記録メディアである。
USBモジュール34は、外部機器とUSBケーブルで接続するモジュールである。USBモジュール34は補助記憶装置2およびカメラ7とUSBケーブルで接続してもよい。フラッシュメモリ36は、内部ストレージを構成する補助記憶装置である。無線通信モジュール38は、Bluetooth(登録商標)プロトコルやIEEE802.11プロトコルなどの通信プロトコルで、たとえば入力装置6と無線通信する。なお無線通信モジュール38は、ITU(International Telecommunication Union;国際電気通信連合)によって定められたIMT−2000(International Mobile Telecommunication 2000)規格に準拠した第3世代(3rd Generation)デジタル携帯電話方式に対応してもよく、さらには別の世代のデジタル携帯電話方式に対応してもよい。有線通信モジュール40は、外部機器と有線通信し、AP8を介してネットワーク3に接続する。
図1に戻ってコンテンツサーバ12は、情報処理装置10にゲームソフトウェアおよびそのパッチデータを提供する。本実施例においてコンテンツサーバ12は、情報処理装置10からの要求に応じて、最新バージョンのパッチファイルのうち、情報処理装置10がダウンロードしていないデータを含むデータブロックを提供する。パッチファイルは、ゲームメーカにより適時更新され、コンテンツサーバ12には、常に最新のパッチファイルをユーザがダウンロード可能に保持されている。最新のパッチファイルのデータには、それ以前のバージョンのパッチファイルのデータと重複するものもあるため、情報処理装置10は、最新のパッチファイルにおいて、それ以前のパッチファイルでは取得していないデータを含むデータブロックのみをダウンロードするようにする。情報処理装置10はゲームソフトウェアに最新のパッチをあてる際、それ以前のパッチファイルで取得済みのパッチデータについては、それを再利用する。これにより、ダウンロードする最新パッチファイルのデータ量を少なくでき、コンテンツサーバ12の処理負荷を下げることができる。
ゲームソフトウェアは、起動ファイル、ゲームプログラムなどのゲームを実行するためのリソースファイル群、および情報処理装置10のOSが使用するファイル群を含んでおり、本来ROM媒体44に記録されているゲームソフトウェアのイメージファイルを情報処理装置10に提供する。ゲームプログラムは、ゲームの実行に必要なプログラムであり、ゲームプログラムを走らせることでゲームが進行する。起動ファイルは、ゲームプログラムを起動するためのプログラムであり、起動ファイルを実行すると、ゲームプログラムが呼び出されて実行される。OSが使用するファイル群は、たとえば、情報処理装置10におけるメニュー画面に表示されるゲームアイコン画像などを含む。
ゲームソフトウェアはツリー型ディレクトリ構造を有し、ルートディレクトリには起動ファイルが含まれている。下層のサブディレクトリは、ファイルの種類ごとに分類され、たとえば3Dモデル用のサブディレクトリ、テクスチャ用のサブディレクトリ、スクリプト用のサブディレクトリなどが形成されている。
図3は、ゲームソフトウェアのファイル構成の概念図を示す。本実施例のゲームソフトウェア70の本体は複数のファイルによって構成され、図示されるように複数のグループ72に論理的に分割される。各ファイルは複数のグループ72のうち少なくとも1つのグループに属し、また各グループ72には少なくとも1つのファイルが属している。図3に示すゲームソフトウェア70には、先頭グループとして第1グループ72aが存在し、それに後続するグループとして第2グループ72b、第3グループ72c、第4グループ72d、第5グループ72e、第6グループ72fが存在している。なお第6グループ72fに後続する7番目以降のグループ72が存在していてもよい。各グループは、第1、第2などのグループ番号によって識別される。
論理的に分割された各グループには、複数のサブディレクトリに含まれるファイルが属し、すなわち各グループは、種類の異なるファイルによって構成され、情報処理装置10がゲーム中のシーンやステージなどの特定の単位を実行するのに必要なファイルが属するように設定されている。
第1グループ72aには、ゲームソフトウェア70の起動に必要なプログラムファイルおよびデータファイルが属している。したがって情報処理装置10は、ゲームソフトウェア70をコンテンツサーバ12から取得する場合、第1グループ72aに属する全てのファイルをダウンロードすれば、後続の第2グループ72b以降のファイルをダウンロードしなくても、ただちにゲームソフトウェア70を起動することが可能となる。なお情報処理装置10は、第1グループ72aに属する全てのファイルを取得して、ゲームソフトウェア70を起動した後に、後続のグループ72に属するファイルをバックグランドでダウンロードする。このようにゲームの実行に必要な最低限のファイルをまず最初にダウンロードさせ、それらのファイルが揃った時点でゲームを実行可能とすることで、ユーザのダウンロード待ち時間を短くすることが可能となる。なお、本実施例においては、ROM媒体44に記録されるゲームソフトウェア70も、コンテンツサーバ12などからダウンロードされるゲームソフトウェア70も、同じファイルおよびディレクトリ構成をもつデータ構造を有している。
図4は、ゲームソフトウェアの具体的なファイル構成例を示す。第1グループ72aは、ゲームソフトウェア70の中で一番最初にダウンロードされるべきファイル群で構成されており、ここではゲームパラメータファイル、グループファイル、起動ファイルおよび必須リソースファイルが示されている。
ここでゲームパラメータファイルは、情報処理装置10のOSが使用するファイルであり、たとえばタイトルIDやディスプレイ解像度などの情報、またアイコン画像データなどを含んでいる。
グループファイルは、各ファイルがどのグループに含まれるかを記述する定義ファイルである。たとえばグループファイルはXMLで表現されてよいが、他のプログラム言語によって表現されてもよく、その形式は問わない。グループファイルについては、図5、図6に関して後述する。
起動ファイルは、ゲームプログラムを起動するためのプログラムである。また必須リソースファイルは、ゲーム実行に必須となるプログラムなどのリソースファイルやゲーム全体で使用する共通ファイルなどを含む。
情報処理装置10は、ゲームソフトウェア70をコンテンツサーバ12などからダウンロードする場合、第1グループ72aに属するファイル群を全て取得すれば、ゲームを起動することができる。逆に言えば、第1グループ72aは、ユーザがゲームの一部をプレイするために必要なファイル群を含むように構成されている。なお、ここでいうゲームプレイは、たとえばユーザがキャラクタを決定したり、ゲームレベルを決定するなど、ゲーム開始時に行う設定行動も含むものであってよい。つまり第1グループ72aは、ゲームを起動し、ユーザが少なくとも何らかの動作を行える状態にするために必要なファイル群を含んで構成されている。第1グループ72aに含まれるファイル群を用いて実行可能となるゲームプレイは、たとえばゲームの初期設定だけであってもよく、またゲームの第1ステージまでプレイ可能とするものであってもよい。これはゲームメーカ次第である。
図4に示す例では、第2グループ72bには、シーン1用の複数のリソースファイルが属しており、第3グループ72cには、シーン2用の複数のリソースファイルが属しており、第4グループ72dには、シーン3用の複数のリソースファイルが属している。具体的に複数のリソースファイルは、特定のシーン用の3Dモデルファイル、テクスチャファイル、スクリプトファイルなどであり、ディレクトリ構造の複数のサブディレクトリに含まれるファイルを含む。
図5は、グループとファイルの関係の一例を示す。ここでは、ファイルA〜Nが、各グループ72に属していることが示される。図示されるように、各ファイルは複数のグループ72のうち少なくとも1つのグループに属し、また各グループ72には少なくとも1つのファイルが属している。なおファイルGは、第2グループ72b、第3グループ72cおよび第4グループ72dに属している。このことは、ファイルGが、ゲーム中のシーン1、シーン2、シーン3を構成する上で必要なファイルであることを意味し、このように1つのファイルが、複数のグループに所属することもある。なお同様にファイルKも、複数のグループ72、すなわち第4グループ72dおよび第5グループ72eに属している。
図6は、グループファイルの一例を示す。既述したように、グループファイルはXMLによって表現されてもよく、他のプログラム言語によって表現されてもよい。図6には、理解を容易にするために、グループとファイルの対応関係をテーブル形式で表現したグループファイルを示している。情報処理装置10は、ゲームソフトウェア70の各ファイルをダウンロードする際に、グループファイルを参照して、あるグループに属するファイルが全て揃ったか、または揃ってないかを判定することが可能となる。たとえば第1グループ72aに関して言えば、情報処理装置10はグループファイルを参照することで、第1グループ72aに属するファイルが、ファイルA,B,C,D,E,Fであることを認識できるため、これらのファイルが補助記憶装置2に記録されていれば、第1グループ72aに属するファイルが全て揃ったことを判定する。
このようにゲームソフトウェア70が複数のグループにより構成されることで、情報処理装置10は、グループのダウンロードの優先順位を定めるダウンロード順序にしたがって、ファイルをダウンロードすることができる。ゲームソフトウェア70が、1人でプレイするシングルプレイ用のリソースファイルと、複数人でプレイするマルチプレイ用のリソースファイルを含む場合、ユーザがシングルプレイを望む場合には、シングルプレイ用のグループを優先的にダウンロードし、シングルプレイを楽しみながら、バックグランドで、マルチプレイ用のグループをダウンロードできるようになる。一方で、ユーザがマルチプレイを望む場合には、マルチプレイ用のグループを優先的にダウンロードし、マルチプレイを楽しみながら、バックグランドで、シングルプレイ用のグループをダウンロードできる。
なお本実施例において、ゲームソフトウェアは、圧縮され、署名され、且つ暗号化されている。後述するが、パッチファイルも、ゲームソフトウェアと同様に、圧縮され、署名され、且つ暗号化されている。このように圧縮署名暗号化されたゲームソフトウェアおよびパッチファイルは、所定のサイズ(たとえば64キロバイト)のデータブロックを割り当てられて構成されている。データブロックは、ファイルシステムがデータを転送する基本単位となる。本実施例では、ファイルのデータが、データブロック単位で配信可能であるため、図6に示すグループファイルは、各グループと、各グループに所属するファイルのデータが含まれるデータブロックの番号との対応関係を記録していてもよい。また図6に示すグループファイルは、各グループと、各グループに所属するファイルのデータが含まれるデータブロックのアドレスとの対応関係を記録していてもよい。
以下、本実施例のゲームソフトウェアのデータ構造について説明する。本実施例では、UNIX(登録商標)で利用されるファイル管理手法を利用して、ゲームソフトウェアを構成する。ゲームソフトウェアは、複数のファイルとメタデータとを少なくとも含んで構成される。本実施例のデータ構造を説明する前に、図7において、アドレッシング用のデータ構造を参考に示し、図8において、本実施例のデータ構造と比較するためのデータ構造の比較例を示す。
図7は、ファイルのデータブロックのアドレッシングに使用されるデータ構造の参考例を説明するための図である。最初の1段目の索引表はindex node(略して「iノード」)と呼ばれ、データブロックのアドレッシング用に合計15個のエントリを有する。全てのファイルはiノードとデータブロックから構成され、iノードは、ファイルシステムにおいてファイルを識別するためのiノード番号を付与されている。iノードは、属性情報として、iノード番号、ファイルの種類、ファイルのバイト長、アクセス権などを有している。
この参考例として示すデータ構造においては、iノードのエントリに、データブロックの記録場所を特定するための情報が記録されている。この情報は、たとえば記録ディスクもしくはパーティションの先頭からの相対位置を指定するブロック番号であってよい。なお、データブロックの記録場所を特定するための情報は、ブロック番号に限らず、たとえばブロック番号を算出するためのブロックサイズやファイルオフセットなどの情報であってもよい。またデータブロックの記録場所を特定するための情報は、直接的に記録場所を特定する記録ディスクのセクタ番号であってもよい。
ファイル名と、そのファイルを管理するiノードのiノード番号(iノードへのポインタとしての意味をもつ)は、ディレクトリのデータブロックにおいて対応付けて保持されている。したがってゲームプログラムがファイルをファイル名で参照するとき、OSのカーネルは、ディレクトリエントリの情報を参照して、そのファイル名に対応するiノード番号を取得し、iノード番号で特定されるiノードに含まれるブロック番号を用いて、ファイルにアクセスする。
iノードの12個のエントリは、ファイル内の先頭から12個までのデータブロックのブロック番号を記録するために使用される。したがってファイルが12個以内のデータブロックで構成されていれば、iノードは、ブロック数分のエントリを用いて各データブロックのブロック番号を記録できる。
なお、ファイルが13個以上のブロックで構成されていると、複数段の索引表が必要となる。図7に示す例では、iノードの13番目のエントリには、2段目の索引表(インダイレクトブロック)のブロック番号が記録され、iノードの13番目のエントリが、インダイレクトブロックにリンクして、1段階目の間接参照に利用される。インダイレクトブロックは、固定のデータサイズを有して、256個のエントリを有している。インダイレクトブロックのエントリには、2段目のデータブロックのブロック番号が記録される。
iノードの14番目のエントリには、3段目の索引表(ダブルインダイレクトブロック)をリンクするための2段目の索引表(インダイレクトブロック)のブロック番号が記録されている。インダイレクトブロックのエントリには、ダブルインダイレクトブロックのブロック番号が記録されている。ダブルインダイレクトブロックは、256個のエントリを有しており、そのエントリには、3段目のデータブロックのブロック番号が記録されている。このようにiノードの14番目のエントリは、2段階目の間接参照に利用される。
iノードの15番目のエントリには、4段目の索引表(トリプルインダイレクトブロック)をリンクするための3段目の索引表(ダブルインダイレクトブロック)をリンクするための2段目の索引表(インダイレクトブロック)のブロック番号が記録されている。インダイレクトブロックのエントリには、ダブルインダイレクトブロックのブロック番号が記録されている。ダブルインダイレクトブロックのエントリには、トリプルインダイレクトブロックのブロック番号が記録されている。トリプルインダイレクトブロックは、256個のエントリを有しており、そのエントリには、4段目のデータブロックのブロック番号が記録されている。このようにiノードの15番目のエントリは、3段階目の間接参照に利用される。
以下、2段目以降の索引表(つまりiノード以外の索引表)を、まとめてindirect Block(インダイレクトブロック)と呼ぶこともある。
参考例として示すファイルのデータ構造においては、索引表の各エントリに、ブロック番号とともに、データブロックに含まれるデータのハッシュ値も格納される。ハッシュ値はたとえば32バイトのデータ値であり、データブロックを登録するエントリにデータブロック内のデータのハッシュ値を記録することで、ブロックのデータが読み出される際に、そのデータが正しいデータであるか否かを検証できるようにし、またデータの改ざんを防止することも可能となる。
上記したように、インダイレクトブロックは固定のデータサイズを有しており、索引表としてインダイレクトブロックが使用される場合には、固定長の領域を確保する必要がある。たとえば1つのファイルのブロック数が20個である場合、iノードの12個のエントリと、2段目のインダイレクトブロックの8個のエントリに、データブロックが登録されて、各エントリに、それぞれのブロック番号とハッシュ値とが記録されることになるが、その結果、2段目のインダイレクトブロックの残りの248(=256−8)個のエントリは空であり、メタデータとして寄与しない無駄な領域となる。
ゲームソフトウェア70の本体は、複数たとえば10000個を超えるファイルを含んで構成されている。このファイルシステムでは、ファイルの読出しの目的のために、iノードおよびインダイレクトブロックに記録されたメタデータは全て、DDR3などのメモリ上に展開される。なおメモリ上には、ファイルも可能な限り読み出すことが好ましく、したがってメタデータのデータサイズは、できるだけ小さいことが好ましい。
しかしながら上記したように、インダイレクトブロックのエントリに空データが多く存在すると、その空データもメモリ上に展開されることになり、結果としてメモリ容量を圧迫することになる。特に、10000個を超えるファイルが存在するようなゲームソフトウェア70では、各ファイルの索引表を用意することで、空データを含むメタデータが1Gバイトを超えることも生じうる。
図8は、ゲームデータのデータ構造の参考例を示す。この参考例は、実施例のデータ構造と比較するために示しており、この参考例で示されるデータ構造は、複数(たとえば10000個)のファイルを含むゲームデータ領域202に、スーパブロック、iノードリストおよび複数(N個)のインダイレクトブロックを含むメタデータ領域200を付加した構造をとる。スーパブロックには、ゲームデータ領域202に含まれるファイルの管理情報が記録され、ブロックサイズ、総ブロック数などのメタデータが含まれる。iノードリストは、iノードを、少なくともゲームデータ領域202に含まれるファイル数分(たとえば10000個)含んでいる。(なお正確には、このファイルシステムでは、ディレクトリやファイル名も1つのファイルとして扱われるため、iノードリストには、ディレクトリやファイル名に関するiノードも含まれることになる。)
インダイレクトブロックは、iノードの12エントリでデータブロックを登録しきれなかったファイルに関して設けられる。この参考例においては、既述したように、iノードおよびインダイレクトブロックのエントリに、ブロック番号と、データブロックに含まれるデータのハッシュ値が含まれている。
そのためゲームデータ領域202に10000個のファイルが含まれる場合には、インダイレクトブロックが多数存在することになり、インダイレクトブロックの中には上記したように、エントリのほとんどが空データを含むものも存在する。そのためメタデータ領域200のデータサイズは不必要に大きくなり、ゲームプログラムの実行中、メタデータ領域200に含まれるメタデータをメモリに展開することは、メモリの効率的な使用の観点から好ましくない。
そこで本実施例のゲームソフトウェアは、各ファイルのブロックごとにハッシュ値をもつデータ構造ではなく、メタデータのデータサイズを可能な限り小さくしたデータ構造をとるようにする。具体的には、署名(ハッシュ値)無しの複数のファイルを1まとめにした完全平文のイメージファイルを作成し、このイメージファイルに対して、メタデータを付加したゲームデータを作成する。なおイメージファイルとは、ファイルシステムの構造や制御情報などを含んで1つのファイルとして構成されるものを意味する。
実施例のゲームデータのデータ構造では、複数のファイルを記録媒体上の連続した場所(ブロック)に記録する。これにより各ファイルの記録場所は、先頭位置とファイルサイズとをメタデータとしてiノードのエントリに保持しておくことで、特定されることが可能となるため、各データブロックごとのブロック番号などの記録場所を特定するための情報をもつ必要がなくなる。また、データブロックごとの署名をしないことで、各ファイルのメタデータとしてデータブロックごとのハッシュ値をもつ必要がなくなるため、各ファイルのメタデータは、iノードのエントリに収めることができるようになる。つまりブロックごとのハッシュ値を生成せず、さらにデータブロックを連続した番号のブロックに記録することで、インダイレクトブロックを必要とせずにすみ、メタデータのデータサイズを大幅に削減することが可能となる。
図9は、実施例のゲームデータの作成方法を示すフローチャートである。このフローチャートに示すステップは、ゲームメーカにおいて、最終的なゲームパッケージソフトウェアを作成する過程を表現しており、パッケージ作成ソフトウェアにより実現される。まずパッケージ作成ソフトウェアは、平文(圧縮なし、暗号化なし、署名なし)のゲームデータのイメージファイルを作成する(S10)。既述したように、イメージファイルは、ファイルシステムの構造や制御情報などを含んだ1つのファイルとして構成される。
図10(a)は、本実施例のゲームデータの完全平文のイメージファイルの一例を示す。このイメージファイル210は、複数(たとえば10000個)のファイルを含むゲームデータ領域202に、スーパブロックおよびiノードリストを含むメタデータ領域204を付加したデータ構造をとる。スーパブロックには、ゲームデータ領域202に含まれるファイルの管理情報が記録され、ブロックサイズ、総ブロック数などのメタデータが含まれる。
ゲームデータ領域202に含まれる複数のゲームファイルには、連続した番号をもつ論理的なブロックが割り当てられている。ゲームデータ領域202に含まれる複数のゲームファイルに割り当てるブロックを整列することにより、1つのゲームファイルは、そのファイルが割り当てられた先頭のブロック番号と、ファイルのデータサイズとによって、記録媒体における格納場所を特定することが可能となる。そのためゲームファイルのiノードは、そのファイルの先頭のブロック番号と、ファイルのデータサイズとを記録しておくことで、ファイルの記録場所を特定する。これにより、OSが、ゲームファイルにアクセスする際には、ゲームファイルのiノード番号を取得することで、ゲームファイルの記録場所を知ることができる。なおブロックサイズは64キロバイトであり、各ファイルは64キロバイトのデータブロックに整列して格納されている。
ゲームデータ領域202に記録されるゲームファイルは署名されないため、各ブロックごとのハッシュ値は存在しない。したがってファイルのメタデータを記録するためのインダイレクトブロックを用意する必要がなく、ファイルのメタデータは、iノードの1エントリに収めることが可能となる。そのためメタデータ領域204において、iノードリストは、ゲームデータ領域202におけるファイル数分のiノードを含む一方で、図8と比較して明らかなように、ファイルに関する複数のインダイレクトブロックはメタデータ領域204に含まれない。なお既述したように、このファイルシステムではディレクトリやファイル名も1つのファイルとして扱われるため、iノードリストには、ディレクトリやファイル名に関するiノードも含められることになるが、この場合にも、ディレクトリやファイル名は署名されないため、インダイレクトブロックを用意する必要がない。
図8に示すメタデータ領域200と比較すると、図10(a)に示すメタデータ領域204は、インダイレクトブロックを含まないために、そのデータサイズを大きく削減できている。そのためゲームプログラムの実行時、メタデータ領域204に含まれるメタデータをDDR3などのメモリに読み出しても、小さなデータサイズで済むことになる。
図9に戻り、パッケージ作成ソフトウェアは、図10(a)に示す平文のイメージファイル210を圧縮する(S12)。圧縮は、ブロックごとに行われる。図10(b)は、圧縮したイメージファイルの一例を示す。パッケージ作成ソフトウェアは、圧縮したイメージファイル212に、連続した番号をもつ論理的なブロック(これも64キロバイトのサイズ)を割り当てる。つまりパッケージ作成ソフトウェアは、ゲームデータ領域202に含まれる複数のブロックを圧縮して、圧縮した全てのブロックを連結して、連結した圧縮データに、論理的なブロックを割り当てる。この状態では、ファイルとブロックの関係は一致しないことになり、ある1つのブロックをみたときに、複数(たとえば2つ)のファイルのデータが含まれていることもある。圧縮イメージファイル212においては、圧縮前と圧縮後のファイルのブロックの関係を示す圧縮テーブルが、メタデータ領域205に書き込まれる。圧縮テーブルでは、そのヘッダ部分に圧縮前の平文のイメージファイル210のサイズが記述され、またテーブル部分に圧縮前のブロック番号と、圧縮後のブロック番号および圧縮後のブロック番号のブロック内でのオフセット位置とが対応付けられて記述されている。なおテーブル部分には、ブロックに関して、圧縮前のアドレスと、圧縮後に変更されたアドレスとが対応付けられて記述されてもよい。このように圧縮することで、ゲームデータ領域206のデータサイズは、ゲームデータ領域202のデータサイズと比較して小さくなっている。
図10(a)および図10(b)に示すイメージファイル210、212は、このままでも、ゲームデータのイメージファイルとして使用されることが可能である。すなわち情報処理装置10において、OSは、イメージファイル210または212をゲームを実行するための所定のマウントポイントにマウントすると、起動ファイルが起動されて、ゲームプログラムが実行されることになる。このとき、メタデータ領域204、205のデータサイズは、インダイレクトブロックを含まずに小さくできているため、メモリ上にメタデータを効率的に展開できる。
しかしながら、イメージファイル210、212は署名、暗号化されていないため、ブロックのデータが読み出される際に、そのデータが正しいデータであるか否かを検証することができず、またデータの改ざんを効果的に防止できないという欠点がある。そこで本実施例では、アーカイブ形式のイメージファイル212を1つのファイルとして扱って署名を行い、さらには暗号化も行って、セキュアなゲームデータを作成する。
パッケージ作成ソフトウェアは、圧縮したイメージファイル212を1つのファイルと見立てて、連続した番号をもつ論理的なブロックを割り当てる。パッケージ作成ソフトウェアは、圧縮イメージファイル212を構成する複数のブロックのそれぞれに署名を行い、具体的には各ブロックデータのハッシュ値を求め、暗号化する(S14)。各ブロックデータのハッシュ値は、メタデータ領域208に含まれるメタデータの1つとして、暗号化したイメージファイル213に付加される(S16)。なおパッケージ作成ソフトウェアは、ゲームデータのセキュリティを高めるために、作成したメタデータに署名を行い、さらにメタデータおよびゲームデータ本体に暗号化処理を行ってもよい。
図10(c)は、本実施例のゲームデータのデータ構造の一例を示す。このデータ構造をもつゲームデータは、パッケージファイル214としてROM媒体44に記録され、またはパッケージファイル214としてコンテンツサーバ12やストアサーバ16から情報処理装置10にダウンロードされて、補助記憶装置2に記録される。
図10(c)に示されるように、パッケージファイル214は、暗号化したイメージファイル213をネストしたデータ構造をもつ。本実施例のデータ構造は、1つのファイルとして取り扱われるイメージファイル213に、スーパブロック、iノードリスト、複数(M個)のインダイレクトブロックをメタデータとして含むメタデータ領域208を付加した構造をとる。
スーパブロックには、イメージファイル213の管理情報が記録され、ブロックサイズ、総ブロック数などのメタデータが含まれる。iノードリストに含まれるイメージファイル213のiノードおよび複数のインダイレクトブロックは、1つのファイルとして見立てたイメージファイル213を分割したブロック数分を少なくとも含むエントリに、イメージファイル213の各ブロックのハッシュ値を含むメタデータを記録する。このようにパッケージファイル214は、圧縮して暗号化したイメージファイル213を所定のブロックサイズで分割し、それぞれに連続したブロック番号を割り当てたデータ構造を有している。
図10(a)から図10(c)に例示したイメージファイルの関係について説明する。
図11(a)から図11(c)は、メタデータと、ファイルA〜Fを含むイメージファイルを説明するための図である。なお、説明の便宜上、図11において、メタデータとして表現されているデータ群は、メタデータを含むだけでなく、図4に示す第1グループ72aに含まれるファイルも含むものとする。図12にも関連して後述するが、図11においてメタデータとして示すデータの集合体は、第1グループ72aに含むファイルを含み、したがって情報処理装置10は、図11でメタデータとして便宜上表現している第1グループ72aをダウンロードすることで、プログラムを起動できるようになる。
図11(a)は、圧縮前のイメージファイル210の構成例を示す。ここではメタデータが第1ブロック231、第2ブロック232に格納され、ファイルAが、第3ブロック233、第4ブロック234、第5ブロック235に格納され、ファイルBが、第6ブロック236、第7ブロック237、第8ブロック238に格納され、ファイルCが、第9ブロック239、第10ブロック240、第11ブロック241に格納され、ファイルDが、第12ブロック242、第13ブロック243、第14ブロック244に格納され、ファイルEが、第15ブロック245、第16ブロック246、第17ブロック247に格納され、ファイルFが、第18ブロック248、第19ブロック249、第20ブロック250に格納されている。各ブロックは、64キロバイトのデータサイズを有している。このように圧縮前のイメージファイル210において、メタデータおよび各ファイルは、64キロバイトのブロックに整列して格納されている。
図11(b)は、圧縮したイメージファイル212の構成例を示す。イメージファイル210の各ブロックが圧縮され、圧縮した各ブロックを連結することで、イメージファイル212が生成される。
図11(c)は、圧縮したイメージファイル212を64キロバイトのブロックに分割して、ブロックごとに署名暗号化したイメージファイル213の構成例を示す。圧縮署名暗号化されたメタデータ(M)は、第1ブロック261と、第2ブロック262の一部に格納されている。また圧縮署名暗号化されたファイルAは、第2ブロック262の一部と、第3ブロック263と、第4ブロック264の一部に格納されている。圧縮署名暗号化されたファイルBは、第4ブロック264の一部と、第5ブロック265と、第6ブロック266の一部に、圧縮署名暗号化されたファイルCは、第6ブロック266の一部と、第7ブロック267と、第8ブロック268の一部に、圧縮署名暗号化されたファイルDは、第8ブロック268の一部と、第9ブロック269と、第10ブロック270の一部に、圧縮署名暗号化されたファイルEは、第10ブロック270の一部と、第11ブロック271と、第12ブロック272の一部に、圧縮署名暗号化されたファイルFは、第12ブロック272の一部と、第13ブロック273と、第14ブロック274に、それぞれ格納されている。このように圧縮後のイメージファイル212を64キロバイトのブロックで分割し、各ブロック内での暗号化が行われている。なお本実施例において、暗号化は共通鍵暗号を採用し、したがってブロックの暗号化の前後においてデータの増減は発生しない。
図12は、圧縮署名暗号化されたファイルをダウンロードする方法を説明するための図である。図5および図6に、グループとファイルの関係の一例を示したが、その例とは別に、図12では理解を容易にするために、グループとファイルの関係を単純化して示している。
図12(a)に示すイメージファイル213において、上記したように、メタデータMは、第1グループ72aに対応するものとして示している。なお第1グループ72aには、さらに図10(c)に示すメタデータ領域208に含まれるメタデータも含まれる。
図12(b)は、第1グループ72aに属するファイルを示すデータブロックを示す。第1グループ72aは、第1ブロック261と、第2ブロック262の一部に格納されており、したがって第1グループ72aを取得するためには、第1ブロック261と第2ブロック262をダウンロードする必要がある。
図12(c)は、第2グループ72bに属するファイルを示すデータブロックを示す。第2グループ72bは、ファイルA,B,Fから構成される。ファイルAは、第2ブロック262の一部と、第3ブロック263と、第4ブロック264の一部に格納され、ファイルBは、第4ブロック264の一部と、第5ブロック265と、第6ブロック266の一部に格納され、ファイルFは、第12ブロック272の一部と、第13ブロック273と、第14ブロック274に格納されている。したがってファイルA,B,Fから構成される第2グループ72bを取得するためには、第2ブロック262〜第6ブロック266、第12ブロック272〜第14ブロック274をダウンロードする必要がある。
図12(d)は、第3グループ72cに属するファイルを示すデータブロックを示す。第3グループ72cは、ファイルC,D,Fから構成される。ファイルCは、第6ブロック266の一部と、第7ブロック267と、第8ブロック268の一部に格納され、ファイルDは、第8ブロック268の一部と、第9ブロック269と、第10ブロック270の一部に格納され、ファイルFは、第12ブロック272の一部と、第13ブロック273と、第14ブロック274に格納されている。したがってファイルC,D,Fから構成される第3グループ72cを取得するためには、第6ブロック266〜第10ブロック270、第12ブロック272〜第14ブロック274をダウンロードする必要がある。
図12(e)は、第4グループ72dに属するファイルを示すデータブロックを示す。第4グループ72dは、Eから構成される。ファイルEは、第10ブロック270の一部と、第11ブロック271と、第12ブロック272の一部に格納されている。したがってファイルEから構成される第4グループ72dを取得するためには、第10ブロック270〜第12ブロック272をダウンロードする必要がある。
ここで、第2グループ72bが、シングルプレイ用のリソースファイル、第3グループ72cが、マルチプレイ用のリソースファイル、第4グループ72dが、エンディング用のリソースファイルであるとする。たとえば一人でプレイ(シングルプレイ)を行うユーザは、複数人でプレイ(マルチプレイ)用の第3グループ72cをすぐには必要とせず、また一方で、マルチプレイを行うユーザは、シングルプレイ用の第2グループ72bをすぐには必要としない。
つまりシングルプレイを行うユーザは、第1グループ72aをまずダウンロードした後、第2グループ72b、第4グループ72dを、この順にダウンロードし、最後に第3グループ72cをダウンロードすればよい。このユーザは、ダウンロード時にはマルチプレイに興味がないため、いち早く、シングルプレイ用のリソースファイルと、エンディング用のリソースファイルとをダウンロードして、ゲームをシングルプレイできることが好ましいためである。
一方で、マルチプレイを行うユーザは、第1グループ72aをまずダウンロードした後、第3グループ72c、第4グループ72dを、この順にダウンロードし、最後に第2グループ72bをダウンロードすればよい。このユーザは、ダウンロード時にはシングルプレイに興味がないため、いち早く、マルチプレイ用のリソースファイルと、エンディング用のリソースファイルとをダウンロードして、ゲームを複数ユーザでプレイできることが好ましいためである。
そこでユーザがゲームソフトウェアをダウンロードする際、出力装置4の画面には「シングルプレイ用のゲームを優先的にダウンロードする」、「マルチプレイ用のゲームを優先的にダウンロードする」の選択肢が提示され、コンテンツサーバ12は、選択された選択肢にしたがって、グループのダウンロード順序を示す順序情報を情報処理装置10に提供し、情報処理装置10が、その順序情報にしたがって、コンテンツサーバ12からゲームファイルをダウンロードする。なお、この順序情報は、メタデータ(第1グループ72a)に含まれており、情報処理装置10は、第1グループ72aのダウンロード後、順序情報にしたがった順序で、グループ単位でのダウンロードを実行してもよい。このように、本実施例の情報処理システム1においては、ユーザが希望するプレイ態様、すなわちシングルプレイかマルチプレイかに応じて、ファイルのダウンロード順序が定められる。
図12(f)は、シングルプレイ用のダウンロード順序を示す。このダウンロード順序では、ダウンロードするブロックのブロック番号の順番が規定される。図中に示される番号は、ブロック番号を示す。このダウンロード順序では、第1グループ72a、第2グループ72b、第4グループ72d、第3グループ72cの順番でダウンロードされるため、図12(f)に示すように、第1ブロック261、第2ブロック262、第3ブロック263、第4ブロック264、第5ブロック265、第6ブロック266、第12ブロック272、第13ブロック273、第14ブロック274、第10ブロック270、第11ブロック271、第7ブロック267、第8ブロック268、第9ブロック269の順番で、ブロックがダウンロードされる。
このように本実施例において、ダウンロードはブロック単位で管理される。圧縮署名暗号化されたブロックには、複数のファイルのデータが混在していることがあるが、既にダウンロード済みのブロックが、もう1度ダウンロードされることはない。情報処理装置10は、ダウンロード済みのブロックを管理し、これからダウンロードするグループに、既にダウンロード済みのブロックが含まれていれば、それらをダウンロード対象から外し、まだダウンロードしていないブロックのみをダウンロードするように制御する。これによりダウンロード時間を効率的に短縮できるようになる。
図12(g)は、マルチプレイ用のダウンロード順序を示す。図中に示される番号は、ブロック番号を示す。このダウンロード順序では、第1グループ72a、第3グループ72c、第4グループ72d、第2グループ72bの順番でダウンロードされるため、図12(g)に示すように、第1ブロック261、第2ブロック262、第6ブロック266、第7ブロック267、第8ブロック268、第9ブロック269、第10ブロック270、第12ブロック272、第13ブロック273、第14ブロック274、第11ブロック271、第3ブロック263、第4ブロック264、第5ブロック265の順番で、ブロックがダウンロードされる。
以上は、ゲームソフトウェアのデータ構造について説明した。以下においては、本実施例におけるパッチファイルについて説明するが、パッチファイルも、本ゲームソフトウェアと同様のデータ構造を有している。すなわち説明したように、パッチファイルも、ネストしたデータ構造をもち、ゲームデータは圧縮され、署名され、暗号化されたデータとして構成される。なおゲームソフトウェアは、書き換え不能なイメージファイルとしてROM媒体44に記録され、またはコンテンツサーバ12から配信されて補助記憶装置2に記録される。パッチファイルは、コンテンツサーバ12から適時ダウンロードされて補助記憶装置2に記録され、パスオーバレイ処理により、ファイル単位ないしはデータブロック単位で擬似的に上書きされて使用される。つまりゲームソフトウェアに含まれるファイルをパッチファイルにて更新される場合には、そのファイルについては、ゲームソフトウェアのパスではなく、パッチファイルのパスが設定されて使用されることになる。またパッチファイルが、ゲームにおける追加シナリオファイルを含む場合には、そのパッチファイルが使用される。
以下においては、圧縮署名暗号化されたパッチファイルを、ブロック単位で管理する仕組みについて説明する。たとえばバージョン1の古いパッチファイルと、バージョン2の新しいパッチファイルが存在する場合、既に情報処理装置10が、バージョン1のパッチファイルをダウンロード済みであれば、バージョン2のパッチファイルにおいて、同じデータを含むブロックをダウンロードすることは、ネットワークリソースを無駄に使用し、またコンテンツサーバ12の処理負荷を高めることにもなる。そこで情報処理装置10において、既にダウンロード済みのデータについては、コンテンツサーバ12からダウンロードすることなく、情報処理装置10において再利用する。ゲームメーカは、異なるバージョン間のパッチファイルの差分情報を作成し、情報処理装置10は、ダウンロード済みのパッチファイルのバージョン情報に対応する差分情報をコンテンツサーバ12から取得し、その差分情報にしたがって、未ダウンロードのデータブロックのみをダウンロードする。以下、ゲームメーカにおいて、差分情報生成ソフトウェアが、パッチファイルの異なるバージョン間の差分情報を作成するための方法について説明する。
差分情報生成ソフトウェアは、圧縮前の最新のバージョンのパッチファイルと、直近の(1つ前の)バージョンのパッチファイル同士を比較して、同じデータブロックが存在するか判定する。
図13は、再利用可能な圧縮後ブロックの検索方法を示す。図13(a)は、圧縮前のバージョン1のパッチファイルを構成するデータブロック列の一例を示し、図13(b)は、圧縮前のバージョン2のパッチファイルを構成するデータブロック列の一例を示す。ここでHで表現しているのは、各ブロックのハッシュ値であり、たとえばSHA−256アルゴリズムにしたがって、圧縮前の各ブロックのハッシュ値を予め計算しておく。
差分情報生成ソフトウェアは、ハッシュ値を比較して、バージョン2の圧縮前パッチファイルにおいて、バージョン1の圧縮前パッチファイルと同じハッシュ値をもつデータブロックを特定する。ここで同じハッシュ値をもつことは、データブロックに含まれるデータが同一であることを意味している。図13(b)において、ハッチングを付したデータブロックは、異なるハッシュ値をもつことを示し、ハッチングを付していないデータブロックは、同一のハッシュ値をもつことを示している。
続いて、差分情報生成ソフトウェアは、バージョン2の圧縮前パッチファイルのデータブロックが、バージョン2の圧縮後パッチファイルのどのデータブロックに格納されているかを確認する。たとえば、H21のハッシュ値をもつデータブロックは、圧縮後のデータブロックC1の一部に格納されており、H22のハッシュ値をもつデータブロックは、圧縮後のデータブロックC1の一部と、データブロックC2の一部に格納されている。このように確認していくと、データブロックC4には、H11のハッシュ値をもつデータブロックの一部と、H12のハッシュ値をもつデータブロックの一部が格納されていることが判定される。同様に、データブロックC7には、H5のハッシュ値をもつデータブロックの一部と、H6のハッシュ値をもつデータブロックと、H7のハッシュ値をもつデータブロックの一部が格納されていることが判定される。またデータブロックC11には、H16のハッシュ値をもつデータブロックの一部と、H17のハッシュ値をもつデータブロックの一部が格納されており、データブロックC13には、H18のハッシュ値をもつデータブロックの一部と、H19のハッシュ値をもつデータブロックの一部が格納されている。
このことはつまり、バージョン2の圧縮後パッチファイルのうち、バージョン1のパッチファイルを既に有しているユーザに対しては、データブロックC4、C7、C11、C13のデータブロックは送信する必要がないことを意味している。これらのデータブロックC4、C7、C11、C13に含まれるデータは、既にユーザがバージョン1のパッチファイルとしてダウンロード済みであるからである。一方で、データブロックC1〜C3、C5〜C6、C8〜C10、C12、C14には、バージョン1のパッチファイルから変更されたデータが含まれており、したがって、これらのデータブロックは、送信する必要があることが判定される。
このように差分情報生成ソフトウェアは、圧縮前パッチファイルにおける各データブロックのハッシュ値を異なるバージョン間で比較することで、同一のデータブロックであるか否かを判定する。その後、差分情報生成ソフトウェアは、バージョン2の圧縮後パッチファイルのデータブロックごとに、そのブロックに更新されているデータが含まれているか、また含まれていなければ(バージョン1のデータのみが含まれていれば)、バージョン1の圧縮後パッチファイルのどのアドレスに記録されているかを示す差分情報を作成する。差分情報はバージョン2の圧縮後パッチファイルのデータブロックごとに生成され、バージョン2で更新されたデータを含むデータブロックについては、フラグ0が設定され、一方で、バージョン1のデータのみから構成されるデータブロックについては、フラグ1とともに、バージョン1のパッチファイルにおける格納位置を示す情報とが設定される。
なお、バージョン2の圧縮後パッチファイルは、バージョン2の圧縮前パッチファイルを作成後、その圧縮前パッチファイルを圧縮し、署名し、暗号化することで作成されてもよいが、同じデータブロックについては、バージョン1の圧縮後パッチファイルを復号して再暗号化することで作成されてもよい。
以下、差分情報の生成方法を説明する。
図14は、ブロックの差分情報の生成方法を説明するための図である。図14(a)は、バージョン1の圧縮前パッチファイルの5つのブロックP、Q、R、S、Tを示す。図14(b)は、バージョン1の圧縮後パッチファイルのブロック1〜3を示す。各ブロック1〜3は、64キロバイトのサイズで構成されている。図14(b)において、ブロックTのデータが含まれるブロックサイズが、ブロック1〜3と異なっているように示されているが、実際には、圧縮前の後続のデータが格納されてブロックサイズは同じとされるものであり、単なる説明図であるということでご理解いただきたい。バージョン1の圧縮後のブロック1には、ブロックPのデータと、ブロックQのデータの一部が、ブロック2には、ブロックQのデータの一部と、ブロックRのデータの一部が、ブロック3には、ブロックRのデータの一部と、ブロックSのデータが格納されている。
図14(d)は、バージョン2の圧縮前パッチファイルの5つのブロックP’、Q’、R、S、Tを示す。図14(c)は、バージョン2の圧縮後パッチファイルのブロック1〜3を示す。ここで図14(a)、(d)を参照して、圧縮前パッチファイルのバージョン間を比較すると、バージョン2においては、圧縮前のブロックPとブロックQのデータに更新があり、ブロックRとブロックSとブロックTには更新がない(なお、以下の説明においては、ブロックTについては考慮しない)。バージョン2の圧縮後のブロック1には、ブロックP’のデータと、ブロックQ’のデータの一部が、ブロック2には、ブロックQ’のデータの一部と、ブロックRのデータの一部が、ブロック3には、ブロックRのデータの一部と、ブロックSのデータの一部が格納されている。
バージョン2のブロック3に着目すると、ブロック3には、バージョン1でも共通のブロックRとブロックSのデータが格納されている。したがって、情報処理装置10が既にバージョン1のパッチファイルをダウンロードしていれば、バージョン2のブロック3に格納されたデータは、既に情報処理装置10において取得済みであることが分かる。そこで本実施例においては、情報処理装置10は、バージョン2のブロック3をダウンロードせずに、バージョン1のデータを再利用するようにする。
そのために差分情報生成ソフトウェアは、バージョン2のブロック3のデータが、バージョン1において、どのアドレスに格納されているかを示す情報(バージョン1における格納位置を示す情報)を含む差分情報を生成する。図示されるように、バージョン2のブロック3のデータは、バージョン1におけるブロック1の先頭アドレスからオフセットされたアドレスから連続して格納されている。したがって、バージョン2のブロック3の差分情報は、バージョン1のブロック1の先頭アドレスからのオフセット情報として記録される。たとえばブロック1の先頭アドレスが0、オフセット量が100キロバイトであれば、バージョン2のブロック3の差分情報は、ブロック1の先頭アドレスから100キロバイトオフセットされたアドレスを示すオフセット情報として生成される。なお、オフセット量が、ブロック内におけるオフセットとして定義される場合には、ブロック1の先頭アドレスが0、ブロック2の先頭アドレスが64キロバイト、オフセット量が36キロバイトとして、バージョン2のブロック3の差分情報は、ブロック2の先頭アドレスから36キロバイトオフセットされたアドレスを示すオフセット情報として生成されてよい。
このように差分情報生成ソフトウェアが差分情報を生成することで、この差分情報をダウンロードした情報処理装置10は、差分情報を参照して、バージョン2のブロック3のデータを、バージョン1のパッチファイルから再利用することができる。なお、バージョン2のブロック3のデータは、バージョン1のブロック2とブロック3にまたがって格納されているため、情報処理装置10は、バージョン1のブロック2とブロック3とを復号、伸張して、バージョン2のブロック3に対応するデータを取得できるようになる。
一方で、バージョン2のブロック1とブロック2には、更新されたブロックP’、Q’のデータが含まれている。したがってバージョン2のブロック1とブロック2の差分情報は、バージョン1のデータを再利用できないことを示す情報、すなわち、更新されたデータが含まれており、バージョン2のデータを利用することを示す情報となる。
以上のように、ゲームメーカは、パッチファイルおよび差分情報を作成し、コンテンツサーバ12においてダウンロード可能に保持させる。コンテンツサーバ12は、最新のパッチファイルと、差分情報が保持され、過去のパッチファイルについては破棄して保持しない。
次に、パッチファイルが複数回更新されている場合について説明する。たとえば、2回の更新が行われて、コンテンツサーバ12から、バージョン3のパッチファイルをダウンロード可能とする場合、コンテンツサーバ12は、バージョン1とバージョン3との差分情報と、バージョン2とバージョン3との差分情報とをダウンロード可能に保持している必要がある。それは、ユーザが常に最新のパッチファイルをアップデートしているとは限らず、たとえばバージョン1のパッチファイルのダウンロード後、バージョン2のパッチファイルをダウンロードしていないことも考えられるためである。以下、バージョンごとの差分情報を作成する方法について説明する。
図15は、複数バージョンの差分情報の生成方法を説明するための図である。図15(a)は、バージョン1の圧縮前パッチファイルの5つのブロックU、V、W、X、Yを示す。図15(b)は、バージョン1の圧縮後パッチファイルのブロック1〜3を示す。各ブロック1〜3は、64キロバイトのサイズで構成されている。バージョン1の圧縮後のブロック1には、ブロックUのデータと、ブロックVのデータの一部が、ブロック2には、ブロックVのデータの一部と、ブロックWのデータの一部が、ブロック3には、ブロックWのデータの一部と、ブロックXのデータが格納されている。
図15(c)は、バージョン2の圧縮後パッチファイルのブロック1〜3を示す。ここではバージョン1の圧縮前パッチファイルと比較すると、ブロックUがブロックU’に更新されており、バージョン2の圧縮後パッチファイルにおいては、ブロックUとブロックU’の圧縮データサイズが異なるため、バージョン1とバージョン2とで、アライメントがずれている。バージョン2の圧縮後のブロック1には、ブロックU’のデータと、ブロックVのデータの一部が、ブロック2には、ブロックVのデータの一部と、ブロックWのデータの一部が、ブロック3には、ブロックWのデータの一部と、ブロックXのデータの一部が格納されている。
図15(d)は、バージョン3の圧縮後パッチファイルのブロック1〜3を示す。ここではバージョン2の圧縮前パッチファイルと比較すると、ブロックVがブロックV’に更新されており、バージョン3の圧縮後パッチファイルにおいては、ブロックVとブロックV’の圧縮データサイズが異なるため、バージョン2とバージョン3とで、アライメントがずれている。バージョン3の圧縮後のブロック1には、ブロックU’のデータと、ブロックV’のデータの一部が、ブロック2には、ブロックV’のデータの一部と、ブロックWのデータの一部が、ブロック3には、ブロックWのデータの一部と、ブロックXのデータの一部が格納されている。
ゲームメーカは、図14に関して説明したように、バージョン2のパッチファイルを作成した時点で、バージョン1とバージョン2との間の差分情報を既に作成している。またゲームメーカは、バージョン3のパッチファイルを作成すると、その直近のバージョン、すなわちバージョン2とバージョン3の差分情報を作成する。この差分情報の作成は、図14に関して説明したとおりである。
ここでバージョン1とバージョン3の間の差分情報について考察する。図15に示す例において、バージョン1〜3において、ブロックWとブロックXに変更はない。前後のバージョン間のオフセット、すなわちバージョン3とバージョン2のオフセットと、バージョン2とバージョン1のオフセットとが、差分情報として定義済みであれば、図示される関係を利用して、それぞれのオフセットを合成することで、バージョン3とバージョン1のオフセットを導出することができる。
ここで、バージョン2とバージョン3の差分情報において、バージョン3のブロック3が、バージョン2のブロック2とブロック3を参照しており(すなわちバージョン3のブロック3がバージョン2のブロック2とブロック3に含まれており)、バージョン2のブロック2とブロック3とが、共にバージョン1を参照可能なブロックであれば(すなわちバージョン2のブロック2とブロック3とが、バージョン1に含まれているデータブロックであれば)、差分情報生成ソフトウェアは、バージョン3のブロック3が、バージョン1のブロックを参照可能であることを判定する。つまり、この場合には、差分情報生成ソフトウェアが、バージョン3のブロック3が、バージョン1のパッチファイルに含まれていることを判定する。これにより差分情報生成ソフトウェアは、バージョン3とバージョン2のオフセットと、バージョン2とバージョン1のオフセットを合成することで、バージョン3のブロック3に関して、バージョン3とバージョン1のオフセットを導出することができるようになる。
図16は、差分情報の合成方法を説明するための図である。このようにバージョン1とバージョン3の間の差分情報は、バージョン1とバージョン2の間の差分情報と、バージョン2とバージョン3の差分情報を合成することで、容易に導出することができる。この合成は、差分情報生成ソフトウェアによって実現されるが、合成処理は、ゲームメーカにおいて行われてもよいが、コンテンツサーバ12において行われてもよい。
ゲームメーカは、パッチファイルおよびバージョンごとの差分情報を作成し、コンテンツサーバ12においてダウンロード可能に保持させる。バージョンごとの差分情報は、最新のバージョンと、それ以前のバージョンとの差分情報であり、それ以前のバージョンが複数存在する場合には、その数だけ差分情報がコンテンツサーバ12に保持される。なお差分情報の合成処理は、コンテンツサーバ12において行われてもよい。ゲームメーカは、アプリケーションソフトウェアと最新パッチファイルとの差分情報を作成して、コンテンツサーバ12においてダウンロード可能に保持させてもよい。たとえばバージョン3のパッチファイルがダウンロード可能となったときに、一度もパッチファイルをダウンロードしたことのないユーザがいることも考えられるためである。特に、パッチファイルが、アプリケーションソフトウェアのバグを修正する機能を有する場合には、アプリケーションソフトウェアとの差分情報を作成することで、効率的なダウンロード処理が実現される。
図17は、差分情報生成装置の機能ブロックを示す。差分情報生成装置400は、ブロック特定部402、オフセット導出部404、差分情報生成部406、合成部408および差分情報記録部410を備える。これらの構成は、ハードウエアコンポーネントでいえば、任意のコンピュータのCPU、メモリ、メモリにロードされたプログラム、ストレージなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。なおブロック特定部402、オフセット導出部404、差分情報生成部406の各機能は、ゲームメーカにおいて使用される開発ツールである差分情報生成ソフトウェアにより実現されてよい。合成部408の機能も、差分情報生成ソフトウェアにより実現されてよいが、コンテンツサーバ12にインストールされる差分情報合成ソフトウェアにより実現されてもよい。
ブロック特定部402は、バージョンZ(Zは自然数)の第1パッチファイルに含まれるデータブロックと、第1パッチファイルの次のバージョン(Z+1)の第2パッチファイルに含まれるデータブロックとを比較して、同一のデータブロックを特定する。具体的にブロック特定部402は、第2パッチファイルのデータブロックのハッシュ値と、第1パッチファイルのデータブロックのハッシュ値とを比較して、第2パッチファイルのデータブロックと同じハッシュ値をもつ第1パッチファイルのデータブロックが存在するか否かを確認する。
第2パッチファイルのデータブロックのハッシュ値が、第1パッチファイルのいずれかのデータブロックと等しい場合、ブロック特定部402は、その第2パッチファイルのデータブロックが、第1パッチファイルに含まれていることを判定する。このとき、オフセット導出部404は、第2パッチファイルのデータブロックと同じ第1パッチファイルのデータブロックの格納位置を示すアドレス情報を、オフセット情報として導出する。差分情報生成部406は、第2パッチファイルの各データブロックごとに、第1パッチファイルから更新されているデータが含まれているか否かを示す情報を含む差分情報を生成する。差分情報生成部406は、更新されているデータが含まれているデータブロックについては、更新されたデータを含むデータブロックであることを示すフラグ0を差分情報として設定し、更新されているデータが含まれていないデータブロックについては、更新されていないデータから構成されるデータブロックであることを示すフラグ1と、第1パッチファイルにおけるデータ格納位置を示すアドレス情報(オフセット情報)とを差分情報として設定する。差分情報生成部406は、第2パッチファイルの全てのデータブロックについて差分情報を生成し、差分情報記録部410に格納する。
以上は、差分情報生成部406が、バージョンZの第1パッチファイルと、次のバージョン(Z+1)の第2パッチファイルとの差分情報を生成することについて説明した。ゲームメーカにおいて第2パッチファイルの次のバージョン(Z+2)の第3パッチファイルが生成されると、差分情報生成部406は、上記した手順により、第2パッチファイルと第3パッチファイルとの差分情報を生成する。このように差分情報生成部406は、新たに生成されたパッチファイルについて、その前のバージョンのパッチファイルとの差分情報を生成する。この差分情報の生成処理は、ゲームメーカにおいて行われる。
以下、差分情報の合成処理について説明する。差分情報記録部410に、第1パッチファイルと第2パッチファイルとの第1差分情報と、第2パッチファイルと第3パッチファイルとの第2差分情報とが記録されている場合について説明する。説明の便宜上、Z=1とし、すなわち第1パッチファイルは、バージョン1のパッチファイル、第2パッチファイルは、バージョン2のパッチファイル、第3パッチファイルは、バージョン3のパッチファイルであるとする。
合成部408は、第1差分情報と第2差分情報とに基づいて、第1パッチファイルと第3パッチファイルの差分情報を生成する。この合成処理は、ゲームメーカにおいて行われてもよいが、ゲームメーカから第1差分情報と第2差分情報とを提供されたコンテンツサーバ12の差分情報合成ソフトウェアにより行われてもよい。
具体的に合成部408は、第2差分情報をもとに、第3パッチファイルのデータブロックが、第2パッチファイルに含まれているものであるか否かを判定する。これは合成部408が、第2差分情報におけるデータブロックのフラグを参照することで行われ、フラグが1に設定されていれば、第3パッチファイルの当該データブロックが第2パッチファイルに含まれていることが判定される。たとえば、第3パッチファイルのデータブロックLの第2差分情報におけるフラグが1に設定されており、データブロックLのデータが、第2パッチファイルのデータブロックM、データブロック(M+1)に含まれているものとする。
続いて合成部408は、第1差分情報をもとに、第2パッチファイルのデータブロックM、データブロック(M+1)が、第1パッチファイルに含まれているものであるか否かを判定する。これは合成部408が、第1差分情報におけるデータブロックのフラグを参照することで行われ、データブロックM、データブロック(M+1)のフラグが1に設定されていれば、これらのデータブロックが第1パッチファイルに含まれていることが判定される。たとえば、第2パッチファイルのデータブロックM、データブロック(M+1)の第1差分情報におけるフラグが1に設定されており、データブロックM、データブロック(M+1)のデータが、第1パッチファイルのデータブロックN、データブロック(N+1)、データブロック(N+2)に含まれているものとする。
このとき、合成部408は、第3パッチファイルのデータブロックLが第2パッチファイルのデータブロックM、データブロック(M+1)に含まれ、また第2パッチファイルのデータブロックM、データブロック(M+1)が、第1パッチファイルのデータブロックN、データブロック(N+1)、データブロック(N+2)に含まれていることを判定する。これにより、第3パッチファイルのデータブロックLが、第1パッチファイルのデータブロックN、データブロック(N+1)、データブロック(N+2)のうちの1つ以上のデータブロックに含まれていることが分かる。合成部408は、第2差分情報におけるデータブロックLのオフセット情報と、第1差分情報におけるデータブロックM、データブロック(M+1)それぞれのオフセット情報とから、第3パッチファイルのデータブロックLの、第1パッチファイルにおけるオフセット情報を導出できる。このように合成部408は第2差分情報のフラグ値、および第1差分情報のフラグ値を参照することで、第3パッチファイルのデータブロックが第1パッチファイルに含まれているか否かを判定することができ、含まれている場合には、第1差分情報および第2差分情報におけるオフセット情報を用いて、第3パッチファイルのデータブロックLのデータの、第1パッチファイルにおけるオフセット情報(格納位置)を特定することが可能となる。このように合成部408は、第3パッチファイルの各データブロックについて、第1パッチファイルとの差分情報を求めることで、第1パッチファイルと第3パッチファイルの差分情報を合成処理により生成することが可能となる。
このように合成部408は、第1差分情報と第2差分情報のみに基づいて、第1パッチファイルと第3パッチファイルの第3差分情報を生成できる。コンテンツサーバ12は、最新の第3パッチファイル、第3パッチファイルと第2パッチファイルの差分情報(第2差分情報)と、第3パッチファイルと第1パッチファイルの差分情報(第3差分情報)とを、ダウンロード可能に保持する。なお、第1パッチファイルと第2パッチファイルの差分情報(第1差分情報)は破棄してよい。
第3パッチファイルの次のバージョンの第4パッチファイルが生成された場合には、ゲームメーカにより第3パッチファイルと第4パッチファイルの差分情報(第4差分情報)も生成される。差分情報記録部410には、第3パッチファイルと第2パッチファイルの第2差分情報と、第3パッチファイルと第1パッチファイルの第3差分情報とが記録されているが、合成部408は、第4差分情報と第2差分情報とを用いて、第4パッチファイルと第2パッチファイルとの差分情報を生成することができ、また第4差分情報と第3差分情報とを用いて、第4パッチファイルと第1パッチファイルとの差分情報を生成することができる。これによりコンテンツサーバ12は、最新の第4パッチファイル、第4パッチファイルと第3パッチファイルの差分情報、第4パッチファイルと第2パッチファイルの差分情報、第4パッチファイルと第1パッチファイルの差分情報とを、ダウンロード可能に保持するようになる。
図18は、情報処理装置10におけるダウンロード処理を実行するための機能ブロックを示す。本実施例において、アプリケーションソフトウェアは、既に情報処理装置10において記録されていることを前提とし、ダウンロード処理は、コンテンツサーバ12からパッチファイルないしはパッチデータを取得して、補助記憶装置2に記録する処理である。
情報処理装置10は、処理部340、通信部342および記録部330を備える。これらの構成は、ハードウエアコンポーネントでいえば、任意のコンピュータのCPU、メモリ、メモリにロードされたプログラム、ストレージなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウエアのみ、ソフトウエアのみ、またはそれらの組合せによっていろいろな形で実現できることは、当業者には理解されるところである。
記録部330は、アプリケーションソフトウェアを記録するアプリケーション記録部332と、コンテンツサーバ12から取得したパッチデータを記録するパッチ記録部334と、コンテンツサーバ12から取得した差分情報を記録する差分情報記録部336とを備える。ここでアプリケーション記録部332は、アプリケーションソフトウェアを記録したROM媒体44であってもよく、またダウンロードしたアプリケーションソフトウェアを記録した補助記憶装置2であってもよい。パッチ記録部334および差分情報記録部336は、補助記憶装置2の記録領域に形成される。
通信部342は、入力装置6においてユーザが入力部を操作した操作情報を受信し、処理部340で生成した要求をコンテンツサーバ12に送信し、コンテンツサーバ12から配信されるデータを受信する。通信部342は図2に示す無線通信モジュール38および有線通信モジュール40の機能を併せ持つ構成として表現され、無線通信モジュール38は入力装置6との通信を担当し、有線通信モジュール40はコンテンツサーバ12との通信を担当する。
処理部340は、コンテンツサーバ12からパッチデータを取得するパッチ取得部300と、アプリケーションソフトウェアおよびパッチデータを用いてアプリケーションを実行するアプリケーション実行部310とを備える。ここでパッチ取得部300は、差分情報取得部302、ダウンロード実行部304および判定部306を有する。
差分情報取得部302は、パッチ記録部334に記録されているパッチファイルのバージョン情報を管理する。このバージョン情報は、パッチ記録部334において記録されていてもよい。通信部342が、入力装置6からパッチファイルの取得要求を受信すると、差分情報取得部302は、パッチ記録部334から、過去にダウンロードしたパッチファイルのうち、最新のバージョン情報を読み出す。たとえば、バージョン1のパッチファイルと、バージョン2のパッチファイルが既にパッチ記録部334に記録されていれば、差分情報取得部302は、最新のバージョン2のバージョン情報を読み出す。なお、バージョン2のパッチファイルがパッチ記録部334に記録された時点で、利用可能なデータを含むバージョン1のパッチファイルも、バージョン2のパッチファイルとして扱う場合には、パッチ記録部334には、常に最新のバージョンのパッチファイルのみが記録されていることとなり、差分情報取得部302は、そのバージョンのパッチファイルのバージョン情報を読み出す。
差分情報取得部302は、保持しているパッチファイルのバージョン情報を差分情報の取得要求に含めてコンテンツサーバ12に送信する。コンテンツサーバ12は、取得要求を受けると、指定されたバージョン情報に対応する差分情報を情報処理装置10に送信する。たとえば、コンテンツサーバ12がバージョン3のパッチファイルをダウンロード可能に保持している場合、取得要求に含まれるバージョン情報がバージョン2を示していれば、コンテンツサーバ12は、バージョン2とバージョン3の間の差分情報を送信する。なおパッチ記録部334がバージョン1のパッチファイルのみを記録している場合には、差分情報の取得要求に、バージョン1のバージョン情報が含まれるため、コンテンツサーバ12は、バージョン1とバージョン3の間の差分情報を送信する。
このようにして差分情報取得部302は、コンテンツサーバ12が保持する最新のパッチファイルと、パッチ記録部334に記録しているパッチファイルとのデータブロックの差分情報を取得する。すなわち差分情報取得部302は、パッチ記録部334に記録しているパッチファイルのバージョン情報に対応する差分情報をコンテンツサーバ12から取得し、差分情報記録部336に記録する。
ダウンロード実行部304は、取得した差分情報にしたがって、コンテンツサーバ12に保持された最新のパッチファイルから、更新があったデータブロックをダウンロードする。差分情報には、最新のパッチファイルのデータブロックごとに、パッチ記録部334に記録済みのパッチデータにおける格納位置を示す情報と、更新されたデータブロックであることを示す情報のいずれかが含まれている。したがってダウンロード実行部304は、更新されたデータブロックであることを示す情報が記述されたデータブロックのみをダウンロードし、記録済みのパッチデータにおけるアドレスオフセットが差分情報として記述されたデータブロックはダウンロードしない。
コンテンツサーバ12に保持されている最新のパッチファイルが、たとえば10000個のデータブロックで構成されている場合(16メガバイト)に、9000個のデータブロックに対してアドレスオフセットが記述されていれば、ダウンロード実行部304は、1000個のデータブロックをダウンロードするだけでよい。16メガバイトをダウンロードする場合と比較すると、そのダウンロードデータ量は1/10となり、ダウンロードにかかる時間を短縮できるとともに、コンテンツサーバ12における処理負荷を下げることができる。ダウンロード実行部304は、コンテンツサーバ12に対して、ブロック番号を指定したダウンロード要求を送信し、コンテンツサーバ12は、指定されたブロック番号のデータブロックを情報処理装置10に送信する。ダウンロード実行部304は、取得したパッチデータを、バージョン情報に対応付けてパッチ記録部334に記録する。
ダウンロード実行部304は、ダウンロード要求を送信する前に、コンテンツサーバ12からダウンロード順序を示す順序情報を取得してもよい。ユーザがパッチデータをダウンロードする前に、出力装置4の画面には「シングルプレイ用のパッチデータを優先的にダウンロードする」、「マルチプレイ用のパッチデータを優先的にダウンロードする」の選択肢が提示され、コンテンツサーバ12は、選択された選択肢にしたがって、グループのダウンロード順序を示す順序情報およびパッチに関するグループファイルを情報処理装置10に提供する。ダウンロード実行部304は、順序情報を受け取ると、その順序情報にしたがって、コンテンツサーバ12からパッチデータをダウンロードする。図12においてゲームソフトウェアのダウンロード順序について説明したように、本実施例のパッチファイルも、グループ単位でダウンロード順序を設定可能であり、これによりユーザのニーズに合わせた効率的なダウンロード処理が実行されてよい。
判定部306は、グループ単位でパッチファイルがパッチ記録部334に記録されているか判定する。判定部306は、ダウンロード実行部304が取得したグループファイルを参照して、グループに属するファイルが全てパッチ記録部334に記録されているか判定する。なお1つのファイルが、複数のバージョンのパッチデータに含まれている可能性もあり、したがって判定部306は、ファイルを構成するデータブロックが、どのバージョンのどのブロック番号に対応するかを差分情報をもとに把握し、グループに属するファイルごとに、全てのデータブロックがパッチ記録部334に記録されているか判定する。判定部306は、グループに属する全てのファイルがパッチ記録部334に記録されたことを判定すると、その旨をアプリケーション実行部310に通知して、これによりアプリケーションは、そのグループのファイルを使用できることを認識できるようにしてもよい。
アプリケーション実行部310は、アプリケーション記録部332に記録されたアプリケーションソフトウェア、およびパッチ記録部334に記録されたパッチデータを用いて、アプリケーションを実行する。既述したようにアプリケーションはゲームであってよい。アプリケーション実行部310は、差分情報を用いて、ファイルを構成するデータブロックの格納位置を特定し、パッチ記録部334から必要なパッチデータを読み出す。1つのファイルが、異なるバージョンのパッチデータとして記録されている場合には、それぞれのデータのパス情報を設定して、パッチ記録部334から読み出す。このパス情報は、差分情報にしたがって設定される。
このように本実施例によると、ダウンロード実行部304は、パッチデータのダウンロード処理において、既にパッチ記録部334に記録したデータのみを格納するデータブロックをダウンロードしないため、結果として、パッチ記録部334に記録するデータ量を削減でき、パッチ記録部334の記録領域を有効に利用できる。最新のパッチファイル全体を全てダウンロードし、過去にダウンロードしたパッチファイルを削除するようなダウンロード方法と比較すると、実施例のダウンロード方法は、必要なデータブロックのみのダウンロードで済むために、ダウンロードにかかる時間を大幅に短縮することが可能となる。
以上、本発明を実施例をもとに説明した。この実施例は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。実施例では、アプリケーションの例としてゲームを示したが、それ以外のアプリケーションであってもよい。
1・・・情報処理システム、10・・・情報処理装置、12・・・コンテンツサーバ、300・・・パッチ取得部、302・・・差分情報取得部、304・・・ダウンロード実行部、306・・・判定部、310・・・アプリケーション実行部、330・・・記録部、332・・・アプリケーション記録部、334・・・パッチ記録部、336・・・差分情報記録部、340・・・処理部、342・・・通信部。

Claims (10)

  1. アプリケーションソフトウェアを記録するアプリケーション記録部と、
    サーバから、パッチデータを取得するパッチ取得部と、
    取得したパッチデータを記録するパッチ記録部と、
    アプリケーションソフトウェアおよびパッチデータを用いて、アプリケーションを実行するアプリケーション実行部と、を備えた情報処理装置であって、
    前記パッチ取得部は、
    サーバが保持する最新のパッチファイルと、前記パッチ記録部に記録しているパッチファイルとのデータブロックの差分情報を取得する差分情報取得部と、
    差分情報にしたがって、最新のパッチファイルから、更新があったデータブロックをダウンロードするダウンロード実行部と、
    を備えることを特徴とする情報処理装置。
  2. 前記差分情報取得部は、前記パッチ記録部に記録しているパッチファイルのバージョン情報に対応する差分情報をサーバから取得することを特徴とする請求項1に記載の情報処理装置。
  3. 差分情報は、前記記録部に記録しているパッチデータにおける格納位置を示す情報と、更新されたデータブロックであることを示す情報のいずれかを含むことを特徴とする請求項1または2に記載の情報処理装置。
  4. 前記アプリケーション実行部は、差分情報を用いて、アプリケーションを実行することを特徴とする請求項1から3のいずれかに記載の情報処理装置。
  5. アプリケーションソフトウェアおよびパッチファイルは、それぞれ複数のファイルから構成されており、各ファイルは、複数のグループのうち少なくとも1つのグループに属するものであって、
    グループ単位でファイルが記録されているか判定する判定部をさらに有することを特徴とする請求項1から4のいずれかに記載の情報処理装置。
  6. パッチデータは、暗号化されたデータであることを特徴とする請求項1から5のいずれかに記載の情報処理装置。
  7. 第1パッチファイルと、第1パッチファイルの次のバージョンの第2パッチファイルとの第1差分情報と、第2パッチファイルと、第2パッチファイルの次のバージョンの第3パッチファイルとの第2差分情報とを記録する記録部と、
    第1差分情報と第2差分情報とに基づいて、第1パッチファイルと第3パッチファイルの差分情報を生成する合成部と、を備え、
    差分情報は、新しいバージョンのパッチファイルのデータブロックごとに、前のバージョンのパッチファイルから更新されているデータが含まれているか否かを示す情報を含んでおり、更新されているデータが含まれていない場合には、前のバージョンのパッチファイルにおけるデータ格納位置を示すアドレス情報が含まれることを特徴とする差分情報生成装置。
  8. コンピュータに、
    サーバが保持する最新のパッチファイルと、コンピュータ側で記録しているパッチファイルとのデータブロックの差分情報を取得する機能と、
    差分情報にしたがって、最新のパッチファイルから、更新があったデータブロックをダウンロードする機能と、
    を実現するためのプログラム。
  9. コンピュータに、
    第1パッチファイルと、第1パッチファイルの次のバージョンの第2パッチファイルとの第1差分情報と、第2パッチファイルと、第2パッチファイルの次のバージョンの第3パッチファイルとの第2差分情報とを記録する記録部から、第1差分情報と第2差分情報とを読み出す機能と、
    第1差分情報と第2差分情報とに基づいて、第1パッチファイルと第3パッチファイルの差分情報を生成する機能と、を実現するためのプログラムであって、
    差分情報は、新しいバージョンのパッチファイルのデータブロックごとに、前のバージョンのパッチファイルから更新されているデータが含まれているか否かを示す情報を含んで構成されており、更新されているデータが含まれていない場合には、前のバージョンのパッチファイルにおけるデータ格納位置を示すアドレス情報が含まれる、
    ことを特徴とするプログラム。
  10. 請求項8または9に記載のプログラムを記録したコンピュータ読み取り可能な記録媒体。
JP2014087219A 2014-04-21 2014-04-21 情報処理装置および差分情報生成装置 Pending JP2015207145A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2014087219A JP2015207145A (ja) 2014-04-21 2014-04-21 情報処理装置および差分情報生成装置
US14/684,757 US9286059B2 (en) 2014-04-21 2015-04-13 Information processing device and difference generating for software patching system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2014087219A JP2015207145A (ja) 2014-04-21 2014-04-21 情報処理装置および差分情報生成装置

Publications (1)

Publication Number Publication Date
JP2015207145A true JP2015207145A (ja) 2015-11-19

Family

ID=54322093

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014087219A Pending JP2015207145A (ja) 2014-04-21 2014-04-21 情報処理装置および差分情報生成装置

Country Status (2)

Country Link
US (1) US9286059B2 (ja)
JP (1) JP2015207145A (ja)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019139683A (ja) * 2018-02-15 2019-08-22 株式会社カプコン パッケージソフトウェア作成プログラム及びそれを用いたパッケージソフトウェア作成方法
WO2020203669A1 (ja) * 2019-04-03 2020-10-08 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置およびインストール方法
JP2020197787A (ja) * 2019-05-31 2020-12-10 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置
JP2021026298A (ja) * 2019-07-31 2021-02-22 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置
WO2021124635A1 (ja) * 2019-12-16 2021-06-24 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置およびファイルアクセス方法
WO2022097605A1 (ja) * 2020-11-06 2022-05-12 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置
JP2022529031A (ja) * 2019-04-17 2022-06-16 華為技術有限公司 パッチング方法、関連装置及びシステム

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016121442A1 (ja) 2015-01-26 2016-08-04 日立オートモティブシステムズ株式会社 車載制御装置、プログラム書き込み装置、プログラム生成装置及びプログラム
US10565178B1 (en) * 2015-03-11 2020-02-18 Fair Isaac Corporation Efficient storage and retrieval of XML data
CN106790506A (zh) * 2016-12-16 2017-05-31 天津市北洋荣科智能科技有限责任公司 物联网智能设备并行下载终端版本的方法、装置及系统
CN109656588A (zh) * 2018-11-14 2019-04-19 中国电力科学研究院有限公司 一种远程快速实现用电信息采集终端软件更新的方法及系统
JP7185133B2 (ja) * 2018-11-21 2022-12-07 富士通株式会社 情報処理装置、情報処理プログラムおよび分析方法
US11886390B2 (en) * 2019-04-30 2024-01-30 JFrog Ltd. Data file partition and replication
US11340894B2 (en) 2019-04-30 2022-05-24 JFrog, Ltd. Data file partition and replication
US11106554B2 (en) 2019-04-30 2021-08-31 JFrog, Ltd. Active-active environment control
US11386233B2 (en) 2019-04-30 2022-07-12 JFrog, Ltd. Data bundle generation and deployment
US11327744B2 (en) * 2019-05-29 2022-05-10 Red Hat, Inc. Equivalency of revisions on modern version control systems
US10999314B2 (en) 2019-07-19 2021-05-04 JFrog Ltd. Software release tracking and logging
WO2021014326A2 (en) 2019-07-19 2021-01-28 JFrog Ltd. Software release verification
US11449325B2 (en) 2019-07-30 2022-09-20 Sony Interactive Entertainment LLC Data change detection using variable-sized data chunks
US20210034583A1 (en) * 2019-07-30 2021-02-04 Sony Interactive Entertainment LLC Remote triggering of coalescing of data storage
US11307841B2 (en) 2019-07-30 2022-04-19 Sony Interactive Entertainment LLC Application patching using variable-sized units
US11262927B2 (en) 2019-07-30 2022-03-01 Sony Interactive Entertainment LLC Update optimization using feedback on probability of change for regions of data
CN112394969B (zh) * 2019-08-14 2023-04-28 华为技术有限公司 一种补丁发布的方法、服务器及终端设备
US11695829B2 (en) 2020-01-09 2023-07-04 JFrog Ltd. Peer-to-peer (P2P) downloading
CN111399896B (zh) * 2020-03-16 2023-10-20 网易(杭州)网络有限公司 补丁获取方法、装置、设备及存储介质
CN112328303B (zh) * 2020-09-29 2024-04-02 北京空间飞行器总体设计部 一种基于差异化算法的航天器软件在轨增量重构方法
US11860680B2 (en) 2020-11-24 2024-01-02 JFrog Ltd. Software pipeline and release validation

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6604236B1 (en) * 1998-06-30 2003-08-05 Iora, Ltd. System and method for generating file updates for files stored on read-only media
US6912711B1 (en) * 2000-05-25 2005-06-28 International Business Machines Corporation Method of applying an update to a contained collection of program and data files based upon versions
WO2002025438A1 (en) * 2000-09-22 2002-03-28 Patchlink.Com Corporation Non-invasive automatic offsite patch fingerprinting and updating system and method
JP2002278906A (ja) * 2001-03-21 2002-09-27 Nec Corp アップデート管理システム、アップデート・クライアント装置、アップデート・サーバ装置及びプログラム
US7590684B2 (en) * 2001-07-06 2009-09-15 Check Point Software Technologies, Inc. System providing methodology for access control with cooperative enforcement
US8336044B2 (en) * 2002-10-09 2012-12-18 Rpx Corporation Method and system for deploying a software image
CN1549178A (zh) * 2003-05-16 2004-11-24 �Ҵ���˾ 分配和更新杂散资源的方法和系统
GB0326626D0 (en) * 2003-11-14 2003-12-17 Filewave International Holding A method in a network of the delivery of files
US7412700B2 (en) * 2004-05-18 2008-08-12 Oracle International Corporation Product packaging and installation mechanism
US8346956B2 (en) * 2004-10-29 2013-01-01 Akamai Technologies, Inc. Dynamic image delivery system
US8209679B2 (en) * 2006-01-12 2012-06-26 Oracle International Corporation Computer implemented method and system for processing a client request for an application program
US8316364B2 (en) * 2007-02-28 2012-11-20 Red Hat, Inc. Peer-to-peer software update distribution network
US8473938B1 (en) * 2007-06-21 2013-06-25 Open Invention Network Llc Security patch update processor
US8533504B2 (en) * 2008-05-29 2013-09-10 International Business Machines Corporation Reducing power consumption during execution of an application on a plurality of compute nodes
US8468516B1 (en) * 2008-12-19 2013-06-18 Juniper Networks, Inc. Creating hot patches for embedded systems
US8296756B1 (en) * 2009-11-06 2012-10-23 Southern Company Services, Inc. Patch cycle master records management and server maintenance system
US8584113B2 (en) * 2009-11-09 2013-11-12 Bank Of America Corporation Cross-updating of software between self-service financial transaction machines
US8972967B2 (en) * 2011-09-12 2015-03-03 Microsoft Corporation Application packages using block maps

Cited By (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2019139683A (ja) * 2018-02-15 2019-08-22 株式会社カプコン パッケージソフトウェア作成プログラム及びそれを用いたパッケージソフトウェア作成方法
WO2020203669A1 (ja) * 2019-04-03 2020-10-08 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置およびインストール方法
JP2020170361A (ja) * 2019-04-03 2020-10-15 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置およびインストール方法
JP7219142B2 (ja) 2019-04-03 2023-02-07 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置およびインストール方法
JP2022529031A (ja) * 2019-04-17 2022-06-16 華為技術有限公司 パッチング方法、関連装置及びシステム
US11797288B2 (en) 2019-04-17 2023-10-24 Huawei Technologies Co., Ltd. Patching method, related apparatus, and system
JP7174866B2 (ja) 2019-04-17 2022-11-17 華為技術有限公司 パッチング方法、関連装置及びシステム
JP2020197787A (ja) * 2019-05-31 2020-12-10 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置
JP7348752B2 (ja) 2019-05-31 2023-09-21 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置
US11327741B2 (en) 2019-07-31 2022-05-10 Sony Interactive Entertainment Inc. Information processing apparatus
JP2021026298A (ja) * 2019-07-31 2021-02-22 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置
WO2021124635A1 (ja) * 2019-12-16 2021-06-24 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置およびファイルアクセス方法
JP7316204B2 (ja) 2019-12-16 2023-07-27 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置およびファイルアクセス方法
US11836367B2 (en) 2019-12-16 2023-12-05 Sony Interactive Entertainment Inc. Information processing device and file access method
WO2022097605A1 (ja) * 2020-11-06 2022-05-12 株式会社ソニー・インタラクティブエンタテインメント 情報処理装置

Also Published As

Publication number Publication date
US9286059B2 (en) 2016-03-15
US20150301823A1 (en) 2015-10-22

Similar Documents

Publication Publication Date Title
JP2015207145A (ja) 情報処理装置および差分情報生成装置
US11558174B2 (en) Data storage method, device, related equipment and cloud system for hybrid cloud
JP2015088146A (ja) 情報処理装置
JP2015088143A (ja) 情報処理装置およびゲームデータのデータ構造
EP2947570B1 (en) Information processing device and file management method
US9389795B2 (en) Dividing incoming data into multiple data streams and transforming the data for storage in a logical data object
JP4342596B1 (ja) 電子装置およびコンテンツデータ提供方法
JP6360014B2 (ja) 情報処理装置およびダウンロード進捗状況の表示方法
WO2011031646A2 (en) Digital media bundles for media presentation playback
US8775600B2 (en) Storage system and data management method in storage system
US10052555B2 (en) Information processing device, data structure of game data, and recording medium
JP4346670B1 (ja) 電子装置およびコンテンツデータ提供方法
JP2011193264A (ja) コンテンツ配信システム、コンテンツサーバ、クライアント装置、コンテンツ配信方法、コンテンツサーバのコンテンツ配信方法、クライアント装置のコンテンツ取得方法及びプログラム
JP2015088144A (ja) 情報処理装置およびゲームデータのデータ構造
JP6855348B2 (ja) 情報処理装置およびダウンロード処理方法
WO2019026686A1 (ja) 情報処理装置およびファイルコピー方法
JP5164420B2 (ja) ゲームシステムおよびゲーム機
JP7271410B2 (ja) 情報処理装置およびファイル記録方法
JP5165082B2 (ja) 情報処理装置、制御方法、プログラム、及び記録媒体
JP2009282623A (ja) 電子装置およびコンテンツデータ提供方法
JP5196796B2 (ja) 撮像装置及び撮像システム
JP2010211815A (ja) データファイル管理用記録媒体およびデータファイル管理装置
JP2013045146A (ja) 情報処理装置、情報処理方法及びプログラム