(58)【調査した分野】(Int.Cl.,DB名)
プロセッサーを有するデバイスの仮想環境においてアプリケーションを代理して処理を実行する方法であって、命令を前記プロセッサー上で実行するステップを含み、前記命令が、
実行イベントを伴うワーカー・プロセスを実行するためにアプリケーションから要求を受け取ると、前記仮想環境の外部において前記ワーカー・プロセスの実行を開始し、
前記アプリケーションの終了を検出すると、前記ワーカー・プロセスの終了を控え、
前記ワーカー・プロセスが前記実行イベントを遂行すると、前記ワーカー・プロセスの実行イベントについて前記アプリケーションに通知する
ように構成される、方法。
請求項7記載の方法であって、前記命令が更に、前記デバイスの前記コンピューティング環境を再スタートした後に、前記仮想環境の外部において前記ワーカー・プロセスの実行を再開するように構成される、方法。
請求項11記載のシステムにおいて、前記ワーカー・ホスト・コンポーネントが、前記webブラウザーのクロス・ドメイン・セキュリティ・ポリシに従って、前記ワーカー・プロセスの実行を制限するように構成される、システム。
請求項11記載のシステムにおいて、前記ワーカー・ホスト・コンポーネントが、ローカル・webサーバー・プロセスとして前記ワーカー・プロセスを実行するように構成されるローカルwebサーバーを備える、システム。
【発明を実施するための形態】
【0008】
特許請求する主題について、これより図面を参照して説明する。ここでは、全体を通じて同様の符号を、同様の構成要素を参照するために用いる。以下の記載においては、説明の目的で多くの具体的な詳細を記載し、特許請求する主題についての完全な理解に供する。しかしながら、特許請求する主題がこれらの具体的な詳細なくとも実施できることは明らかであろう。他の例では、構造およびデバイスをブロック図の形態で示し、特許請求する主題の説明を容易にする。
A.序文
コンピューティングの分野では、多くのシナリオが、デバイス固有のコンピューティング環境ではなく、仮想環境において、デバイス上のアプリケーションの実行を必要とする。第1の実施例として、webブラウザーは、JavaScriptおよびハイパーテキスト・マークアップ言語(HTML)のようなデバイス非依存のコードを実行するために標準化プラットフォームを提供することができる。第2の実施例として、Javaバーチャル・マシンは、汎用コンピューティング・デバイスとJavaアプリケーションを代理するデバイス固有の機能(例えば、汎用メモリの割り当て要求のデバイスのメモリ・モデルへの変換)との間のブリッジを提供することができる。第3の実施例として、第1のデバイス固有の環境に対して設計されるコードは、第2のデバイス内で第1のデバイスのシミュレーションを提供するエミュレーターを通じて、完全な第2のデバイス上で実行することができる。第4の実施例として、信頼性のないコードが、「サンドボックス」即ち人工機械(artificial machine)内で実行することができ、その結果、悪意のある動作が人工機械へと分離されることになり、人工機械上での信頼性のないコードの効果は、デバイスへの損傷のリスクを伴うことなくデバイスによって評価することができる。
【0009】
これらの、また他のシナリオは、仮想環境におけるアプリケーションの実行を提示する。このようなシナリオの多くでは、アプリケーションは、高性能にハンドリングされることになる幾らかのフォアグラウンドの責務を必要とすることもある。例えば、グラフィカル・ユーザ・インタフェース(GUI)を提示するアプリケーションは、少ない遅延でさえもユーザーに通知可能であるために、高度な応答性を有する視覚上の制御により相互作用を履行するように設計することができる。このようなアプリケーションはまた、大量のバックグラウンド処理を伴うこともあり、ロング・ランでの計算、アイドル時間の間に実行されることになるメンテナンス・タスク、およびデバイスのイベント・モニタリングといったより緩和したやり方で実行することができる。
【0010】
フォアグラウンド処理およびバックグラウンド処理の両方のハンドリングをバランスするために、仮想環境およびアプリケーションは、プリエンプティブ・マルチタスキングのような技術を提供することができる。ここでは、アプリケーションは各タスクについて優先度を指定することができる。しかしながら、このような技術は、アプリケーションに拘わる様々な処理タスクをスケジューリングするのに完全には適切とは言えないこともある。このような第1の例として、フォアグラウンド処理をハンドリングするために、幾らかの種別のバックグラウンド処理(例えば、リソースにおいて排他的ロックを伴うバックグラウンド処理)を優先させることは、可能ではなく、または効率的でない可能性がある。このような第2の例として、デバイス・イベントのモニタリングを伴うバックグラウンド処理である場合に、このようなバックグラウンド処理の中断が、結果として、このようなデバイス・イベントを検出の故障ということになる場合もある。
【0011】
これら困難性の観点から、幾らかの仮想環境では、アプリケーションが仮想環境において別個のワーカー・プロセス開始を許可する。ワーカー・プロセスをアプリケーションの実行スレッドから分離することによって、仮想環境は、コンピューティング環境の並列の処理機能(例えば、オペレーティング・システムにより提供される、より高度でプリエンプティブなスケジューラ)および/またはデバイスのコンピューター・ハードウェア(例えば、マルチプロセッサー・デバイスの異なるプロセッサー、またはマルチコア・プロセッサの異なるコアにおけるワーカー・プロセスおよびアプリケーション・スレッドの並列の実行)を利用することができる。更に、アプリケーションと同一の仮想環境内のワーカー・プロセスの実行は、セキュリティの利点(例えば、アプリケーションに関して同一のセキュリティ・ポリシをワーカー・プロセスに適用する)および/または効率性の利点(例えば、仮想環境内のピア(peer)としてアプリケーションおよびワーカー・プロセスをタイトに結合するのを可能にする)を提供することができる。
【0012】
図1は、仮想環境110(例えば、webブラウザー)を含むコンピューティング環境(例えば、オペレーティング・システム)を提示するユーザー106のデバイス104を特徴とする例示のシナリオ100を示す。デバイス104は、1つ以上のサーバー102(例えば、webサーバー)と通信することができ、ユーザー106を代理して実行することになる1つ以上のアプリケーション112(例えば、ユーザー106によって要求されるwebページに埋め込まれたwebアプリケーション)を抽出することができる。それ故、デバイス104は、仮想環境110内でアプリケーション112の実行を開始することができる。更には、仮想環境110は、アプリケーション112を代理して実行されることになるもののアプリケーション112によるフォアグラウンド処理の実行を中断することのないバックグラウンドのメンテナンス・タスクといったワーカー・プロセス114の実行をアプリケーション112が要求するのを可能にするように構成することができる。仮想環境110は、それ故、ワーカー・プロセス114の実行をアプリケーション112と共に仮想環境110内で開始することができる。例えば、ワーカー・プロセス114は、移動体通信デバイス(例えば電話)によって受け取られる着信またはメッセージのような様々なデバイス・イベント116を通知されるよう要求することができる。
デバイス104は、コンピューティング環境108内で或るデバイス・イベント・モニタリング118を適用することができる。デバイス・イベント116を検出すると、仮想環境110内でデバイス・イベント通知120をワーカー・プロセス114にデリバリすることができる。このようにして、デバイス104は、アプリケーション112が、仮想環境110内でワーカー・プロセス114を呼び出すのを可能にし、アプリケーション112のフォアグラウンド処理を中断することなく様々な種別のバックグラウンド処理を遂行することができる。
図1の例示のシナリオ100で示すモデルは、正確に、ハイパーテキスト・マークアップ言語(HTML)の最近のバージョンに示される「ウェブ・ワーカー」モデルを説明するものと認められよう。ここでは、JavaScriptのスクリプトは、当該スクリプトと共にwebブラウザー内で実行される「ウェブ・ワーカー」プロセスにおいてバックグラウンド・プロセスを呼び出すことができる。
【0013】
図1の例示のシナリオ100に示すアーキテクチャーが幾らかの利点を提示できる一方で、幾らかの不利な点もまた生じることが認められることができる。特に、アプリケーション112と共に仮想環境110内でワーカー・プロセス114を実行することが特定の観点では不利となる場合がある。例えば、幾らかのシナリオでは、ワーカー・プロセス114のライフ・サイクルをアプリケーション112と連結することが望ましい場合がある。そうすると、アプリケーション112の停止または終了がまた、結果としてワーカー・プロセス114の停止または終了となる。しかしながら、他のシナリオでは、アプリケーション112およびワーカー・プロセス114を分離することが望ましい場合もある。例えば、ワーカー・プロセス114は、ユーザー106が完了を望むロング・ランのプロセスを含むことができるが、ユーザー106は、仮想環境110ではアプリケーション112の維持を望まないかもしれない(例えば、そのユーザー106は、webアプリケーションをホストするwebページから離れるよう意図的または偶然にナビゲートし、webアプリケーションに関連付けられるwebワーカーを終了させるかもしれない)。別の例として、ユーザー106は、デバイス104で生じる特定の種別のデバイス・イベント116(例えば、テキスト・メッセージまたは着信呼を受信するとユーザー106に通知する通知プロセス)についてのハンドラーのようにワーカー・プロセス114が無期限に持続することを望む場合がある。更には、幾らかのシナリオでは、ワーカー・プロセス114が、アプリケーション112の停止または終了の後のみならず、仮想環境110の停止または終了の後においても、および/またはコンピューティング環境108の中断の後(例えば、デバイス104を再起動若しくは再開した後)においても持続するのを可能にするのが望ましい場合もある。しかしながら、ワーカー・プロセス114のライフ・サイクルをアプリケーション112のライフ・サイクルと連結させることを厳格に必要とするモデルでは、このようなワーカー・プロセス114の持続性および回復性を提供する能力がないこともある。
B.提示する技術
本明細書に提示する技術は、仮想環境において実行するアプリケーション112を代理して、ワーカー・プロセスの持続性および/または回復性を改良するためのものである。これらの技術(また、
図1の例示のシナリオ100に示した技術のような他の技術とは対照的に)により、仮想環境110内でワーカー・プロセス114を実行するよりはむしろ、デバイス104が、アプリケーション112を代理するものの仮想環境110の外部にあるワーカー・プロセス114を実行することができる。更には、デバイスがアプリケーション112を終了するとき(一時的若しくは無期限にアプリケーション112を停止するか、またはアプリケーション112の実行を完了または中止するとき)、デバイス104はアプリケーション112に関連付けられる1つ以上のワーカー・プロセス114を終了するのを控えることができる。このようにして、デバイス104は、アプリケーション112が現在実行しない間でさえ、アプリケーション112のコンピューター処理の提供を継続する持続的なワーカー・プロセス114の実行を可能にすることができる。
【0014】
図2は、本明細書に提示する技術の例示のアプリケーションを特徴とする例示のシナリオ200について示す。この例示のシナリオ200では、デバイス104は、仮想環境110を含むコンピューティング環境108をやはり含み、サーバー102から受け取ったアプリケーション112(例えば、webサーバーから受け取り、webブラウザー内で実行するアプリケーション)が実行される。アプリケーション112は、幾らかのバックグラウンド処理を要求することができ、仮想環境110は、アプリケーション112を代理するワーカー・プロセス114を開始することによって応ずることができる。しかしながら、本明細書に提示する技術によって、ワーカー・プロセス114はワーカー・プロセス・ホスト202が仮想環境110外部で実行することができる。ワーカー・プロセス・ホスト202は、ワーカー・プロセス114のライフ・サイクルおよびリソース要求を、仮想環境110によって、アプリケーション112のライフ・サイクルおよびリソース要求の管理とは独立して管理することができる。特に、アプリケーション112の終了を検出すると、デバイスのワーカー・プロセス・ホスト202は、ワーカー・プロセス114を終了するのを控えることができる。すなわち、ワーカー・プロセス114のライフ・サイクルは、アプリケーション112のライフ・サイクルとは別個のもの且つ独立して管理することができる。ワーカー・プロセス・ホスト202はまた、ワーカー・プロセス114が実行イベントを遂行すると、ワーカー・プロセス114がアプリケーション112に通知するのを可能にすることができる。例えば、ワーカー・プロセス114により実施されるバックグラウンド処理は、移動体電話からの着信のようなクライアントのデバイス・イベント116を検出することを必要とする場合がある。デバイスは、ワーカー・プロセス114を代理してデバイス・イベント116を検出するために幾らかのデバイス・イベント・モニタリング118を利用することができ、このようなデバイス・イベント116を検出すると、デバイス・イベント通知120をワーカー・プロセス114にデリバリすることができる。特に、この検出およびデリバリが成功裡に完了することができる一方で、アプリケーション112が現在実行していない場合でも(そして、任意に、仮想環境110がデバイス104で実行していない場合でも)ワーカー・プロセス114は動作している。更には、ワーカー・プロセス・ホスト202は、ワーカー・プロセス114により、アプリケーション112にデバイス・イベント116について通知するのを容易にする(例えば、アプリケーション112および/または仮想環境110が現在実行していない場合に、デバイス104は、アプリケーション112および/若しくは仮想環境110を再開することができるか、または、このようなプロセスがユーザー106によって後に再開されるまで、デバイス・イベント通知120を単に待ち行列化することができる)。このようにして、デバイス104は、ワーカー・プロセス114の持続的な実行をアプリケーション112の実行とは独立して遂行する。これらの、および他の利点は、
図2の例示のシナリオ200に示すアーキテクチャーおよび本明細書で提示する技術を通じて遂行可能なものすることができる。
C.例示的実施形態
図3は、本明細書に提示する技術の例示の第1の実施形態について示し、デバイス104の仮想環境110において実行するアプリケーション112を代理して処理を実行する例示の方法300について示す。例示の方法300は、例えば、メモリ回路、ハード・ディスク・ドライブのプラッタ、ソリッド・ステート・ストレージ・デバイス、または磁気若しくは光ディスクのようなデバイスのメモリ・コンポーネントに格納される命令のセットとして実施することができ、また、デバイスが有するプロセッサーで実行するときに、本明細書に提示する技術によりデバイスを動作させるように組織することができる。例示の方法300は、302で始まり、デバイスのプロセッサー上での命令の実行304を伴う。具体的には、これらの命令は、アプリケーション112から要求を受け取ると、実行イベントを含むワーカー・プロセス114を実行し、仮想環境110の外部においてワーカー・プロセス114の実行を開始する(306)ように構成することができる。命令はまた、アプリケーション112の終了を検出すると、ワーカー・プロセス114の終了を控える(308)ように構成することができる。命令はまた、ワーカー・プロセス114が実行イベントを遂行すると、アプリケーション112に、ワーカー・プロセス114の実行イベントについて通知する(310)ように構成することができる。アプリケーション112に代わる処理を完了すると、例示の方法300は、本明細書に提示する技術によりアプリケーション112を代理するワーカー・プロセス114の実行を提示するものであり、312において終了する。
【0015】
図4は、本明細書に提示する技術の例示の第2の実施形態について示す。例示のシナリオ400は、デバイス104の仮想環境110において実行するアプリケーションに代理して処理を実行するように構成される例示のシステム408を特徴とする例示のシナリオ400について示す。例示のシステム400は、例えば、デバイス402のメモリ・コンポーネントに格納された命令として実施することができ、デバイス402のプロセッサー404で実行すると、本明細書に提示する技術によりデバイス402を動作させるように構成することができる。例示のシステム408は仮想環境110を含み、少なくとも1つのアプリケーション112がデバイス104上で実行している。例示のシステム408はまた、仮想環境110の外部においてデバイス104で実行するワーカー・ホスト・コンポーネント410を備えることもでき、実行イベント406を伴うワーカー・プロセス114を実行するためにアプリケーション112から要求を受け取ると、仮想環境110の外部においてワーカー・プロセス114の実行を開始するように構成することができる。ワーカー・ホスト・コンポーネント410は更に、アプリケーション112の終了を検出すると、ワーカー・プロセス114の終了を控え、そして、ワーカー・プロセス114が実行イベント406を遂行すると、アプリケーション112にワーカー・プロセス114の実行イベント406について通知するように構成される。このようにして、例示のシステム408は、本明細書に示す技術により、デバイス402の仮想環境110において実行するアプリケーション112を代理してワーカー・プロセス114の実行を遂行する。
【0016】
更なる別の実施形態は、本明細書に提示する技術を適用するように構成されるプロセッサー実行可能命令を備えるコンピューター可読媒体を含む。このようなコンピューター可読媒体は、例えば、半導体メモリ(例えば、スタティック・ランダム・アクセス・メモリ(SRAM)、ダイナミック・ランダム・アクセス・メモリ(DRAM)、および/または同期型ダイナミック・ランダム・アクセス・メモリ(SDRAM)技術を利用する半導体)のようなタンジブル・デバイスを含むコンピューター可読ストレージ媒体、ハード・ディスク・ドライブのプラッタ、フラッシュ・メモリ・ドライブ、または磁気若しくは光ディスク(例えば、CD−R、DVD−R若しくはフロッピー(登録商標)ディスク)を含むことができる。そして、デバイスのプロセッサーによって実行されると、本明細書に提示する技術をデバイスに実施させるコンピューター可読命令のセットをエンコードする。このようなコンピューター可読媒体はまた、様々な物理現象(例えば、電磁信号、音波信号または光信号)を通じて、並びに様々な有線のシナリオ(例えば、イーサネットまたは光ファイバーケーブルを介して)、および/または無線のシナリオ(例えば、WiFiのような無線ローカル・エリア・ネットワーク(WLAN)、Bluetooth(登録商標)のようなパーソナル・エリア・ネットワーク(PAN)、またはセルラー若しくは無線ネットワーク)で伝播することができる信号のような様々な種別の通信媒体を(コンピューター可読ストレージ媒体とは別のクラスの技術として)含むことができ、デバイスのプロセッサーによって実行されると、本明細書に提示する技術をデバイスに実施させるコンピューター可読命令のセットをエンコードする。
【0017】
図5は、これらの方法により考案することができる例示のコンピューター可読媒体について示す。ここでは、実施態様500は、エンコードされたコンピューター可読データ504を有するコンピューター可読媒体502(例えば、CD−R、DVD−Rまたはハード・ディスク・ドライブのプラッタ)を含む。このコンピューター可読データ504は、本明細書に記載する原理により動作するように構成されるコンピューター命令のセット506を含む。このような1つの実施形態では、プロセッサー実行可能命令506は、
図3における例示の方法300のようなローカル・イベント105に関連するクライアント・アプリケーション108の要求を満たす方法408を実行するように構成することができる。このような別の実施形態では、プロセッサー実行可能命令506は、
図4における例示のシステム408のようなローカル・イベント206に関連するクライアント・アプリケーション108の要求を満たすシステムを実装するように構成することができる。幾らかの実施形態では、このコンピューター可読媒体は、このようにして構成されるプロセッサー実行可能命令を格納するように構成されるコンピューター可読ストレージ媒体(例えば、ハード・ディスク・ドライブ、光ディスク、またはフラッシュ・メモリ・デバイス)を含むことができる。このような多くのコンピューター可読媒体は、当該技術分野における当業者によって考案されることもあり、本明細書に提示する技術により動作するように構成される。
D.変更例
本明細書において検討する技術は多くの態様における変更と共に考案することができる。幾らかの変更例は、追加の利点を提示することができ、および/またはこれらの若しくは他の技術における他の変更例に関する不利な点を低減させることができる。更に、幾らかのバリエーションを組み合わせて実施することができ、また、幾らかの組み合せは、利点の付加および/または相乗効果的な協働による不利な点の低減を特徴とすることができる。当該変更例は、様々な実施形態(例えば、
図3の例示の方法300および
図4の例示のシステム408)に組み込み、このような実施形態に個々および/または相乗効果的な利点を与えることができる。
D.シナリオ
これら技術が有する実施形態内で変更できる第1の態様はシナリオに関し、このような技術を利用できる。
【0018】
この第1の態様における第1の変更例として、本明細書に提示する技術は、サーバー、サーバー・ファーム、ワークステーション、ラップトップ、タブレット、移動体電話、ゲーム・コンソールおよびネットワーク機器のような数多くの種別のデバイス402と共に利用することができる。このようなデバイス402はまた、有線または無線通信デバイスのようなコンピューティング・コンポーネント、キーボード、マウス、タッチパッド、タッチ・センシティブ・ディスプレイ、マイクロホンおよびジェスチャ・ベースの入力コンポーネントのようなヒューマン入力デバイス、静止またはモーション・カメラ、グローバル位置サービス(GPS)デバイス、および他のセンサのような自動入力デバイス、ディスプレイおよびスピーカーのような出力デバイス、並びに、有線および/または無線ネットワーク・コンポーネントのような通信デバイスという様々なものを提供することができる。
【0019】
この第1の態様における第2の変更例として、本明細書に提示する技術は、様々な形のサーバー102(例えばwebサーバー、ファイル・サーバ、アプリケーション・サーバ、メディア・サーバー、ピア・ツー・ピア共有協働サーバー、データベース・サーバ、電子メール・サーバ、物理的計量モニタリング・サーバー、並びに管理制御およびデータ収集(SCADA)オートメーション・サーバのような様々な種別のサーバー102と共に利用することができる。
【0020】
この第1の態様における第3の変更例として、本明細書に提示する技術は、webブラウザー、シミュレーションされたおよび/若しくはエミュレート・バーチャル・マシン、ミドルウェア・プラットフォーム、並びにおよび/または隔離された構成(isolation construct)のような多くの種別の仮想環境110で実行するアプリケーション112を提供するのに利用することができる。
【0021】
この第1の態様における第4の変更例として、本明細書に提示する技術は、様々な解釈されたおよび/またはコンパイルされた言語で記述されるwebアプリケーション、ファイル共有アプリケーション、メディア・レンダリング・アプリケーション、並びにデータ駆動クライアント・アプリケーションのような数多くの種別のアプリケーション112を提供するのに利用することができる。
【0022】
この第1の態様における第5の変更例として、本明細書に提示する技術は、数多くの種別のワーカー・プロセス・ホスト202内において多くの種別のワーカー・プロセス114を実行することを必要とする。例えば、ワーカー・プロセス114は、HTML5「webワーカー」モデルにより実行されるものの、アプリケーション112をホストするwebブラウザー外で別個のシェルで実行されるJavaScriptスクリプトを含むことができる。代替として、ワーカー・プロセス114は、デバイス104において、管理コンテキスト(ここでは、管理ランタイムはワーカー・プロセス・ホスト202を含む)で実行する、部分的または全体がコンパイルされ且つ最適化により実行するアプリケーションを含むことができる。
他の代替として、ワーカー・プロセス・ホスト202は、同一のデバイス上のwebブラウザー内で実行するアプリケーション112を代理して持続的なバックグラウンド処理を実行するように構成されるローカルなwebサーバーを含むことができる。更に、ワーカー・プロセス114は、Node.jsサーバー・サイドのJavaScript(登録商標)環境を利用するJavaScript(登録商標)のスクリプトを含むことができる。
【0023】
この第1の態様における第6の変更例として、ワーカー・プロセス114は、アプリケーション112を代理して、ロング・ランのコンピューター・プロセス(実行イベントにはコンピューター・プロセスの完了が含まれる)、スケジューリング若しくはタイマー・プロセス(実行イベントには、タイムアウト若しくはタイマーの経過が含まれる)、デーモン・プロセスのような持続的に利用可能な機能(実行イベントにはデバイス104上で実行する他のプロセスによる機能性の起動が含まれる)、および/または様々な種別のデバイス・イベント116のモニタリング(実行イベントには、デバイス104のユーザー106からのユーザー入力の検出のようなデバイス・イベント116について検出したインスタンス、移動体電話デバイスの着信若しくはメッセージの受信のようなコンピューティング環境108内に生じるハードウェア若しくはソフトウェア・イベントが含まれる。)を含む数多くの種類のバックグラウンド処理を実行することができる。ワーカー・プロセス114は、デバイス・イベント116をアプリケーション112にレポートし、デバイス・イベント116の発生を記録し、またはデバイス・イベント116のハンドリングの間に追加のロジックを適用するというように、数多くの種別の処理をこのようなデバイス・イベント116に適用することができる。これらの、そして他のシナリオは互換性を有することができ、本明細書に提示する技術を有利に利用することができる。
D2.ワーカー・プロセス・ホスティング
本明細書に提示する技術について実施形態間で変更できる第2の態様は、仮想環境110の外側でワーカー・プロセス114の実行をホストする方法を含む。すなわち、ワーカー・プロセス114がアプリケーション112から受け取られ、仮想環境110の外側で実行される一方で、ワーカー・プロセス114が、ある種別のプロセス・ホスト無しで仮想環境110の外側で実行するのを可能にする。何故ならば、この結果として、デバイス104のコンピューティング環境108内においてネイティブ・プロセスとして任意の信頼性のないコードを実行するからである。したがって、仮想環境110から分離されるにも拘わらず、ワーカー・ホスト114の実行は、様々な種別のホスティング・サービスをワーカー・プロセス114に提供するワーカー・ホスト・コンポーネント410によって対応する(attend)ことができる。
【0024】
この第2の態様の第1の変更例として、ワーカー・ホスト・コンポーネント410は、ホスについての数多くの形態をワーカー・プロセス114に適用することができる。第1の実施例として、ワーカー・ホスト・コンポーネント410はまた、ワーカー・プロセス114に提供される仮想環境110がアプリケーション112に提供される仮想環境110とは別個のものである限りにおいて、仮想環境110をワーカー・プロセス114に提供することもできる。実際、ワーカー・プロセス114に提供される仮想環境は、アプリケーション112提供される仮想環境110と極めて類似のものとすることができ(例えば、両方のプロセスは、webブラウザーのコンテキストにおいて実行することができる)、また、仮想環境110の分離は、ワーカー・プロセス114の持続性を、本明細書で提供するアプリケーションのライフ・サイクルとは独立のものとするのを可能にする。加えて、アプリケーション112に提供される第1の仮想環境110とワーカー・プロセス114に提供される第2の(別個の)仮想環境110との類似点は、幾らかの利便性および効率性をもたらすことができる。例えば、アプリケーション112に適用される同一のセキュリティ・ポリシを、ワーカー・プロセス114に適用することができる。例えば、webブラウザー内で実行するwebアプリケーションは、クロス・ドメイン・セキュリティ・ポリシに従ってしばしば制限される。例えば、webアプリケーションにより、当該webアプリケーションが受信したドメインとの間でインターネットを介した通信のみが可能になる。ワーカー・ホスト・コンポーネント410は、webブラウザー内で実行するwebアプリケーションに適用され、ワーカー・プロセス114に関連付けられる同一のクロス・ドメイン・セキュリティ・ポリシに従って、ワーカー・プロセス114の実行を制限することができる。例えば、如何なるドメイン、サーバー、またはデバイス104にアプリケーション112を提供したドメインの外部にあるデバイスとの通信からワーカー・プロセス114を制限する。
【0025】
代替として、ワーカー・ホスト・コンポーネント410は、異なる実行モデルを、異なる詳細を有するワーカー・プロセス114に提示することができる。このような相違は、アプリケーション112(例えば、ユーザー・インターフェースを提示するアドホックのフロント・エンドのコードに適した実行環境)について、およびワーカー・プロセス114(例えば、ユーザー・インターフェース無しでコンピューター処理が複雑でロング・ランの処理に適する実行環境)についての異なるコンテキストの観点で選択および/または設計することができる。このような第1の実施例として、ワーカー・プロセス114がアプリケーション112よりも計算処理的により複雑な処理に利用できるために、ワーカー・ホスト・コンポーネント410は部分的および/または全体的に、実行の前若しくは間にワーカー・プロセス114をコンパイルする、つまり、コード最適化技術の使用を通じてより性能のより実行を提供することができると共に、アプリケーション112は解釈可能なスクリプトとして実行することができる。このような第2の実施例として、ワーカー・ホスト・コンポーネント410は、仮想環境110におけるアプリケーション112のスケジューリングではなく、コンピューティング環境108におけるワーカー・プロセス114の実行をスケジュールすることができる。例えば、ワーカー・プロセス114は、特に、デバイス104のアイドル期間の間に長く続く比較的中断されない処理に適するロング・ラン・プロセスとしてスケジュールすることができると共に、アプリケーション112は、ユーザー・インターフェース・イベントへの応答のように、高い応答性を有するものの実施の存続が短いコードのセットとしてスケジュールすることができる。このような第3の実施例として、ワーカー・プロセス114もは、アプリケーション112とは異なるアプリケーション・プログラミング・インターフェース(API)のセット、例えば、下位レベルのハードウェア、並びにワーカー・プロセス114についてのネットワーク通信モジュールおよびアプリケーション112についてのユーザー・インターフェース・タイプ・モジュールを提供することができる。このような第4の実施例として、ワーカー・ホスト・コンポーネント410は、アプリケーション112の仮想環境110とは異なるセキュリティ・モデルを提示することができる(例えば、仮想環境の外部で実行するワーカー・プロセスの拡張された性能の観点では、ワーカー・ホスト・コンポーネント410を処理するセキュリティは、実行の前およびその間により厳格なコード評価を適用して、不当な(malicious)動作を検出することができる)。反対に、他の観点では、ワーカー・プロセス114のセキュリティ・モデルは、仮想環境110内で実行するアプリケーション112に対するものよりも一層緩和したものとしてもよい。例えば、ワーカー・プロセス114と他のデバイス間の通信は、許容可能に増加した通信レイテンシについてより厳密に精査されるので、ワーカー・プロセス114は、アプリケーション112に適用されるクロス・ドメイン・セキュリティ・ポリシに従って制限されないことがある。例えば、デバイス104は第2のデバイスで実行するリモート・プロセスにアクセス可能である場合は、ワーカー・ホスト・コンポーネント410は、ワーカー・プロセスで第2のデバイス上で実行するリモート・プロセスの接続要求を受信すると、ワーカー・プロセス114でリモート・プロセスを接続する。機能性の拡張は、アプリケーション112よりも高レベルの信頼性のワーカー・プロセス114を反映することができ、ユーザーの同意に付随させてもよい。例えば、ワーカー・ホスト・コンポーネント410は、仮想環境110の外部でワーカー・プロセス114の実行を開始するオファーをユーザー106に提示することができ、ユーザー106から当該オファーの承認を受けたときのみ、このような実行を開始することができる。ユーザー106はまた、関連するアプリケーション112の終了の後に持続しているワーカー・プロセス114を検査して、その実行を変更する(例えば、ユーザー106による要求を履行してワーカー・プロセス114を停止および/または終了する)のを許可されることもできる。
【0026】
これらの、および他の方法では、ワーカー・プロセス114に提供される実行モデルは、アプリケーション112に提供される実行モデルとは著しく異なるものであってもよい。このような第1の実施例として、ワーカー・ホスト・コンポーネント410は、ワーカー・プロセス114について管理された実行(例えば、デバイス104のアーキテクチャーにより、メモリ割り当ておよびコンポーネント・アクセスの要求を容易にする)を可能にする管理ランタイムを含むことができる。このような第2の実施例として、ワーカー・ホスト・コンポーネント410は、デバイスのwebブラウザー内でも実行するwebアプリケーションのサービスにおいてデバイス104に展開される、ローカルなwebサーバーを含み、ローカルwebサーバー・プロセスとしてワーカー・プロセス114を実行するように構成することができる。例えば、ワーカー・ホスト・コンポーネント410は、ローカルwebサーバーのNode.jsサーバー・サイドのスクリプト・モジュールをターゲットとするJavaScript(登録商標)のスクリプトとして設計することができる。このような第3の実施例として、ワーカー・ホスト・コンポーネント410は、Java(登録商標)バーチャル・マシンのような仮想マシンを提供することができる。当該仮想マシンは、仮想環境110とは別個に実行し、その結果、アプリケーション112のライフ・サイクルからワーカー・プロセスのライフ・サイクルを分離することができる。ワーカー・ホスト・コンポーネント410によりワーカー・プロセス114に提供される実行環境での多くの選択は、本明細書に提示する技術が利用可能であると共に、これと互換性を有することができる。
【0027】
図6は、本明細書で提供されるワーカー・ホスト・コンポーネント410によるワーカー・プロセス114のホストにおける幾らかの変更例を特徴とする例示のシナリオ600について示す。この例示のシナリオ600では、本明細書に提示する技術により、デバイス104は、アプリケーション112を代理するが仮想環境110の外側でワーカー・プロセスを実行するワーカー・ホスト・コンポーネント410と同様に、アプリケーション112を実行する仮想環境110を提供する。このような第1の例として、幾らかの観点では、ワーカー・プロセス114のホストは、類似のクロス・ドメイン制限ポリシのような仮想環境110内でのアプリケーション112のホストと類似性を共有することができる。例えば、アプリケーション112が第1のサービス(例えば、webアプリケーション・サービス)を提供するサーバー102から最初に受信し、ワーカー・プロセス114が同一のサーバー102との通信610を後に開始する場合は、ワーカー・ホスト・コンポーネント410は第1サービスを提供するサーバー102との通信610を許可することができる。しかしながら、ワーカー・プロセスが第1のサービスを提供するサーバー102とは異なる他のサーバー612によって提供されるサービスとの通信612を開始するのを試行する場合には、ワーカー・ホスト・コンポーネント410は通信612をブロックする(616)ことができる。代替としてまたはこれに加えて、ワーカー・プロセス114に適用されるセキュリティ・ポリシは、アプリケーション112に適用されるものとは、同一、または他の点において異なるようにすることができる。例えば、この例示のシナリオ600では、デバイス104は、相互動作可能な方法で、例えば、整合したシームレスのユーザー経験を複数のデバイス104にわたりユーザー106に供給するために、共有する拡張データを用いて、同一のユーザー106により動作されるデバイス104のセットを含むデバイス・メッシュ602の一部として動作する。したがって、アプリケーション112を提供しているサーバー102の外部においてアプリケーション112が遠隔プロセス606と通信することが許可されていない場合であっても、ワーカー・プロセス114は、デバイス・メッシュ602において第2のデバイス604上で実行する遠隔プロセス606と通信すること(608)が許可されることができる。
D3.ワーカー・プロセスの持続性および回復性
これらの技術の実施形態間を変更することができる第3の態様は、ワーカー・プロセス114の持続性に関係している。アプリケーション112の終了を検出すると、ワーカー・プロセス114の実行を終了するのを控えることに加え、本明細書に提示する技術では、ワーカー・プロセス114の持続性および回復性を容易にする付加的な技術を利用することができる。
【0028】
この第3の態様についての第1の変更例として、ワーカー・ホスト・コンポーネント410はまた、ワーカー・プロセス114により、アプリケーション112の終了ではなく仮想環境110の終了(例えば、アプリケーション112をホストするwebページをユーザーがクローズした後にも持続させるのではなく、webブラウザーが終了され且つメモリから完全にアンロードされた後にも持続させる)に拘わらず持続させるのを可能にする。つまり、仮想環境110を終了すると、デバイス104は、ワーカー・プロセス114を終了するのを控えることができる。
【0029】
この第3の態様についての第2の変更例として、ワーカー・ホスト・コンポーネント410は、ワーカー・プロセス114により、ワーカー・ホスト・コンポーネント410の故障(例えば、ワーカー・プロセス114を管理するコンポーネントについてのエクセプション、クラッシュまたは終了)に拘わらず持続させるのを可能にする。例えば、ワーカー・ホスト・コンポーネント410は、ワーカー・プロセス114およびそのソースを実行するリストを定期的に記録することができる。障害がワーカー・ホスト・コンポーネント410内で発生した場合は、デバイス104は、ワーカー・ホスト・コンポーネント410を終了し、デバイスのコンピューティング環境内におけるワーカー・ホスト・コンポーネントの実行を再開し、故障の時間にワーカー・ホスト・コンポーネント410内で実行していたワーカー・プロセス114の実行を再開することができる。
【0030】
この第3の態様についての第3の変更例として、ワーカー・ホスト・コンポーネント410は、ワーカー・プロセス114により、デバイス104のコンピューティング環境108における重大な変更に拘わらず持続させるのを可能にする。例えば、アプリケーション112および/または仮想環境110の終了は、再起動のような、デバイス104のコンピューティング環境108の再スタートのプロセスの間に発生させることができる。したがって、コンピューティング環境108を再スタートした後に、デバイスは、ワーカー・プロセス114の実行を仮想環境110外部で再開することができる。このような第1の実施例として、デバイス104は、ワーカー・プロセス114を格納することができ、またその状態を周期的に記録することができる。その結果、コンピューティング環境108を再スタートした後に、デバイス104は、ワーカー・プロセス114の実行を比較的最近の状態で再開することができる。このような第2の実施例として、ワーカー・プロセス114を受け取り、および/またはサービスとの通信を維持する場合は、デバイス104は、コンピューティング環境108を再スタートした後に、サービスから第2のワーカー・プロセス114(例えば、第1のワーカー・プロセス114の状態についての最近の観察またはレポートに基づいて実行を再開するように構成されるワーカー・プロセス114)を要求することができ、また、サービスから第2のワーカー・プロセス114を受け取ると、デバイス104の仮想環境110の外側で第2のワーカー・プロセス114を実行することができる。このような持続性は、異なるデバイス104上でコンピューティング環境108を再スタートまたは移行した時、例えば、ユーザー106のデバイス・メッシュ602内でワーカー・プロセス114を第2のデバイス104に移行した時に、ワーカー・プロセス114によって持続させるのを可能にする。
【0031】
この第3の態様についての第4の変更例として、ワーカー・プロセス114の回復性は、アプリケーション112と共有することができる。例えば、アプリケーション112を終了したときにワーカー・プロセス114を終了するのを控えることに加えて、ワーカー・ホスト・コンポーネント410は、仮想環境110内においてアプリケーション112の実行の再開を検出したときに、終了の前にアプリケーション112が開始した如何なる現在実行しているワーカー・プロセス114をも識別することができる。また、アプリケーション112を当該識別したワーカー・プロセス114と再接続することができる。ワーカー・プロセス114は、例えば、アプリケーション112の終了の期間において、デバイス104上に生じている如何なる関連のデバイス・イベント116についてもアプリケーション112に通知することができる。ワーカー・プロセス114の持続性および回復性を拡張する、これらのまたは他の技術は、本明細書に提示する技術の実施を通じて考案することができ、またこの実施との間で互換性を有することができる。
D4.アプリケーション通知
これら技術についての実施形態間を変更することができる第4の態様は、関連するワーカー・プロセス114が実行イベント406を遂行すると、アプリケーション112に通知する手法を含む。
【0032】
この第4の態様についての第1の変更例として、アプリケーション112の通知は、多くの種別の通知機構を通じて達成することができる。このような第1の実施例は、ワーカー・ホスト・コンポーネント410は、単に実行イベント406を記録のみすることができ、そして、アプリケーション112は、ワーカー・プロセス114によって遂行される実行イベント406のログを周期的に検査することができる。このような第2の実施例は、通知がメッセージ・パッシングにより成し遂げることができる。例えば、ワーカー・プロセス114は、実行イベント406を識別および記述する実行イベント通知412を生成することができ、仮想環境110は実行イベント通知412をアプリケーション112に提示することができる。このような第3の実施例として、通知はコールバック機構によって遂行することができる。ここでは、アプリケーション112は、ワーカー・プロセス114が実行イベント406を遂行すると呼び出されるコードのメモリ位置を示す。このコードは、例えば、仮想環境110内で実行されるアプリケーション112の一部、ワーカー・ホスト・コンポーネント410によって実行されることになるワーカー・プロセス114の一部、APIコールのようなコンピューティング環境108の機能、またはモバイル・エージェント、抽象構文ツリー、若しくはスクリプトのような別個のコード部を含むことができる。
【0033】
この第4の態様についての第2の変更例として、ワーカー・プロセス114の回復性は、通知の間にアプリケーション112まで拡張することができる。このような第1の実施例として、アプリケーションが終了した後にワーカー・プロセス114が実行イベント406を遂行する場合に、デバイス104は、例えばwebワーカーを生成したwebアプリケーションのwebページを再ロードすることにより、仮想環境110のアプリケーションを、通知プロセスの一部として再び開始することができる。このような第2の実施例として、通知プロセスの一部として、アプリケーション112をユーザー106に自動的に提示することができる。例えば、実行イベント406を遂行すると、デバイス104は、仮想コンピューティング環境110および/またはアプリケーション112を立ち上げてコンピューティング環境108内においてフォアグラウンド提示にする(例えば、webブラウザーをフォアグラウンドとして、アプリケーション112を収容するタブに切り替える)。
【0034】
図7は、デバイス104のコンピューティング環境108において実施する持続性および回復性のあるワーカー・プロセスを特徴とする例示のシナリオについて示す。この例示のシナリオでは、第1の時点700では、(コンピューティング環境108において仮想環境110を含む)webブラウザー702は、サーバー102からアプリケーション112を受け取ることができ、ウェブ・ブラウザ702内でアプリケーション112の実行を開始することができる。この実行は、あるバックグラウンド処理を提供するためにワーカー・プロセス114を必要とすることができ、コンピューティング環境108はローカルwebサーバー704のサーバー・プロセスとして実行することができる。加えて、ローカルwebサーバー704は、ワーカー・プロセス114、ワーカー・プロセス114およびアプリケーション112のソースを含むサーバー102、並びに定期的にワーカー・プロセス114の状態について記録することができる。
【0035】
第2の時点706では、webブラウザー702の終了708は、ユーザー106および/またはデバイス104により開始することができ、このような終了708は、webブラウザー702において実行するアプリケーション112を終了するのを含むことができる。しかしながら、本明細書に提示する技術により、webブラウザー702の外部のワーカー・プロセス114の実行は、アプリケーション112および仮想環境110の終了708に拘わらずワーカー・プロセス114により持続するのを可能にする。
【0036】
第3の時点710では、コンピューティング環境108はまた終了712を経験することもできる(例えば、デバイス104の再起動の間)。終了712に続く第4の時点714では、コンピューティング環境108は、再スタートすることができる。再スタートはローカルwebサーバー704が自動的に再び開始するのを伴うことができ、コンピューティング環境108の終了712の時点においてローカルwebサーバー704によりホストされるワーカー・プロセス114の記録を検査することができる。ローカルwebサーバー704は、次いで、サーバー102から第2のワーカー・プロセス114(例えば、第1の時点700で開始されたワーカー・プロセス114に対する同一のインスタンス、または終了時712にワーカー・プロセス114の状態を反映した変更したワーカー・プロセス)を受け取ることができる。コンピューティング環境108は、このようにして、ワーカー・プロセス114の実行を、コンピューティング環境108の再スタートの後に、自動的に再開することができる。
【0037】
第4の時点718では、デバイス・イベント116は、コンピューティング環境108(例えば、ユーザー106への着呼)内において生じさせることができる。ワーカー・プロセス114がデバイス・イベント116(例えば、ワーカー・プロセス114の実行イベント406として)と関連付けられる場合に、ローカルwebサーバー704は、ワーカー・プロセス114にデバイス・イベント116を通知することができる。加えて、ワーカー・プロセス114は、アプリケーション112にデバイス・イベント116について通知する(720)ことができる。更には、アプリケーション112および/またはwebブラウザー702が現在実行していない場合は、デバイス104は、webブラウザー702および/またはアプリケーション112を(例えば、webブラウザー702内でページを再ロードすることによって)再開することができ、加えて、webブラウザー702をコンピューティング環境108内でフォアグラウンド提示にすることができる。このようにして、デバイス104は、本明細書に提示する技術のアプリケーションを通じて、アプリケーション112の終了、アプリケーション112の終了、仮想環境110の終了、コンピューター環境108の再スタートにも拘わらず持続するワーカー・プロセス114について持続性のある実行を遂行することができる。
E.コンピューティング環境
図8および以降の検討では、本明細書に記載する1つ以上のプロビジョンの実施形態を実施するための適切なコンピューティング環境について簡潔で包括的な説明を行う。
図8の動作環境は、適切な動作環境の一例のみにすぎず、使用範囲または動作環境の機能に関して如何なる限定を示唆することを意図するものではない。コンピューティング・デバイスの例には、パーソナル・コンピュータ、サーバー・コンピュータ、ハンドヘルドまたはラップトップ・デバイス、モバイル・デバイス(例えば移動体電話、パーソナル携帯情報機器(PDA)、メディア・プレーヤなど)、マルチプロセッサー・システム、コンシューマー電子機器、ミニ・コンピューター、メインフレーム・コンピューター、上記システムまたはデバイスのいずれかを含む分散コンピューティング環境等を含むが、これらに限定されるものではない。
【0038】
必要というわけではないが、実施形態は、1つ以上のコンピューティング・デバイスによって実行されている「コンピューター可読命令」について一般的なコンテキストで説明する。コンピューター可読命令は、後記するコンピューター可読媒体を介して配給することができる。コンピューター可読命令は、機能、オブジェクト、アプリケーション・プログラミング・インターフェース(API)およびデータ構造等のようなプログラム・モジュールとして実行することができ、特定のタスクを実行し、または特定の抽象データ型を実装する。通例は、コンピューター可読命令の機能性は、様々な実施形態で所望されるように結合または分散させることができる。
【0039】
図8は、本明細書に提供する1つ以上の実施形態を実施するように構成されるコンピューティング・デバイス802を備えるシステム800の実施例を示す。1つの構成では、コンピューティング・デバイス802は、少なくとも1つの処理ユニット806およびメモリ808を含む。コンピューティング・デバイスの正確な構成および種別に応じて、メモリ808は、揮発性(例えばRAM)、不揮発性(例えばROM、フラッシュ・メモリなど)のもの、またはこれら2つの幾らかの組み合せとすることができる。この構成を
図8では点線804として示す。
【0040】
他の実施態様では、デバイス802は、追加の特徴および/または機能を含むことができる。例えば、デバイス802はまた、磁気ストレージ、光ストレージ等を含むがこれに限定されない追加のストレージ(例えば、着脱可能および/または着脱不能なもの)を含むこともできる。このような追加のストレージを
図8ではストレージ810として示す。一実施形態では、本明細書に提示する1つ以上の実施形態を実施するコンピューター可読命令は、ストレージ810内にあってもよい。ストレージ810はまた、他のコンピューター可読命令を格納して、オペレーティング・システム、アプリケーション・プログラム等を実装することもできる。コンピューター可読命令は、例えば、処理ユニット806による実行に対し、メモリ808にロードすることができる。
【0041】
本明細書で用いる「コンピューター可読媒体」という用語は、コンピューター・ストレージ媒体を含む。コンピューター・ストレージ媒体は、揮発性および不揮発性、着脱可能および着脱不能な媒体を含み、コンピューター可読命令または他のデータのような情報について記憶するための如何なる方法または技術で実施される。メモリ808およびストレージ810は、コンピューター・ストレージ媒体の例示である。コンピューター・ストレージ媒体は、RAM、ROM、EEPROM、フラッシュメモリ若しくは他のメモリ技術、CD−ROM、Digital Versatile Disk(DVD)若しくは他の光ストレージ、磁気セット、磁気テープ、磁気ディスク・ストレージ若しくは他の磁気・ストレージ・デバイス、または所望の情報を格納するために用いることができ、デバイス802によってアクセスできる他の如何なる媒体をも含むが、これらに限定されるものではない。いずれの種類のコンピューター・ストレージ媒体も、デバイス802の一部とすることができる。
【0042】
デバイス802はまた、デバイス802が他のデバイスと通信できる通信接続(1または複数)816を含むこともできる。通信接続(1または複数)816は、モデム、ネットワーク・インタフェース・カード(NIC)、統合ネットワーク・インターフェース、無線周波数送信器/受信器、赤外線ポート、USB接続、または他のコンピューティング・デバイスにコンピューティング・デバイス802を接続するための他のインタフェースを含むが、これらに限定されるものではない。通信接続(1または複数)816は、有線接続または無線接続を含むことができる。通信接続(1または複数)816は、通信媒体を送信および/または受信することができる。
【0043】
「コンピューター可読媒体」という用語は、通信媒体を含むことができる。通信媒体は、通例、コンピューター可読命令、または搬送波のような「変調データ信号」若しくは他の搬送機構における他のデータを実施し、また如何なる情報デリバリ媒体をも含む。「変調データ信号」という用語は、それがセットされるかまたはこのような方法で変更される特徴の1つのその信号の特徴セットを有する信号を含むことができ、信号内の情報をエンコードする方法で変更される。
【0044】
デバイス802は、キーボード、マウス、ペン、音声入力デバイス、タッチ入力デバイス、赤外線カメラ、映像入力デバイス、および/または他の如何なる入力デバイスのような入力デバイス(1または複数)814を含むことができる。1つ以上のディスプレイ、スピーカー、プリンター、および/または他の如何なる出力デバイスのような出力デバイス(1または複数)812も、デバイス802に含むことができる。入力デバイス(1または複数)814および出力デバイス(1または複数)812は、有線接続、無線接続、またはこれらの如何なる組み合わせを介してデバイス802に接続することができる。一実施形態では、他のコンピューティング・デバイスからの入力デバイスまたは出力デバイスは、コンピューティング・デバイス802用の入力デバイス(1または複数)814または出力デバイス(1または複数)812として使用することができる。
【0045】
コンピューター802の有する複数のコンポーネントは、バスのような様々な相互接続によって接続することができる。このような相互接続は、PCI ExpressのようなPeripheral Component Interconnect(PCI)、ユニバーサル・シリアル・バス(USB)、Firewire(IEEE 1394)、光バス構造等を含むことができる。他の実施形態では、コンピューター802の複数のコンポーネントは、ネットワークによって相互接続することができる。例えば、メモリ808は、ネットワークによって相互接続される、異なる物理位置にある複数の物理メモリ・ユニットに含まれることができる。
【0046】
当業者にとって、コンピューター可読命令を格納するのに利用されるストレージ・デバイスはネットワークにわたり分散できることが認識されるであろう。例えば、ネットワーク818を介してアクセス可能なコンピューティング・デバイス820は、コンピューター可読命令を格納することができ、本明細書に提示する1つ以上の実施形態を実施する。コンピューティング・デバイス802は、コンピューティング・デバイス820にアクセスすることができ、実行のためのコンピューター可読命令の一部または全部をダウンロードすることができる。代替として、コンピューティング・デバイス802は、必要に応じてコンピューター可読命令の一部をダウンロードすることができ、すなわち、幾らかの命令は、コンピューティング・デバイス802において実行することができると共に、幾らかはコンピューティング・デバイス820において実行することができる。
F.用語の使用
本主題について構造上の特徴および/または方法論的な行為に特化して言語により説明してきたが、添付の特許請求の範囲において規定される主題は、必ずしも上記の特定の特徴や行為には限定されないことを理解すべきである。それよりかはむしろ、上記の特定の特徴および行為は、特許請求を実施する例示の形態として開示するものである。
【0047】
本出願で使用した、「コンポーネント」、「モジュール」、「システム」、「インタフェース」等の用語は、全般的に、コンピューター関連エンティティ、ハードウェア、ハードウェアおよびソフトウェアの組み合せ、ソフトウェア、または実行するソフトウェアを指すことを意図するものである。例えば、コンポーネントは、プロセッサー上で起動するプロセス、プロセッサー、オブジェクト、実行可能形式(executable)、実行スレッド、プログラム、および/またはコンピューターとすることができるが、これらに限定されない。実例として、コントローラー上で起動するアプリケーションおよびコントローラーの両方をコンポーネントとすることができる。1つ以上のコンポーネントは、プロセスおよび/または実行スレッド内に常駐することができ、コンポーネントは1つのコンピューターにローカライズされ、および/または2つ以上のコンピューターの間で分散させることができる。
【0048】
更にまた、特許請求する主題は、規格化されたプログラミングおよび/またはエンジニアリングの技術を用いた方法、装置または製造する物品として実施することができ、ソフトウェア、ファームウェア、ハードウェア、またはこれらの如何なる組み合わせを生産し、コンピューターが開示した主題を実装するのを制御することができる。本明細書で用いる「製造する物品」という用語は、如何なるコンピューター可読デバイス、キャリアまたはメディアからアクセス可能なコンピューター・プログラムを包含することを意図する。もちろん、当業者にとって、特許請求する主題の範囲および趣旨から逸脱することなく、この構成に多くの変更を行うことができるものと認識されるであろう。
【0049】
実施形態の様々な動作について本明細書に提供している。一実施形態では、説明した1つ以上の動作が1つ以上のコンピューター可読媒体に格納されたコンピューター可読命令を構成することができ、コンピューティング・デバイスにより実行されると、当該コンピューティング・デバイスに説明した動作を実行させることになる。動作の幾らかまたは全てについて説明した順序について、これらの動作が必ず順序依存であることを意図するものとして解釈してはならない。代替の順序付けが、この説明の利益を享受する当業者に認められるであろう。更に、全ての動作が、本明細書に提供する各実施形態に必ずしも存在するわけではないことが理解されるであろう。
【0050】
更には、「例示の」という語は、例(example)、例(instance)、または図示(illustration)に供することを意味するために用いている。「例示の」として本明細書に記載される如何なる態様または設計も、必ずしも、他の態様または設計に対して優位なものとして解釈すべきではない。それよりかはむしろ、例示のという語の使用は、具体的なやり方で概念を提示することを意図するものである。本出願で用いる、「または(or)」なる語は、排他的(exclusive)「または(or)」ではなく、包括的(inclusive)「または(or)」を意味することを意図するものである。すなわち、他に特定されない場合、またはコンテキストから明らかでない場合は、「XはAまたは(or)Bを採用する」は、本来の包括的な順列を何れかを意図する。すなわち、XがAを採用し、XがBを採用し、またはXがAとBの両方を採用する場合は、「XはAまたは(or)Bを採用する」は、上記のいずれの下でも充足する。
加えて、本出願および添付の特許請求の範囲で用いる「a」および「an」は、全般的に、他に特定されない場合または単数の形態に向けられることがコンテキストから明らかでない場合には、「1またはそれ以上」を意味するものと解釈することができる。
【0051】
また、本開示は、1つ以上の実施態様に関して図示および説明してきたが、均等する変更態様および修正態様が、この明細書および添付の図面を読み込んで理解することに基づいて当業者に生じさせるであろう。本開示は、全てのこのような修正態様および変更態様を含み、また、以降の特許請求の範囲のみによって制限される。上記のコンポーネント(例えば、構成要素、リソースなど)によって実行される様々な機能に関しては特に、このようなコンポーネントを説明するのに用いられる用語は、本明細書に示した本開示についての例示の実装態様の機能を実行する開示した構造とは構造的に均等でない場合であっても、説明したコンポーネントについての特定の機能(例えば、機能的な均等物)を実行する如何なるコンポーネントに対応することを意図するものである。加えて、本開示の特定の特徴点が、幾らかの実施態様の1つのみに関して開示した一方で、このような特徴点は、如何なる所与のまたは特定のアプリケーションについて所望され有利となり得るように、他の実施態様の1つ以上と組み合わせてもよい。更にまた、「含む(includes)」、「有する(having)」、「有する(has)」、「有する(with)」なる用語、またはこれらの他の変更例は、発明の詳細な説明または特許請求の範囲のいずれかで用いられ、これら用語は「備える(comprising)」なる用語と同様に含まれることを意図するものである。