JP2010176699A - 差異ファイルの生成において用いるためのソフトウェア画像の処理 - Google Patents

差異ファイルの生成において用いるためのソフトウェア画像の処理 Download PDF

Info

Publication number
JP2010176699A
JP2010176699A JP2010086127A JP2010086127A JP2010176699A JP 2010176699 A JP2010176699 A JP 2010176699A JP 2010086127 A JP2010086127 A JP 2010086127A JP 2010086127 A JP2010086127 A JP 2010086127A JP 2010176699 A JP2010176699 A JP 2010176699A
Authority
JP
Japan
Prior art keywords
version
original
instruction
data
new
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.)
Granted
Application number
JP2010086127A
Other languages
English (en)
Other versions
JP5261433B2 (ja
Inventor
Liwei Ren
レン,リーウェイ
Jinsheng Gu
グ,ジンシェン
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.)
Innopath Software Inc
Original Assignee
Innopath Software 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 Innopath Software Inc filed Critical Innopath Software Inc
Publication of JP2010176699A publication Critical patent/JP2010176699A/ja
Application granted granted Critical
Publication of JP5261433B2 publication Critical patent/JP5261433B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99942Manipulating data structure, e.g. compression, compaction, compilation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99954Version management

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)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】バイト・レベルでファイルの差別化を行うシステムおよび方法を提供する。
【解決手段】ファイル・バージョン間のソフトウェア/実行可能変更は、ソース・コード変更であると定める、主変更/論理変更と、二次的変更とを含む。二次的変更は、一般に主変更から生じ、ソフトウェア・コンパイラ/リンカ・ユーティリティが発生する。二次的変更は、アドレス変更、ポインタ目標アドレス変更、およびアドレス・オフセットの変更を含む。提供する前処理システムおよび方法は、ファイル・バージョン間において近似規則を用いて二次的変更を除去/削減し、これらの変更の除去に関する情報を、対応する差異ファイル内にエンコードする。
【選択図】図1

Description

開示する実施形態は、差異ファイルを用いた電子ファイルの更新に関する。
本願は、2002年5月13日に出願した米国特許出願第10/146,545号に関係がある。
プロセッサ、マイクロプロセッサ、および/または演算装置上で実行し、一定の機能を提供するソフトウェアは、時と共に変化することが多い。この変化は、ソフトウェア・ファイルにおけるバグ、即ち、誤りを訂正する必要性、発展する技術に合わせる必要性、または新たな特徴を追加する必要性等、様々な必要性の結果生じる可能性がある。即ち、移動処理デバイス、例えば、移動ワイヤレス・デバイス上で動作する埋め込みソフトウェア・コンポーネントは、多数のソフトウェア・バグを含むことが多く、訂正が必要である。ソフトウェアは、人が読むことができる情報相互交換用アメリカ標準コード(ASCII:American Standard Code for Information Interchange)の平文ファイルまたは二進コードの形態の1つ以上のファイルを含む。ソフトウェア・ファイルは、更に小さな単位に分割することができ、これらは多くの場合モジュールまたはコンポーネントと呼ばれている。
移動処理デバイスのような、プロセッサを用いた携帯用デバイスは、リアル・タイムのオペレーティング・システム(RTOS)を含むのが通例であり、このデバイスのソフトウェア・コンポーネントは全て、単一の大型ファイルとしてリンクされている。更に、これらの移動ワイヤレス・デバイスには、ファイル・システム支援が設けられていないのが通例である。加えて、単一の大型ファイルは、無線、赤外線、またはシリアル・リンクのような低速通信リンクを用いて、デバイス内に予めロードするか、埋め込む必要がある。
低速通信リンクを通じて移動ワイヤレス・デバイスの大きなファイルを更新する場合の障害には、更新したファイルをデバイスに配信する際に伴う時間、帯域幅、およびコストが含まれる。大型ファイルを移動処理デバイスに配信する問題に対する既存の解決策の1つに、圧縮の使用が含まれる。一般に既存の圧縮アルゴリズムが数多く用いられているが、しかしながら、多くの場合、圧縮したファイルでさえも、低速でコストがかかる狭帯域通信リンクを通じてデバイスにダウンロードするには大き過ぎる。
ファイルを更新するための別の典型的な解決策では、差異プログラムを用いて、改訂したファイルが元のファイルとどれくらい異なるかについての記述を生成する。このような差異データを生成する差異プログラムが入手可能である。しかしながら、圧縮と同様、これらの差異プログラムを用いて生成した差異ファイルは、関連する通信プロトコルによる転送には大き過ぎる場合もあり得る。
図1は、一実施形態の下における、ファイル差別化および更新を示すブロック図である。 図2は、図1の実施形態の下における、デルタ・ファイルの発生のフロー図である。 図3は、実行可能ファイルの元バージョンおよび新バージョンを示すブロック図である。 図4は、図1および図2の実施形態の下において、電子ファイルの異なるバージョンを前処理するためのフロー図である。 図5は、図4の実施形態の下において、電子ファイルの異なるバージョンのコード(テキスト)セクションを前処理するためのフロー図である。 図6は、図5の実施形態の下において、電子ファイルの元のバージョンのコード(テキスト)セクションに新たな目標アドレス値を発生するためのフロー図である。 図7は、一実施形態の下における、ファイルの元バージョンおよび新バージョンのブロック図であり、電子ファイルの元バージョンのコード(テキスト)セクションに対する新たな目標アドレス値の発生を参照して記述した異なるアドレス(よび対応する標記)を示す。 図8は、図4の実施形態の下において、電子ファイルの元および新バージョンのデータ・セクションを前処理するためのフロー図である。 図9は、図8の実施形態の下において、電子ファイルの元バージョンのデータ・セクションに新データ・ポインタ値を発生するためのフロー図である。 図10は、一実施形態の下における、ファイルの元バージョンおよび新バージョンのブロック図であり、電子ファイルの元バージョンに新データ・ポインタ値を発生する際に用いる、異なるアドレス(および対応する標記)を示す。 図11は、図4の実施形態の下における、共通ファイル・ユニットのヒント融合(hint merging)のフロー図である。 図12は、図4の実施形態の下における、共通データ・ユニットのヒント融合のフロー図である。
図面においては、同一の参照番号は、同一または実質的に同様の要素またはアクトを特定するものとする。いずれの特定の要素またはアクトであってもその論述を容易に特定するために、参照番号における最上位桁は、当該要素が最初に紹介される図番を示すこととする(例えば、要素124は、図1において初めて紹介され、図1に関して論じられるものとする)。
元ファイルおよび新ファイル間の差異ファイル発生の一部として、元ファイルおよび新ファイルを前処理するシステムおよび方法を提供する。この前処理は、差異ファイルのサイズの一層の縮小に対応する。ファイル・バージョン間のソフトウェア/実行可能な変更は、ソース・コード変更と定める主変更/論理変更、および二次的変更を含む。二次的変更は、一般に、主変更から生じ、ソフトウェア・コンパイラ/リンカ・ユーティリティによって発生する。二次的変更は、アドレス変更、ポインタ目標アドレス変更、ならびに主変更から生じソフトウェア・コンパイラ/リンカ・ユーティリティによって発生したアドレス・オフセットの変更を含む。提供する前処理システムおよび方法は、ファイル・バージョン間において近似規則を用いて、二次的変更を除去/削減し、これらの変更の除去に関する情報を、対応する差異ファイルの上方にエンコードする。
電子ファイルの2バージョン間の差異ファイルを生成するシステムおよび方法について、これより詳細に説明する。このファイル生成を、ここでは、ファイル差別化(file differencing)と呼ぶことにする。図1は、一実施形態の下において行われるファイル差別化および更新を示すブロック図である。ファイル差別化および更新は、差別化コンポーネントおよび更新コンポーネントを含む。差別化コンポーネントは、ここではファイル差異発生部と呼び、第1のプロセッサを用いたシステムまたはコンピュータ・システムにおいて、電子ファイルの元バージョンおよび新バージョンから、差異ファイルを発生する。更新コンポーネントは、ここでは更新発生部と呼び、第2のプロセッサを用いたシステムまたはコンピュータ・システム上で、差異ファイルと、元ファイルのホストされたコピー(hosted copy)とを用いて、新ファイルのコピーを発生する。
以下の説明では、本発明の実施形態の完全な理解が得られ、それを実施可能な説明を行うために、多数の具体的な詳細を導入する。しかしながら、本発明は、これら具体的な詳細の1つ以上が無くとも、または他のコンポーネント、システム等を用いても実施可能であることを、当業者は認めよう。その他の場合では、周知の構造または動作については、本発明の特徴を曖昧にするのを避けるために、示さないか、または詳細には説明しない。
図1を参照すると、第1コンピュータ・システム102および第2コンピュータ・システム104が通信経路106を通じて通信する。これらのコンピュータ・システム102および104は、当技術分野では周知のように、共に動作する計算コンポーネントおよびデバイスのいずれかの集合体を含む。コンピュータ・システム102および104は、更に大きなコンピュータ・システムまたはネットワーク内部におけるコンポーネントまたはサブシステムであることも可能である。
通信経路106は、コンピュータ・システム102および104間でファイルを伝達または転送する何らかの媒体を含む。したがって、この経路106は、ワイヤレス接続、有線接続、および混合ワイヤレス/有線接続を含む。また、通信経路106は、ローカル・エリア・ネットワーク(LAN)、市内エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、特定企業のネットワーク、オフィス間またはバックエンド(backend)ネットワーク、およびインターネットを含むネットワークへの結合部または接続部も含む。更に、通信経路106は、フロッピ・ディスク、ハード・ディスク・ドライブ、およびCD−ROMのような、着脱可能な固定媒体、ならびに電話回線、バス、および電子メール・メッセージを含む。
第1通信システム102は、電子ファイルの元のバージョン即ち旧バージョンおよび新バージョン112を受信する。新ファイル112は、一般に、元ファイル110の更新または改訂バージョンであるが、そのように限定される訳ではない。電子ファイル110および112は、ソフトウェア・ファイルを含み、ダイナミック・リンク・ライブラリ・ファイル、共有オブジェクト・ファイル、埋め込みソフトウェア・コンポーネント(EBSC)、ファームウェア・ファイル、実行可能ファイル、16進データ・ファイルを含むデータ・ファイル、システム・コンフィギュレーション・ファイル、ならびに個人使用データを含むファイルを含むが、これらに限定されるのではない。いずれの形式のファイルもバイト・ストリームと見なすことができるので、以後、文脈に応じて、ファイルをバイト・ストリームと記述できることとする。
ファイル差異発生部114のコンポーネントは、新ファイル112を受信し、これを元ファイル110と比較し、以下に説明するように、比較したファイル間の差異を計算する。これらの差異は、比較したファイル間のバイト・レベルでの差異を含むが、そのように限定されるのではない。ファイル差異発生部114は、比較の間に、差異ファイル116を発生する。ここでは、差異ファイル116をデルタ・ファイル116と呼ぶ。
一実施形態のファイル差異発生部114は、ホスト・コンピュータ・システム102のコンポーネント間で結合を行い、ここで、コンポーネントは、プロセッサ、少なくとも1つのコントローラ、少なくとも1つのメモリ・デバイス、および少なくとも1つのバスのうち少なくとも1つを含むが、そのように限定されるのではない。一実施形態のファイル差発生部114のコンポーネントは、少なくとも1つの前処理サブシステム124と、少なくとも1つの差別化サブシステム134とを含む。前処理サブシステム124のことをプリプロセッサ124も呼び、少なくとも1つの前処理アルゴリズム、プログラム、またはルーチンの制御の下で実行する少なくとも1つのプロセッサを含む。同様に、差別化サブシステム134は、少なくとも1つの差別化アルゴリズム、プログラム、またはルーチンの制御の下で実行する少なくとも1つのプロセッサを含む。
デルタ・ファイル116の内容は、新ファイル112と元ファイル110との間の差異の効率的な表現を備えている。デルタ・ファイル116は、2002年5月13日に出願され、"Byte-Level File Differencing and Updating Algorithms"(バイト・レベルにおけるファイル差別化および更新アルゴリズム)と題する米国特許出願、出願番号第10/146,545号に記載されているように、関連するファイルの新または現バージョンと当該ファイルの以前のバージョンとの間の差異を表す、交換および/または挿入動作の実際のデータと共に、メタ・データを含む。ファイル差異発生部114は、最小数のバイトおよび予め規定したフォーマットまたはプロトコルを用いて、元110および新112ファイル間のいずれの差異をも、デルタ・ファイル116内に供給することによって、空間について最適化したデルタ・ファイルが得られる。
デルタ・ファイル116は、通信経路106を通じて、別の処理システム104に転送または送信される。転送の前に、当技術分野では周知の圧縮技法を用いて、デルタ・ファイル116を圧縮すると良いが、そのように限定されるのではない。受信システム104上にホストされた更新発生部118は、デルタ・ファイル116を、ホストされた元ファイル110Hと共に用いて、新ファイル112Cのコピーを発生即ち作成する。次いで、新ファイル112のこのコピーを用いて、改訂または更新の目標とするクライアント・デバイス上にホストされた元ファイル110Hを更新する。この更新プロセスの完了時には、第2コンピュータ・システム上に格納されている新ファイルは、第1コンピュータ・システム102において受信した新ファイル112と同一となっている。
元ファイルと新ファイルとの間の差異は、新ファイルよりも小さいのが通例であり、新ファイル全体の代わりに差異を送信し格納すれば、格納および送信の大きな節約に至る。これは、プログラムを記憶しており、通例低速で費用がかかる可能性がある接続、例えば、ワイヤレスまたはセルラ接続を介してプログラムを更新する移動電子デバイス(クライアント・デバイス)には特に重要である。デルタ・ファイルのサイズが縮小されることにより、多数の改良が得られ、その1つには、デルタ・ファイルをクライアント・デバイスに送信するために必要な帯域幅の縮小が含まれる。ファイルの小型化は、転送に必要な帯域幅が少なくて済むことを意味する。また、ファイルの小型化により、送信に必要な時間も短縮され、したがって、ファイル転送が中断される虞れが低下し、同時に、受信したファイルにおける送信エラーも低減する。加えて、安全でない接続を介して送信する場合、新たなソフトウェア画像よりも、デルタ・ファイルの方が安全である。これらの改良は全て、顧客の満足度を高めることになる。
図2は、図1の実施形態の下における、デルタ・ファイル発生のフロー図である。動作が開始するのは、ブロック204において、第1処理システムまたはコンピュータ・システムにおいて、新ファイルおよび元ファイルを受信したときである。新ファイルおよび元ファイルに対応するマップ・ファイルも受信する。マップ・ファイルは、上位テキスト・ファイルであり、ソフトウェア画像の各シンボルの開始アドレスおよびサイズを含み、シンボルの例には、関数およびグローバル変数が含まれる。マップ・ファイルは、コンパイラ/リンカ・ユーティリティによって出力され、ログ・ファイル、シンボル・ファイル、および/またはリスト・ファイルとしても知られている。
ブロック206において、新ファイルと元ファイルの内容間において前処理動作が行われ、2つのファイルの内容間で、共通セグメントおよび単純なパターンを識別する。一般に、前処理は、識別した共通セグメントおよびパターンを用いて、新ファイルおよび元ファイル間における二次変更を削減/除去する。一実施形態の前処理は、論理的な変更に伴うアドレスのずれによって生ずる元ファイルおよび新ファイル間の変更を削減および/または除去することを含む。これについては以下で説明するが、そのように限定されるのではない。つまり、この前処理は、二次的な変更を含む、ファイルの共通セグメント間の差異を削減することにより、差異計算の効率を高めるのである。
前処理に続いて、ブロック208において、新ファイルと修正した元ファイルとの間で、バイト・レベルの差異を計算する。ブロック210において、計算した差異をコード化し併合し、既定のエンコーディング・フォーマットにしたがってデルタ・ファイルを発生する。次いで、ブロック212において、当技術分野では周知のように、デルタ・ファイルを最適化して、可能であれば、更にファイル・サイズを縮小し、ブロック214において、最適化したデルタ・ファイルを供給する。
前述のように、前処理動作は、新ファイルおよび元ファイルの内容間で行われ、2つのファイルの内容間における共通セグメントおよび単純パターンを識別する。この共通セグメントおよび単純パターンの知識を用いて、二次的な変更を削減/除去することにより、全体的な性能向上(gain)が得られる。
前述のように、システムとクライアント・デバイスとの間における電子ファイルまたはソフトウェア・アップグレードの送信は、特に、低帯域幅チャネルを通じて行われる場合、大量の時間がかかる可能性がある。一例に、セルラ電話機のソフトウェア・アップグレードがある。セルラ・ワイヤレス結合を通じて新および元ソフトウェア・バージョン間のバイト・レベルのファイル差異即ち変更部を送ることが、典型的な慣例になっている。実行可能ファイルの新バージョンおよび元バージョン間の差異は、それらの対応するソース・ファイル間の差異よりも複雑であるので、多大な転送時間が生ずる。
新および元ファイル・バージョン間におけるこれら複雑な差異が生ずるのは、部分的に、ソース・ファイルにおける小さな変更によって、実行可能ファイル全体を通じて主要な変更が導入される場合が多いからである。一例として、実行可能ファイルに導入される変更には、2つの主な種類の変更、即ち、主変更および二次的変更を含み。主変更は、論理的変更とも呼ばれ、元ファイルからのソース・コード・ラインの削除、新ファイルへのソース・コード・ラインの加入、およびソース・コード・ラインの修正によって生ずるソース・コードの変更である。二次的変更は、主変更によって生ずる、およびソフトウェア・コンパイラ/リンカ・ユーティリティが発生するアドレスの変更、ポインタ・目標・アドレスの変更、およびアドレス・オフセットの変更を含むと定めるが、これらに限定されるのではない。以下で説明する前処理ルーチンは、二次的変更を除去/削減し、これらの変更の除去に関連する情報を、対応するデルタ・ファイルの情報にエンコードする。
実行可能ファイルはコード(テキスト)セクションおよびデータ・セクションを含むと想定して、実行可能ファイルに導入される二次的変更の分析が開始する。図3は、実行可能ファイルの元V1および新V2バージョンを示すブロック図300である。元V1および新V2バージョンは、双方とも、コード(テキスト)セクション310および320、ならびにデータ・セクション312および322を含む。新バージョンV2が元バージョンV1と相違するのは、新バージョンV2は、サイズ0x500の新コード302の追加ブロックを含むことである。新コード302のブロックの存在により、2種類の二次的変更が導入される。
第1の種類の二次的変更は、新バージョンV2のコード(テキスト)セクション320に生じ、その結果、分岐命令BRANCHが異なる分岐変位を有することになる。これは、相対アドレスまたは分岐オフセットとも呼ばれ、分岐命令BRANCHのアドレスと目標命令アドレスTARGETとの間に新コード302のブロックを追加したことの結果である。この例では、目標命令アドレスは0x1000であり、分岐命令アドレスは0x3000であるので、元バージョンに0x2000(0x3000−0x1000)の分岐変位が生ずる。分岐命令アドレスと目標命令アドレスとの間に新コードのブロック(サイズは0x500)を追加することによって、分岐命令アドレスが0x3500(0x3000+0x500)に変化する。したがって、新バージョンV2における分岐変位は、0x2500(0x3500−0x1000)に変化する。
第2の種類の二次的変更は、新バージョンV2のデータ・セクション322に生じ、対応するデータ・エリアの絶対アドレスを格納する、データ・ポインタPOINTER、即ち、データ・ポインタ値に変更が生ずる。このデータ・ポインタ値の変更は、新コード302をコード(テキスト)セクションに追加した結果である。新コード302は、データ・セクション322の前にある、元バージョン内のポイントに挿入される。したがって、元バージョンでは0x8000であるデータ・ポイント値は、新バージョンでは0x8500(0x8000+0x500)に変化する。
ソフトウェアの開発が増々複雑になるに連れて、二次的変更が実行可能ファイル全体に広がり、バイト・レベルでのファイルの差別化の関連で考えると、二次的変更が主変更よりも数において勝る可能性があるところまで来ている。以下に説明する前処理ルーチンは、ファイルの元バージョンおよび新バージョン間の関係を用いて、二次的変更に関連する差異に関してデルタ・ファイルにエンコードする情報量を削減する。情報を最小限に抑えれば、バイト・レベルで差別化および再生を行う際に、カスケーディング計算(cascading computation)の効果が得られ、デルタ・ファイルのサイズを縮小することができる。
概略的に、一実施形態の前処理ルーチンは、少なくとも1つの近似ルーチンと、デルタ・ファイル・サイズを最小化する際に用いる少なくとも1つの併合ルーチンとを含む。近似ルーチンは、テキスト(コード)およびデータ・モデルの想定にしたがって、二次的変更を削減/除去するように機能する。併合ルーチンは、ヒント併合ルーチン(hint merging routine)とも呼ばれ、新バージョンを受信するデバイスへの転送には、最小コスト・レベルでモデル情報をエンコードする。モデル情報は、前述のように、デバイスにおいて新バージョンを復元する際に用いられるが、そのように限定されるのではない。
図4は、図1および図2の実施形態の下において、電子ファイルの異なるバージョンを前処理するためのフロー図206である。ファイルの新および元バージョンを受信すると、ブロック402において、共通関数ユニットおよび共通データ・ユニットを、関連するマップ・ファイルから抽出する。ブロック404において、共通関数ユニットを併合して、共通関数ブロックを形成する。これについては、図11を参照して以下で詳しく説明する。同様に、ブロック406において、共通データ・ユニットを併合して共通データ・ブロックを形成する。これについては図12を参照して以下で詳しく説明する。次いで、前処理システムの前処理ルーチンは、ブロック408において、新および元ファイルのコード(テキスト)セクションを前処理する。これについては、図5、図6、および図7を参照しながら以下で説明する。続いて、または同時に、前処理ルーチンは、ブロック410において、新および元ファイルのデータ・セクションを前処理する。これについては、図8、図9、および図10を参照しながら以下で説明する。ブロック412において、共通関数ブロックおよび共通データ・ブロックをエンコードし、元ファイルの修正バージョンを出力し、バイト・レベルのファイル差別化を実行する際に用いる。
図5は、図4の実施形態の下において、電子ファイルの異なるバージョンのコード(テキスト)セクションを前処理するためのフロー図408である。一般に、ファイルのコード(テキスト)セクションは、1つ以上の関数ユニットまたはブロックで構成されている。一実施形態のコード(テキスト)セクションの前処理は、ブロック502において、元および新ファイルの各関数ユニットの開始および終了アドレスの特定から開始する。元ファイルの関数ユニットをここでは「元関数ユニット」と呼び、新ファイルの関数ユニットをここでは「新関数ユニット」と呼ぶ。機能ユニットの開始および終了アドレスを特定するには、マップ・ファイルを用いるが、そのように限定されるのではない。
次に、ブロック504において、プリプロセッサは一意のインデックスまたはインデックス値を各一意の関数ユニットに割り当てる。このインデックス値の一意の関数ユニットへの割り当ては、元および新ファイル・バージョン双方に共通な関数ユニットの識別を支援する。その結果、ファイルの元および新バージョン双方に同じ関数ユニットが見つかった場合、その関数には共通のインデックス値を割り当てるが、実施形態はそのように限定されるのではない。
一例として、元関数ユニットF1、F2、F3、およびF4を含む元ファイル・バージョンと、新関数ユニットF1、F2、F3、およびF5を含む新ファイル・バージョンについて考える。プリプロセッサがインデックス値1、2、3、4、および5を用いて関数ユニットF1、F2、F3、F4、およびF5をそれぞれインデックス化(index)する場合、元ファイル・バージョンには以下の表が作成される。
Figure 2010176699
同様に、新ファイル・バージョンには以下の表が作成される。
Figure 2010176699
これらの表双方において、開始アドレス(startAddress)は、一般に、対応する関数ユニットの開始アドレスと定められ、したがって、「開始アドレスV1」は、元ファイルの関数ユニットの開始アドレスであり、「開始アドレスV2」は、新ファイルの関数ユニットの開始アドレスである。更に、終了アドレス(endAddress)は、関数ユニットのサイズに、関数ユニットの開始アドレスを加算することによって発生するので、
Figure 2010176699
となるが、実施形態はそのように限定されるのではない。その結果、終了アドレスV1は、元ファイルの関数ユニットの終了アドレスと定められ、一方終了アドレスV2は新ファイルの関数ユニットの終了アドレスと定められる。この終了アドレスの定めは、ここではデータ・ユニットにも適用されるが、そのように限定されるのではない。
続いて、プリプロセッサは、ブロック506において、前述の表からのインデックス値、開始アドレス、および終了アドレスの情報を用いて、共通関数ユニットのHintTableを発生する。HintTableは、1つのテーブルに組み入れた共通関数ユニットの情報を含み、元ファイル・バージョン(V1)の元関数ユニットのインデックス値、開始および終了アドレス、ならびに新ファイル・バージョン(V2)の新関数ユニットの開始および終了アドレスを含む。HintTableの情報を配列するには、当技術分野では周知の技術がいくつでも用いられる。
Figure 2010176699
続いて、プリプロセッサは、ブロック508において、目標アドレスを含む元関数ユニットの命令に対する新目標アドレス値の発生に進む。図6は、図5の実施形態の下において、電子ファイルの元バージョンのコード(テキスト)セクションに新目標アドレス値を発生するためのフロー図508である。
新目標アドレス値の発生について説明するにあたり、以下のような特定の標記を用いて、関数ユニットに伴う種々のアドレスについて説明する。全般的に、命令アドレスは、ここでは「addr」という標記を用いて示す。したがって、「addrV1」は、元関数ユニットにおける命令アドレスを示し、一方「addrV2」は、新関数ユニットにおける命令アドレスを示す。全般的に、目標アドレスは、ここでは、「targetAddr」という標記を用いて示す。したがって、「targetAddrV1」は、元関数ユニットにおける目標アドレスを示し、一方「targetAddrV2」は、新関数ユニットにおける対応の目標アドレスを示す。更に、targetAddrV1を含む元関数ユニットの開始アドレスは、ここでは、「targetStartAddrV1」という標記を用いて参照し、targetAddrV1を含む元関数ユニットの開始アドレスであり、TargetAddrV2を含む新関数ユニットの開始アドレスは、ここでは、「targetStartAddrV2」という標記を用いて参照する。
図7は、一実施形態の下における、ファイルの元バージョンV1および新バージョンV2のブロック図であり、電子ファイルの元バージョンのコード(テキスト)セクションに対する新目標アドレス値の発生を参照して説明する異なるアドレス(および対応する標記)を示す。第1の共通関数ユニットCFU Aおよび第2の共通関数ユニットCFU Bは、元V1および新V2バージョン双方に共通である。元バージョンV1の共通関数ユニットCFU Bは、開始アドレスstartAddrV1を有し、命令アドレスaddV1に位置する、計算可能命令cal_insAを含む。計算可能命令については、以下で説明する。元バージョンV1の共通関数ユニットCFU Aは、開始アドレスtargetStartAddrV1を有し、計算可能命令cal_insAの目標アドレスtargetAddrV1を含む。
同様に、新バージョンV2の共通関数ユニットCFU Bは、開始アドレスstartAddrV2を有し、命令アドレスaddrV2に位置する計算可能命令cal_insBを含む。新バージョンV2の共通関数ユニットCFU Aは、開始アドレスtargetStartAddrV2を有し、計算可能命令cal_insBの目標アドレスtargetAddrV2を含む。
図6を参照すると、新目標アドレス値の発生は、ブロック602において元ファイル・バージョンの元関数ユニットjから、前処理が済んでいない計算可能命令を呼び出すことから開始し、jは、カウンタ値であり、1の値に初期化され、以後j=nになるまで1回毎に1ずつ増分し、nは、元バージョンと新バージョンとの間の共通関数ユニットの総数である。
次に、ブロック604において、以下のようにして、計算可能命令の現目標アドレスを発生または計算する。例えば、プログラム・カウンタに関連するジャンプ命令や、ロード/格納命令のような、目標アドレスを含むいずれの命令についても、目標アドレスを計算するには、現命令アドレスおよび対応する命令のデコーディングを用いる。先に引用した表記を用いると、現目標アドレスの計算は、次のようになる。
Figure 2010176699
あるいは、
Figure 2010176699
値[targetAddrV1-addrV1]がわかっていれば、以下のように、対応するエンコーディング方式に基づいて命令も計算することができる。
Figure 2010176699
この種の命令を計算可能命令と呼び、ここでは、「cal_ins」で示し、値(targetAddrV1-addrV1)を計算可能命令の値、または「命令値」と呼ぶ。
共通関数ユニットにおける計算可能命令に対して、一実施形態のプリプロセッサは、元バージョンにおける命令値を元関数ユニットの開始アドレスおよび新関数ユニットの開始アドレスと共に用いて、共通関数ユニットの新バージョンにおける命令値を発生する。したがって、先に引用した表記を用いると、元バージョンにおける命令値(targetAddrV1-addrV1)、startAddrV1、targetStartAddrV1、startAddrV2、およびTargetStartAddrV2を用いて、新バージョン(targetAddrV2-addrV2)における命令値を発生または計算する。
したがって、元ファイルの目標アドレス(targetAddrV1)の発生時に、ブロック606において、プリプロセッサはHintTableにアクセスして、k、目標アドレスtargetAddrV1を含む元ファイル・バージョンの関数ユニットを特定する。元関数ユニットjおよびその目標とした関数ユニットkのアイデンティティを用いて、プリプロセッサは、ブロック608において、HintTableからstartAddrV1、startAddrV2、targetStartAddrV1、およびtargetStartAddrV2を読み出す。
続いて、ブロック610において、プリプロセッサは、ここで、以下のようにしてcal_insBに対する命令値(targetAddrV2-addrV2)を発生し、cal_insAの命令値と置換する。一実施形態のプリプロセッサは、少なくとも2つの仮定の下で動作するが、そのように限定されるのではない。第1の仮定は、元バージョンおよび新バージョン双方において同じサイズを有する共通関数ユニットは、元および新バージョン双方を通じて同じ命令構造を有し、命令構造は、命令型および命令順序を含むことを仮定する。第2の仮定は、第1の仮定を満たす共通関数ユニットにおけるいずれの計算可能命令についても、当該計算可能命令が関数コールであるとき、または計算可能命令の目標アドレスが、同様に第1の仮定を満たす共通関数ユニットに入るときには、通常以下のように2つの不変式が元および新バージョン双方を通じて成り立つことを仮定する。
Figure 2010176699
および
Figure 2010176699
このように、2つの仮定にしたがって、プリプロセッサはブロック610において、cal_insAに対して以下のように新命令値(targetAddrV2-addrV2)を発生する。
Figure 2010176699
これを、ここでは式1と呼ぶ。
ブロック612において、cal_insAの新命令値を用いて、プリプロセッサは、以下のようにcal_insAを修正する。
Figure 2010176699
次いで、元バージョンのアドレスaddrVV1における元命令、cal_insAを新命令と置換する。
続いて、ブロック614において、プリプロセッサは、元関数ユニットjの計算可能命令の中でまだ前処理が済んでいないものが残っているか否か判定を行う。前処理が未だ済んでいない計算可能命令が残っている場合、プリプロセッサは、ブロック602に戻り、別の、あるいは次の未処理の計算可能命令を元関数ユニットjから読み出し、先に説明したように前処理を続ける。
元関数ユニットjの計算可能命令全てを処理し終えたとブロック614で判定したとき、プリプロセッサは、ブロック616において、カウンタjにおける値が値nよりも大きいか否か判定を行う。jがnよりも大きくないという判定は、未だ前処理されていない共通関数ユニットがあることを示すので、ブロック618においてカウンタ内の値jを1増分し、先に説明したように前処理を続ける。
jがnよりも大きいという判定は、元ファイル・バージョンの関数ユニット全てを前処理し終えたことを示す。したがって、ブロック620において、プリプロセッサは、新ファイルの近似バージョンを含む、元ファイルの修正バージョンを出力する。
図4を参照しながら先に説明したように、プリプロセッサおよび近似ルーチンは、テキスト(コード)モデルの仮定にしたがって二次的変更を除去することに加えて、ブロック410において、データ・モデルの仮定にしたがって二次的変更を除去するようにも機能する。図8は、図4の実施形態の下において、電子ファイルの元および新バージョンのデータ・セクションを前処理するためのフロー図410である。一般に、ファイルのデータ・セクションは、1つ以上のグローバル変数ユニットまたはブロックで構成されており、ここでは「データ・ユニット」と呼ぶ。
一実施形態のデータ・セクションの前処理は、ブロック802において、元および新ファイルの各データ・ユニットの開始および終了アドレスの特定から開始する。ここで、元ファイルのデータ・ユニットを「元データ・ユニット」と呼び、新ファイルのデータ・ユニットを「新データ・ユニット」と呼ぶことにする。データ・ユニットの開始および終了アドレスを特定するには、マップ・ファイルを用いるが、そのように限定されるのではない。
次に、ブロック804において、前処理は一意のインデックスまたはインデックス値を一意の各データ・ユニットに割り当てる。このインデックス値の一意のデータ・ユニットへの割り当ては、元および新ファイル・バージョン双方に共通のデータ・ユニットの識別を支援する。したがって、ファイルの元および新バージョン双方において同じデータ・ユニットが発見された場合、そのデータ・ユニットには共通のインデックス値を割り当てるが、実施形態はそのように限定されるのではない。インデックス値の一意のデータ・ユニットへの割り当ては、前述したインデックス値の一意の関数ユニットへの割り当てと同じであるが、そのように限定されるのではない。同様に、インデックス値にしたがって編成され、各データ・ユニット毎に開始アドレスおよび終了アドレスを含むテーブルの発生も、前述した元および新ファイル・バージョンの関数ユニットのためのテーブルの発生と同じである。しかしながら、代替実施形態では、当技術分野では周知の技術をいくつでも用いて、インデックス値を割り当て、テーブルを発生することもできる。
続いて、プリプロセッサは、ブロック806において、先のテーブルからのインデックス値、開始アドレス、および終了アドレスの情報を用いて、共通データ・ユニットのHintTableを発生する。HintTableは、1つのテーブルに組み立てた共通データ・ユニットの情報を含み、元ファイル・バージョン(V1)の元データ・ユニットの開始および終了アドレス、ならびに新ファイル・バージョン(V2)の新データ・ユニットの開始および終了アドレスを含む。HintTableの発生は、共通関数ユニットのHintTableを参照して先に説明した通りであるが、代替実施形態では、当技術分野において周知の技術をいくつでも用いてHintTableを発生することができる。
ブロック808において、プリプロセッサは、続いて、元バージョンのデータ・ポインタに対して新データ・ポインタ値を発生する。図9は、図8の実施形態の下において、電子ファイルの元バージョンにおけるデータ・ポインタに、新データ・ポインタ値を発生するためのフロー図808である。
データ・ポインタは、データ・ユニットにおけるあるデータを指し示す命令である。新データ・ポインタ値の発生について説明する際にここで用いる表記を、次に示す。データ・ポインタを含む命令のアドレスは、ここでは通常「dataPointer」という表記を用いて示す。したがって、「dataPointerV1」は、元バージョンにおけるdataPointerを示し、一方、「dataPointerV2」は、新バージョンにおけるdataPointerを示す。データ・ポインタによって指し示されているデータを含むデータ・ユニットの開始アドレスを、ここでは、「dataStartAddr」という表記を用いて示す。したがって、「dataStartAddrV1」は、元バージョンにおけるdataStartAddrを示し、一方「dataStartAddrV2」は、新バージョンにおけるdataStartAddrを示す。
図10は、一実施形態の下におけるファイルの元バージョンV1および新バージョンV2のブロック図であり、電子ファイルの元バージョンに新データ・ポインタ値を発生する際に用いられる、異なるアドレス(および対応する表記)示す。元V1および新V2バージョンは双方とも、コード(テキスト)セグメントおよびデータ・セグメントを含む。データ・セグメントは、元V1および新V2ファイル・バージョン双方に共通である、共通データ・ユニットCDU Aを含む。元バージョンV1は、コード(テキスト)セグメント内にデータ・ポインタdataPointerV1を含み、これは元バージョンの共通データ・ユニットCDU A内のあるデータを指し示す。元バージョンV1におけるCDU Aの開始アドレスは、dataStartAddrV1である。同様に、新バージョンV2は、コード(テキスト)セグメント内にデータ・ポインタdataPointerV2を含み、これは新バージョンV2の共通データ・ユニットCDU A内のあるデータを指し示す。新バージョンV2におけるCDU Aの開始アドレスは、dataStartAddrV2である。dataStartAddrアドレスは、ファイルの元V1および新V2バージョンのソフトウェア画像に関連するマップ・ファイルからのものである。
図9に戻って、新データ・ポインタ値の発生は、ブロック902において、元バージョンにおいて前処理が済んでいないデータ・ポインタを特定することから開始する。一実施形態のプリプロセッサは、元バージョンにおけるポインタ値(dataPointerV1)を、dataPointerV1が指し示すデータを含むデータ・ユニットの開始アドレス(dataStartAddrV1)、および新バージョンにおける対応するデータ・ユニットの開始アドレス(dataStartAddrV2)と共に用いて、新バージョンのデータ・ポインタ値(dataPointerV2)を発生する。これについては、以下で述べる。これを行うには、ブロック904において、HintTableにアクセスして、k、即ち、dataPointerVV1が指し示すデータを含む元バージョンにおけるデータ・ユニットを特定する。データ・ユニットkのアイデンティティを用いて、プリプロセッサは、ブロック906において、HintTableからdataStartAddrV1およびdataStartAddrV2を読み出す。
続いて、プリプロセッサは、ブロック908において、以下のようにして、dataPointerV1を置換するためにデータ・ポインタ値(dataPointerV2)を発生する。一実施形態のプリプロセッサは、データ・ユニットに関する少なくとも2つの追加の仮定の下で動作するが、そのように限定されるのではない。ここでは、これらの仮定を第3および第4の仮定と呼ぶ。第3の仮定は、元バージョンおよび新バージョン双方において同じサイズを有する共通データ・ユニットは、元および新バージョン双方を通じて同じデータ構造を有すると仮定し、データ構造には、型、サイズ、およびデータ変数の順序が含まれる。第4の仮定は、第3の仮定を満たす共通データ・ユニットにおけるいずれのデータ・ポインタについても、以下のように、不変式が全体的に元および新バージョン双方を通じて成り立つことを仮定する。
Figure 2010176699
このように、第3および第4の仮定に応じて、プリプロセッサは、ブロック908において、次のように新データ・ユニットに新データ・ポインタ値(dataPointerV2)を発生する。
Figure 2010176699
これをここでは式2と呼ぶ。
ブロック910において、データ・ポインタ値dataPointerV2を用いて、プリプロセッサは、元バージョンにおける対応するアドレスにおいて、dataPointerV1をdataPointerV2と置換する。続いて、ブロック912において、プリプロセッサは、前処理が済んでいないデータ・ポインタが未だ元データ・ユニットに残っているか否か判定を行う。
前処理が済んでいないまま残っている元データ・ユニットのデータ・ポインタがある場合、プリプロセッサはブロック902に戻って、元データ・ユニットから別の、あるいは次の未処理のデータ・ポインタを読み出し、前述のように前処理が続けられる。元データ・ユニットのデータ・ポインタ全てを前処理したとブロック912において判定した場合、プリプロセッサは、ブロック914において、新ファイルの近似バージョンを含む元ファイルの修正バージョンを出力する。
先にHintTableにおいて用いた、共通関数ユニットおよび共通データ・ユニットの開始および終了アドレスは、異なるファイル・バージョン間において共通ユニットの相対的な位置付けを決定する際にそれらを使用したので、「アルゴリズム・ヒント」または「ヒント」と呼ぶことにする。したがって、ヒントはクライアント・デバイスに転送される。クライアント・デバイスは、前述のように、差異即ちデルタ・ファイルを受信し、デルタ・ファイルおよび元ファイルから新ファイル・バージョンを復元する際にこのファイルを用いる。ヒントの転送は、デルタ・ファイルおよびその他の情報をクライアント・デバイスに転送する際に用いられるのと同じ低帯域幅チャネルを通じて行われるので、一実施形態のプリプロセッサは、ヒントの併合を行い、HintTableの共通関数ユニットおよび共通データ・ユニットを併合するが、前処理アルゴリズムやルーチンの遂行に影響はない。この併合により、ヒントを含むファイルのサイズが縮小し、結果的に、クライアント・デバイスに転送する情報量が減少する。
前述のコード(テキスト)セクションの前処理から得られる共通関数ユニットを用いて、そして図4に戻って、プリプロセッサは、ブロック404において、ヒント併合ルーチンまたはアルゴリズムの制御の下で、共通関数ユニットを併合し、共通関数ブロックを形成する。図11は、図4の実施形態の下における、共通関数ユニットのヒント併合404のフロー図である。
同様に、プリプロセッサは、ブロック406において、前述のデータ・セクションの前処理から得られた共通データ・ユニットを用いて、共通データ・ユニットを併合し、共通データ・ブロックを形成する。図12は、図4の実施形態の下における、共通データ・ファイルのヒント併合406のフロー図である。共通関数ユニットおよび共通データ・ユニットのヒント併合について順に以下で説明する。
ここでは明確化のために、共通関数ユニットおよび共通データ・ユニットのヒント併合を別個に説明するが、実施形態は、併合に伴う動作をいずれの順序またはいずれの組み合わせでも実行することができる。表記に関して、関数またはデータ・ユニットの開始アドレスを、全体的に、ここでは前述のように表記「startAddress」を用いて示すこととする。したがって、「startAddressV1」は、元関数またはデータ・ユニットの開始アドレスを示し、一方「startAddressV2」は、新関数またはデータ・ユニットにおける対応する開始アドレスを示す。同様に、関数またはデータ・ユニットの終了アドレスを、全体的に、ここでは表記「endAddress」を用いて示すこととする。したがって、「endAddressV1」は、元関数またはデータ・ユニットの終了アドレスを示し、一方「endAddressV2」は新関数またはデータ・ユニットにおける対応する終了アドレスを示す。
図5を参照して先に説明したように、共通関数ユニットのHintTableを発生する。これは、1つのテーブルに組み込まれた共通関数ユニットの情報を含み、元ファイル・バージョンV1の元関数ユニットの開始および終了アドレス、ならびに新ファイル・バージョンV2の新関数ユニットの開始および終了アドレスを含む。先に提示したHintTableは、共通関数ユニットのヒント併合を説明する際に一例として用いられたが、実施形態はそのように限定されるのではない。
Figure 2010176699
図4および図11ならびにHintTableを参照すると、共通関数ユニットのヒント併合404の動作は、ブロック1102において、プリプロセッサがHintTableのn個のエントリ全てを使用可能と印し、カウンタをj=1と設定し、関連するHintTableから関数ユニットjおよびユニット(j+1)の元および新バージョンを読み出すことから開始する。この例では、ユニットjおよびユニット(j+1)の値は、ヒント・テーブルのインデックス値に対応し、j=1、2、...(n+1)であるが、そのように限定されるのではない。更に、jの値を初期状態において1に等しく設定し、ヒント併合404が進展するに連れて、そして共通ユニットを処理するに連れて、当技術分野では周知の方法を用いて、以後増分させていく。したがって、インデックス値1および2(j+1=1+1=2)と関連付けられている共通関数ユニットの情報を、ブロック1102において、呼び出す。
ブロック1104において、プリプロセッサは、共通関数ユニットjの元バージョンV1および新バージョンV2はサイズが等しいか否か判定を行う。この判定を行うには、以下のように、元V1および新V2バージョンの開始および終了アドレス間の差を取る。
Figure 2010176699
しかし、そのように限定されているのではない。元V1および新V2バージョンが異なるサイズのファイルを有する場合、動作は、ブロック1112に進み、jの値が量(n−1)未満か否か判定を行う。
元バージョンV1および新バージョンV2のサイズが等しい場合、プリプロセッサは、ブロック1106において、以下のように、共通関数ユニットjの元バージョンV1の終了アドレスが、共通関数ユニット(j+1)の元バージョンV1の開始アドレスと同一か否か判定を行う。
Figure 2010176699
しかし、そのように限定されているのではない。共通関数ユニットjの元バージョンV1の終了アドレスが、共通関数ユニット(j+1)の元バージョンV1の開始アドレスとは異なる場合、動作は、ブロック1112に進み、jの値が量(n−1)未満か否か判定を行う。
共通関数ユニットjの元バージョンV1の終了アドレスが、共通関数ユニット(j+1)の元バージョンV1の開始アドレスと同一である場合、プリプロセッサは、ブロック1108において、共通関数ユニットjの新バージョンV2の終了アドレスが、以下のように、共通関数ユニット(j+1)の新バージョンV2の開始アドレスと同一か否か判定を行う。
Figure 2010176699
しかし、そのように限定されているのではない。共通関数ユニットjの新バージョンV2の終了アドレスが、共通関数ユニット(j+1)の新バージョンV2の開始アドレスとは異なる場合、動作は、ブロック1112に進み、jの値が量(n−1)未満か否か判定を行う。
共通関数ユニットjの新バージョンV2の終了アドレスが、共通関数ユニット(j+1)の新バージョンV2の開始アドレスと同一である場合、プリプロセッサは、ブロック1110において、共通関数ユニットjおよび共通関数ユニット(j+1)の情報を併合して共通関数ブロックを形成し、ユニット(j+1)のエントリを置換し、ついでユニットjのエントリに使用不可能と印する。次いで、動作は、ブロック1112に進み、jの値が量(n−1)未満か否か判定を行う。
プリプロセッサは、ブロック1112において、jの値が量(n−1)未満か否か判定を行う。jの値が量(n−1)に等しく、全ての関数ユニットを前処理し終えたことを示す場合、動作は、ブロック1116に進み、全ての使用可能なエントリを共通関数ブロックとして出力し、そして動作は戻る。jの値が量(n−1)未満であり、前処理が済んでいない関数ユニットが残っていることを示す場合、ブロック1114において、jの値を増分し、動作は、ブロック1102に進み、jの新しい値に対応する共通関数ユニットの情報を読み出す。次いで、前処理は前述のように続けられる。
以下に、図11およびHintTableを参照して、共通関数ユニットのヒント併合を伴う例について説明する。動作は、プリプロセッサが3つのエントリ全てを使用可能と印し、HintTableから関数ユニット1および2の元および新バージョンを読み出すことから開始する。次いで、プリプロセッサは、共通関数ユニット1の元バージョンV1および新バージョンV2のサイズが等しいか否か判定を行う。この判定を行うには、以下のように、元V1および新V2バージョンの開始および終了アドレス間の差を取る。
Figure 2010176699
HintTableからの実際の値を代入すると、以下のようになる。
Figure 2010176699
元バージョンV1および新バージョンV2はサイズが等しいので、プリプロセッサは次に、共通関数ユニット1の元バージョンV1の終了アドレスが、次のように、共通関数ユニット2の元バージョンV1の開始アドレスと同一か否か判定を行う。
Figure 2010176699
HintTableからの実際の値を代入すると、以下のように、共通関数ユニット1の元バージョンV1の終了アドレスが、共通関数ユニット2の元バージョンの開始アドレスと同一であるという判定が得られる。
Figure 2010176699
共通関数ユニット1の元バージョンV1の終了アドレスは、共通関数ユニット2の元バージョンV1の開始アドレスと同一であるので、次に、共通関数ユニット1の新バージョンV2の終了アドレスが、以下のように、共通関数ユニット2の新バージョンV2の開始アドレスと同一か否かについて判定を行う。
Figure 2010176699
HintTableからの実際の値を代入すると、以下のように、共通関数ユニット1の新バージョンV2の終了アドレスが、共通関数ユニット2の新バージョンV2の開始アドレスと同一であるという判定が得られる。
Figure 2010176699
共通関数ユニット1の新バージョンV2の終了アドレスが共通関数ユニット2の新バージョンV2の開始アドレスと同一であるという判定に応答して、プリプロセッサは、共通関数ユニット1および共通関数ユニット2の情報を併合し、以下のような共通関数ブロックを形成する。
Figure 2010176699
例を続けると、プリプロセッサは、次に、HintTableから関数ユニット2および3の元および新バージョンを読み出す。プリプロセッサは、共通関数ユニット2の元バージョンV1および新バージョンV2のサイズが等しいか否か判定を行う。この判定を行うには、以下のように、元V1および新V2バージョンの開始アドレスと終了アドレスとの間の差を取る。
Figure 2010176699
HintTableからの実際の値を代入すると、次の結果が得られる。
Figure 2010176699
これは、元バージョンV1および新バージョンV2のサイズが等しいことを示す。
次に、プリプロセッサは、共通関数ユニット2の元バージョンV1の終了アドレスが、以下のように、共通関数ユニット3の元バージョンV1の開始アドレスと同一か否か判定を行う。
Figure 2010176699
HintTableからの実際の値を代入すると、共通関数ユニット2の元バージョンV1の終了アドレスは、以下のように、共通関数ユニット3の元バージョンV1の開始アドレスとは異なるという判定が得られる。
Figure 2010176699
共通関数ユニット2の元バージョンV1の終了アドレスが、共通関数ユニット3の元バージョンV1の開始アドレスと同一ではないので、動作は戻り、共通関数ユニット2および3を併合して共通関数ブロックを形成することは行わない。
共通関数ユニットを併合した後、前述の例のHintTableの使用可能なエントリは、出力に対して次のようになる。
Figure 2010176699
一実施形態のプリプロセッサは、共通関数ユニットに関して先に説明したのと同様にして、共通データ・ユニットのヒント併合を実行する。図4および図12を参照すると、共通データ・ユニットのヒント併合406の動作は、ブロック1202において、プリプロセッサがHintTableのn個のエントリ全てに印を付け、カウンタをj=1に設定し、関連するHintTableからデータ・ユニットjおよび(j+1)の元および新バージョンを読み出すことから開始する。ユニットjおよびユニット(j+1)の値は、ヒント・テーブルのインデックス値に対応し、ここで、j=1,2,...(n−1)であるが、そのように限定されるのではない。
ブロック1204において、プリプロセッサは、共通データ・ユニットjの元バージョンV1および新バージョンV2のサイズが等しいか否か判定を行う。この判定を行うには、以下のように、元V1および新V2バージョンの開始および終了アドレス間の差を取る。
Figure 2010176699
しかし、そのように限定されるのではない。元V1および新V2バージョンが異なるサイズのファイルを有する場合、動作は、ブロック1212に進み、jの値が量(n−1)未満か否か判定を行う。
元バージョンV1および新バージョンV2のサイズが等しい場合、プリプロセッサは、ブロック1206において、以下のように、共通データ・ユニットjの元バージョンV1の終了アドレスが、共通データ・ユニット(j+1)の元バージョンV1の開始アドレスと同一か否か判定を行う。
Figure 2010176699
しかし、そのように限定されるのではない。共通データ・ユニットjの元バージョンV1の終了アドレスが共通データ・ユニット(j+1)の元バージョンV1の開始アドレスと異なる場合、動作は、ブロック1212に進み、jの値が量(n−1)未満か否か判定を行う。
共通データ・ユニットjの元バージョンV1の終了アドレスが共通データ・ユニット(j+1)の元バージョンV1の開始アドレスと同一である場合、プリプロセッサは、ブロック1208において、共通データ・ユニットjの新バージョンV2の終了アドレスが、以下のように、共通データ・ユニット(j+1)の新バージョンの開始アドレスと同一か否か判定を行う。
Figure 2010176699
しかし、そのように限定されるのではない。共通データ・ユニットjの新バージョンV2の終了アドレスが共通データ・ユニット(j+1)の新バージョンの開始アドレスとは異なる場合、動作はブロック1212に進み、jの値が量(n−1)未満か否か判定を行う。
共通データ・ユニットjの新バージョンV2の終了アドレスが共通データ・ユニット(j+1)の新バージョンV2の開始アドレスと同一である場合、プリプロセッサは、ブロック1210において、共通データ・ユニットjおよび共通データ・ユニット(j+1)の情報を併合して共通データ・ブロックを形成し、ユニット(j+1)のエントリを置換し、次いで、ユニットjのエントリに使用不可と印する。次いで、動作は、ブロック1212に進み、jの値が量(n−1)未満か否か判定を行う。
プリプロセッサは、ブロック1212において、jの値が量(n−1)未満か否か判定を行う。jの値が量(n−1)と等しく、全ての関数ユニットを前処理し終えたことを示す場合、動作は、ブロック1216に進み、HintTable内にある使用可能なエントリを共通データ・ブロックとして出力し、動作は戻る。jの値が量(n−1)未満であり、前処理が済んでいない関数ユニットが残っていることを示す場合、ブロック1214においてjの値を増分し、動作はブロック1202に進み、jの新しい値に対応する共通データ・ユニットの情報を読み出す。次いで、前述のように前処理が継続する。
電子ファイルの異なるバージョンを前処理するために説明したシステムおよび方法は、いずれの数の命令アーキテクチャを用いたいずれの数の処理および/またはプロセッサに基づくシステムのソフトウェアおよび実行可能ファイルにも適用することができる。例えば、この中におけるシステムおよび方法は、"ARM Architecture Reference Manual" 2nd Edition, by D.Jagger and D. Seal(D.ジェイガーおよびD.シールによる「ARMアーキテクチャ参考書」第2版)に記載されているように、ARM(R)アーキテクチャにおいても用いることができる。ARM(R)アーキテクチャは、16/32ビット埋め込み減少命令セット・コンピュータ(RISC)コアに基づき、Thumb16−ビット命令セットを組み込んだマイクロプロセッサ・アーキテクチャである。ARM(R)アーキテクチャにおいて用いる場合、例えば、先に引用した計算可能命令は、ARM/Thumb命令セットの"branch with link (BL)"および"branch with link and change mode to ARM/Thumb(BLX)"命令を含む。更に、先に引用したデータ・ポインタは、ARM/Thumb命令セットのDCD命令を含む。
前述の前処理を用いるデバイスおよび/またはシステムの一例として、デルタ・ファイルを受信し用いる計算デバイスは、対応のソフトウェア・アプリケーションを記憶しておりその更新を必要とするクライアント・デバイス、例えば、セルラ電話機、移動電子デバイス、移動通信デバイス、パーソナル・ディジタル・アシスタント、およびその他のプロセッサに基づくデバイスとすることができる。この支援は、通信業者およびデバイス製造業者に効率的に電子ファイル・コンテンツおよびアプリケーションを彼らのワイヤレス・インフラストラクチャを通じて配布できるようにすることによって、ファームウェアから埋め込みアプリケーションまでの範囲に入るあらゆる移動デバイス・ソフトウェアに提供する。
前述の前処理の効果が得られるシステムの別の例は、有線シリアル接続を用いてデルタ・ファイルを、ファイル差異発生部を実装したデバイスからそして更新発生部を実装したデバイスに転送するシステムを含む。これらのシステムは、通例、転送レートが遅く、転送レートが遅いために、デルタ・ファイルのサイズ縮小は、転送時間短縮を実現する1つの方法となる。
前処理の使用による効果が得られるシステムの更に別の例は、無線通信を用いてデルタ・ファイルを、ファイル差異発生部を実装したデバイスから、ファイル更新発生部を実装したデバイスに転送するワイヤレス・システムを含む。ワイヤレス接続に伴う低信頼性が問題になりつつも、これらのシステムも転送レートが遅い。より小さなデルタ・ファイルをこれらのシステムにおいて用いることにより、様々な利点が得られる。例えば、ファイル・サイズが小さい程、デルタ・ファイルの転送時間は短くなる。転送時間が短い程、デバイス・ユーザの時間を節約しつつ、デルタ・ファイルに誤りが混入する機会を減らし、これによってシステムの信頼性が向上する。また、セルラ通信では、転送時間の短縮により、通例サービス料金を分単位で支払う顧客にとって、コストの節約となる。
別の利点として、デルタ・ファイルが小さい程、デルタ・ファイルをクライアント・デバイスに転送するために必要な帯域幅が狭くて済む。帯域幅の縮小により、割り当てられたチャネルを通じてより多くのクライアント・デバイスに対応することが可能となる。転送時間の短縮と同様、これもワイヤレス・サービス・プロバイダにとって運営コストの削減につながる。
前述のファイルの元および新バージョンを、元および新ファイル間の差異ファイル発生の一部として前処理するシステムは、差異ファイルを発生する第1デバイスと、差異ファイルを受信し、この差異ファイルを用いて内部で新ファイルの一バージョンを発生する第2デバイスとを含む。第1デバイスは、差異ファイルのサイズを縮小する少なくとも1つのコンポーネントを含み、縮小する際に、コード・ライン削除、コード・ライン追加、およびコード・ライン修正の少なくとも1つから生じるアドレスのずれに対応する元および新バージョン間の差異を特定し、元バージョンのテキスト・セクションと新バージョンの対応するテキスト・セクションとのアドレス間の少なくとも1つの関係を用いて、元バージョンの命令の目標アドレスを修正することによって、元および新バージョンに共通のテキスト・セクションにおいて特定した差異を除去し、修正した目標アドレスを有する命令を含む元ファイルの修正バージョンを発生する。
一実施形態では、元および新バージョンに共通なテキスト・セクションにおいて特定した差異を除去する際、元および新バージョン間で共通の第1および第2テキスト・セクションを特定し、元バージョンにおける第1テキスト・セクションは、第1計算可能命令を含み、新バージョンにおける第2テキスト・セクションは、第2計算可能命令を含み、元および新バージョン間で共通の第3および第4テキスト・セクションを特定し、元バージョンにおける第3テキスト・セクションは、第1計算可能命令に対応する第1目標アドレスを含み、新バージョンにおける第4テキスト・セクションは、第2計算可能命令に対応する第2目標アドレスを含み、第3および第4関数ユニットの開始アドレス間の第1の差異を用い、更に第1および第2関数ユニットの開始アドレス間の第2の差異を用いて第1命令値を修正することにより、第2計算可能命令から第2命令値を発生し、第1計算可能命令の第1命令値を第2命令値と置換する。
一実施形態の差異ファイル発生の一部としてのファイルの前処理は、更に、元バージョンにおけるデータ・ポインタ値を修正することにより、元および新バージョンに共通なデータ・セクションを指し示すデータ・ポインタを含む命令において特定した差異を除去することを含み、データ・ポインタ値を修正する際に、現データ・ポインタが指し示す元バージョンにおけるデータ・セクションの開始アドレスと、新バージョンにおける対応するデータ・セクションの開始アドレスとの間の差異を用いる。データ・ポインタを含む命令において特定した差異を除去するには、更に、元および新バージョン間で共通である第1および第2コード・セグメントを特定し、ここで元バージョンにおける第1コード・セグメントは第1データ・ポインタを含み、新バージョンにおける第2コード・セグメントは第2データ・ポインタを含み、元および新バージョン間で共通である第1および第2データ・ユニットを特定し、ここで元バージョンにおける第1データ・ユニットは、第1データ・ポインタに対応する第1目標アドレスを含み、新バージョンにおける第2データ・ユニットは、第2データ・ポインタに対応する第2目標アドレスを含み、第1および第2データ・ユニットの開始アドレス間の差異を用いて第1データ・ポインタ値を修正することにより、第2データ・ポインタから第2データ・ポインタ値を発生し、第1データ・ポインタの第1データ・ポインタ値を第2データ・ポインタ値と置換することを含む。
一実施形態のシステムにおける第1デバイスは、少なくとも1つの結合部を用いて差異ファイルを第2デバイスに転送し、少なくとも1つの結合部は、ワイヤレス結合部、有線結合部、および混成ワイヤレス/有線結合部のうち少なくとも1つである。
一実施形態のシステムにおける第2デバイスは、パーソナル・コンピュータ、携帯計算デバイス、セルラ電話機、携帯通信デバイス、およびパーソナル・ディジタル・アシスタントのような、少なくとも1つのプロセッサに基づくデバイスを含む。
元および新ファイル間の差異ファイル発生の一部としてファイルの元および新バージョンを前処理する前述のシステムは、差異ファイルを発生する際に用いる装置を含む。この装置は、電子ファイルの元バージョンおよび新バージョンを受信する手段と、元および新バージョンに共通なコードのユニットを特定する手段と、コード・ユニットに共通な命令を特定する手段であって、この命令は、対応するファイルの別の部分に対して処理を指令する命令値を含む、手段と、元バージョンの第1命令から第1命令値を発生する手段と、新バージョンの第2命令から第2命令値を発生する手段であって、第2命令が第1命令に対応する、手段と、第1命令の第1命令値を第2命令値と置換する手段と、第1命令を備える元ファイルの第2命令値による修正バージョンを発生する手段とを含む。
元および新ファイル間での差異ファイルの発生の一部としてファイルの元および新バージョンを前処理するための前述のシステムは、関連する方法を含む。これらの方法の中には、電子ファイルの元バージョンと新バージョンとの間のコード化差異を含む差異ファイルのサイズを縮小する方法がある。一実施形態のこの方法は、コード・ライン削除、コード・ライン追加、およびコード・ライン修正のうち少なくとも1つによって生じたアドレスのずれに対応する元および新バージョン間の差異を特定するステップと、元バージョンのテキスト・セクションと新バージョンの対応するテキスト・セクションのアドレス間の少なくとも1つの関係を用いて、元バージョンの命令の目標アドレスを修正することによって、元および新バージョンに共通なテキスト・セクションにおいて特定した差異を除去するステップと、修正した目標アドレスを有する命令を含む元ファイルの修正バージョンを発生するステップとを含む。
共通テキスト・セクションにおいて特定した差異を除去する方法は、更に、元および新バージョン間で共通の第1および第2テキスト・セクションを特定するステップであって、元バージョンにおける第1テキスト・セクションは第1計算可能命令を含み、新バージョンにおける第2テキスト・セクションは第2計算可能命令を含む、ステップと、元および新バージョン間で共通の第3および第4テキスト・セクションを特定するステップであって、元バージョンにおける第3テキスト・セクションは、第1計算可能命令に対応する第1目標アドレスを含み、新バージョンにおける第4テキスト・セクションは、第2計算可能命令に対応する第2目標アドレスを含む、ステップと、第3および第4関数ユニットの開始アドレス間の第の1差異を用い、更に第1および第2関数ユニットの開始アドレス間の第2の差異を用いて第1命令値を修正することにより、第2計算可能命令から第2命令値を発生するステップと、第1計算可能命令の第1命令値を第2命令値と置換するステップとを含む。
一実施形態の前述の方法は、更に、元バージョンにおけるデータ・ポインタを修正することにより、元および新バージョンに共通のデータ・セクションを指し示すデータ・ポインタを含む命令において特定した差異を除去するステップを含み、データ・ポインタ値を修正するには、元バージョンにおいて現データ・ポインタが指し示すデータ・セクションの開始アドレスと、新バージョンにおける対応するデータ・セクションの開始アドレスとの間の差異を用いる。
データ・ポインタを含む命令において特定した差異を除去するステップは、元および新バージョン間で共通の第1および第2コード・セグメントを特定するステップであって、元バージョンにおける第1コード・セグメントは第2データ・ポインタを含み、新バージョンにおける第2コード・セグメントは第2データ・ポインタを含む、ステップと、元および新バージョン間で共通な第1および第2データ・ユニットを特定するステップであって、元バージョンにおける第1データ・ユニットは、第1データ・ポイントに対応する第1目標アドレスを含み、新バージョンにおける第2データ・ユニットは、第2データ・ポインタに対応する第2目標アドレスを含む、ステップと、第2データ・ポインタから第2データ・ポインタ値を発生するステップと、第1データ・ポインタの第1データ・ポインタ値を第2データ・ポインタ値と置換するステップとを備えている。一実施形態の第2データ・ポインタ値の発生は、第1および第2データ・ユニットの開始アドレス間の差異を用いて、第1データ・ポインタ値を修正することを含む。
更に、一実施形態の前述の方法は、修正したデータ・ポインタを有する命令を含む元ファイルの修正バージョンを発生するステップを含む。
また、一実施形態の前述の方法は、更に、共通データ・ブロックを形成するために共通データ・ユニットを併合するステップを含む。一実施形態の併合は、元バージョンの第1データ・ユニットのサイズが新バージョンの第1データ・ユニットと等しく、元バージョンの第1データ・ユニットの終了アドレスが元バージョンの第2データ・ユニットの開始アドレスと等しく、更に新バージョンの第1データ・ユニットの終了アドレスが新バージョンの第2データ・ユニットの開始アドレスに等しい場合、共通データ・ブロックを形成するために、元バージョンの第1および第2データ・ユニットを結合し、新バージョンの対応する第1および第2データ・ユニットを結合するステップと、別の併合可能なデータ・ユニットについて結合動作を繰り返すステップとを備えている。更に、併合は、共通関数ブロックを形成するために共通テキスト・セクションを併合するステップを備えている。また、併合は、元バージョンの第1テキスト・セクションのサイズが新バージョンの第1テキスト・セクションに等しく、元バージョンの第1テキスト・セクションの終了アドレスが元バージョンの第2テキスト・セクションの開始アドレスに等しく、更に新バージョンの第1テキスト・セクションの終了アドレスが新バージョンの第2テキスト・セクションの開始アドレスに等しい場合、共通関数ブロックを形成するために、元バージョンの第1および第2テキスト・セクションを結合し、新バージョンの対応する第1および第2テキスト・セクションを結合するステップと、別の併合可能テキスト・セクションについて結合動作を繰り返すステップとを備えている。
元ファイルおよび新ファイル間の差異ファイルの発生の一部として、ファイルの元および新バージョンを前処理する前述のシステムは、関連する方法を含む。これらの方法の中には、ファイル差別化を実行する方法がある。この方法は、電子ファイルの元バージョンおよび新バージョンを受信するステップと、元および新バージョンに共通するコードのユニットを特定するステップと、コードのユニットに共通する命令を特定するステップであって、命令が、対応するファイルの別の部分に関係する命令値を含む、ステップと、元バージョンの第1命令から第1命令値をデコードするステップと、新バージョンの第2命令から第2命令値を発生するステップであって、第2命令が第1命令に対応するステップと、第1命令の第1命令値を第2命令値と置換するステップと、第2命令値をもつ第2命令を備える元ファイルの修正バージョンを発生するステップとを備えている。
更に、一実施形態の前述の方法は、関連するマップ・ファイルからコードの共通ユニットを抽出するステップを備えており、このコードの共通ユニットは、共通関数ユニットおよび共通データ・ユニットを含む。
一実施形態の前述の方法は、更に、共通関数ブロックを形成するために、コードのユニットの共通関数ユニットを併合するステップを含む。一実施形態の併合するステップは、元バージョンの第1関数ユニットのサイズが、新バージョンの第1関数ユニットに等しく、元バージョンの第1関数ユニットの終了アドレスが元バージョンの第2関数ユニットの開始アドレスに等しく、新バージョンの第1関数ユニットの終了アドレスが新バージョンの第2関数の開始アドレスに等しい場合、共通関数ブロックを形成するために、元バージョンの第1および第2関数ユニットを結合し、新バージョンの対応する第1および第2関数ユニットを結合するステップと、別の併合可能な関数ユニットについて、結合動作を繰り返すステップとを含む。一実施形態の前述の方法は、更に、共通関数ブロックをエンコードするステップも含む。
更に、一実施形態の前述の方法は、共通データ・ブロックを形成するためにユニットの共通データ・ユニットを併合するステップも含む。一実施形態の併合するステップは、元バージョンの第1データ・ユニットのサイズが新バージョンの第1ユニットに等しく、元バージョンの第1データ・ユニットの終了アドレスが元バージョンの第2データ・ユニットの開始アドレスに等しく、新バージョンの第1データ・ユニットの終了アドレスが新バージョンの第2データ・ユニットの開始アドレスに等しい場合、共通データ・ブロックを形成するために、元バージョンの第1および第2データ・ユニットを結合し、新バージョンの対応する第1および第2データ・ユニットを結合するステップと、別の併合可能データ・ユニットについて結合動作を繰り返すステップとを含む。この方法は、更に、共通データ・ブロックをエンコードするステップも含む。
一実施形態の方法の下では、元および新バージョンに共通するコードのユニットは共通関数ユニットであり、第1命令は第1計算可能命令を含み、第2命令は第2計算可能命令を含み、第2命令値を発生するステップは、目標アドレスを含む元および新バージョンの共通関数ユニットの開始アドレス間の第1の差異を用い、更に第1および第2計算可能命令を含む共通関数ユニットの開始アドレス間の第2の差異を用いて、第1関数値を修正するステップを含む。
一実施形態の方法のコードのユニットは、関数ユニットを含む。これらの方法の下では、第1命令値を発生するステップは、第1計算可能命令の現命令アドレスと、第1計算可能命令の目標アドレスとの間の差異を発生するステップを含む。第2命令値を発生するステップは、第1計算可能命令の現命令アドレスと第1計算可能命令の目標アドレスとの間の差異を発生するステップと、新バージョンの第1共通関数ユニットの開始アドレスと、元バージョンの対応する第1共通関数ユニットの開始アドレスとの差異を発生するステップと、新バージョンの第2共通関数ユニットの開始アドレスと、元バージョンの対応する第2共通関数ユニットの開始アドレスとの間の差異を発生するステップとを含む。
一実施形態の方法の中には、コードのユニットは、データ・ユニットを含み、命令は、データ・ポインタを含むものがある。
一実施形態の方法の下では、元および新バージョンに共通のコードのユニットは、共通データ・ユニットであり、第1命令は第1データ・ポイントを含み、第2命令は第2データ・ポインタを含み、第1命令値は第1データ・ポイント値を含み、第2命令値は第2データ・ポインタ値を含み、第2命令値を発生するステップは、第1および第2データ・ユニットの開始アドレス間の差異を用いて第1データ・ポインタ値を修正することによって、第2データ・ポインタ値を発生するステップを含む。
一実施形態の前述の方法は、更に、元ファイルおよび新ファイルの修正バージョン間でファイル差別化を行うステップと、差異ファイルを発生するステップとを含む。また、これらの方法は、差異ファイルを携帯処理システムに転送するステップと、携帯処理システムにおいて差異ファイルを用いて新ファイルの一バージョンを発生するステップも備えている。また、一実施形態の前述の方法は、更に、共通関数ブロックを形成するためにコードのユニットの共通関数ユニットを併合するステップと、共通関数ブロックを形成するためにコードのユニットの共通データ・ユニットを併合するステップと、共通データ・ブロックを形成するためにコードのユニットの共通データ・ユニットを併合するステップと、携帯処理システムにおいて新ファイルのバージョンを発生する際に用いるために、共通関数ブロックおよび共通データ・ブロックをエンコードするステップを備えている。
元および新ファイル間における差異ファイル発生の一部としてファイルの元および新バージョンを前処理する前述のシステムは、更に別の関連する方法を含む。これらの方法の中には、電子ファイル間の差異を判定する方法があり、電子ファイルの元バージョンおよび新バージョンを受信するステップと、元および新バージョン間で共通の第1および第2関数ユニットを特定するステップであって、元バージョンにおける第1関数ユニットは第1計算可能命令を含み、新バージョンにおける第2関数ユニットは第2計算可能命令を含む、ステップと、元および新バージョン間で共通の第3および第4関数ユニットを特定するステップであって、元バージョンにおける第3関数ユニットは、第1計算可能命令に対応する第1目標アドレスを含み、新バージョンにおける第4関数ユニットは、第2計算可能命令に対応する第2目標アドレスを含む、ステップと、第2計算可能命令から第2命令値を発生するステップと、第1計算可能命令の第1命令値を第2命令値と置換するステップと、第2命令値をもつ第1命令を備える元ファイルの修正バージョンを発生するステップとを備えている。
前述の方法の下において第2命令値を発生するステップは、第3および第4関数ユニットの開始アドレス間の第1の差異を用い、更に第1および第2関数ユニットの開始アドレス間の第2の差異を用いて、第1命令値を修正するステップを含む。
更に、一実施形態の前述の方法は、元および新バージョン間で共通の第1および第2コード・セグメントを特定するステップであって、元バージョンにおける第1コード・セグメントは第1データ・ポインタを含み、新バージョンにおける第2コード・セグメントは第2データ・ポインタを含む、ステップと、元および新バージョン間で共通の第1および第2データ・ユニットを特定するステップであって、元バージョンにおける第1データ・ユニットは、第1データ・ポインタに対応する第1目標アドレスを含み、新バージョンにおける第2データ・ユニットは、第2データ・ポインタに対応する第2目標アドレスを含む、ステップと、第2データ・ポインタから第2データ・ポインタ値を発生するステップと、第1データ・ポインタの第1データ・ポインタ値を第2データ・ポインタ値と置換するステップと、第2データ・ポインタ値をもつ第1データ・ポインタを備える元ファイルの修正バージョンを発生するステップとを備えている。一実施形態の下において第2データ・ポインタを発生するステップは、現データ・ポインタが指し示す元バージョンにおけるデータ・セクションの開始アドレスと、新バージョンにおける対応するデータ・セクションの開始アドレスとの間の差異を発生するステップを含む。
更に、一実施形態の前述の方法は、共通関数ブロックを形成するために共通関数ユニットを併合するステップを含む。
更に、一実施形態の前述の方法は、共通データ・ブロックを形成するために共通データ・ユニットを併合するステップを含む。
一実施形態の前述の方法は、更に、元ファイルおよび新ファイルの修正バージョンを用いて、差異ファイルを発生するステップを含む。これらの方法は、更に、差異ファイルを携帯処理システムに転送するステップと、差異ファイルを用いて、携帯処理システムにおいて新ファイルの一バージョンを発生するステップとを含む。
元および新ファイル間における差異ファイル発生の一部としてファイルの元および新バージョンを前処理するための前述のシステムは、コンピュータ読み取り可能媒体を含む。一実施形態のコンピュータ読み取り可能媒体は、処理システムにおいて実行すると、コード・ライン削除、コード・ライン追加、およびコード・ライン修正の少なくとも1つによって生じたアドレスのずれに対応する元および新バージョン間の差異を特定し、元バージョンのテキスト・セクションのアドレスと新バージョンの対応するテキスト・セクションのアドレスの間の少なくとも1つの関係を用いて、元バージョンの命令の目標アドレスを修正することにより、元および新バージョンに共通のテキスト・セクションにおいて特定した差異を除去し、修正した目標アドレスを有する命令を含む元ファイルの修正バージョンを発生することによって、電子ファイルの元バージョンおよび新バージョンの間でコード化した差異を含む差異ファイルのサイズを縮小する実行可能命令を含む。
本発明の形態は、フィールド・プログラマブル・ゲート・アレイ(FPGA)、プログラマブル・アレイ・ロジック(PAL)デバイス、電気的プログラム可能ロジックおよびメモリ・デバイスのようなプログラマブル・ロジック・デバイス(PDL)、標準的なセルに基づくデバイス、ならびに特定用途集積回路(ASIC)を含む種々の回路のいずれにもプログラムされる機能として実現することができる。更に、本発明の形態は、ソフトウェアに基づく回路エミュレーション、ディスクリート・ロジック(連続および組み合わせ)、カスタム・デバイス、ファジイ(ニューラル)デバイス、量子デバイス、および上述のデバイスの種類のいずれのハイブリッドを有するマイクロプロセッサにおいても具体化することができる。勿論、基盤となるデバイス技術は、種々のコンポーネントの種類、例えば、相補金属酸化物半導体(CMOS)のような金属酸化物半導体電界効果トランジスタ(MOSFET)技術、エミッタ結合ロジック(ECL)のようなバイポーラ技術、ポリマ技術(例えば、シリコン共役ポリマおよび金属共役ポリマ−金属構造)、混合アナログおよびディジタルなどにおいて提供することができる。
文脈上特に必要であることが明らかでない限り、明細書および特許請求の範囲を通じて、「備える」、「備えている」等の言葉は、排他的または網羅的意味ではなく、包含的意味で解釈するものとする。即ち、「含むが、限定されない」という意味である。単数または複数を用いる単語も、それぞれ、複数および単数を含むものとする。加えて、「ここでは」、「以下で」、「先に」、「以下で」という単語、および同様な意義の単語は、本願において用いられる場合、本願全体を指すのであり、本願のいずれの特定部分を指すのではないとする。「または」という単語が2つ以上の項目のリストに関して用いられている場合、その単語は、当該単語の以下の解釈全て、即ち、リストにおける項目のいずれか、リストにおける項目の全て、およびリストにおける項目のあらゆる組み合わせを包含するものとする。
本発明の例示した実施例についてのこれまでの説明は、それで全てであることも、開示した正確な形態に本発明を限定することも意図していない。本発明の具体的な実施形態および例を例示の目的のためにここで記載したが、種々の等価な変更も本発明の範囲内で可能であることは、当業者は認めよう。ここに提示した本発明の教示は、他の処理システムや通信システムにも適用することができ、前述のファイル差別化システムのみに適用できるのではない。
前述した種々の実施形態のエレメントおよび作用を組み合わせれば、更に別の実施形態も得ることができる。これらおよびその他の変更は、前述の詳細な説明に鑑みれば、容易に行うことができる。
先の引例ならびに米国特許および特許出願は全て、ここで引用したことにより、本願にも含まれるものとする。必要であれば、本発明の形態を変更して前述の種々の特許および出願のシステム、機能および概念を採用すれば、本発明の更に別の実施形態を得ることができる。
一般に、特許請求の範囲においては、用いられる用語は、明細書に開示される具体的な実施形態および特許請求の範囲に本発明を限定するように解釈するのではなく、特許請求の範囲の下で動作してファイル差別化および更新方法を実施するあらゆる処理システムを含むように解釈するのが当然である。したがって、本発明は、本開示に限定されるのではなく、むしろ発明の範囲は特許請求の範囲によって全体的に決定されるものとする。
本発明のある種の形態をある請求項の形式で提示するが、本願の発明者は、本発明の種々の形態をいかなる数の請求項形式でも想定している。例えば、本発明の一形態のみを、コンピュータ読み取り可能媒体に具体化するものとして明記するが、他の形態も同様にコンピュータ読み取り可能媒体に具体化することができる。したがって、本発明は、本願を出願した後でも、更に別の請求項を追加し、本発明の別の形態に対する、このような更に別の請求項を追求する権利を保有するものとする。

Claims (43)

  1. 電子ファイルを更新するためのシステムであって、
    電子ファイルの元バージョンと新バージョンとの間のコード化した差異を含む差異ファイルを発生する第1デバイスであって、
    コード・ラインの削除、コード・ラインの追加、およびコード・ラインの修正のうちの少なくとも1つによって生じたアドレスのずれに対応する前記元および新バージョン間の差異を特定し、
    前記元バージョンのテキスト・セクションおよび前記新バージョンの対応するテキスト・セクションのアドレス間の少なくとも1つの関係を用いて、元バージョンの命令の目標アドレスを修正することによって、前記元および新バージョンに共通のテキスト・セクションにおいて前記特定した差異を除去し、
    修正した目標アドレスを有する命令を含む前記元ファイルの修正バージョンを発生する、
    ことによって前記差異ファイルのサイズを縮小する少なくとも1つのコンポーネントを含む、第1デバイスと、
    第2デバイスであって、前記差異ファイルを受信し、該差異ファイルを用いて、該第2デバイスにおいて新ファイルの一バージョンを発生する第2デバイスと、
    を備えている、システム。
  2. 請求項1記載のシステムにおいて、除去することは、更に、
    前記元および新バージョン間に共通の第1および第2テキスト・セクションを特定し、前記元バージョンにおける第1テキスト・セクションは第1計算可能命令を含み、前記新バージョンにおける第2テキスト・セクションは第2計算可能命令を含み、
    前記元および新バージョン間に共通の第3および第4テキスト・セクションを特定し、前記元バージョンにおける第3テキスト・セクションは、前記第1計算可能命令に対応する第1目標アドレスを含み、前記新バージョンにおける第4テキスト・セクションは、前記第2計算可能命令に対応する第2目標アドレスを含み、
    前記第3および第4の関数ユニットの開始アドレス間の第1の差異を用い、更に前記第1および第2の関数ユニットの開始アドレス間の第2の差異を用いて、前記第1命令値を修正することによって、前記第2計算可能命令から第2命令値を発生し、
    前記第1計算可能命令の第1命令値を、前記第2命令値と置換する、
    ことを含む、システム。
  3. 請求項1記載のシステムであって、更に、前記元バージョンにおけるデータ・ポインタ値を修正することによって、前記元および新バージョンに共通のデータ・セクションを指し示すデータ・ポインタを含む命令において前記特定した差異を除去することを含み、データ・ポインタ値を修正することは、現データ・ポインタが指し示す前記元バージョンにおけるデータ・セクションの開始アドレスと、前記新バージョンにおける対応するデータ・セクションの開始アドレスとの間の差異を用いる、システム。
  4. 請求項3記載のシステムにおいて、データ・ポインタを含む命令において特定した差異を除去することは、更に、
    前記元および新バージョン間に共通の第1および第2のコード・セグメントを特定し、前記元バージョンにおける第1コード・セグメントは第1データ・ポインタを含み、前記新バージョンにおける第2コード・セグメントは第2データ・ポインタを含み、
    前記元および新バージョン間で共通な第1および第2のデータ・ユニットを特定し、前記元バージョンにおける第1データ・ユニットは、前記第1データ・ポインタに対応する第1目標アドレスを含み、前記新バージョンにおける第2データ・ユニットは、前記第2データ・ポインタに対応する第2目標アドレスを含み、
    前記第1および第2データ・ユニットの開始アドレス間の差異を用いて、第1データ・ポインタ値を修正することによって、前記第2データ・ポインタから第2データ・ポインタ値を発生し、
    前記第1データ・ポインタの第1データ・ポインタ値を前記第2データ・ポインタ値と置換する、
    ことを含む、システム。
  5. 請求項1記載のシステムにおいて、前記第2デバイスは、パーソナル・コンピュータ、携帯計算デバイス、セルラ電話機、携帯通信デバイス、およびパーソナル・ディジタル・アシスタントの中から選択した、少なくとも1つのプロセッサに基づくデバイスである、システム。
  6. 請求項1記載のシステムにおいて、前記第1デバイスは、少なくとも1つの結合部を用いて、前記差異ファイルを前記第2デバイスに転送し、前記少なくとも1つの結合部は、ワイヤレス結合部、有線結合部、混成ワイヤレス/有線結合部のうち少なくとも1つである、システム。
  7. 差異ファイルの発生において用いる装置であって、
    電子ファイルの元バージョンおよび新バージョンを受信する手段と、
    前記元および新バージョンに共通のコードのユニットを特定する手段と、
    前記コードのユニットに共通の命令を特定する手段であって、前記命令が、前記対応するファイルの別の部分に対する処理を指令する命令値を含む、手段と、
    前記元バージョンの第1命令から第1命令値を発生する手段と、
    前記新バージョンの第2命令から第2命令値を発生する手段であって、前記第2命令が前記第1命令に対応する、手段と、
    前記第1命令の第1命令値を前記第2命令値と置換する手段と、
    前記第2命令値をもつ前記第1命令を含む前記元ファイルの修正バージョンを発生する手段と、
    を備えている、装置。
  8. 電子ファイルの元バージョンと新バージョンとの間のコード化した差異を含む差異ファイルのサイズを縮小する方法であって、
    コード・ライン削除、コード・ライン追加、およびコード・ライン修正のうち少なくとも1つから生じたアドレスのずれに対応する前記元および新バージョン間の差異を特定するステップと、
    前記元バージョンのテキスト・セクションと前記新バージョンの対応するテキスト・セクションのアドレス間の少なくとも1つの関係を用いて、前記元バージョンの命令の目標アドレスを修正することによって、前記元および新バージョンに共通なテキスト・セクションにおいて前記特定した差異を除去するステップと、
    修正した目標アドレスを有する命令を含む前記元ファイルの修正バージョンを発生するステップと、
    を備えている、方法。
  9. 請求項8記載の方法において、除去するステップは、更に、
    前記元および新バージョン間で共通の第1および第2テキスト・セクションを特定するステップであって、前記元バージョンにおける第1テキスト・セクションは第1計算可能命令を含み、前記新バージョンにおける第2テキスト・セクションは第2計算可能命令を含む、ステップと、
    前記元および新バージョン間で共通の第3および第4テキスト・セクションを特定するステップであって、前記元バージョンにおける第3テキスト・セクションは前記第1計算可能命令に対応する第1目標アドレスを含み、前記新バージョンにおける第4テキスト・セクションは前記第2計算可能命令に対応する第2目標アドレスを含む、ステップと、
    前記第3および第4関数ユニットの開始アドレス間の第1の差異、ならびに前記第1および第2関数ユニットの開始アドレス間における第2の差異を用いて前記第1命令値を修正することによって、前記第2計算可能命令から第2命令値を発生するステップと、
    前記第1計算可能命令の第1命令値を前記第2命令値と置換するステップと、
    を備えている、方法。
  10. 請求項8記載の方法であって、更に、前記元バージョンにおけるデータ・ポインタを修正することによって、前記元および新バージョンに共通なデータ・セクションを指し示すデータ・ポインタを含む命令において特定した差異を除去するステップを備えており、データ・ポインタ値の修正には、現データ・ポインタが指し示す前記元バージョンにおけるデータ・セクションの開始アドレスと、前記新バージョンにおける対応するデータ・セクションの開始アドレスとの間の差異を用いる、方法。
  11. 請求項10記載の方法において、データ・ポインタを含む命令において特定した差異を除去するステップは、更に、
    前記元および新バージョン間に共通の第1および第2コード・セグメントを特定するステップであって、前記元バージョンにおける第1コード・セグメントは第1データ・ポインタを含み、前記新バージョンにおける第2コード・セグメントは第2データ・ポインタを含む、ステップと、
    前記元および新バージョン間で共通の第1および第2データ・ユニットを特定するステップであって、前記元バージョンにおける第1データ・ユニットは、前記第1データ・ポインタに対応する第1目標アドレスを含み、前記新バージョンにおける第2データ・ユニットは、前記第2データ・ポインタに対応する第2目標アドレスを含み、ステップと、
    前記第2データ・ポインタから第2データ・ポインタ値を発生するステップと、
    前記第1データ・ポインタの第1データ・ポインタ値を前記第2データ・ポインタ値と置換するステップと、
    を備えている、方法。
  12. 請求項11記載の方法において、前記第2データ・ポインタ値を発生するステップは、前記第1および第2データ・ユニットの開始アドレス間の差異を用いて、第1データ・ポインタ値を修正するステップを含む、方法。
  13. 請求項10記載の方法であって、更に、修正データ・ポインタを有する前記命令を含む前記元ファイルの修正バージョンを発生するステップを備えている、方法。
  14. 請求項10記載の方法であって、更に、共通データ・ブロックを形成するために共通データ・ユニットを併合するステップを含む、方法。
  15. 請求項14記載の方法において、併合するステップは、
    前記元バージョンの第1データ・ユニットが前記新バージョンの第1データ・ユニットに等しいサイズを有し、前記元バージョンの第1データ・ユニットの終了アドレスが前記元バージョンの第2データ・ユニットの開始アドレスに等しく、かつ前記新バージョンの第1データ・ユニットの終了アドレスが前記新バージョンの第2データ・ユニットの開始アドレスに等しい場合、共通データ・ブロックを形成するために、前記元バージョンの第1および第2データ・ユニットを結合し、前記新バージョンの対応する第1および第2データ・ユニットを結合するステップと、
    追加の併合可能データ・ユニットについて前記結合動作を繰り返すステップと、
    を備えている、方法。
  16. 請求項15記載の方法であって、更に、共通関数ブロックを形成するために、共通テキスト・セクションを併合するステップを含む、方法。
  17. 請求項16記載の方法において、併合するステップは、
    前記元バージョンの第1テキスト・セクションが前記新バージョンの第1テキスト・セクションに等しいサイズを有し、前記元バージョンの第1テキスト・セクションの終了アドレスが、前記元バージョンの第2テキスト・セクションの開始アドレスに等しく、かつ前記新バージョンの第1テキスト・セクションの終了アドレスが前記新バージョンの第2テキスト・セクションの開始アドレスに等しい場合、共通関数ブロックを形成するために、前記元バージョンの第1および第2テキスト・セクションを結合し、前記新バージョンの対応する第1および第2テキスト・セクションを結合するステップと、
    追加の併合可能データ・ユニットについて前記結合動作を繰り返すステップと、
    を備えている、方法。
  18. ファイルの差別化を実行するための方法であって、
    電子ファイルの元バージョンおよび新バージョンを受信するステップと、
    前記元および新バージョンに共通のコードのユニットを特定するステップと、
    前記コードのユニットに共通の命令を特定するステップであって、前記命令が前記対応するファイルの別の部分に関係する命令値を含む、ステップと、
    前記元バージョンの第1命令から第1命令値をデコードするステップと、
    前記新バージョンの第2命令から第2命令値を発生するステップであって、前記第2命令が前記第1命令に対応する、ステップと、
    前記第1命令の第1命令値を前記第2命令値と置換するステップと、
    前記第2命令値をもつ前記第1命令を含む元ファイルの修正バージョンを発生するステップと、
    を備えている、方法。
  19. 請求項18記載の方法であって、更に、関連するマップ・ファイルから共通するコードのユニットを抽出するステップを備えており、前記共通するコードのユニットは、共通関数ユニットおよび共通データ・ユニットを含む、方法。
  20. 請求項18記載の方法であって、更に、共通関数ブロックを形成するために、前記コードのユニットの共通関数ユニットを併合するステップを含む、方法。
  21. 請求項20記載の方法において、併合するステップは、
    前記元バージョンの第1関数ユニットが前記新バージョンの第1関数ユニットに等しいサイズを有し、前記元バージョンの第1関数ユニットの終了アドレスが前記元バージョンの第2関数ユニットの開始アドレスに等しく、かつ前記新バージョンの第1関数ユニットの終了アドレスが前記新バージョンの第2関数ユニットの開始アドレスに等しい場合、共通関数ブロックを形成するために、前記元バージョンの第1および第2関数ユニットを結合し、前記新バージョンの対応する第1および第2関数ユニットを結合するステップと、
    追加の併合可能な関数ユニットについて前記結合動作を繰り返すステップと、
    を備えている、方法。
  22. 請求項20記載の方法であって、更に、前記共通関数ブロックをエンコードするステップを含む、方法。
  23. 請求項18記載の方法であって、更に、共通データ・ブロックを形成するために、前記コードのユニットの共通データ・ユニットを併合するステップを含む、方法。
  24. 請求項23記載の方法において、併合するステップは、
    前記元バージョンの第1データ・ユニットが前記新バージョンの第1データ・ユニットに等しいサイズを有し、前記元バージョンの第1データ・ユニットの終了アドレスが前記元バージョンの第2データ・ユニットの開始アドレスに等しく、かつ前記新バージョンの第1データ・ユニットの終了アドレスが、前記新バージョンの第2データ・ユニットの開始アドレスに等しい場合、共通データ・ブロックを形成するために、前記元バージョンの第1および第2データ・ユニットを結合し、前記新バージョンの対応する第1および第2データ・ユニットを結合するステップと、
    追加の併合可能なデータ・ユニットについて前記結合動作を繰り返すステップと、
    を備えている、方法。
  25. 請求項23記載の方法であって、更に、前記共通データ・ブロックを併合するステップを含む、方法。
  26. 請求項18記載の方法において、前記元および新バージョンに共通の前記コードのユニットは共通関数ユニットであり、前記第1命令は第1計算可能命令を含み、前記第2命令は第2計算可能命令を含み、前記第2命令値をの発生は、目標アドレスを含む前記元および新バージョンの共通関数ユニットの開始アドレス間の第1の差異を用い、更に第1および第2計算可能命令を含む前記共通関数ユニットの開始アドレス間の第2の差異を用いて、前記第1命令値を修正することを含む、方法。
  27. 請求項18記載の方法において、前記コードのユニットは、関数ユニットを含む、方法。
  28. 請求項27記載の方法において、前記第1命令値を発生するステップは、前記第1計算可能命令の現命令アドレスと、前記第1計算可能命令の目標アドレスとの間の差異を発生するステップを含む、方法。
  29. 請求項27記載の方法において、前記第2命令値を発生するステップは、
    前記第1計算可能命令の現命令アドレスと、前記第1計算可能命令の目標アドレスとの間の差異を発生するステップと、
    前記新バージョンの第1共通関数ユニットの開始アドレスと、前記元バージョンの対応する第1共通関数ユニットの開始アドレスとの間の差異を発生するステップと、
    前記新バージョンの第2共通関数ユニットの開始アドレスと、前記元バージョンの対応する第2共通関数ユニットの開始アドレスとの間の差異を発生するステップと、
    を含む、方法。
  30. 請求項18記載の方法において、前記コードのユニットは、データ・ユニットを含み、前記命令はデータ・ポインタを含む、方法。
  31. 請求項18記載の方法において、前記元および新バージョンに共通の前記コードのユニットは共通データ・ユニットであり、前記第1命令は第1データ・ポインタを含み、前記第2命令は第2データ・ポインタを含み、前記第1命令値は第1データ・ポインタ値を含み、前記第2命令値は第2データ・ポインタ値を含み、前記第2命令値の発生は、前記第1および第2データ・ユニットの開始アドレス間の差異を用いて前記第1データ・ポインタ値を修正することにより、第2データ・ポインタ値を発生することを含む、方法。
  32. 請求項18記載の方法であって、更に、前記元ファイルおよび前記新ファイルの修正バージョン間でファイルの差別化を行い、差異ファイルを発生するステップを含む、方法。
  33. 請求項32記載の方法であって、更に、
    前記差異ファイルを携帯処理システムに転送するステップと、
    前記携帯処理システムにおいて、前記差異ファイルを用いて前記新ファイルの一バージョンを発生するステップと、
    を備えている、方法。
  34. 請求項33記載の方法であって、更に、
    共通関数ブロックを形成するために、前記コードのユニットの共通関数ユニットを併合するステップと、
    共通データ・ブロックを形成するために、前記コードのユニットの共通データ・ユニットを併合するステップと、
    前記携帯処理システムにおいて前記新ファイルのバージョンの発生に用いるために、前記共通関数ブロックおよび前記共通データ・ブロックをエンコードするステップと、
    を備えている、方法。
  35. 電子ファイル間の差異を判定するための方法であって、
    電子ファイルの元バージョンおよび新バージョンを受信するステップと、
    前記元および新バージョン間で共通の第1および第2の関数ユニットを特定するステップであって、前記元バージョンにおける第1関数ユニットは第1計算可能命令を含み、前記新バージョンにおける第2関数ユニットは第2計算可能命令を含む、ステップと、
    前記元および新バージョン間で共通の第3および第4の関数ユニットを特定するステップであって、前記元バージョンにおける第3関数ユニットは前記第1計算可能命令に対応する第1目標アドレスを含み、前記新バージョンにおける第4関数ユニットは、前記第2計算可能命令に対応する第2目標アドレスを含む、ステップと、
    前記第2計算可能命令から、第2命令値を発生するステップと、
    前記第1計算可能命令の第1命令値を前記第2命令値と置換するステップと、
    前記第2命令値をもつ前記第1命令を含む前記元ファイルの修正バージョンを発生するステップと、
    を備えている、方法。
  36. 請求項35記載の方法において、前記第2命令値を発生するステップは、前記第3および第4関数ユニットの開始アドレス間の第1の差異を用い、更に前記第1および第2関数ユニットの開始アドレス間の第2の差異を用いて、前記第1命令値を修正するステップを含む、方法。
  37. 請求項35記載の方法であって、更に、
    前記元および新バージョン間で共通の第1および第2コード・セグメントを特定するステップであって、前記元バージョンにおける第1コード・セグメントは第1データ・ポインタを含み、前記新バージョンにおける第2コード・セグメントは第2データ・ポインタを含む、ステップと、
    前記元および新バージョン間で共通の第1および第2データ・ユニットを特定するステップであって、前記元バージョンにおける第1データ・ユニットは、前記第1データ・ポインタに対応する第1目標アドレスを含み、前記新バージョンにおける第2データ・ユニットは、前記第2データ・ポインタに対応する第2目標アドレスを含む、ステップと、
    前記第2データ・ポインタから第2データ・ポインタ値を発生するステップと、
    前記第1データ・ポインタの第1データ・ポインタ値を前記第2データ・ポインタ値と置換するステップと、
    前記第2データ・ポインタ値をもつ前記第1データ・ポインタを含む前記元ファイルの修正バージョンを発生するステップと、
    を備えている、方法。
  38. 請求項37記載の方法において、前記第2データ・ポインタ値を発生するステップは、現データ・ポインタが指し示す前記元バージョンにおけるデータ・セクションの開始アドレスと、前記新バージョンにおける対応するデータ・セクションの開始アドレスとの間の差異を発生するステップを備えている、方法。
  39. 請求項35記載の方法であって、更に、共通関数ブロックを形成するために共通関数ユニットを併合するステップを備えている、方法。
  40. 請求項35記載の方法であって、更に、共通データ・ブロックを形成するために共通データ・ユニットを併合するステップを備えている、方法。
  41. 請求項35記載の方法であって、更に、前記元ファイルおよび前記新ファイルの更新バージョンを用いて差異ファイルを発生するステップを備えている、方法。
  42. 請求項41記載の方法であって、更に、
    前記差異ファイルを携帯処理システムに転送するステップと、
    前記携帯処理システムにおいて、前記差異ファイルを用いて前記新ファイルの一バージョンを発生するステップと、
    を備えている、方法。
  43. 実行可能命令を含むコンピュータ読み取り可能媒体であって、処理システムにおいて実行すると、
    コード・ライン削除、コード・ライン追加、およびコード・ライン修正のうち少なくとも1つから生じたアドレスのずれに対応する前記元および新バージョン間の差異を特定し、
    前記元バージョンのテキスト・セクションと前記新バージョンの対応するテキスト・セクションのアドレス間の少なくとも1つの関係を用いて、前記元バージョンの命令の目標アドレスを修正することによって、前記元および新バージョンに共通なテキスト・セクションにおいて前記特定した差異を除去し、
    修正した目標アドレスを有する命令を含む前記元ファイルの修正バージョンを発生する、
    ことによって、電子ファイルの元バージョンと新バージョンとの間のコード化差異を含む差異ファイルのサイズを縮小する、コンピュータ読み取り媒体。
JP2010086127A 2003-06-20 2010-04-02 電子ファイルを更新するためのシステムおよび電子ファイルの差異ファイルのサイズを縮小する方法 Expired - Fee Related JP5261433B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/600,978 2003-06-20
US10/600,978 US7089270B2 (en) 2003-06-20 2003-06-20 Processing software images for use in generating difference files

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2006517128A Division JP2007521566A (ja) 2003-06-20 2004-05-19 差異ファイルの生成において用いるためのソフトウェア画像の処理

Publications (2)

Publication Number Publication Date
JP2010176699A true JP2010176699A (ja) 2010-08-12
JP5261433B2 JP5261433B2 (ja) 2013-08-14

Family

ID=33517863

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2006517128A Withdrawn JP2007521566A (ja) 2003-06-20 2004-05-19 差異ファイルの生成において用いるためのソフトウェア画像の処理
JP2010086127A Expired - Fee Related JP5261433B2 (ja) 2003-06-20 2010-04-02 電子ファイルを更新するためのシステムおよび電子ファイルの差異ファイルのサイズを縮小する方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2006517128A Withdrawn JP2007521566A (ja) 2003-06-20 2004-05-19 差異ファイルの生成において用いるためのソフトウェア画像の処理

Country Status (6)

Country Link
US (1) US7089270B2 (ja)
EP (1) EP1639472A4 (ja)
JP (2) JP2007521566A (ja)
KR (1) KR101132875B1 (ja)
CN (1) CN100472475C (ja)
WO (1) WO2005001696A1 (ja)

Families Citing this family (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7890464B2 (en) * 2003-06-20 2011-02-15 Innopath Software, Inc. Processing software images and generating difference files
EP2273361B1 (en) * 2003-06-23 2012-09-19 Red Bend Ltd. Method and system for updating versions of content stored in a storage device
EP1569102B1 (en) * 2004-02-27 2010-04-28 Telefonaktiebolaget LM Ericsson (publ) Flash memory programming
US7904895B1 (en) 2004-04-21 2011-03-08 Hewlett-Packard Develpment Company, L.P. Firmware update in electronic devices employing update agent in a flash memory card
US7484051B2 (en) * 2004-06-14 2009-01-27 International Business Machines Corporation Apparatus, system and method for reliably updating a data group in a read-before-write data replication environment using a comparison file
US7580959B2 (en) * 2004-06-14 2009-08-25 International Business Machines Corporation Apparatus, system, and method for providing efficient disaster recovery storage of data using differencing
US8526940B1 (en) 2004-08-17 2013-09-03 Palm, Inc. Centralized rules repository for smart phone customer care
KR100917064B1 (ko) * 2004-11-08 2009-09-15 이노패스 소프트웨어, 아이엔시. 정적 파일 시스템 디프런싱 및 업데이트 방법, 장치,시스템
US7792930B1 (en) * 2004-11-10 2010-09-07 Juniper Networks, Inc. Network device configuration using separate logic and version-based configuration files
US7523450B2 (en) * 2004-11-15 2009-04-21 International Business Machines Corporation Apparatus, system, and method for identifying fixed memory address errors in source code at build time
US20060117075A1 (en) * 2004-12-01 2006-06-01 International Business Machines Corporation Prerequisite, dependent and atomic deltas
US20060136520A1 (en) * 2004-12-17 2006-06-22 Nokia Corporation Apparatus, method and computer program to provide metadata-based data transfer from one mobile terminal to another mobile terminal
US7516206B2 (en) * 2005-01-28 2009-04-07 Cassatt Corporation Management of software images for computing nodes of a distributed computing system
US8387037B2 (en) * 2005-01-28 2013-02-26 Ca, Inc. Updating software images associated with a distributed computing system
US7454427B2 (en) * 2005-01-31 2008-11-18 Cassatt Corporation Autonomic control of a distributed computing system using rule-based sensor definitions
US7685148B2 (en) * 2005-01-31 2010-03-23 Computer Associates Think, Inc. Automatically configuring a distributed computing system according to a hierarchical model
US7680799B2 (en) * 2005-01-31 2010-03-16 Computer Associates Think, Inc. Autonomic control of a distributed computing system in accordance with a hierarchical model
US7478097B2 (en) 2005-01-31 2009-01-13 Cassatt Corporation Application governor providing application-level autonomic control within a distributed computing system
EP1691282A1 (en) * 2005-02-11 2006-08-16 Biftone Corporation Build optimizer tool for efficient management of software builds for mobile devices
US7590653B2 (en) * 2005-03-02 2009-09-15 Cassatt Corporation Automated discovery and inventory of nodes within an autonomic distributed computing system
US8719786B2 (en) * 2005-03-30 2014-05-06 Alcatel Lucent Method for performing conditionalized N-way merging of source code
EP1755034B1 (en) * 2005-08-18 2017-01-18 Telefonaktiebolaget LM Ericsson (publ) Object code generation for increasing the performance of delta files
US20070130232A1 (en) * 2005-11-22 2007-06-07 Therrien David G Method and apparatus for efficiently storing and managing historical versions and replicas of computer data files
US7735075B2 (en) * 2005-12-01 2010-06-08 Samsung Electronics Co., Ltd. System and method for a pseudo dynamic link library (DLL) linker for a monolithic image in a wireless device
EP1793311A3 (en) * 2005-12-01 2007-08-29 Samsung Electronics Co., Ltd. System and method for a patch minimization tool
US8140624B2 (en) * 2005-12-01 2012-03-20 Computer Associates Think, Inc. Automated deployment and configuration of applications in an autonomically controlled distributed computing system
US7634517B1 (en) * 2006-02-10 2009-12-15 Google Inc. System and method for dynamically updating a document repository without interrupting concurrent querying
US8572138B2 (en) * 2006-03-30 2013-10-29 Ca, Inc. Distributed computing system having autonomic deployment of virtual machine disk images
WO2007146710A2 (en) 2006-06-08 2007-12-21 Hewlett-Packard Development Company, L.P. Device management in a network
EP2047420A4 (en) 2006-07-27 2009-11-18 Hewlett Packard Development Co USER EXPERIENCE AND DEPENDENCE MANAGEMENT IN A MOBILE DEVICE
JP4262276B2 (ja) * 2006-12-20 2009-05-13 キヤノン株式会社 画像処理装置、その制御方法、プログラム、記憶媒体
JP2008226167A (ja) * 2007-03-15 2008-09-25 Toshiba Corp データ配布システム及びデータ配布プログラム
US20080275895A1 (en) * 2007-05-03 2008-11-06 Leroux Daniel D Method, system, and program product for aligning models
US8301740B2 (en) * 2007-06-27 2012-10-30 Ca, Inc. Autonomic control of a distributed computing system using dynamically assembled resource chains
US7895317B2 (en) 2007-06-27 2011-02-22 Computer Associates Think, Inc. Autonomic control of a distributed computing system using finite state machines
KR101126797B1 (ko) * 2008-12-15 2012-03-29 한국전자통신연구원 센서 노드의 업데이트를 수행하는 업데이트 서버 및 센서 노드, 센서 노드의 업데이트 방법
US8612961B2 (en) * 2008-12-31 2013-12-17 Motorola Mobility Llc System and method for downloading software upgrades
JP2011028321A (ja) * 2009-07-21 2011-02-10 Mitsubishi Electric Corp 差分情報生成装置、差分情報生成方法および差分情報生成プログラム
JP5478986B2 (ja) * 2009-08-21 2014-04-23 株式会社日立ソリューションズ 情報機器及びプログラム
US8498965B1 (en) * 2010-02-22 2013-07-30 Trend Micro Incorporated Methods and apparatus for generating difference files
TWI416373B (zh) * 2010-03-25 2013-11-21 Wistron Corp 鍵盤定義更新方法及電腦系統
WO2011136809A1 (en) * 2010-04-30 2011-11-03 Hewlett-Packard Development Company, L.P. Preprocessor for file updating
US9652440B2 (en) 2010-05-27 2017-05-16 Microsoft Technology Licensing, Llc Concurrent utilization of a document by multiple threads
US8555161B2 (en) * 2010-05-27 2013-10-08 Microsoft Corporation Concurrent editing of a document by multiple clients
CN101916194B (zh) * 2010-06-01 2013-06-12 浙江大学 一种无线传感网节点程序的部署方法
US8719239B2 (en) 2010-07-16 2014-05-06 International Business Machines Corporation Displaying changes to versioned files
WO2012033498A1 (en) * 2010-09-10 2012-03-15 Hewlett-Packard Development Company, L.P. Systems and methods for data compression
CN102053855B (zh) * 2010-12-13 2014-03-05 浪潮(北京)电子信息产业有限公司 一种软件的生成***及方法
US8473504B2 (en) * 2011-05-12 2013-06-25 Samsung Electronics Co., Ltd. Stabilized binary differencing
WO2012119407A1 (zh) * 2011-08-23 2012-09-13 华为技术有限公司 文档更新方法和装置
CN103294658B (zh) * 2012-03-02 2016-07-13 北大方正集团有限公司 一种文档保存方法及装置
US20140033188A1 (en) * 2012-07-26 2014-01-30 Microsoft Corporation System updates from cloud blob storage using vhd differentials
US9098513B1 (en) 2012-08-27 2015-08-04 Trend Micro Incorporated Methods and systems for differencing orderly dependent files
KR101992191B1 (ko) * 2012-11-01 2019-06-24 엘지전자 주식회사 이동 단말기 및 그 제어방법
CN103336703B (zh) * 2013-07-08 2018-09-18 惠州Tcl移动通信有限公司 生成升级包的方法、服务器、软件升级方法、移动终端
KR102124803B1 (ko) * 2013-07-23 2020-06-22 엘지전자 주식회사 델타 파일을 생성하는 장치 및 방법과, 그 델타 파일을 이용하여 펌웨어를 업그레이드하는 수신 단말 및 그 업그레이드 방법
CN103713928B (zh) * 2013-12-31 2017-02-22 优视科技有限公司 增量文件生成方法、应用程序安装文件更新方法及装置
CN103942143B (zh) * 2014-04-09 2017-03-15 烽火通信科技股份有限公司 一种基于版本库比较的PC‑Lint代码检查结果筛选方法
KR101599133B1 (ko) 2014-06-09 2016-03-15 주식회사 엔지스테크널러지 네비게이션 장치의 지도 데이터 제공 방법 및 시스템
US10191477B2 (en) * 2015-10-30 2019-01-29 Yokogawa Electric Corporation System and method for modification management of a configuration system
EP3299956A1 (de) * 2016-09-26 2018-03-28 Siemens Aktiengesellschaft Verfahren und anordnung zur aktualisierung eines computerprogramms
CN106406918B (zh) * 2016-11-25 2020-02-28 华胜信泰信息产业发展有限公司 源代码自动合并方法和源代码自动合并装置
CN106657361B (zh) * 2016-12-30 2019-09-13 歌尔科技有限公司 一种代码添加混淆的安卓安装包ota升级方法
WO2018209705A1 (zh) * 2017-05-19 2018-11-22 深圳配天智能技术研究院有限公司 嵌入式***中管理文件的方法、嵌入式设备及其存储介质
US20190095187A1 (en) * 2017-09-28 2019-03-28 Trillium Incorporated Incremental updates in static libraries
CN108572834B (zh) * 2018-04-16 2023-12-12 深圳市雅阅科技有限公司 一种浏览器的升级方法和装置
US11579578B2 (en) * 2020-03-26 2023-02-14 Honeywell International Inc. Hierarchal controller logic with incremental updates
CN113625995A (zh) * 2020-05-07 2021-11-09 武汉斗鱼网络科技有限公司 一种自适应获取数据的方法和装置
US11429360B1 (en) * 2021-05-17 2022-08-30 International Business Machines Corporation Computer assisted programming with targeted visual feedback
US11782687B1 (en) * 2022-10-21 2023-10-10 Aurora Labs Ltd. Shrinking executable files based on function analysis

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06274384A (ja) * 1993-03-22 1994-09-30 N T T Data Tsushin Kk 実行ファイル差分抽出/更新装置及び実行ファイル差分抽出方法
US6401239B1 (en) * 1999-03-22 2002-06-04 B.I.S. Advanced Software Systems Ltd. System and method for quick downloading of electronic files
JP2002523825A (ja) * 1998-08-19 2002-07-30 レッド・ベンド・リミテツド 内部レフアレンスを含むデータ表の2つのバージヨン間の差分抽出方法

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5479654A (en) * 1990-04-26 1995-12-26 Squibb Data Systems, Inc. Apparatus and method for reconstructing a file from a difference signature and an original file
US5742905A (en) * 1994-09-19 1998-04-21 Bell Communications Research, Inc. Personal communications internetworking
US5574906A (en) * 1994-10-24 1996-11-12 International Business Machines Corporation System and method for reducing storage requirement in backup subsystems utilizing segmented compression and differencing
US5832520A (en) * 1996-07-03 1998-11-03 Miller, Call, Plauck And Miller Automatic file differencing and updating system
US6308061B1 (en) * 1996-08-07 2001-10-23 Telxon Corporation Wireless software upgrades with version control
US6374250B2 (en) * 1997-02-03 2002-04-16 International Business Machines Corporation System and method for differential compression of data from a plurality of binary sources
EP1005674A4 (en) * 1997-07-15 2002-03-13 Pocket Soft Inc SYSTEM FOR DETECTING DIFFERENCES BETWEEN TWO COMPUTER FILES AND UPDATING OF COMPUTER FILES
US6018747A (en) * 1997-11-26 2000-01-25 International Business Machines Corporation Method for generating and reconstructing in-place delta files
US6035423A (en) * 1997-12-31 2000-03-07 Network Associates, Inc. Method and system for providing automated updating and upgrading of antivirus applications using a computer network
US6052531A (en) * 1998-03-25 2000-04-18 Symantec Corporation Multi-tiered incremental software updating
US20010049263A1 (en) * 1998-03-26 2001-12-06 Xiang Zhang Automatic station/system configuration monitoring and error tracking system and software upgrade tool kit
US6088694A (en) * 1998-03-31 2000-07-11 International Business Machines Corporation Continuous availability and efficient backup for externally referenced objects
US6233589B1 (en) * 1998-07-31 2001-05-15 Novell, Inc. Method and system for reflecting differences between two files
GB2343768A (en) * 1998-08-17 2000-05-17 Connected Place Limited Merging a sequence of delta files
US6167258A (en) * 1998-10-09 2000-12-26 Cleveland Medical Devices Inc. Programmable wireless data acquisition system
US6327671B1 (en) * 1998-11-18 2001-12-04 International Business Machines Corporation Delta compressed asynchronous remote copy
US6349311B1 (en) * 1999-02-01 2002-02-19 Symantec Corporation Storage of reverse delta updates
IL129947A (en) * 1999-05-13 2003-06-24 Tadiran Telecom Business Syste Method and apparatus for downloading software into an embedded system
US6694336B1 (en) * 2000-01-25 2004-02-17 Fusionone, Inc. Data transfer and synchronization system
US6651190B1 (en) * 2000-03-14 2003-11-18 A. Worley Independent remote computer maintenance device
US6535894B1 (en) * 2000-06-01 2003-03-18 Sun Microsystems, Inc. Apparatus and method for incremental updating of archive files
JP2004501451A (ja) * 2000-06-22 2004-01-15 シンクロロジック インコーポレイテッド ファイル差分を使用するファイル送信システムおよび方法
US6470329B1 (en) * 2000-07-11 2002-10-22 Sun Microsystems, Inc. One-way hash functions for distributed data synchronization
US20020099726A1 (en) * 2001-01-23 2002-07-25 International Business Machines Corporation Method and system for distribution of file updates
US20020129107A1 (en) * 2001-03-12 2002-09-12 Loughran Stephen A. Method and apparatus for automatic content handling
US6925467B2 (en) * 2002-05-13 2005-08-02 Innopath Software, Inc. Byte-level file differencing and updating algorithms
US7096311B2 (en) * 2002-09-30 2006-08-22 Innopath Software, Inc. Updating electronic files using byte-level file differencing and updating algorithms
US6836657B2 (en) * 2002-11-12 2004-12-28 Innopath Software, Inc. Upgrading of electronic files including automatic recovery from failures and errors occurring during the upgrade
US20040098421A1 (en) * 2002-11-18 2004-05-20 Luosheng Peng Scheduling updates of electronic files
US20040098361A1 (en) * 2002-11-18 2004-05-20 Luosheng Peng Managing electronic file updates on client devices
US7007049B2 (en) * 2002-11-18 2006-02-28 Innopath Software, Inc. Device memory management during electronic file updating
US7320010B2 (en) * 2002-11-18 2008-01-15 Innopath Software, Inc. Controlling updates of electronic files
US7003534B2 (en) * 2002-11-18 2006-02-21 Innopath Software, Inc. Generating difference files using module information of embedded software components
US7099884B2 (en) * 2002-12-06 2006-08-29 Innopath Software System and method for data compression and decompression

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06274384A (ja) * 1993-03-22 1994-09-30 N T T Data Tsushin Kk 実行ファイル差分抽出/更新装置及び実行ファイル差分抽出方法
JP2002523825A (ja) * 1998-08-19 2002-07-30 レッド・ベンド・リミテツド 内部レフアレンスを含むデータ表の2つのバージヨン間の差分抽出方法
US6401239B1 (en) * 1999-03-22 2002-06-04 B.I.S. Advanced Software Systems Ltd. System and method for quick downloading of electronic files

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6009050881; Benda S. Baker, Udi Manber, and Robert Muth.: 'Compressing differences of executable code' ACM SIGPLAN Workshop on Compiler Support for System Software , 199904, pp.1-10 *

Also Published As

Publication number Publication date
JP5261433B2 (ja) 2013-08-14
JP2007521566A (ja) 2007-08-02
US7089270B2 (en) 2006-08-08
US20040260734A1 (en) 2004-12-23
KR20060026880A (ko) 2006-03-24
EP1639472A1 (en) 2006-03-29
KR101132875B1 (ko) 2012-04-03
WO2005001696A1 (en) 2005-01-06
CN100472475C (zh) 2009-03-25
EP1639472A4 (en) 2009-01-07
CN1809818A (zh) 2006-07-26

Similar Documents

Publication Publication Date Title
JP5261433B2 (ja) 電子ファイルを更新するためのシステムおよび電子ファイルの差異ファイルのサイズを縮小する方法
US7890464B2 (en) Processing software images and generating difference files
US20050010576A1 (en) File differencing and updating engines
US7676506B2 (en) Differential file compression of software image versions
US7031972B2 (en) Algorithms for block-level code alignment of software binary files
US20050010870A1 (en) Post-processing algorithm for byte-level file differencing
US8156071B2 (en) Byte-level file differencing and updating algorithms
KR100949855B1 (ko) 파일 시스템 이미지를 디퍼런싱하기 위한 장치, 시스템, 방법 및 컴퓨터 판독가능형 매체
JP2004152136A (ja) データ更新システム、データ更新システムの差分データ生成装置及びプログラム、並びに更新後ファイル復元装置及びプログラム
US20060200502A1 (en) Differential data creating device and method, updated data recovery device and method, and program
CN111522574B (zh) 差分包生成方法及相关设备
US20080301654A1 (en) Program processing apparatus, program processing method and computer readable information recording medium
Kiyohara et al. A delta representation scheme for updating between versions of mobile phone software
CN101297275A (zh) 处理软件镜像并产生差异文件
CN117707652B (zh) 数据编译、参数传递方法及装置
JP2006166388A (ja) 空白となるビット列の前方配置による境界相殺方法
WO2007133559A9 (en) Processing of compact functional differences
CN118153491A (zh) 芯片设计代码处理方法、装置以及计算机设备

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100430

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120402

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20120702

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20120705

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121002

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130329

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130426

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20160502

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Ref document number: 5261433

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees