(57)【要約】最適化ファイル動作のためにファイルをグループ化する種々の技法および解決手段について説明する。例えば、グループ化した複数のファイルに対して、ファイル動作（例えば、標準的なファイル動作）を受けることができる。ファイル動作に関係するデータをキャッシュに格納することができる。次いで、最適化ファイル動作を決定することができる。例えば、セクター使用情報を更新するため、ファイル・データを書き込むため（例えば、キャッシュから）、フォルダ・メタデータ情報を更新するため、および／または他のファイル関係活動を実行するために、最適化ファイル動作を決定し実行することができる。最適化ファイル動作は、データを外部副ストレージに書き込むために実行することができる。ファイルの書き込みのような最適化ファイル動作のためにファイルをグループ化することは、多数の独立して最適化された１つ１つのファイル・パターンを書き込むよりも効率的であることができる。サービスおよびアプリケーションからファイル動作を受け、グループ化し、最適化するために、アプリケーション・プログラミング・インターフェース（ＡＰＩ）を設けることができる。【選択図】図１
2016515258.tif 000002
【特許請求の範囲】
【請求項１】
最適化ファイル動作のためにファイルをグループ化するために少なくとも部分的に計算デバイスによって実施される方法であって、
前記計算デバイスのコンポーネントによって、複数のファイルに対してファイル動作を実行する要求を受けるステップと、
前記計算デバイスの前記コンポーネントによって、前記複数のファイルの指示を受けるステップと、
前記複数のファイルの各ファイルに対して、
前記計算デバイスの前記コンポーネントによって、前記ファイルに対して実行する１つ以上のファイル動作の指示を受けるステップと、
前記計算デバイスの前記コンポーネントによって、前記複数のファイルに対する最適化ファイル動作を決定するステップと、
前記計算デバイスの外部副ストレージを使用して、前記最適化ファイル動作を実行するステップと、
を含む、方法。
【請求項２】
請求項１記載の方法において、前記複数のファイルに対してファイル動作を実行する前記要求が、前記複数のファイルに対してデータを書き込む要求を含む、方法。
【請求項３】
請求項１記載の方法において、前記計算デバイスの前記コンポーネントが、前記計算デバイスのオペレーティング・システムによって設けられるファイル最適化コンポーネントである、方法。
【請求項４】
請求項１記載の方法において、前記複数のファイルに対して前記最適化ファイル動作を決定する前記ステップが、
複数の(a number of)セクター使用更新を統合するステップを含む、方法。
【請求項５】
請求項４記載の方法において、前記複数のセクター使用更新を統合するステップが、複数のセクター使用更新から１つのセクター使用更新に、セクター使用更新の前記数を減らすステップを含む、方法。
【請求項６】
請求項１記載の方法において、前記複数のファイルに対して前記最適化ファイル動作を決定する前記ステップが、
減少した回数のファイル書き込み動作を生成するために、前記複数のファイルに対するファイル書き込み動作を統合するステップを含む、方法。
【請求項７】
請求項１記載の方法において、前記複数のファイルに対して前記最適化ファイル動作を決定する前記ステップが、
減少した回数のフォルダ・メタデータ更新動作を生成するために、前記複数のファイルに関連付けられたフォルダ・メタデータ更新動作を統合するステップを含む、方法。
【請求項８】
請求項１記載の方法において、前記計算デバイスの前記外部副ストレージが、セキュア・ディジタル（ＳＤ）ストレージ・カード、マルチメディアカード（ＭＭＣ）ストレージ・カード、およびユニバーサル・シリアル・バス（ＵＳＢ）ストレージ・デバイスの内１つである、方法。
【請求項９】
計算デバイスであって、
処理ユニットと、
メモリと、
外部副ストレージ・カードと、
を含み、
前記計算デバイスが、最適化ファイル動作のためにファイルをグループ化する動作を実行するように構成され、前記動作が、
複数のファイルに対してファイル動作を実行する要求を受ける動作と、
前記複数のファイルの指示を受ける動作と、
前記複数のファイルの各ファイルに対して、
前記ファイルに対して実行する１つ以上のファイル動作の指示を受ける動作と、
前記１つ以上のファイル動作に関係するデータをキャッシュに格納する動作であって、前記キャッシュが前記計算デバイスの前記メモリ内に格納される、動作と、
前記複数のファイルの各々に対して実行する１つ以上のファイル動作の前記受けた指示に少なくとも部分的に基づいて、前記複数のファイルに対する最適化ファイル動作を決定する動作と、
前記計算デバイスの外部副ストレージ・カードを使用して、前記最適化ファイル動作を実行する動作と、
を含む、計算デバイス。
【請求項１０】
最適化ファイル動作のためにファイルをグループ化する方法を計算デバイスに実行させるコンピューター実行可能命令を格納するコンピューター読み取り可能記憶媒体であって、前記方法が、
複数のファイルに対してファイル動作を実行する要求を受けるステップと、
前記複数のファイルの各ファイルに対して、
前記ファイルの指示を受けるステップと、
前記ファイルに対して実行する１つ以上のファイル動作を受けるステップと、
前記ファイルに対して実行する前記１つ以上のファイル動作に関連付けられたデータをキャッシュするステップと、
前記ファイルに対してファイル動作が完了したという指示を受けるステップと、
前記計算デバイスの外部副ストレージにおいてセクター使用表を更新するために、１回の最適化ファイル動作を決定し実行するステップと、
前記複数のファイルのためにキャッシュした前記データを前記外部副ストレージに書き込むために、最適化ファイル動作を決定し実行するステップと、
前記複数のファイルに関連付けられたフォルダ・メタデータを、前記外部副ストレージにおいて更新するために、最適化ファイル動作を決定し実行するステップと、
を含む、コンピューター読み取り可能記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[001]  移動体電話機およびタブレットのようなデバイスは、ファイルを格納するための、フラッシュ・メモリのような内部メモリが制限されていることが多い。制限された内部メモリを補うために、このようなデバイスは、セキュア・ディジタル（ＳＤ）メモリ・カードまたはユニバーサル・シリアル・バス（ＵＳＢ）メモリ・スティックのような、外部メモリ・カードを使用して、デバイスの記憶容量の拡張に備えることが多い。外部メモリ・カードはデバイスの記憶容量を大幅に増大するが、これらは内部メモリよりも一般にアクセスが遅い。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
[002]  より大きなブロック・サイズを使用するというような、ブロックおよびファイル・レベルで外部メモリ・カードへのアクセスを高速化するいくつかの試みが行われている。このような試みは、例えば、ファイルの一部を書き込むときには、何らかの改善が得られることもあるが、多数のファイルを書き込む、または他のファイル関係動作を実行するときというような、更に高いレベルでは、最適化を提供することができない。
【０００３】
[003]  したがって、ファイル動作を最適化することに関する技術において、広い改善の余地がある。
【課題を解決するための手段】
【０００４】
[0004]  この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
【０００５】
[005]  最適化ファイル動作のためにファイルをグループ化する技法およびツールについて説明する。例えば、ファイル動作（例えば、標準的なファイル動作）は、複数のファイルのために受けることができる。ファイル動作に関係するデータは、キャッシュに格納することができる。次いで、最適化ファイル動作を決定することができる。例えば、最適化ファイル動作は、セクター使用情報(sectors used information)を更新するため、ファイル・データを書き込むため（例えば、キャッシュから）、フォルダ・メタデータ情報を更新するため、および／または他のファイル関係活動を実行するために、決定し実行することができる。最適化ファイル動作は、データを外部の副ストレージに書き込むために実行することができる。
【０００６】
[006]  例えば、最適化ファイル動作のためにファイルをグループ化する方法を提供することができる。この方法は、例えば、計算デバイスのファイル・オプティマイザー・コンポーネント(file optimizer component)によって実行することができる。この方法は、複数のファイルに対してファイル動作を実行する要求を受けるステップと、前記複数のファイルの指示を受けるステップと、複数のファイルの各ファイルに対して、前記ファイルに対して実行する１つ以上のファイル動作の指示を受けるステップと、前記複数のファイルに対する最適化ファイル動作を決定するステップと、計算デバイスの外部副ストレージを使用して前記最適化ファイル動作を実行するステップとを含む。１つ以上のファイル動作に関係するデータは、キャッシュに格納することができる。
【０００７】
[007]  他の例として、最適化ファイル動作のためにファイルをグループ化する方法を提供することができる。この方法は、例えば、計算デバイスのファイル・オプティマイザー・コンポーネントによって実行することができる。この方法は、複数のファイルに対してファイル動作を実行する要求を受けるステップと、複数のファイルの各ファイルに対して、ファイルの指示を受けるステップと、ファイルに対して実行する１つ以上のファイル動作を受けるステップと、ファイルに対して実行する１つ以上のファイル動作に関連付けられたデータをキャッシュするステップと、ファイルに対してファイル動作が完了した指示を受けるステップとを含む。更に、この方法は、計算デバイスの外部副ストレージにおいてセクター使用表を更新するために、１回の最適化ファイル動作を決定し実行するステップと、複数のファイルのためにキャッシュしたデータを外部副ストレージに書き込むために、最適化ファイル動作を決定し実行するステップと、複数のファイルに関連付けられたフォルダ・メタデータを、外部副ストレージにおいて更新するために、最適化ファイル動作を決定し実行するステップとを含む。
【０００８】
[008]  他の例として、本明細書において説明する動作を実行するために、処理ユニットと、メモリと、外部ストレージ・カードとを含む計算デバイスを提供することができる。例えば、移動体電話機のような、移動体計算デバイスが、最適化ファイル動作のためにファイルをグループ化するファイル・オプティマイザー・コンポーネントを含むことができる。
【０００９】
[009]  本明細書において説明するように、種々の他の特徴および利点を、所望に応じて、本技術に組み込むことができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、本明細書において説明する種々のファイル最適化技法を実行するための計算環境例のブロック図である。
【図２】図２は、最適化ファイル動作のためにファイルをグループ化する方法例のフローチャートである。
【図３】図３は、最適化ファイル動作のためにファイルをグループ化する他の方法例のフローチャートである。
【図４】図４は、キャッシュ・メモリおよび外部副ストレージを使用して、最適化ファイル動作のためにファイルをグループ化する方法例のフローチャートである。
【図５】図５は、最適化ファイル動作のためにファイルをグループ化する制御フロー例の図である。
【図６】図６は、説明する実施形態を実現することができる計算システム例の図である。
【図７】図７は、本明細書において説明する技術と併せて使用することができる移動体デバイスの一例である。
【図８】図８は、本明細書において説明する技術と併せて使用することができるクラウド−サポート環境の一例である。
【発明を実施するための形態】
【００１１】
例１−全体像
[018]  本明細書において説明するように、種々の技法および解決手段は、最適化ファイル管理のためのファイルのグループ化に適用することができる。例えば、ファイルは、書き込み、移動、削除、セクター更新、フォルダ更新、および／または他のファイル関係動作の最適化のためにグループ化することができる。最適化ファイル管理のためにファイルをグループ化することによって、書き込み動作におけるランダム・シーケンスの減少、および／または書き込みシーケンスの長さの増大を含む利点を得ることができる。
【００１２】
[019]  本明細書において説明する技法および解決手段では、上位サービスおよび／またはアプリケーションからの情報が、ファイル・ストレージ・コンポーネントまたはキャッシング・コンポーネントによって実行されるファイル動作のような、ファイル動作を最適化するために利用される。ファイル動作について上位情報を利用することによって、ファイルの一部に特定的なだけでなく、多数のファイルおよび／またはフォルダにわたって適用される最適化を実現することができる。例えば、これは、速度が遅い副ストレージ・デバイスのようなストレージ・デバイスにアクセスするときに、大量のデータを事実上シーケンシャルにする、つまり帯域幅利用度を高めることを可能にすることができる。更に、フォルダおよびパーティション編成ブロック（例えば、ファイル割り当て表（ＦＡＴ）マップ、フォルダ構造リスト等）に対する更新をへらしつつ（例えば、より少ない動作、または単に１回の動作を使用する）、多数のファイルに対する更新を行うことができる。
【００１３】
[020]  最適化シナリオの一例では、サービスおよびアプリケーションが、ストレージ・スタックに、一連の動作が一緒に行われようとしている（例えば、グループとして）ことを通知することができる。例えば、新たなソフトウェア・アプリケーションをインストールするために、４つのファイルを書き込むことができる。ストレージ・スタックは、この一連の動作（例えば、標準的なファイル動作）を受けることができる。ある実施態様では、ストレージ・スタックはデータをキャッシュに格納する。この一連の動作の終了時に、ストレージ・スタックは、最適化動作（例えば、集計動作）を決定し実行することができる。例えば、新たなソフトウェア・アプリケーションをインストールために４つのファイルが書き込まれる場合、ストレージ・スタックは、４つのファイル全て（例えば、キャッシュから書き出される）をカバーする１回の書き込みシーケンシャル・シーケンス(write sequential sequence)を実行することができ、フォルダおよびパーティション・オーバーヘッド更新の回数が減少する結果となる。同様の節約は、ファイルのフォルダを移動させる、アプリケーションをアンインストールするために多くのファイルを削除する、ムービーを編集するときに様々なファイルを更新する等のような、他のグループ化動作についても実現することができる。
【００１４】
[021]  本明細書において説明する技法および解決手段は、多数のファイルに対してファイル動作を実行するときに利点が得られ、ある状況では、１つのファイルに対しても同様に利点を得ることができる。例えば、本技法および解決手段は、多数の画像ファイル、ムービー・ファイル、または他のファイルを、外部ストレージ・カードのような副ストレージに書き込む動作(performance)を改善することができる。
【００１５】
例２−副ストレージ 
[022]  本明細書における例ではいずれも、計算デバイスのストレージは、主ストレージ（例えば、ＲＡＭ）、内部副ストレージ、および外部副ストレージにセグメント化される。内部副ストレージとは、通例、計算デバイスの内部にある、または内蔵される、比較的高速なストレージを指す。内部副ストレージの例には、ハード・ドライブ、ソリッド・ステート・ドライブ（ＳＳＤ）、内蔵フラッシュ・ストレージ等が含まれる。外部副ストレージとは、通例、計算デバイスに内蔵されない（例えば、スロットまたは外部コネクターを介して計算デバイスに接続される、差し込まれる）、比較的遅いストレージ（内部副ストレージよりも相対的に遅い）を指す。外部副ストレージの例には、セキュア・ディジタル（ＳＤ）カード、マルチメディアカード（ＭＭＣ）ストレージ・カード、ユニバーサル・シリアル・バス（ＵＳＢ）フラッシュ・ドライブ等が含まれる。
【００１６】
[023]  外部副ストレージ・デバイスは、比較的遅いストレージ・デバイスである（内部副ストレージまたは主ストレージよりも相対的に遅い）。例えば、外部副ストレージ・デバイス（例えば、外部副ストレージ・カード）は、通例、帯域幅が制限される、および／または内部副ストレージ・デバイス（例えば、ハード・ドライブ）と比較して、アクセス時間が遅い。更に、多くの外部副ストレージ・デバイスは、ランダム動作では、シーケンシャル動作に関しては更に遅くなる。
【００１７】
例３−ファイル最適化の例
[024]  本明細書において説明する最適化技法および解決手段を使用せずにファイル書き込みを実行すると、ファイル毎に多くの動作を必要とする可能性がある。以下の擬似コードの例は、ファイルを書き込むときに通例行われる動作を表す（例えば、典型的なまたは標準的なファイル・システム動作を使用してファイルを書き込むとき）。
【００１８】
１．ファイル毎に：
ａ．アプリケーション／サービスはファイル・ハンドルを得る。
ｂ．書き込み動作毎に、
ｉ．最初に、記憶媒体がセクター使用表(sector being used table)を更新する。
ｉｉ．次いで、特定のサイズのチャンク／ブロブにデータを書き込む（例えば、５１２バイトの倍数）。
ｃ．次いで、フォルダ・メタデータを更新する。
ｉ．新たなファイル・エントリー
ｉｉ．または、新たなファイル長
[025]  ３つの新しいファイルが書き込まれており（訳注：３つは４つの間違いと思われます）、４つの新しいファイルは各々５１２ＫＢであり、４ＫＢチャンクを使用して書き込まれるという状況例について考える。先の擬似コードを使用すると（例えば、標準的なファイル・システム動作を使用する）、４つのファイルを書き込むには、以下の動作を実行する必要がある。
−１（ｂ）（ｉ）ステップに対する５１２セクターの更新動作（ファイル毎に１２８セクター更新動作）。
−１（ｂ）（ｉｉ）ステップに対する５１２データ書き込み動作（ファイル毎に１２８データ書き込み動作、５１２ＫＢファイルの４ＫＢチャンクに対する各データ書き込み。
−１（ｃ）ステップに対する４フォルダ・メタデータ動作（ファイル毎に１回のフォルダ・メタデータ動作）。
[026]  この例によって示されるように、典型的なファイル記憶解決手段を使用してファイルを書き込むと、ファイル毎に多くの別個の動作を必要とする可能性がある。以上の例では、４つの５１２ＫＢファイルだけを書き込むために、１，０２８回の別個の動作が要求される。多数の動作およびそれらのシーケンス処理は、特に、遅い方の外部副ストレージ（例えば、ＳＤカード）を使用するときに、格納動作に大きな影響を及ぼす可能性がある。
【００１９】
[027]  本明細書において説明する技法および解決手段を使用すると、ファイル動作を最適化し（例えば、集計する）、ストレージ・リソース（例えば、帯域幅、応答時間等）の一層効率的な利用に備えることができる。各々５１２ＫＢである４つの新しいファイルを書き込むという先の例を使用すると、以下の最適化動作を実行することができる。
−１回のセクター更新動作（例えば、最初にファイル動作の全てを受けてキャッシュすることによって、または最終ファイル・サイズの通知を受けて、４つのファイル全てを書き込むときに使用されるセクターを計算することによって）。
−２回のデータ書き込み動作（例えば、最初に個々のデータ書き込みの全てを受けてキャッシュし、この書き込みを２つの１ＭＢデータ書き込みシーケンスに集計することによって。各データ書き込みシーケンスは、４つのファイルの内２つのデータを書き込む）。
−１回のフォルダ・メタデータ動作（例えば、４つの新しいファイルに対するフォルダ更新を１回のメタデータ更新動作に組み合わせることによって）。
[028]  先に示したように、本明細書において説明する技法および解決手段を使用すると、ファイル管理を実行するために必要とされる動作の回数を大幅に減らすことができる。以上の状況例が例示するように、４つの５１２ＫＢファイルを書き込むとき、１，２０８回の個別動作（例えば、その殆どまたは全ては、別個にストレージ・デバイスにアクセスする必要があると考えられる）を、４回の個別最適化動作に減らすことができる。
【００２０】
[029]  元の（最適化されない）動作は、ランダム・シーケンス処理が行われるという欠点があり、セクター使用を追跡する書き込み（先のステップ（ｂ）（ｉ））が実際のデータ書き込みと混合される。このランダム・シーケンス処理は、外部メモリ上で動作が完了する速度を劇的に低下させる可能性がある（シーケンシャル・シーケンスと比較して）。最適化ファイル動作を使用すると、１回の更新を最初に実行することができるので（例えば、自由空間ビットマップを更新するexFAT（拡張ファイル割り当て表）パーティション上）、データ書き込みは全てシーケンシャルにすることができる（exFATは、 Microsoft Corporationによって提供されるファイル・システムである）。
【００２１】
例４−最適化ファイル動作のための環境
[030]  本明細書における例ではいずれも、移動体電話機、タブレット、または他のタイプの計算デバイスというような計算デバイスは、最適化ファイル動作のためにファイルをグループ化するコンポーネントをサポートすることができる。例えば、オペレーティング・システム内部および／または計算デバイスの他のコンポーネントの内部に（例えば、ドライバーによって）ファイル・オプティマイザー・コンポーネントを実装することができる。
【００２２】
[031]  図１は、最適化ファイル動作のためにファイルをグループ化するために、本明細書において説明する技法および解決手段を実現することができる計算デバイス例１１０を示す図である。計算デバイス１１０は、サービスおよびアプリケーション１２０を含む。サービスおよびアプリケーション１２０は、計算デバイス１１０上で実行する種々のソフトウェア・サービスおよびソフトウェア・アプリケーションを表す。サービスおよびアプリケーション１２０の例には、ムービー編集アプリケーション、音楽アプリケーション、ソフトウェア・インストーラ・アプリケーション、ファイル・ブラウザー・アプリケーション等が含まれる。
【００２３】
[032]  計算デバイス１１０は、オペレーティング・システム１３０を含む。オペレーティング・システムは、ファイル・システム動作およびメモリ管理というような、計算デバイス１１０の動作を制御することができる。
【００２４】
[033]  計算デバイス１１０は、ストレージ１５０を含む。ストレージ１５０は、内部副ストレージおよび／または外部副ストレージとすることができる。ある実施形態では、ストレージ１５０は外部副ストレージ（例えば、ＳＤカード）である。
【００２５】
[034]  計算デバイス１１０は、任意のタイプの計算デバイスとすることができる（例えば、デスクトップ・コンピューター、サーバー・コンピューター、ラップトップ・コンピューター、ノートブック・コンピューター、タブレット・コンピューター、移動体電話機、スマート・フォン、マルチメディア・デバイス、パーソナル・ディジタル・アシスタント（ＰＤＡ）等）。ある実施態様では、計算デバイス１１０は、外部副ストレージ（例えば、ＳＤカードまたはＭＭＣカード）を追加のファイル・ストレージ（例えば、限られた量の内部副ストレージを拡張するため）として使用する、移動体電話機またはタブレット・コンピューターである。
【００２６】
[035]  計算デバイス１１０は、ファイル・オプティマイザー１４０コンポーネントを含む。ファイル・オプティマイザーは、計算デバイス１１０のソフトウェアおよび／またはハードウェアで実現することができる。図１に示すように、ファイル・オプティマイザー１４０は、計算デバイスのオペレーティング・システム１３０の一部として、および／または計算デバイス１１０の別のコンポーネントとして（例えば、ストレージ・ドライバーの一部として）実装することができる。
【００２７】
[036]  ファイル・オプティマイザー１４０は、最適化ファイル動作のためにファイルをグループ化するために、本明細書において説明する技法および解決手段をサポートする。例えば、ファイル・オプティマイザー１４０は、ファイル・オプティマイザー１４０にアクセスするためのアプリケーション・プログラミング・インターフェース（ＡＰＩ）を設けることができる。このＡＰＩは、オペレーティング・システム１３０によってアクセスすることができる。例えば、オペレーティング・システム１３０は、ファイル要求をサービスおよびアプリケーション１２０から、標準的なオペレーティング・システム動作を通じて受けることができる。次いで、オペレーティング・システム１３０は、ファイル・オプティマイザー１４０を使用して、ファイル要求をグループ化および最適化することができる（例えば、ファイル・オプティマイザー１４０を利用するためにサービスおよびアプリケーション１２０を書き直す必要なく）。ＡＰＩがオペレーティング・システム１３０によってアクセスされる代わりに、またはそれに加えて、サービスおよびアプリケーション１２０によって直接ＡＰＩにアクセスすることができる。例えば、サービスおよびアプリケーション１２０は、ファイル・オプティマイザー１４０に直接アクセスすることができる（例えば、オペレーティング・システム１３０内部に設けられる、および／または、計算デバイス１１０の、ストレージ・ドライバーのような、他のコンポーネントによって設けられる）。
【００２８】
[037]  ファイル・オプティマイザー１４０は、最適化ファイル動作のためにファイルをグループ化することに関係する種々のコマンドおよび要求をサポートする。例えば、ファイル・オプティマイザー１４０は、複数のファイルに対してファイル動作を実行する要求（例えば、マルチファイル・ストリームを開く）をサポートすることができる。ファイル・オプティマイザー１４０は、複数のファイルの各々について情報および実行する動作を受けることができる（例えば、ファイル名のようなファイル識別子を受ける、ファイル・ハンドルを得る、ファイルをロックする、ファイルに書き込むデータを受ける等）。ファイル・オプティマイザー１４０は、データ（例えば、ファイルに書き込まれるデータ）をキャッシュに（例えば、計算デバイス１１０のメモリ内に格納されたキャッシュに）保存することができる。次いで、ファイル・オプティマイザー１４０は、実行する最適化（例えば、集計）動作を決定することができる。例えば、ファイル・オプティマイザー１４０は、実行する使用セクター更新動作(used sector update operation)の回数を減らすことを決定し、実行することができる（例えば、複数のファイルに対するファイル動作の全てに相当する(account for)１回の使用セクター表更新動作）。ファイル・オプティマイザー１４０は、複数のファイルに対してデータを書き込むための最適化動作を決定し実行することができる（例えば、ファイル毎に、キャッシュから、ＳＤカードのようなファイル・ストレージ・デバイスにそのファイルの全データを書き込むために、１回の最適化ファイル動作を実行する、または１組の統合最適化ファイル動作を実行する）。ファイル・オプティマイザー１４０は、フォルダ情報を更新する最適化動作を決定し実行することができる（例えば、複数のファイルのために実行される動作に関連付けられた全てのフォルダのメタデータを更新するための動作を、回数を減らして実行する、または１回の動作を実行する）。ファイル・オプティマイザー１４０は、これらの動作の結果を提供することができる（例えば、成功または失敗を、オペレーティング・システム１３０および／またはサービスおよびアプリケーション１２０のような他のコンポーネントに報告する）。
【００２９】
例５−最適化ファイル動作を実行する方法
[038]  本明細書における例ではいずれも、最適化ファイル動作を実行する方法を提供することができる。例えば、最適化ファイル動作は、多数のファイルのグループに対して実行することができる（例えば、外部副ストレージを使用するとき）。
【００３０】
[039]  図２は、最適化ファイル動作のためにファイルをグループ化する方法例２００のフローチャートである。方法例２００は、例えば、図１に示したファイル・オプティマイザー１４０によって実行することができる。２１０において、複数のファイルに対してファイル動作を実行する要求を受ける。この要求は、例えば、計算デバイスのコンポーネント（例えば、ファイル最適化コンポーネントのＡＰＩを介してファイル最適化コンポーネントによって）によって受けることができる。
【００３１】
[040]  ２２０において、複数のファイルの指示を受ける。この指示は、ファイル名、パス名、ファイル識別子、ファイル・ハンドル、および／または複数のファイルを識別するまたはこれらに関連付けられた他の情報を含むことができる。
【００３２】
[041]  ２３０において、複数のファイルの各々に対して実行する１つ以上のファイル動作の指示を受ける（訳注：動詞がありません。図２を参考にしました。）。例えば、ファイル毎に実行する１つ以上のファイル動作は、１つ以上のファイル書き込み動作、１つ以上のファイル削除動作、１つ以上のファイル移動動作等を含むことができる。例えば、１ＭＢファイルが書き込まれている場合、１つ以上のファイル動作は、各々１ＭＢファイルの内１０ＫＢを書き込むために１００個の個々のファイル動作を含むことができる。
【００３３】
[042]  ２４０において、受けたファイル動作の指示２３０に基づいて、複数のファイルに対する最適化ファイル書き込み動作を決定する。最適化ファイル書き込み動作は、減少した数の動作（例えば、統合または集計された動作）を含むことができる。例えば、１００回のファイル書き込み動作を２３０において受けた場合、最適化ファイル書き込み動作は、１００回のファイル動作全てを集計した１回の書き込み動作（例えば、１回の１ＭＢ書き込み動作）を含むことができる。他の例として、セクター使用更新の回数は、少ない回数のセクター使用更新として、または１回のセクター使用更新として最適化することができる（例えば、セクター使用表を更新するため）。最適化ファイル書き込み動作に加えて、またはその代わりに、他の最適化ファイル動作を２４０において決定し実行することもできる。
【００３４】
[043]  ２５０において、決定した最適化ファイル・ファイル動作を実行する。例えば、最適化ファイル動作は、外部の副ストレージ・デバイス（例えば、ＳＤカード）を使用して実行することができる。最適化ファイル動作の実行は、データを書き込む、使用セクター情報を更新する、ファイル／フォルダ情報（例えば、フォルダ・メタデータ）を更新する、および／または他のタイプの最適化ファイル動作を実行することを含むことができる。
【００３５】
[044]  図３は、最適化ファイル動作のためにファイルをグループ化する他の方法例３００のフローチャートである。この方法例３００は、例えば、図１に示したファイル・オプティマイザー１４０によって実行することができる。３１０において、複数のファイルに対してファイル動作を実行する要求を受ける。この要求は、例えば、計算デバイスのコンポーネントによって（例えば、ファイル最適化コンポーネントのＡＰＩを介してファイル最適化コンポーネントによって）受けることができる。
【００３６】
[045]  ３２０において、複数のファイルの各ファイルに対して、ある数のアクションを実行する。これらのアクションは、ファイルの指示（例えば、ファイル名、パス名、ファイル識別子、ファイル・ハンドル、および／またはファイルを識別するまたはファイルに関連付けられた他の情報）を受けるアクションを含む。また、これらのアクションは、ファイルに対して実行する１つ以上のファイル動作（例えば、書き込み動作、移動動作等）を受けるアクションを含む。また、これらのアクションは、ファイルに対して実行する１つ以上のファイル動作に関連付けられたデータをキャッシュするアクションも含む（例えば、多数回の書き込み動作からの書き込みデータをキャッシュ・メモリにキャッシュすることによって）。最後に、これらのアクションは、ファイル動作がそのファイルに対して完了した指示を受けるアクションを含む。
【００３７】
[046]  ３３０において、セクター使用表を更新するために、１回の最適化ファイル動作を決定し実行する（例えば、外部副ストレージ上で表を更新する）。例えば、複数のファイルの内全てのファイルに対する使用セクターを計算し、セクター使用表を更新する１回の動作に組み合わせることができる。
【００３８】
[047]  ３４０において、複数のファイルに対してキャッシュされたデータを書き込む最適化ファイル動作を決定し実行する。例えば、３２０において１００回のファイル書き込み動作を特定のファイル（各々１０ＫＢのデータを書き込むため）に対して受け、書き込みデータをキャッシュする場合、最適化ファイル動作は、キャッシュから外部副ストレージに１ＭＢのデータを書き込む１回の１ＭＢ書き込み動作を生成する(create)ために、１００回のファイル動作全てを集計する１回の書き込み動作を含むことができる。他の例として、１００回の書き込み動作は、各々５１２ＫＢのデータを書き込む２回の最適化ファイル書き込み動作として実行することもできる。他の例として、多数のファイルに対してデータを書き込むために、１回の書き込み動作を決定し実行することができる（例えば、１回の２ＭＢ書き込み動作を生成するために、２００回のファイル動作を集計する。つまり、各々１０ＫＢのデータを書き込む動作ための２つのファイルの各々に対する１００回のファイル動作を集計する）。
【００３９】
[048]  他の例として、多くの小さいファイルを受けた場合（例えば、マップの「タイル」毎のファイルによるマッピング・プログラム）、オプティマイザーは、大きな最適化データ書き込みの各々で、多数のファイルを書き込むことができる。この解決手段では、全てのファイル・データの格納を完了するために、セクター使用の１回の更新（ステップ（ｂ）（ｉ））を、最小回数の大きな書き込みと共に実行することができる。
【００４０】
[049]  ３５０において、複数のファイルに関連付けられたフォルダ・メタデータを更新するために、最適化ファイル動作を決定し実行する。例えば、複数のファイルの全てに対してフォルダ・メタデータを更新する１回の動作を決定し実行することができる。
【００４１】
[050]  図４は、キャッシュ・メモリおよび外部副ストレージを使用して、最適化ファイル動作のためにファイルをグループ化する他の方法例４００のフローチャートである。方法例４００は、例えば、図１に示したファイル・オプティマイザー１４０によって実行することができる。
【００４２】
[051]  ４１０において、サービスまたはアプリケーションが、複数のファイルに対してファイル動作を実行する要求を開始する（例えば、マルチファイル・ストリームのため）。例えば、サービスまたはアプリケーションは、オペレーティング・システムによって、または他のシステム・コンポーネントによって（例えば、ストレージ・ドライバーによって）設けられるＡＰＩをコールすることによって、この要求を開始することができる。特定の実施態様では、サービスまたはアプリケーションは、この要求を開始するために、マルチファイル・ストリームに対するファイル・ハンドルを得る。
【００４３】
[052]  ４２０において、ファイル毎のファイル動作をサービスまたはアプリケーション４１０から受ける（例えば、複数のファイルの全てのファイルに対して）。ファイル動作は、ファイル書き込み動作、ファイル移動動作、ファイル削除動作、ファイル作成動作、ファイル・ロック動作、ファイル処理動作(file handle operation)等を含むことができる。特定の実施態様では、これらの動作は、ファイル毎に、ファイルをロックする、１つ以上の動作においてファイルに対する書き込みデータを受ける、およびファイルに対する動作を終了することを含む。
【００４４】
[053]  ファイル受け取り動作４２０に対するデータ（例えば、書き込まれるファイル・データ）をキャッシュ・メモリに格納する（４３０）。例えば、計算デバイスの内部システム・メモリ（例えば、ＲＡＭまたはフラッシュ）にキャッシュ・メモリを格納することができる。
【００４５】
[054]  ４４０において、動作が実行された後にファイルによって使用されるセクターの数を判定するために計算を実行する。次いで、この計算を使用して、外部副ストレージ上でセクター使用情報を更新する（４５０）（例えば、セクター使用情報を更新するための１回の最適化動作によって）。
【００４６】
[055]  ４６０において、複数のファイル（例えば、複数のファイルの全てのファイル）の各々に対するキャッシュ・メモリ４３０からのデータを、最適化動作を使用して、外部副ストレージに書き込む（４５０）。例えば、各々４ＫＢチャンクの２０回のファイル書き込みを使用して、２つのファイルを更新している場合、データー（ファイル毎に８０ＫＢ）をキャッシュ・メモリ４３０に格納する。次いで、４６０において、このファイルの８０ＫＢのデータをキャッシュ・メモリ４３０から外部副ストレージ４５０に書き込むために、１回の最適化動作を使用することができる。１回の最適化動作の代わりに、異なる回数の最適化動作を使用してデータを書き込むこともできる。この場合、異なる回数の最適化動作は、未だ当初の２０回のファイル書き込みよりも少ない。
【００４７】
[056]  ４７０において、最適化動作を使用して、フォルダ・メタデータを更新する。例えば、ファイル動作が行われている複数のファイルの全てのファイルに対してフォルダ・メタデータを更新するために、１回の最適化動作を使用することができる。
【００４８】
例６−最適化ファイル動作を実行するための情報の流れ
[057]  本明細書における例ではいずれも、最適化ファイル動作を実行するために、情報フローを供給することができる。例えば、多数のファイルから成るグループに対して最適化ファイル動作を実行することができる（例えば、外部副ストレージを使用するとき）。
【００４９】
[058]  図５は、最適化ファイル動作のためにファイルをグループ化する情報フロー例５００のフローチャートである。情報フロー例５００では、サービスまたはアプリケーション５１０が、複数のファイルに対してファイル動作を実行するために、ファイル・オプティマイザー・コンポーネント５２０（例えば、オペレーティング・システムの一部としてまたは別個に設けられる）をコールする。あるいは、オペレーティング・システムがファイル・オプティマイザー５２０をコールすることもできる（サービスまたはアプリケーション５１０の代わりに）。例えば、オペレーティング・システムは、ファイル動作をサービスまたはアプリケーション５１０から受けて、ファイル・オプティマイザー５２０をコールすることができる（したがって、例えば、ファイル・オプティマイザー５２０を直接利用するために再書き込みされる代わりに、サービスまたはアプリケーション５１０のみが、標準的なオペレーティング・システムのファイル格納機能(facilities)を処理すればよい）。
【００５０】
[059]  情報フロー例５００に示すように、サービスまたはアプリケーション５１０は、最初に、マルチファイル・ストリームになる要求（複数のファイルに対するファイル動作）を送る。例えば、サービスまたはアプリケーション５１０は、マルチファイル・ストリーム・ハンドルを得ることによって、マルチファイル・ストリームを開始することができる。
【００５１】
[060]  情報フロー例５００に示すように、サービスまたはアプリケーション５１０は、次に、複数のファイルの各ファイルに対してアクションのシーケンス５４０を実行する。アクションのシーケンス５４０は、ファイルをロックする、ファイルに対するデータを書き込みキャッシュする、およびファイルに対する動作を終了することを含む。ある実施態様では、ファイルのロックは５１０または５２０によって自動的に実行することができる（例えば、ファイル・システムＡＰＩを使用するとき）。
【００５２】
[061]  情報フロー例５００に示すように、サービスまたはアプリケーション５１０は、次に、マルチファイル・ストリームを終了する要求を送る。マルチファイル・ストリームを終了する要求は、サービスまたはアプリケーション５１０が５４０において複数のファイルに対するファイル動作を完了したことを示す。
【００５３】
[062]  情報フロー例５００に示すように、一旦マルチファイル・ストリームが完了したなら、ファイル・オプティマイザー５２０は、このマルチファイル・ストリームに関与した複数のファイルに対して使用されるセクターを計算する。次いで、ファイル・オプティマイザー５２０は、ストレージ５３０のセクター使用表を更新する（例えば、ＳＤカードのような外部副ストレージ）。特定の実施態様では、ファイル・オプティマイザー５２０は、セクター使用情報（例えば、セクター使用表）を更新するための１回の動作を決定し実行する。
【００５４】
[063]  情報フロー例５００に示すように、一旦マルチファイル・ストリームが完了したなら、ファイル・オプティマイザー５２０は、複数のファイルの各々に対して、データをキャッシュからストレージ５３０に書き込むためにある回数の最適化ファイル動作も実行する（５５０）（例えば、５４０においてデータを書き込むために受けたものよりも少ない回数の動作）。
【００５５】
[064]  情報フロー例５００に示すように、一旦マルチファイル・ストリームが完了したなら、ファイル・オプティマイザー５２０は、複数のファイルに対する変更を反映するために、フォルダ・メタデータも更新する（例えば、ファイル・サイズ、ファイル名、フォルダ位置等）。特定の実施態様では、ファイル・オプティマイザー５２０は、フォルダ・メタデータ情報を更新するために１回の動作を決定し実行する。
【００５６】
[065]  ファイル・オプティマイザー５２０が最適化ファイル動作を完了した後、複数のファイルを解除する(unlock)。また、ファイル・オプティマイザー５２０は、ステータス情報をサービスまたはアプリケーション５１０に、オペレーティング・システムに、および／または他のコンポーネントに報告することもできる。ステータス情報は、動作の成功または失敗の指示を含むことができる。
【００５７】
例７−実施態様の詳細
[066]  この章では、最適化ファイル動作のためにファイルをグループ化するファイル・オプティマイザー・コンポーネントの具体的な実施態様について説明する。具体的な実施態様のエレメントは、別々に、または組み合わせて使用することができる。例えば、種々のエレメントを、本明細書のいずれかの場所で説明した技法および解決手段と組み合わせることができる。
【００５８】
[067]  この具体的な実施態様では、ファイル・オプティマイザー・コンポーネントは、ＯＳおよび／またはサービスおよびアプリケーションがコールすることができる１組のＡＰＩを設ける。ファイル・オプティマイザー・コンポーネントは、データ・ストリーム（例えば、マルチファイル・ストリーム）および関連するメタデータを受け、これらを使用してデータ・ストリームを編成し最適化する。ファイル・オプティマイザー・コンポーネントは、着信するデータ・ストリームをキャッシュし、次いで後にキャッシュしたデータを最適にメディア（例えば、外部副ストレージ）に書き込むために、メモリ量（例えば、メモリの可変量）を管理する。
【００５９】
[068]  ファイル・オプティマイザー・コンポーネントは、使用表／ビットマップにおけるセクターを更新する回数、およびフォルダ・メタデータを更新する回数を含む、オーバーヘッド動作を最小限に抑えようとする。これらのオーバーヘッド動作を減らすと、メディアの観点から、データ・ストリーム全体のシーケンス性を高めることができる。これに対しては、外部副ストレージ（例えば、ＳＤカード）が特に敏感であると考えられる。
【００６０】
[069]  以下の擬似コードは、ファイル・オプティマイザー・コンポーネントの実施態様の例を示す（ある実施態様では、ファイル・オプティマイザー・コンポーネントはブラストまたはブラストファイル・コンポーネントと呼ばれる）。
【００６１】
[070]  １．開始−マルチファイル・ストリームを一意に識別するために、ファイル・オプティマイザー・ハンドルを作成する。
[071]  ２．ファイル開始-このファイル・オプティマイザー・ハンドルだけがアクセスできるように、マルチファイル・ストリームの特定のファイルをロックする。
[072]  ３．書き込み−この特定のファイルに対するデータを、仮想キャッシュ・メモリにキャッシュ／格納する（例えば、オプティマイザー・ハンドル、ファイル識別子、およびオフセットによる格納）。
[073]  ４．読み取り−実施態様に応じて、オプティマイザーは、最適化対象のファイルに対する同時読み取り動作をサポートすることもできる。これは、キャッシュされたファイルのデータの読み取りだけをサポートする場合もあり、またはストレージ自体へのパススルー(passthru)もサポートする場合もある。
[074]  ５．ファイル終了−特定のファイルに対するファイル動作を終了する。
[075]  ６．ファイル中断−キャッシュ・メモリにおける特定のファイルに対するデータを除去する動作（例えば、ファイルが一時的ファイルであった場合が考えられ、または動作が取り消された場合も考えられる）。
[076]  ７．停止−マルチファイル・ストリームの全てのファイルに対する動作を受けてキャッシュした後（例えば、ファイル毎に、ファイル開始、書き込み、およびファイル終了が実行された）。
【００６２】
[077]  以上の動作が一旦受けとられキャッシュされたなら、最適化が開始する。
[078]  ａ．必要なセクターを計算し、メディアの使用セクターを更新する。
[079]  ｂ．ファイル毎に（例えば、マルチファイル・ストリームの全てのファイルに対して）可能な限りシーケンシャルな論理ブロック・アドレスの順にデータをチャンク内（例えば、「Ｘ」ＢＭのチャンク。ここで「Ｘ」は特定の実施態様では１である）に書き込む（例えば、可能なときに、ファイルを保持する最初の利用可能な連続ＬＢＡ空間を選択することによって）。
[080]  ｃ．フォルダ・メタデータを更新する。
[081]  ｄ．ファイルを解除する。
[082]  ｅ．ファイル・オプティマイザー・ハンドル（１．開始において作成した）を解放する。
【００６３】
[083]  ファイル動作に加えて、本明細書において説明する技法および解決手段を使用して、他のタイプの動作も最適化することができる。例えば、以下の擬似コードは、ファイルおよびデータベース（例えば、歌曲およびアルバム、音楽データベース、写真データベース等）を伴う動作を最適化するために使用することができる。
【００６４】
[084]  １．アルバム毎に
ａ．歌曲毎に、
ｉ．歌曲をメディアに書き込む（例えば、ファイル最適化動作を使用する）。
ｂ．歌曲をデータベースに追加する。
ｉ.メディア上のトランザクション・ログにデータを書き込む。
ｉｉ．表データをメディアに書き込む。
【００６５】
[085]  以上の擬似コードでは、（ｂ）（ｉ）および（ｂ）（ｉｉ）動作に対して最適化を実行することができる。例えば、トランザクション・ログの更新および／または表データの更新を集計して、全ての歌曲ファイルを書き込んだ後に、１回のトランザクション・ログ更新および／または１回の表データ更新を作成し実行することができる。
【００６６】
[086]  本明細書において説明する技法を使用して最適化することができる他のシナリオは、セルラ・ネットワーク（またはＷｉ−Ｆｉ（登録商標）ネットワークのような他のワイヤレス・ネットワーク）を通じたアルバムの計算デバイスへのダウンロードである。通例、セルラ容量を最大化するために、多数のファイルを同時にダウンロードする。デバイス上で歌曲を受信するアプリケーションまたはサービスが、提案したオプティマイザーを設けるシステム上にある場合、アルバム全体の歌曲データをシーケンス順に、最適化された様態で外部ストレージに書き込むことができる。同じ最適化から、このようなデバイス上で多数のファイル・ストリームを同時に受信する他のサービスおよびアプリケーションも便益を得ることができる。
【００６７】
例８−キャッシュ・メモ
[087]  この章では、マルチファイル・ストリームのデータを格納するためにキャッシュ・メモリを管理するために適用することができる技法および解決手段について説明する。この章において説明する技法および解決手段は、本明細書の他のところで説明した技法および解決手段に適用することができる。
【００６８】
[088]  ある実施態様では、マルチファイル・ストリームに対して最適化される必要がある１組全体のグループ化ファイルを保持するための十分なキャッシュ・メモリがある場合もある。しかしながら、他の実施態様では、限られた量のキャッシュ・メモリしかない場合もある（例えば、ある状況では１組全体のファイルを保持するには十分でない）。利用可能なキャッシュ・メモリの量には関係なく、ファイル・オプティマイザー・コンポーネントは、キャッシュが満杯のときに、現在キャッシュに保持されているデータを書き込むメカニズムを提供することができる。
【００６９】
[089]  例えば、マルチファイル・ストリームにおける第１組のファイルに対するデータを受信し、キャッシュに格納することができる。キャッシュが満杯のとき、キャッシュにおけるこれらのファイルのために、最適化ファイル動作を決定し実行することができる（例えば、セクター更新動作、ファイル書き込み動作、および／またはフォルダ・メタデータ動作）。次いで、マルチファイル・ストリームにおける第２組のファイルに対するデータを受信してキャッシュに格納し、第２組のために最適化ファイル動作を決定し実行する等とすることができる。
【００７０】
例９−ＡＰＩ
[090]  この章では、本明細書において説明したファイル最適化技法および解決手段に適用することができる種々のＡＰＩ実施態様の詳細について説明する。
【００７１】
[091]  ある実施態様では、オペレーティング・システムがファイル最適化技法および解決手段をそれ自体で実装することができる。例えば、オペレーティング・システムはファイル・オプティマイザー・コンポーネントを内部に実装することができ、またはオペレーティング・システムは、ファイル・オプティマイザー・コンポーネントの内部または外部ＡＰＩにアクセスすることができる。この解決手段を使用すると、サービスおよびアプリケーションは、オペレーティング・システムによって提供される標準的なファイル動作にアクセスすることができ、オペレーティング・システム自体が最適化を処理する。
【００７２】
[092]  他の実施態様では、オペレーティング・システム（または、ドライバー・コンポーネント、サービス・コンポーネントのような他のコンポーネント、またはある状況では、アプリケーション・コンポーネント）は、ファイル最適化技法を直接利用するために、ＡＰＩを露出してサービスおよびアプリケーションを有効にすることができる。以下は、露出することができるこのようなＡＰＩの実施態様例である。
【００７３】
[093]  FB_HANDLE FBlast_Start(void)
FileHandle FBlast_BeginFile(FB_Handle, path, AnticipatedFileSize, FileFlags);
Size_t FBlast_Write(FB_Handle, FileHandle, ptrDataBuffer, DataBufferSize)
BOOL FBlast_Read(FB_Handle, FileHandle, ptrDataBuffer, ReadRequestSize)
BOOL FBlast_Seek(FB_Handle, FileHandle, offset, origin);
BOOL FBlast_EndFile(FB_Handle, FileHandle);
BOOL FBlast_AbortFile(FB_Handle, FileHandle);
BOOL FBlast_Stop(FB_Handle)
[094]  更に他の実施態様では、オペレーティング・システム（または、ドライバー・コンポーネントのような他のコンポーネント）が、もっと小さなまたは単純なＡＰＩを露出することができ、オペレーティング・システム（または他のコンポーネント）は動作の一部を自動的に実行する。以下は、露出することができるこのようなもっと小さな／単純なＡＰＩの実施態様例である。
【００７４】
[095]  a. FB_Handle FBlast_Start(...)
b. FBlast_Stop(FB_Handle)
のような、小さくしたＡＰＩ集合の例。
【００７５】
[096]  ａ．ファイル作成、書き込み、シーク、読み取り、閉鎖、
というような、既に存在するＯＳ  ＡＰＩを拡張する例。
[097]  以上のＡＰＩ集合の例では、オペレーティング・システム（または他のコンポーネント）は、FB_Handleがプロセスのために開いていない場合、自動的に FBlast_Beginファイルをコールすることができ、および／または CreateFileによって開かれたファイルを、現在のプロセスに対するアクティブなFB_Handleに自動的に関連付けることができる。
【００７６】
[098]  更に他の実施態様では、カスタム・ランタイム・ライブラリ（例えば、Ｃランタイム・ライブラリ）が、ファイル最適化技法を実現し、こうしてＡＰＩをカプセル化することができる。ランタイム・ライブラリを使用するサービスおよびアプリケーションは、改良された性能から便益が得られる（例えば、サービスおよびアプリケーションに全くコード変更を必要とすることなく）。
【００７７】
例１０−計算システム
[099]  図６は、以上で説明した改革を実現することができる、適した計算システム６００を一般化した例を示す。計算システム６００は、使用範囲や機能に関して限定を示唆する意図は全くない。何故なら、本改革は、多様な汎用または特殊目的計算システムにおいても実現できるからである。
【００７８】
[0100]  図６を参照すると、計算システム６００は、１つ以上の処理ユニット６１０、６１５、およびメモリ６２０、６２５を含む。図６では、この基本構成６３０は、破線内に含まれる。処理ユニット６１０、６１５は、コンピューター実行可能命令を実行する。処理ユニットは、汎用中央処理ユニット（ＣＰＵ）、特定用途集積回路（ＡＳＩＣ）におけるプロセッサー、または任意の他のタイプのプロセッサーとすることができる。マルチ処理システムでは、多数の処理ユニットが、処理パワーを増大するために、コンピューター実行可能命令を実行する。例えば、図６は、中央処理ユニット６１０、更にグラフィクス処理ユニットまたは共処理ユニット６１５を示す。有形メモリ６２０、６２５は、揮発性メモリ（例えば、レジスタ、キャッシュ、ＲＡＭ）、不揮発性メモリ（例えば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリ等）、または処理ユニット（１つまたは複数）によってアクセス可能な、これら２つの何らかの組み合わせであってもよい。メモリ６２０、６２５は、処理ユニット（１つまたは複数）による実行に適しており、本明細書において説明した１つ以上の革新を実現するコンピューター実行可能命令の形態としたソフトウェア６８０を格納する。
【００７９】
[0101]  計算システムは、追加の機構を有してもよい。例えば、計算システム６００は、ストレージ６４０、１つ以上の入力デバイス６５０、１つ以上の出力デバイス６６０、および１つ以上の通信接続６７０を含む。バス、コントローラー、またはネットワークのような相互接続メカニズム（図示せず）は、計算システム６００のコンポーネントを相互接続する。通例、オペレーティング・システム・ソフトウェア（図示せず）は、計算システム６００において実行する他のソフトウェアのために動作環境を提供し、計算システム６００のコンポーネントの活動を調整する。
【００８０】
[0102]  有形ストレージ６４０は、リムーバブルまたは非リムーバブルでもよく、磁気ディスク、磁気テープまたはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、あるいは情報を格納するために使用することができ、更に計算システム６００内でアクセスすることができる任意の他の媒体を含む。ストレージ６４０は、本明細書において説明した１つ以上の革新を実現するソフトウェア６８０の命令を格納する。
【００８１】
[0103]  入力デバイス（１つまたは複数）６５０は、キーボード、マウス、ペン、またはトラックボールのようなタッチ入力デバイス、音声入力デバイス、走査デバイス、あるいは入力を計算システム６００に供給する他のデバイスであってもよい。ビデオ・エンコーディング用では、入力デバイス（１つまたは複数）６５０は、カメラ、ビデオ・カード、ＴＶチューナ・カード、あるいはアナログまたはディジタル形態でビデオ入力を受け入れる同様のデバイス、あるいはビデオ・サンプルを計算システム６００に読み込むＣＤ−ＲＯＭまたはＣＤ−ＲＷであってもよい。出力デバイス（１つまたは複数）６６０は、ディスプレイ、プリンター、スピーカー、ＣＤ−ライター、または計算システム６００からの出力を供給する他のデバイスであってもよい。
【００８２】
[0104]  通信接続（１つまたは複数）６７０は、通信媒体を通じた他の計算エンティへの通信を可能にする。通信媒体は、コンピューター実行可能命令、オーディオまたはビデオ入力または出力、あるいは変調データ信号における他のデータというような情報を伝える。変調データ信号とは、当該信号において情報をエンコードするように、その特性の内１つ以上が設定されたまたは変化させられた信号である。一例として、そして限定ではなく、通信媒体は、電気、光、ＲＦ、または他の搬送波を使用することができる。
【００８３】
[0105]  本革新は、計算システムにおけるターゲットの実プロセッサーまたは仮想プロセッサー上で実行されるプログラム・モジュールに含まれるような、コンピューター実行可能命令という一般的なコンテキストで説明することができる。一般に、プログラム・モジュールは、ルーチン、プログラム、ライブラリ、オブジェクト、クラス、コンポーネント、データ構造等を含み、特定のタスクを実行するか、または特定の抽象データ型を実装する。プログラム・モジュールの機能は、種々の実施形態において所望通りに、プログラム・モジュール間で組み合わせてもまたは分割してもよい。プログラム・モジュールのコンピューター実行可能命令は、ローカルまたは分散型計算システム内部で実行することもできる。
【００８４】
[0106]  本明細書では、「システム」および「デバイス」という用語は相互交換可能に使用される。そうでないことを文脈が明らかに示すのではなければ、いずれの用語も、計算システムまたは計算デバイスのタイプに対して何の限定も強制しない。一般に、計算システムまたは計算デバイスは、ローカルまたは分散型であることができ、特殊目的ハードウェアおよび／または汎用ハードウェアと、本明細書において説明した機能を実現するソフトウェアとの任意の組み合わせを含むことができる。
【００８５】
[0107]  紹介のために、詳細な説明では、「決定する」および「使用する」というような用語を使用して、計算システムにおけるコンピューター動作を説明した。これらの用語は、コンピューターによって実行される動作に対する上位抽象化であり、人間によって行われる行為と混同すべきでない。これらの用語に対応する実際のコンピューター動作は、実施態様に応じて様々に変化する。
【００８６】
例１１−移動体デバイス
[0108]  図７は、全体的に７０２で示す、種々の任意のハードウェアおよびソフトウェア・コンポーネントを含む移動体デバイスの一例７００を示すシステム図である。移動体デバイス内にあるコンポーネント７０２はいずれも、他のいずれのコンポーネントとも通信することができるが、図示を容易にするために、全ての接続は示されていない。移動体デバイスは、種々の計算デバイス（例えば、セル・フォン、スマート・フォン、ハンドヘルド・コンピューター、パーソナル・ディジタル・アシスタント（ＰＤＡ）等）のいずれでも可能であり、セルラまたは衛星ネットワーク、あるいは他のネットワークのような、１つ以上の移動体通信ネットワーク７０４とのワイヤレス双方向通信を可能にすることができる。
【００８７】
[0109]  図示した移動体デバイス７００は、信号コード化、データ処理、入力／出力処理、電力制御、および／または他の機能というようなタスクを実行するために、コントローラーまたはプロセッサー７１０（例えば、信号プロセッサー、マイクロプロセッサー、ＡＳＩＣ、または他の制御および処理論理回路）を含むことができる。オペレーティング・システム７１２は、コンポーネント７０２の割り当ておよび使用、ならびに１つ以上のアプリケーション・プログラム７１４に対するサポートを制御することができる。アプリケーション・プログラムは、一般的な移動体計算アプリケーション（例えば、電子メール・アプリケーション、カレンダー、連絡先マネージャー、ウェブ・ブラウザー、メッセージング・アプリケーション）、または任意の他の計算アプリケーションを含むことができる。アプリケーション・ストアにアクセスする機能７１３は、アプリケーション・プログラム７１４を取得し更新するためにも使用することができる。
【００８８】
[0110]  図示した移動体デバイス７００は、メモリ７２０を含むことができる。メモリ７２０は、非リムーバブル・メモリ７２２および／またはリムーバブル・メモリ７２４を含むことができる。非リムーバブル・メモリ７２２は、ＲＡＭ、ＲＯＭ、フラッシュ・メモリ、ハード・ディスク、または他の周知のメモリ記憶技術を含むことができる。リムーバブル・メモリ７２４は、フラッシュ・メモリまたはＧＳＭ（登録商標）通信システムでは周知であるサブスクライバー識別モジュール（ＳＩＭ）カード、あるいは「スマート・カード」のような他の周知のメモリ記憶技術を含むことができる。メモリ７２０は、オペレーティング・システム７１２およびアプリケーション７１４を実行するためのデータおよび／またはコードを格納するために使用することができる。データの例は、ウェブ・ページ、テキスト、画像、音響ファイル、ビデオ・データ、あるいは１つ以上の有線またはワイヤレス・ネットワークを介して１つ以上のネットワーク・サーバーまたは他のデバイスにおよび／またはから送られるその他のデータ集合を含むことができる。メモリ７２０は、国際移動体サブスクライバー識別（ＩＭＳＩ）のようなサブスクライバー識別子、および国際移動体機器識別子（ＩＭＥＩ）のような機器識別子を格納するために使用することができる。このような識別子は、ユーザーおよび機器を識別するために、ネットワーク・サーバーに送信することができる。
【００８９】
[0111]  移動体デバイス７００は、タッチスクリーン７３２、マイクロフォン７３４、カメラ７３６、物理キーボード７３８および／またはトラックボール７４０のような１つ以上の入力デバイス７３０、ならびにスピーカー７５２およびディスプレイ７５４のような１つ以上の出力デバイス７５０をサポートすることができる。他の可能な出力デバイス（図示せず）は、圧電型出力デバイスまたは他の触覚型出力デバイスを含むことができる。あるデバイスは、１つよりも多い入力／出力機能を供与することができる。例えば、タッチスクリーン７３２およびディスプレイ７５４を組み合わせて１つの入力／出力デバイスにすることができる。
【００９０】
[0112]  入力デバイス７３０は、自然ユーザー・インターフェース（ＮＵＩ）を含むことができる。ＮＵＩは、ユーザーが「自然な」方法でデバイスと対話処理することを可能とし、マウス、キーボード、リモコン等のような入力デバイスによって強制される人工的な制約から解放することができる、あらゆるインターフェース技術として定義することができる。ＮＵＩ方法の例は、音声認識(speech recognition)、タッチおよびスタイラス認識、画面上および画面近傍双方におけるジェスチャー認識、エア・ジェスチャー(air gesture)、頭部および視線追尾、音声(voice)および発話(speech)、視覚、タッチ、ジェスチャー、ならびに機械インテリジェンスを拠り所とするものを含む。ＮＵＩの他の例は、加速度計／ジャイロスコープを使用する動きジェスチャー(motion gesture)検出、顔認識、３Ｄディスプレイ、頭部、視線および凝視追尾、没入型拡張現実および仮想現実システムを含み、これらの全ては、電界検知電極（ＥＥＧおよび関係する方法）を使用して脳活動を検知する技術だけでなく、一層自然なインターフェースを提供する。このように、具体的な一例では、オペレーティング・システム７１２またはアプリケーション７１４は、音声認識ソフトウェアを、ユーザーに音声コマンドによってデバイス７００を動作させる音声ユーザー・インターフェースの一部として含むことができる。更に、デバイス７００は、ゲーミング・アプリケーションに入力を供給するためにジェスチャーを検出し解釈するというような、ユーザーの空間ジェスチャーによってユーザーの対話処理を可能にする入力デバイスおよびソフトウェアも含むことができる。
【００９１】
[0113]  ワイヤレス・モデム７６０は、アンテナ（図示せず）に結合することができ、プロセッサー７１０と外部デバイスとの間における双方向通信をサポートすることができる。これは当技術分野では良く理解されている。モデム７６０は包括的に示され、移動体通信ネットワーク７０４と通信するためのセルラ・モデム、および／または他の無線系モデム（例えば、Ｂｌｕｅｔｏｏｔｈ（登録商標）７６４またはＷｉ−Ｆｉ７６２）を含むことができる。ワイヤレス・モデム７６０は、通例、１つのセルラ・ネットワーク内、セルラ・ネットワーク間、または移動体デバイスと公衆電話交換網（ＰＳＴＮ）との間におけるデータおよび音声通信のためのＧＳＭ（登録商標）ネットワークのような、１つ以上のセルラ・ネットワークとの通信のために構成される。
【００９２】
[0114]  更に、移動体デバイスは、少なくとも１つの入力／出力ポート７８０、電源７８２、汎地球測位システム（ＧＰＳ）受信機のような衛星ナビゲーション・システム受信機７８４、加速度計７８６、および／または物理コネクター７９０も含むことができる。物理コネクター７９０は、ＵＳＢポート、ＩＥＥＥ１３９４（Ｆｉｒｅ    Ｗｉｒｅ）ポート、および／またはＲＳ−２３２ポートとすることができる。図示したコンポーネント７０２は、必須ではなく、全てを含むのでもない。何故なら、いずれのコンポーネントでも削除することができ、他のコンポーネントを追加することができるからである。
【００９３】
例１２−クラウド・サポート環境
[0115]  図８は、説明した実施形態、技法、および技術を実現することができる、適した実現環境８００の一般化した例を示す図である。 環境の一例８００では、種々のタイプのサービス（例えば、計算サービス）がクラウド８１０によって提供される。例えば、クラウド８１０は、集中して配置されてもまたは分散されてもよい計算デバイスの集合体を含むことができ、クラウド・ベースのサービスを、インターネットのようなネットワークを介して接続された種々のタイプのユーザーおよびデバイスに提供する。実現環境８００は、計算タスクを遂行するために異なるやり方で使用することができる。例えば、あるタスク（例えば、ユーザー入力を処理し、ユーザー・インターフェースを提示する）はローカル計算デバイス（例えば、接続デバイス８３０、８４０、８５０）上で実行することができ、一方他のタスク（例えば、今後の処理において使用されるデータの格納）はクラウド８１０において実行することができる。
【００９４】
[0116]  環境の一例８００では、クラウド８１０が、接続デバイス(connected device)８３０、８４０、８５０のためのサービスに、種々の画面能力を提供する。接続デバイス８３０は、コンピューター画面８３５（例えば、中間サイズの画面）を有するデバイスを代表する。例えば、接続デバイス８３０は、デスクトップ・コンピューター、ラップトップ、ノートブック、ネットブック等のような、パーソナル・コンピューターとすることができる。接続デバイス８４０は、移動体デバイスの画面８４５（例えば、小型画面）を有するデバイスを代表する。例えば、接続デバイス８４０は、移動体電話機、スマート・フォン、パーソナル・ディジタル・アシスタント、タブレット・コンピューター等とすることができる。接続デバイス８５０は、大型画面８５５を有するデバイスを代表する。例えば、接続デバイス８５０は、テレビジョン画面（例えば、スマート・テレビジョン）、またはテレビジョンに接続された他のデバイス（例えば、セットトップ・ボックスまたはゲーミング・コンソール）等とすることができる。接続デバイス８３０、８４０、および８５０の１つ以上はタッチスクリーン能力を含むことができる。タッチスクリーンは、異なるやり方で入力を受け入れることができる。例えば、容量式タッチスクリーンは、物体（例えば、指先またはスタイラス）が、表面を横切って走る電流を歪ませるまたは中断するときに、タッチ入力を検出する。他の例として、タッチスクリーンは、光センサーを使用して、この光センサーからのビームが中断されたときに、タッチ入力を検出することができる。画面上の表面との物理的接触は、タッチスクリーンによっては、入力が検出されるためには不要なこともある。環境の一例８００では、画面能力がないデバイスも使用することができる。例えば、クラウド８１０は、ディスプレイがない１つ以上のコンピューター（例えば、サーバー・コンピューター）にサービスを提供することができる。
【００９５】
[0117]  サービスは、クラウド８１０によって、サービス・プロバイダー８２０を介して、またはオンライン・サービスの他のプロバイダー（図示せず）を介して提供することができる。例えば、クラウド・サービスは、個々の接続デバイス（例えば、接続デバイス８３０、８４０、８５０）の画面サイズ、表示能力、および／またはタッチスクリーン能力に合わせてカスタム化することができる。
【００９６】
[0118]  環境の一例８００では、クラウド８１０は、本明細書において説明した技術および解決手段を、種々の接続デバイス８３０、８４０、８５０に、少なくとも部分的にサービス・プロバイダー８２０を使用して提供する。例えば、サービス・プロバイダー８２０は、種々のクラウド・ベース・サービスのために集中解決手段(centralized solution)を提供することができる。サービス・プロバイダー８２０は、ユーザーおよび／またはデバイスのために（例えば、接続デバイス８３０、８４０、８５０および／またはそれらのそれぞれのユーザーのために）サービス登録を管理することができる。
【００９７】
例１３−実施態様
[0119]  開示した方法の一部の動作は、都合のよい提示のために、特定の連続順序で説明したが、この説明のやり方は、以下に明記される特定の文言によって特定の順序付けが要求されない限り、再配列を含むことは理解されてしかるべきである。例えば、順次説明した動作は、場合によっては、配列し直しても、または同時に実行されてもよい。更に、簡略さのために、添付図面は、開示した方法を他の方法と併せて使用することができる種々のやり方を示さない場合もある。
【００９８】
[0120]  開示した方法はいずれも、１つ以上のコンピューター読み取り可能記憶媒体上に格納され、計算デバイス（例えば、スマート・フォンまたは計算ハードウェアを含む他の移動体デバイスを含む、任意の入手可能な計算デバイス）上で実行されるコンピューター実行可能命令またはコンピュータ・プログラム製品として実現することができる。コンピューター読み取り可能記憶媒体は、計算環境内においてアクセスすることができる任意の入手可能な有形媒体である（例えば、ＤＶＤまたはＣＤのような１つ以上の光媒体ディスク、揮発性メモリ・コンポーネント（ＤＲＡＭまたはＳＲＡＭのような）、または不揮発性メモリ・コンポーネント（フラッシュ・メモリまたはハード・ドライブのような））。一例として、そして図６を参照すると、コンピューター読み取り可能記憶媒体は、メモリ６２０および６２５、ならびにストレージ６４０を含む。一例として、そして図７を参照すると、コンピューター読み取り可能記憶媒体は、メモリおよびストレージ７２０、７２２、および７２４を含む。コンピューター読み取り可能記憶媒体という用語は、信号および搬送波のような通信接続（例えば、６７０、７６０、７６２、および７６４）を含まない。
【００９９】
[0121]  開示した技法を実現するためのコンピューター実行可能命令、および開示した実施形態の実現の間に作成および使用されるデータはいずれも、１つ以上のコンピューター読み取り可能記憶媒体上に格納することができる。コンピューター実行可能命令は、例えば、専用ソフトウェア・アプリケーション、あるいはウェブ・ブラウザーまたは他のソフトウェア・アプリケーション（リモート計算アプリケーション等）によってアクセスまたはダウンロードされる、ソフトウェア・アプリケーションの一部であることができる。このようなソフトウェアは、例えば、１つのローカル・コンピューター（例えば、任意の適した市販のコンピューター）上で、または１つ以上のネットワーク・コンピューターを使用するネットワーク環境において（例えば、インターネット、ワイド・エリア・ネットワーク、ローカル・エリア・ネットワーク、クライアント−サーバー・ネットワーク（クラウド計算ネットワーク等）、または他のこのようなネットワークを介して）、実行することができる。
【０１００】
[0122]  明確さのために、ソフトウェア・ベースの実施態様からある種の選択された態様だけについて説明した。当技術分野では周知である他の詳細は省略した。例えば、開示した技術は、いずれの特定のコンピューター言語にもプログラムにも限定されないことは理解されてしかるべきである。例えば、開示した技術は、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｐｅｒｌ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ａｄｏｂｅ  Ｆｌａｓｈ、または任意の他の適したプログラミング言語で書かれたソフトウェアによって実現することができる。同様に、開示した技術は、いずれの特定のコンピューターにもハードウェアのタイプにも限定されない。適したコンピューターおよびハードウェアのある種の詳細は、周知であり、本開示において詳細に明記される必要はない。
【０１０１】
[0123]  更に、ソフトウェア・ベースの実施形態（例えば、開示した方法の内任意のものをコンピューターに実行させるためのコンピューター実行可能命令を含む）はいずれも、適した通信手段を介して、アップロードすること、ダウンロードすること、または離れてアクセスすることができる。このような適した通信手段は、例えば、インターネット、ワールド・ワイド・ウェブ、イントラネット、ソフトウェア・アプリケーション、ケーブル（光ファイバ・ケーブルを含む）、磁気通信、電磁通信（ＲＦ、マイクロ波、および赤外線通信を含む）、電子通信、または他のこのような通信手段を含む。
【０１０２】
[0124]  開示した方法、装置、およびシステムは、決して限定するように解釈してはならない。代わりに、本開示は、単独での、そして互いとの種々のコンビネーションおよびサブコンビネーションにおける、種々の開示した実施形態の全ての新規で非自明な特徴および態様を対象とする。開示した方法、装置、およびシステムは、いずれの特定の態様や特徴、その組み合わせにも限定されず、開示した実施形態は、いずれの１つ以上の特定の利点が得られることも、問題が解決されることも必要としない。
【０１０３】
[0125]  いずれの例からの技術でも、他の例のいずれの１つ以上において説明した技術とでも組み合わせることができる。開示した技術の原理を適用することができる多くの可能な実施形態があることに鑑み、例示した実施形態は、開示した技術の例に過ぎず、開示した技術の範囲を限定するように捕らえてはならないことは、認識されてしかるべきである。逆に、開示した技術の範囲は、以下の請求項によって定められることとする。したがって、これらの請求項の範囲および主旨に該当する全てを、本発明として特許請求する。
【図１】
2016515258.tif 000003
【図２】
2016515258.tif 000004
【図３】
2016515258.tif 000005
【図４】
2016515258.tif 000006
【図５】
2016515258.tif 000007
【図６】
2016515258.tif 000008
【図７】
2016515258.tif 000009
【図８】
2016515258.tif 000010
【国際調査報告】
2016515258.tif 000011
2016515258.tif 000012
2016515258.tif 000013