説明

オペレーティングシステム自動更新手順

本発明は、クライアントデバイス302、306、308、310、312内のオペレーティングシステムの差分更新に関する。デルタ更新ファイル100が、旧インストールパーティションからポートするメモリ326内の新しいインストールパーティションに対して実行される操作の順序付きリストを含む。更新の差分を求め、クライアントデバイスに送信されるデータを圧縮するのに2値差分圧縮アルゴリズムを用いることができる。パーティション内のブロックが、循環して互いに依存する場合がある(S202、S204)。エッジがカットされ、サイクルが切断される。

【発明の詳細な説明】
【背景技術】
【0001】
[関連出願の相互参照]
本出願は、2010年1月12日に出願された米国仮出願第61/294,266号の優先権を主張する。この米国仮出願の全体の開示内容は、引用することにより本明細書の一部をなすものとする。
【0002】
オペレーティングシステム等のソフトウェアパッケージは、新しい特徴を導入し、誤りを訂正し、セキュリティ上の欠陥に対処するために、随時、更新することができる。大きなアプリケーションのファイルサイズのために、更新を有する完全に新しいパッケージを送信しインストールすることは不便又は非効率である場合がある。1つの解決策は、差分更新をクライアントに送信することである。差分更新は、従前のソフトウェアからの特定の変更のみをカバーしている。差分更新が正しく行われない場合、修正されたソフトウェアは、不十分に動作する場合もあるし、全く動作しない場合もある。
【発明の概要】
【0003】
本発明は、包括的には、オペレーティングシステムに関する。より詳細には、本発明は、オペレーティングシステムのバージョンの更新に関する。
【0004】
1つの実施の形態によれば、コンピュータ可読オペレーティングシステムの更新を生成する方法が提供される。該方法は、前記オペレーティングシステムの現バージョンのバージョン番号を特定するステップと、プロセッサを用いて、前記オペレーティングシステムの前記現バージョンを前記オペレーティングシステムの新バージョンに更新する操作の順序付きリストを作成するステップであって、前記プロセッサは、前記オペレーティングシステムの前記新バージョンに対して各通常ファイルにわたり反復を実行して、前記新バージョンに関連付けられた全てのデータブロックの前記順序付きリストを取得する、作成するステップと、前記プロセッサを用いて、差分更新ファイルが実際の更新ファイルであることを示すマジックナンバ指示子と、前記オペレーティングシステムの前記新バージョンを特定する新バージョン番号と、前記操作の順序付きリストを含むプロトコルバッファとを含む前記差分更新ファイルを組み立てるステップとを含む。
【0005】
一例では、前記順序付きリスト内の1以上の操作は、それぞれ、データのチャンクを示すそれぞれのデータブロブに関連付けられる。ここで、前記差分更新ファイルは、前記それぞれのデータブロブを含むように組み立てられる。別の例では、前記順序付きリスト内の各操作は、クライアントデバイスのパーティションの1以上の特定のデータブロックに適用可能である。前記操作は、前記パーティション内の前記データブロックのうちの少なくとも1つが、前記オペレーティングシステムの前記新バージョンのための前記クライアントデバイスの新しいパーティション内の別のブロックにコピーされることになるコピー操作と、前記データブロックのうちの少なくとも所与の1つがメモリに読み込まれ、前記差分更新ファイルのデータブロブを用いて前記少なくとも1つの所与のデータブロックに対して差分ルーチンが実行される差分操作と、前記差分更新ファイルの選択されたデータブロブが前記新しいパーティション内の指定ブロックに書き込まれるように構成される置換操作と、圧縮されたデータブロブが前記差分更新ファイルに含まれ、前記オペレーティングシステムの前記新バージョンのための前記新しいパーティション内の選択された指定ブロックに書き込まれるように構成される解凍付き置換(replace with uncompression)操作とのうちの1以上のものを含む。
【0006】
1つの代替形態では、前記順序付きリスト内の各操作は、ファイルオブジェクトに関連付けられ、前記方法は、ファイルオブジェクトごとにグラフ内に頂点を作成するステップと、各ブロックを表すベクトルを作成するステップとを更に含む。1つの変形形態では、前記方法は、各ブロックの前記ベクトルのリーダパラメータ及びライタパラメータを設定するステップと、異なるリーダ及びライタを有するブロックごとに、該ライタから該リーダへのエッジを前記グラフ内に作成するステップとを更に含む。前記エッジは、該エッジに関連付けられたソースファイル操作が開始する前に完了されるファイル操作を指し示す。一例では、各エッジは重みを有し、該重みは、そのエッジに関連付けられた前記グラフ内のブロックの数を特定する。別の例では、前記グラフがサイクルを含む場合、前記方法は、前記サイクルのそれぞれを切断するステップを更に含む。この場合、前記サイクルのうちの所与の1つを切断するステップは、前記所与のサイクルに関連付けられた最小重みのエッジを見つけることと、前記最小重みのエッジをカットすることとを含みうる。ここで、前記最小重みのエッジをカットすることは、エクステントをスクラッチスペースにコピーする操作を表す新しいノードを作成することと、前記最小重みのエッジのソースノードに前記新しいノードを指し示させることとを含みうる。そして、新しいコピー操作が該新しいコピー操作のコンシューマの前に行われることを保証するために、前記最小重みのエッジのデスティネーションノードから新しいエッジを作ることができる。
【0007】
本発明の別の実施の形態によれば、コンピュータ可読オペレーティングシステムの更新を生成するデバイスが提供される。該デバイスは、前記オペレーティングシステムに関連付けられた差分更新情報を格納するメモリと、前記メモリに結合されたプロセッサとを備える。前記プロセッサは、前記オペレーティングシステムの現バージョンのバージョン番号を特定し、前記オペレーティングシステムの前記新バージョンに対して各通常ファイルにわたり反復を実行して、前記新バージョンに関連付けられた全てのデータブロックの前記順序付きリストを取得することを含めて、前記差分更新情報を用いて、前記オペレーティングシステムの前記現バージョンを前記オペレーティングシステムの新バージョンに更新する操作の順序付きリストを作成し、差分更新ファイルが実際の更新ファイルであることを示すマジックナンバ指示子と、前記オペレーティングシステムの前記新バージョンを特定する新バージョン番号と、前記操作の順序付きリストを含むプロトコルバッファとを含む前記差分更新ファイルを組み立て、前記差分更新ファイルを前記メモリに格納するように構成される。
【0008】
一例では、前記順序付きリスト内の各操作は、ファイルオブジェクトに関連付けられ、前記プロセッサは、ファイルオブジェクトごとにグラフ内に頂点を作成し、各ブロックを表すベクトルを作成するように更に構成される。一代替形態では、前記プロセッサは、各ブロックの前記ベクトルのリーダパラメータ及びライタパラメータを設定し、異なるリーダ及びライタを有するブロックごとに、該ライタから該リーダへのエッジを前記グラフ内に作成するように更に構成される。前記エッジは、該エッジに関連付けられたソースファイル操作が開始する前に完了されるファイル操作を指し示す。この場合、前記グラフがサイクルを含む場合、前記プロセッサは、前記サイクルのそれぞれを切断するようにオプションで動作可能である。ここで、前記サイクルのうちの所与の1つを切断することは、前記所与のサイクルに関連付けられた最小重みのエッジを見つけることと、前記最小重みのエッジをカットすることとを含みうる。この場合、前記プロセッサは、エクステントをスクラッチスペースにコピーする操作を表す新しいノードを作成し、前記最小重みのエッジのソースノードに前記新しいノードを指し示させることによって前記最小重みのエッジをカットするように動作可能とすることができる。そして、新しいコピー操作が該新しいコピー操作のコンシューマの前に行われることを保証するために、前記最小重みのエッジのデスティネーションノードから新しいエッジを作ることができる。
【0009】
更なる実施の形態では、有形のコンピュータ可読ストレージ媒体が、コンピュータプログラムのコンピュータ可読命令を格納する。前記命令は、コンピュータによって実行されると、コンピュータ可読オペレーティングシステムの更新を生成する方法を前記コンピュータに実行させる。前記方法は、前記オペレーティングシステムの現バージョンのバージョン番号を特定するステップと、プロセッサを用いて、前記オペレーティングシステムの前記現バージョンを前記オペレーティングシステムの新バージョンに更新する操作の順序付きリストを作成するステップであって、前記プロセッサは、前記オペレーティングシステムの前記新バージョンに対して各通常ファイルにわたり反復を実行して、前記新バージョンに関連付けられた全てのデータブロックの前記順序付きリストを取得する、作成するステップと、前記プロセッサを用いて、差分更新ファイルが実際の更新ファイルであることを示すマジックナンバ指示子と、前記オペレーティングシステムの前記新バージョンを特定する新バージョン番号と、前記操作の順序付きリストを含むプロトコルバッファとを含む前記差分更新ファイルを組み立てるステップとを含む。
【0010】
一例では、前記順序付きリスト内の各操作は、ファイルオブジェクトに関連付けられ、前記方法は、ファイルオブジェクトごとにグラフ内に頂点を作成するステップと、各ブロックを表すベクトルを作成するステップとを更に含む。この場合、前記方法は、各ブロックの前記ベクトルのリーダパラメータ及びライタパラメータを設定するステップと、異なるリーダ及びライタを有するブロックごとに、該ライタから該リーダへのエッジを前記グラフ内に作成するステップとを更に含みうる。前記エッジは、該エッジに関連付けられたソースファイル操作が開始する前に完了されるファイル操作を指し示す。ここで、前記グラフがサイクルを含む場合、前記方法は、各所与のサイクルに関連付けられた最小重みのエッジを見つけるステップと、各サイクルの前記最小重みのエッジをカットすることとによって前記サイクルのそれぞれを切断するステップとを更に含みうる。前記最小重みのエッジをカットすることは、エクステントをスクラッチスペースにコピーする操作を表す新しいノードを作成することと、前記最小重みのエッジのソースノードに前記新しいノードを指し示させることとを含みうる。そして、新しいコピー操作が該新しいコピー操作のコンシューマの前に行われることを保証するために、前記最小重みのエッジのデスティネーションノードから新しいエッジを作ることができる。
【0011】
更なる実施の形態では、クライアントデバイスが、オペレーティングシステムの現バージョンを格納するメモリと、前記メモリに結合されたプロセッサとを備える。前記プロセッサは、前記オペレーティングシステムの前記現バージョンの更新に関して遠隔デバイスに要求を送信し、ここで、該要求は、前記オペレーティングシステムの前記現バージョンを特定するバージョン番号を含み、前記遠隔デバイスから差分更新ファイルを受信し、ここで、該差分更新ファイルは、該差分更新ファイルが実際の更新ファイルであることを示すマジックナンバ指示子と、前記オペレーティングシステムの前記新バージョンを特定する新バージョン番号と、操作の順序付きリストを含むプロトコルバッファとを含み、前記マジックナンバを検証し、前記プロトコルバッファから前記操作の順序付きリストを抽出し、前記オペレーティングシステムの前記現バージョンを前記オペレーティングシステムの前記新バージョンに更新するために、前記操作の順序付きリストを実行することによって差分更新を実行するように構成される。
【0012】
一例では、前記プロセッサは、前記差分更新ファイルが前記クライアントデバイスにストリーミングされている間に、前記メモリに前記差分更新ファイルを保存することなく、前記オペレーティングシステムの前記新バージョンへの前記オペレーティングシステムの前記差分更新を実行するように動作可能である。
【図面の簡単な説明】
【0013】
【図1】本発明の態様によるファイルフォーマットを示す図である。
【図2】本発明の態様による、エッジをカットしてサイクルを切断するプロセスである。
【図3】本発明の態様による差分更新プロセスを示す図である。
【図4A】本発明において用いるコンピュータシステムを示す図である。
【図4B】本発明において用いるコンピュータシステムを示す図である。
【発明を実施するための形態】
【0014】
本発明の態様、特徴及び利点は、好ましい実施形態の以下の説明及び添付した図を参照して検討すると理解されるであろう。種々な図面における同じ参照符号は、同じ要素又は同様の要素を特定することができる。
【0015】
オペレーティングシステムの随時異なる特徴が更新される。それらの更新は、あらかじめ規定された更新プロセスを実行するクライアントコンピュータに送信することができる。これは、クライアントに対するファイルの消去、変更及び/又は追加を伴うことができる。1つのプロセスでは、更新は、オペレーティングシステムプロバイダによって準備される。これは、差分更新ファイルを作成することを含みうる。差分更新ファイルは、どのような変更を行う必要があるかをクライアントに示す。そして、差分更新ファイルは、更新される各クライアントに送信される。クライアントは、望ましくは、ファイル内の操作を順次実行して更新を行う。
【0016】
オペレーティングシステムを含むパーティションは、1以上のブロックとして構成することができ、各ブロックは、ファイル情報又はブックキーピング情報を含む。各ブロックは、例えば4kバイトとすることができるが、本発明は、これに限定されるものでもなければ、どの特定のブロックサイズにも限定されるものでもない。オペレーティングシステム自体は、コンピュータプロセッサ上で実行されるプログラム(例えば命令)及びデータを含み、コンピュータハードウェアリソースを管理し、様々なアプリケーションソフトウェアの効率的な実行のための共通のサービスを提供する。オペレーティングシステムを更新するとき、新しいパーティションを作成することができる。この新しいパーティションは、オペレーティングシステムの旧バージョンで事前にポピュレートされる。その結果得られた(ルートファイルシステムを包含する)インストールパーティション上の各ディスクブロックは、望ましくは、オペレーティングシステムベンダが(例えば、ベリファイドブートの場合)サーバ上で署名を受けることができるように、オペレーティングシステムベンダによって正確に(ビット単位で)指定される。
【0017】
更新は可能な限り小さいことが望ましい。1つのシナリオでは、リブートすることなく、多くのデルタ(差分)更新をインストールすることができるように、更新は所定の位置に適用される。したがって、ユーザがバージョンNにブートされ、N+1がリリースされた場合、ユーザ(クライアント)は、N→N+1に更新されたものをダウンロードし、その更新されたものをインストールする。そして、N+2が登場したときでも、ユーザは依然としてN+1にブートされる。そして、ユーザは、N+1→N+2更新をダウンロードし、その更新をN+1上の所定の位置にインストールする。
【0018】
一例では、クライアントは、更新サーバと連絡をとり、現在のインストールパーティション上にインストールされているシステムのバージョン番号を提供する。サーバは、クライアントにダウンロードされる増分(デルタ)更新をクライアントに提供する。デルタ更新ファイルは、インストールパーティションを旧(既存)バージョンから新バージョンにする、インストールパーティションに対して実行する操作の順序付きリストを含む。
【0019】
望ましくは、更新ファイルは、クライアントによって実行される操作の順序付きリストである。各操作は、パーティションの特定のブロックに対して作用する。各操作は、デルタファイルの内部のオプションのデータ「ブロブ(blob)」を含みうる。用語「ブロブ」とは、バイトの任意の集まりを有することができる大きなデータチャンクを示す。「Copy(コピー)」、「Diff(ディフ)」、「Replace(置換)」及び「Replace with Uncompression(解凍付き置換)」を含む数タイプのインストール操作がある。Copyでは、現在のインストールパーティション内のブロックのうちの幾つかが新しいインストールパーティション内の他のブロックにコピーされる。Diffの場合、幾つかのブロックがメモリ内に読み込まれ、付属のデータブロブを用いて2値差分ルーチンが実行される。その結果は、新しいインストールパーティション内の指定ブロックに書き込まれる。Replaceの場合、付属のデータブロブが新しいインストールパーティション内の指定ブロックに書き込まれる。圧縮プロセスも実行することができ、圧縮プロセスにおいて、圧縮データブロブがクライアントに送信されて解凍され、その結果が新しいインストールパーティション内の指定ブロックに書き込まれる。この圧縮プロセスでは、Gzip、Bzip2又は別の圧縮アルゴリズムを用いることができる。
【0020】
1つのシナリオでは、旧ファイルがインストールパーティションであることがパッチプログラムに指示される。プログラムにパーティション全体をメモリに読み込ませるのではなく、ファイルをメモリ内に入れるためにいずれのブロックを読み出すべきかがパッチプログラムに指示される。そして、パッチ操作がメモリ内で実行される。最後に、その結果は、デバイスの開始時ではないが、新しいインストールパーティションに直接書き込まれる。その代わり、プログラムは、いずれのブロックに結果を書き込むのかを伝えられる。
【0021】
デルタ/差分更新ファイルは、以下の議論に従って生成することができる。更新ファイルフォーマットは、図1のファイルフォーマット100に示されるようにすることができる。具体的には、フォーマットは、好ましくは、ファイルが実際に更新ファイルであることを示す「マジックナンバ」指示子又はサニティチェックを含む。一例では、マジックナンバは、「CrAU」等の短いフレーズの2値バージョンを含む4バイトを含む。次はバージョン番号であり、その後に、プロトコルバッファオフセット及び長さが続き、これらのそれぞれは8バイトとすることができる。プロトコルバッファそのものが次に続く。プロトコルバッファは、クライアントが順に実行する一連の命令である。次に、1以上のデータブロブが提供され、その後に、ファイル終端(EOF)指示子が続く。順序はこの図に示されるようにすることができるが、所望の場合には、様々な構成要素を異なる順序にすることができる。
【0022】
1つのシナリオでは、「エクステント」の概念が用いられる。エクステントはディスクブロックの連続した範囲である。例えば、ブロック{10,11,12,13,14,15,17,18}を指定するのではなく、{(10,6),(17,2)}(エクステントのリスト)を指定する方が簡単な場合がある。デルタ更新を生成する一例示のプロセスは、以下のとおりである。
【数1】

【0023】
このマニフェスト(manifest)は、インストール操作のリストを示す。入力エクステントは、読み出されるブロックを示す。出力エクステントは、書き込まれるブロックを示す。
【0024】
デルタ更新を生成するために、新しいファイルシステムに対して各通常ファイルにわたり反復が実行され、新しいファイルシステムが有する全てのデータブロックの順序付きリストが取得される。これは、以下のフォーマットを有するファイル構造に格納される。
【数2】

【0025】
最終的に、各ファイルオブジェクトは、プロトコルバッファ内のInstallOperation(インストール操作)メッセージに変換されることになる。ファイルごとに、該ファイルを圧縮する最適な方法を規定することが望ましい。4つのケースが存在する。1つのケースでは、ファイルは変化していない。他の3つのケースでは、ファイルは変化している。1つのシナリオでは、Bzip2又は別の圧縮アルゴリズムを用いて、変化したファイルを最小サイズに圧縮することができる。別のシナリオでは、ファイルは変化しており、最小サイズに解凍される。第3のシナリオでは、ファイルは変化しており、最小のものをbinary−diff(バイナリディフ)する。ファイルが新しい場合、これは、該ファイルがオペレーティングシステムの旧バージョンには存在しなかったことを意味するが、これらのケースのうちの2つのみが当てはまる。データは、全て送信することもできるし、圧縮して全て送信することもできる。
【0026】
本発明の1つの態様によれば、ファイルオブジェクトごとにグラフに頂点が作成される。グラフとともに、ベクトルがインストールパーティション内の各ブロックを表すのに作成される。
【数3】

【0027】
その後、プロセスは、各ファイルオブジェクト内の各ブロックを通過する。ブロックごとに、リーダパラメータ及びライタパラメータがブロックのベクトルについて設定される。
【0028】
次に、反復がブロックのアレイを通して実行される。異なるリーダ及びライタ(ともに非ヌルである)を有するブロックごとに、エッジ(矢印)がライタからリーダへのグラフに作成される。(有向)グラフ内のエッジは、該エッジのソースファイル操作が開始する前に完了しなければならないファイル操作を指し示す。したがって、このプロセスは、異なるファイル操作によってブロックの読み出し及び書き込みの双方が行われる場合、該ブロックが書き込まれる前に読み出されることを確実にするように試みる。エッジはグラフ内のブロックを表し、したがって、エッジの重みはブロック数である。
【0029】
このとき、結果は、サイクルを備えたグラフを有する可能性がある。サイクルは切断されるべきである。サイクルは、「Finding all the Elementary Circuits of a Directed Graph」(SIAM J. Comput., vol. 4 no. 1, March 1975)に述べられているようなDonald B. Johnsonの回路発見アルゴリズムを用いて見つけることができる。この文献の開示内容全体は、引用することにより本明細書の一部をなすものとする。サイクルは、「Tarjan's Strongly Connected Components Algorithm」(David Eppstein, Ed., Wikipedia)に述べられているようなTarjanのアルゴリズムを用いて見つけることもできる。この文献の開示内容全体は、引用することにより本明細書の一部をなすものとする。サイクルごとに、最小重みのエッジが見つけられカットされる。エッジは以下のようにカットすることができる。先ず、幾つかのエクステントをスクラッチスペースにコピーする操作を表す新しいノードを作成する。次に、エッジのソースノードに新しいノードを指し示させる。ここで、カットされたエッジのデスティネーションノードから新しいノードへのエッジを作成して、新しいコピー操作がコピーのコンシューマの前に行われることを強制することができる。好ましくは、エッジがカットされることによって表されるブロックからではなく、スクラッチスペースから読み出すように、カットされたエッジのデスティネーションノードを修正する。
【0030】
エッジをカットしてサイクルを切断する一例は、図2のプロセス200に示される。矢印は、指し示される側の操作が指し示す側の操作の前に行われる必要があり、指し示す側の操作が、指し示される側によって必要とされるデータを上書きするので、その順序で行われることを必要とすることを示す。この図に示すように、S202において、操作Aが、ブロック3を読み出し、ブロック4を書き込む。そして、S204において、操作Bが、ブロック4を読み出し、ブロック10を書き込む。サイクルは、AとBとの間のエッジ(矢印206)をカットすることによって切断される。これは、tempブロックTを用いることによって行うことができる。したがって、図示するように、S208において、操作Aが、ブロック3を読み出し、ブロック4を書き込む。S210において、操作Cが、ブロック4を読み出し、ブロックTを書き込む。そして、S212において、操作B’が、ブロックTを読み出し、ブロック10を書き込む。サイクルが切断されると、トポロジカルソートを用いて全てのノードを順序付けることができる。それは、全てのファイルデータブロックのインストールをカバーしている。
【0031】
一例では、B’−>C−>A−>Tempにように、エッジを選んでカットすることが可能である。この場合、Temp操作は、ブロックAをtempエリアにコピーする。BはB’に修正され、次に、B’はtempエリアから読み出される。一方、第2のエッジ(例えば、C−>A)が切断される場合、その結果は、B’−>C−>Temp2及びA’−>Tempとなる。この結果、2つの完全に独立したグラフが得られ、操作の最終的な順序は以下のように配列することができる。
Temp2(クライアントはこれを最初に実行する)

B’
Temp
A’(クライアントはこれを最後に実行する)
【0032】
しかしながら、この場合、B’は、Temp操作によって書き込まれたデータを読み出すが、TempはB’の後に行われる。これは、A−>Bがエッジをカットされたときに行われたグラフ変換が、TempがB’の前に行われなければならないことを特に明確に指定していなかったことから起こる場合がある。この状況を回避するために、別のエッジが、これを明示的にするために追加される。その結果は以下のようになる。
A−>B−>C−>A(オリジナル)
A−>Bをカットして以下を取得する:
B’−>C−>A−>Temp<−B’
次に、C−>Aをカットして以下を取得する:
B’−>C'−>Temp2<−A−>Temp<−B’
次に、操作の最終的な順序がグラフに基づいて選ばれ、操作は正しい順序で行われる。
【0033】
例示のプロセスが図3に示されている。ステージ1において、ディスクイメージがスキャンされる。ブロックインデックス(0〜7)は、異なるイメージ(例えば、「sh」、「foo」、「bar」及び「dog」)に関連付けることができる。新しいイメージは、同じブロック又は異なるブロックに関連付けることができる。したがって、ここでは、「foo」は、ブロック4の代わりにブロック2及び3に関連付けることができる。「sh」は、ブロック2及び3の代わりにブロック4及び5に関連付けることができる。「bar」は、ブロック5の代わりにブロック6に関連付けることができる。そして、新しいイメージ「cat」は、ブロック7に関連付けることができる。
【0034】
ステージ2において、ファイル操作が作成される。これは、新しいパーティション上のファイルに対応する。この後に、ブロックベクトルが続く。ブロックベクトルは順序付きリストであり、ブロックベクトルにおいて、各要素は、所与のブロックのファイル操作を含む。各イメージは、1以上のソースブロック及び1以上のデスティネーションブロックを有することができる。したがって、「foo」のソースブロックはブロック4であり、「foo」のデスティネーションブロックは、「dst:(2,2)」として示され、これは、最初のブロックがブロック2であり、2つのブロックが割り当てられていることを示している。この部分は、各イメージをクライアントにどのように提供することができるのかも示している。したがって、foo及びbarは、bsdiff等の2値差分アルゴリズムを用いて提供することができ、shは、単にコピーのみすることができ、catは、圧縮なしで全体を送信することができる。Bsdiffは2つのファイル間の差分を計算する既知のアルゴリズムである。
【0035】
ステージ3に示すように、エッジ重み(例えば、1又は2)がブロック数に等しいグラフが作成される。ステージ4において、サイクルが切断される。望ましくは、サイクル(複数の場合もあり)は、各サイクルにおける最小重みエッジをカットすることによってカットされる。したがって、この例では、shからfooへの矢印(重み1を有する)を含むサイクルが切断され、修正されたfoo(foo’)が得られる。そして、ステージ5において、トポロジカルソートの結果得られた最終的な順序が示される。これは、クライアント上で実行される順序である。
【0036】
クライアントは、ファイルデータを設定した後、残りのデータをアンジップして全て非ファイルデータブロックにする最終的なInstallOperationを用いて非ファイルデータブロックに上書きする。一般的な例では、これは、約2メガバイトの圧縮データである。このデータに対してデルタ圧縮プロセスを実行することが実現可能な場合がある。
【0037】
(全ての操作をリストする)プロトコルバッファは、ファイルの先頭に現れるので、更新をディスクに保存する必要はない。更新は、サーバからのストリーミング中に適用することができる。更新がOSベンダによって署名されることを確実にすることが望ましい。システムは、更新の適用を開始することができ、デルタ更新シグネチャの検証後になるまで、更新をブート可能にマーキングしないことができる。
【0038】
ここに提示した実施形態は、実際に最良の圧縮比を与えることがわかっている。これによって、オペレーティングシステムベンダは、将来の代替的な圧縮方式を用いることも可能になる。例えば、Googleによって開発された1つのプロセスはCourgetteであり、これは、bsdiffに取って代わることができる。
【0039】
別の可能な解決策は、パーティション全体をデルタ圧縮することである。しかしながら、bsdiffは、そのメモリ要件が高すぎるために、このシナリオでは動作することができない。パッチ中、bsdiffは、オリジナルのファイル及び新しいファイルを格納するのに十分なメモリを必要とし、このメモリは1ギガバイトを超える場合がある。別のデルタ圧縮プログラムであるXdeltaは、スライディングウィンドウを用いる。テストにおいて、このXdeltaは、圧縮が不十分な結果となった(例えば、数百メガバイト)。更なる代替形態はrdiffを用いることであり、rdiffは、変更されたブロックのみをデルタファイルに格納することによって動作する。rdiffは、ブロックを整列する必要がないように、スライディングウィンドウを用いる。パーティション全体のrdiffデルタは、テストされると、104メガバイトであった。これは、上述した手順に従って用いることができるおよそ10メガバイトを優に超えている。
【0040】
今後、ファイルレベルにおいて、rdiffスタイル(すなわち、rsyncスタイル)のデルタ圧縮を用いることが可能な場合がある。これは、今後、bsdiffとともに用いることができる。
【0041】
本発明の態様による更新手順は、以下の例示のコンピュータシステムを用いて実施することができる。図4Aは、本発明において単独で用いることもできるし、ネットワークされた構成で用いることもできる様々なコンピューティングデバイスを示すコンピュータシステムの概略図を示している。例えば、この図は、複数のコンピュータ302、304、306及び308と、移動電話310及びPDA312等のポータブル電子デバイス等の他のタイプのデバイスとを有するコンピュータネットワーク300を示している。しかしながら、本発明は、そのように限定されるものではなく、ネットブック及びパッド型ハンドヘルドコンピュータ(図示せず)を含む他のデバイスも用いることができる。そのようなデバイスは、ローカル接続若しくは直接接続314を介して相互接続することができ、及び/又はLAN、WAN、インターネット等の通信ネットワーク316を介して結合することができる。通信ネットワーク316は、有線又は無線とすることができる。
【0042】
各デバイスは、例えば、1以上の処理デバイスを含むことがあり、キーボード318及びマウス320等のユーザ入力、並びに/又はペン入力、ジョイスティック、ボタン、タッチスクリーン等の様々な他のタイプの入力デバイスに加えて、例えば、CRT、LCD、プラズマスクリーンモニタ、TV、プロジェクタ等を含みうるディスプレイ322を有することができる。各コンピュータ302、304、306及び308は、パーソナルコンピュータやサーバ等でありうる。単なる例として、コンピュータ302及び306は、パーソナルコンピュータとすることができる一方、コンピュータ304はサーバとすることができ、コンピュータ308はラップトップとすることができる。
【0043】
図4Bに示すように、コンピュータ302及び304等の各コンピュータは、プロセッサ324、メモリ/ストレージ326及びコンピュータ内に通常存在する他の構成要素を含む。例えば、メモリ/ストレージ326は、プロセッサ324によってアクセス可能な情報を格納する。この情報は、プロセッサ324が実行することができる命令328と、プロセッサが検索、操作又は格納することができるデータ330とを含む。サーバにおける命令328は、1以上のクライアントデバイスによってインストールされる差分更新を作成する操作を含みうる。そして、クライアントデバイスにおける命令は、差分更新を実行する操作を含みうる。
【0044】
データは、クライアントデバイスに対するサービスのためにデータベースに保持された1以上の差分更新を含みうる。メモリ/ストレージは、ハードドライブやROMやRAMやCD−ROMやフラッシュメモリや書き込み可能メモリ又は読み出し専用メモリ等の、プロセッサによってアクセス可能な情報を格納可能な任意のタイプのもの又は任意のデバイスでありうる。プロセッサ324は、Intel Corporation又はAdvanced Micro Devices社からのプロセッサ等の、任意の個数の既知のプロセッサを含みうる。代替的には、プロセッサは、ASIC又は他の処理デバイス等の、操作を実行する専用コントローラでありうる。
【0045】
命令328は、プロセッサ(複数の場合もあり)によって直接的(マシンコード等)又は間接的(スクリプト等)に実行される任意の一組の命令を含みうる。その点について、用語「命令」、「ステップ」及び「プログラム」とは、本明細書では交換可能に用いることができる。命令は、オブジェクトコード又はソースコードのモジュール等、任意のコンピュータ言語又はフォーマットにより格納することができる。本発明による機能、方法及び命令のルーチンは、以下により詳細に説明される。
【0046】
データ330は、命令328に従って、プロセッサ324が検索、格納又は修正することができる。データは、データ集合体として格納することができる。例えば、本発明は、どの特定のデータ構造によっても限定されないが、データは、コンピュータレジスタ、複数の異なるフィールド及びレコードを有するテーブルとしてリレーショナルデータベース、XML文書としてウェブページキャッシュ等に格納することができる。
【0047】
データは、限定するものではないが2値、ASCII又はUnicode等の任意のコンピュータ可読フォーマットにフォーマットすることもできる。その上、データは、説明文、独自のコード、ポインタ、他のメモリ(他のネットワークロケーションを含む)に格納されたデータへの参照子、又は関連データを計算するのに或る機能によって用いられる情報等、関連情報を特定するのに十分な任意の情報を含むことがある。さらに、所与のアイテムは、1以上のファイル、データベース、ウェブキャッシュに格納されたデータセット等を含みうる。データのサイズ及び内容に応じて、該データの一部ずつを別々に格納又は別の方法により保持することもできる。
【0048】
プロセッサ324及びメモリ326は、図4Bでは、同じブロック内に存在するものとして機能的に示されているが、プロセッサ及びメモリは、実際には、同じ物理ハウジング又は物理ロケーション内に格納されることもあるし格納されないこともある複数のプロセッサ及びメモリを含みうることが理解されるであろう。例えば、命令及びデータの幾つか又は全ては、着脱可能なCD−ROM、DVD−ROM又はフラッシュドライブ、及び読み出し専用コンピュータチップ内の他のものに格納することができる。命令及びデータの幾つか又は全ては、プロセッサから物理的に遠隔ではあるが、それでもプロセッサによってアクセス可能なロケーションに格納することができる。同様に、プロセッサは、実際には、並列に動作することもあるし動作しないこともあるプロセッサの集合体を含みうる。データは、分散させることができ、ハードドライブ等の複数のメモリ326にわたって格納することができる。
【0049】
1つの態様では、サーバ304は、1以上のクライアントコンピュータ302、306及び/又は308、並びに移動電話310及びPDA312等のデバイスと通信することができる。各クライアントコンピュータ又は他のクライアントデバイスは、プロセッサ、メモリ及び命令、並びに1以上のユーザ入力デバイス318、320及びディスプレイ322等のユーザ出力デバイスを用いてサーバ304と同様に構成することができる。各クライアントコンピュータは、中央処理装置(「CPU」)、ディスプレイ、CD−ROMドライブ若しくはDVDドライブ、ハードドライブ、マウス、キーボード、タッチスクリーン、スピーカ、マイク、モデム及び/又は(電話やケーブル等の)ルータ、並びにこれらの要素を互いに接続するのに用いられる構成要素の全て等の、パーソナルコンピュータにおいて通常見られる全ての構成要素を有する、人による使用を対象とした汎用コンピュータとすることができる。
【0050】
サーバ304、ユーザコンピュータ及び他のデバイスは、ネットワーク316を介する等により、他のコンピュータと直接通信及び間接通信が可能である。図4A及び図4Bには少数のコンピューティングデバイスしか示されていないが、一般的なシステムは、各異なるコンピュータがネットワークの異なるノードに存在する、多数の接続されたサーバ及びクライアントを含むことができることが理解されるべきである。ネットワーク316、及び介在するノードは、1以上の企業に独自の通信プロトコル、Ethernet(登録商標)、WiFi、Bluetooth(登録商標)又はTCP/IPを用いるインターネット、イントラネット、仮想プライベートネットワーク、ワイドエリアネットワーク、ローカルネットワーク、プライベートネットワークを含む様々な構成及びプロトコルを備えうる。
【0051】
任意の介在するノードを含むネットワークにわたる通信は、モデム(例えば、ダイヤルアップ又はケーブル)、ネットワークインタフェース及び無線インタフェース等、他のコンピュータへのデータの送信及び他のコンピュータからのデータの送信が可能な任意のデバイスによって容易にすることができる。サーバ304はウェブサーバでありうる。上述したように、情報が送信又は受信されると、或る利点が得られるが、本発明の他の態様は、情報のどの特定の送信方法にも限定されるものではない。例えば、幾つかの態様では、情報は、ディスク、テープ、CD−ROM等の媒体を介して送信することもできるし、ダイヤルアップモデムを介して2つのコンピュータシステム間で直接送信することもできる。他の態様では、或る情報は、非電子フォーマットで送信することができ、システム内に手動で入力することができる。
【0052】
その上、本明細書で説明したシステム及び方法によるコンピュータ及びユーザデバイスは、命令の処理と、人間及び他のコンピュータへのデータの送信と、人間及び他のコンピュータからのデータの送信とが可能な任意のデバイスを含みうる。他のコンピュータは、ローカルストレージ機能のないネットワークコンピュータと、PDA312等のモデム付きPDAと、移動電話310等のインターネット対応無線電話と、ネットブックと、パッド型ハンドヘルドコンピュータとを含む。
【0053】
図4Aに示すように、ネットワーク300は、クライアントデバイスに差分更新をサービス提供する更新データベース332も含みうる。更新データベースは、サーバ304に直接的又は間接的に結合することができる。一代替形態では、更新データベース332は、サーバ304の一部とすることもできるし、別の方法でサーバ304に論理的に関連付けることもできる。
【0054】
本明細書では、本発明を特定の実施形態に関して説明してきたが、これらの実施形態は本発明の原理及び用途の単なる例示にすぎないことが理解されるべきである。したがって、例示の実施形態に対して多数の修正を行うことができること、及び添付の特許請求の範囲によって規定される本発明の趣旨及び範囲から逸脱することなく他の構成を考案することができることが理解されるべきである。例えば、或る実施形態はオペレーティングシステムについて示されているが、本発明の態様による差分更新は、他のソフトウェアパッケージ、アプリケーション及びサービスとともに用いることができる。さらに、特定のプロセスが添付図面において特定の順序で示されているが、そのような順序が本明細書において明白に述べられていない限り、そのようなプロセスは、どの特定の順序にも限定されるものではなく、異なる順序で又は並列に実行することができる。そして、特に別段に指定がない限り、追加のプロセスを追加することもできるし、他のプロセスを省くこともできる。
【産業上の利用可能性】
【0055】
本発明は、限定するものではないが、コンピュータシステム操作と、そのようなコンピュータシステムのアプリケーションの更新とを含む幅広い産業上の利用可能性を享有する。

【特許請求の範囲】
【請求項1】
コンピュータ可読オペレーティングシステムの更新を生成する方法であって、
前記オペレーティングシステムの現バージョンのバージョン番号を特定するステップと、
プロセッサを用いて、前記オペレーティングシステムの前記現バージョンを前記オペレーティングシステムの新バージョンに更新する操作の順序付きリストを作成するステップであって、前記プロセッサは、前記オペレーティングシステムの前記新バージョンに対して各通常ファイルにわたり反復を実行して、前記新バージョンに関連付けられた全てのデータブロックの前記順序付きリストを取得する、作成するステップと、
前記プロセッサを用いて、差分更新ファイルが実際の更新ファイルであることを示すマジックナンバ指示子と、前記オペレーティングシステムの前記新バージョンを特定する新バージョン番号と、前記操作の順序付きリストを含むプロトコルバッファとを含む前記差分更新ファイルを組み立てるステップと
を含んでなる、コンピュータ可読オペレーティングシステムの更新を生成する方法。
【請求項2】
前記順序付きリスト内の1以上の操作は、データのチャンクを示すそれぞれのデータブロブにそれぞれ関連付けられ、前記差分更新ファイルは、前記それぞれのデータブロブを含むように組み立てられるものである、請求項1に記載の方法。
【請求項3】
前記順序付きリスト内の前記各操作は、クライアントデバイスのパーティションの1以上の特定のデータブロックに適用可能であり、前記操作は、前記パーティション内の前記データブロックのうちの少なくとも1つが、前記オペレーティングシステムの前記新バージョンのための前記クライアントデバイスの新しいパーティション内の別のブロックにコピーされることになるコピー操作と、前記データブロックのうちの少なくとも所与の1つがメモリに読み込まれ、前記差分更新ファイルのデータブロブを用いて前記少なくとも1つの所与のデータブロックに対して差分ルーチンが実行される差分操作と、前記差分更新ファイルの選択されたデータブロブが前記新しいパーティション内の指定ブロックに書き込まれるように構成される置換操作と、圧縮されたデータブロブが前記差分更新ファイルに含まれ、前記オペレーティングシステムの前記新バージョンのための前記新しいパーティション内の選択された指定ブロックに書き込まれるように構成される解凍付き置換操作とのうちの1以上のものを含む、請求項1又は2に記載の方法。
【請求項4】
前記順序付きリスト内の前記各操作は、ファイルオブジェクトに関連付けられており、前記方法は、
前記ファイルオブジェクトごとにグラフ内に頂点を作成することと、
前記各ブロックを表すベクトルを作成することと、
を更に含む、請求項1〜3のいずれか1項に記載の方法。
【請求項5】
前記各ブロックの前記ベクトルのリーダパラメータ及びライタパラメータを設定するステップと、
異なるリーダ及びライタを有する前記ブロックごとに、該ライタから該リーダへのエッジを前記グラフ内に作成するステップであって、前記エッジは、該エッジに関連付けられたソースファイル操作が開始する前に完了されるファイル操作を指し示すものである、作成するステップと
を更に含む、請求項4に記載の方法。
【請求項6】
前記各エッジは重みを有し、該重みは、そのエッジに関連付けられた前記グラフ内のブロックの数を特定する、請求項5に記載の方法。
【請求項7】
前記グラフがサイクルを含む場合、前記方法は、
前記サイクルのそれぞれを切断するステップを更に含む、請求項5又は6に記載の方法。
【請求項8】
前記サイクルのうちの所与の1つを切断するステップは、
前記所与のサイクルに関連付けられた最小重みのエッジを見つけることと、
前記最小重みのエッジをカットすることと
を含むものである、請求項7に記載の方法。
【請求項9】
前記最小重みのエッジをカットすることは、
エクステントをスクラッチスペースにコピーする操作を表す新しいノードを作成することと、
前記最小重みのエッジのソースノードに前記新しいノードを指し示させることと
を含むものである、請求項8に記載の方法。
【請求項10】
新しいコピー操作が該新しいコピー操作のコンシューマの前に行われることを保証するために、前記最小重みのエッジのデスティネーションノードから新しいエッジが作られるものである、請求項9に記載の方法。
【請求項11】
コンピュータ可読オペレーティングシステムの更新を生成するデバイスであって、
前記オペレーティングシステムに関連付けられた差分更新情報を格納するメモリと、
前記メモリに結合されたプロセッサであって、
前記オペレーティングシステムの現バージョンのバージョン番号を特定し、
前記オペレーティングシステムの前記新バージョンに対して各通常ファイルにわたり反復を実行して、前記新バージョンに関連付けられた全てのデータブロックの前記順序付きリストを取得することを含めて、前記差分更新情報を用いて、前記オペレーティングシステムの前記現バージョンを前記オペレーティングシステムの新バージョンに更新する操作の順序付きリストを作成し、
差分更新ファイルが実際の更新ファイルであることを示すマジックナンバ指示子と、前記オペレーティングシステムの前記新バージョンを特定する新バージョン番号と、前記操作の順序付きリストを含むプロトコルバッファとを含む前記差分更新ファイルを組み立て、
前記差分更新ファイルを前記メモリに格納する、ように構成されるプロセッサと
を備えてなる、コンピュータ可読オペレーティングシステムの更新を生成するデバイス。
【請求項12】
前記順序付きリスト内の前記各操作は、ファイルオブジェクトに関連付けられ、前記プロセッサは、
前記ファイルオブジェクトごとにグラフ内に頂点を作成し、
前記各ブロックを表すベクトルを作成する、
ように更に構成される、請求項11に記載のデバイス。
【請求項13】
前記プロセッサは、
前記各ブロックの前記ベクトルのリーダパラメータ及びライタパラメータを設定し、
異なるリーダ及びライタを有する前記ブロックごとに、該ライタから該リーダへのエッジを前記グラフ内に作成し、ここで、前記エッジは、該エッジに関連付けられたソースファイル操作が開始する前に完了されるファイル操作を指し示す、
ように更に構成される、請求項12に記載のデバイス。
【請求項14】
前記グラフがサイクルを含む場合、前記プロセッサは、前記サイクルのそれぞれを切断するように更に動作可能である、請求項13に記載のデバイス。
【請求項15】
前記サイクルのうちの所与の1つを切断することは、
前記所与のサイクルに関連付けられた最小重みのエッジを見つけることと、
前記最小重みのエッジをカットすることと
を含むものである、請求項14に記載のデバイス。
【請求項16】
前記プロセッサは、
エクステントをスクラッチスペースにコピーする操作を表す新しいノードを作成し、
前記最小重みのエッジのソースノードに前記新しいノードを指し示させる、
ことによって、前記最小重みのエッジをカットするように動作可能である、請求項15に記載のデバイス。
【請求項17】
新しいコピー操作が該新しいコピー操作のコンシューマの前に行われることを保証するために、前記最小重みのエッジのデスティネーションノードから新しいエッジが作られる、請求項16に記載のデバイス。
【請求項18】
コンピュータプログラムのコンピュータ可読命令が格納される有形のコンピュータ可読ストレージ媒体であって、前記命令は、コンピュータによって実行されると、コンピュータ可読オペレーティングシステムの更新を生成する手順を前記コンピュータに実行させ、前記手順は、
前記オペレーティングシステムの現バージョンのバージョン番号を特定する手順と、
プロセッサを用いて、前記オペレーティングシステムの前記現バージョンを前記オペレーティングシステムの新バージョンに更新する操作の順序付きリストを作成する手順であって、前記プロセッサは、前記オペレーティングシステムの前記新バージョンに対して各通常ファイルにわたり反復を実行して、前記新バージョンに関連付けられた全てのデータブロックの前記順序付きリストを取得する、作成する手順と、
前記プロセッサを用いて、差分更新ファイルが実際の更新ファイルであることを示すマジックナンバ指示子と、前記オペレーティングシステムの前記新バージョンを特定する新バージョン番号と、前記操作の順序付きリストを含むプロトコルバッファとを含む前記差分更新ファイルを組み立てる手順と
を含んでなる、コンピュータプログラムのコンピュータ可読命令が格納される有形のコンピュータ可読ストレージ媒体。
【請求項19】
前記順序付きリスト内の前記各操作は、ファイルオブジェクトに関連付けられており、
前記ファイルオブジェクトごとにグラフ内に頂点を作成する手順と、
前記各ブロックを表すベクトルを作成する手順と
を更に含む、請求項18に記載のストレージ媒体。
【請求項20】
前記各ブロックの前記ベクトルのリーダパラメータ及びライタパラメータを設定する手順と、
異なるリーダ及びライタを有する前記ブロックごとに、該ライタから該リーダへのエッジを前記グラフ内に作成する手順であって、前記エッジは、該エッジに関連付けられたソースファイル操作が開始する前に完了されるファイル操作を指し示す、作成する手順と
を更に含む、請求項19に記載のストレージ媒体。
【請求項21】
前記グラフがサイクルを含む場合には、
各所与のサイクルに関連付けられた最小重みのエッジを見つけることと、
前記各サイクルの前記最小重みのエッジをカットすることと
によって前記サイクルのそれぞれを切断する手順を更に含む、請求項20に記載のストレージ媒体。
【請求項22】
前記最小重みのエッジをカットすることは、
エクステントをスクラッチスペースにコピーする操作を表す新しいノードを作成することと、
前記最小重みのエッジのソースノードに前記新しいノードを指し示させることと
を含むものである、請求項21に記載のストレージ媒体。
【請求項23】
新しいコピー操作が該新しいコピー操作のコンシューマの前に行われることを保証するために、前記最小重みのエッジのデスティネーションノードから新しいエッジが作られる、請求項22に記載のストレージ媒体。
【請求項24】
オペレーティングシステムの現バージョンを格納するメモリと、
前記メモリに結合されたプロセッサと
を備えてなる、クライアントデバイスであって、
前記プロセッサは、
前記オペレーティングシステムの前記現バージョンの更新に関して遠隔デバイスに要求を送信し、ここで、該要求は、前記オペレーティングシステムの前記現バージョンを特定するバージョン番号を含み、
前記遠隔デバイスから差分更新ファイルを受信し、ここで、該差分更新ファイルは、該差分更新ファイルが実際の更新ファイルであることを示すマジックナンバ指示子と、前記オペレーティングシステムの前記新バージョンを特定する新バージョン番号と、操作の順序付きリストを含むプロトコルバッファとを含み、
前記マジックナンバを検証し、
前記プロトコルバッファから前記操作の順序付きリストを抽出し、
前記オペレーティングシステムの前記現バージョンを前記オペレーティングシステムの前記新バージョンに更新するために、前記操作の順序付きリストを実行することによって差分更新を実行する、
ように構成されている、クライアントデバイス。
【請求項25】
前記プロセッサは、前記差分更新ファイルが前記クライアントデバイスにストリーミングされている間に、前記メモリに前記差分更新ファイルを保存することなく、前記オペレーティングシステムの前記新バージョンへの前記オペレーティングシステムの前記差分更新を実行するように動作可能である、請求項24に記載のクライアントデバイス。

【図1】
image rotate

【図4B】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4A】
image rotate


【公表番号】特表2013−517565(P2013−517565A)
【公表日】平成25年5月16日(2013.5.16)
【国際特許分類】
【出願番号】特願2012−548998(P2012−548998)
【出願日】平成23年1月11日(2011.1.11)
【国際出願番号】PCT/US2011/020790
【国際公開番号】WO2011/088022
【国際公開日】平成23年7月21日(2011.7.21)
【出願人】(502208397)グーグル インコーポレイテッド (161)
【Fターム(参考)】