(57)【特許請求の範囲】
【請求項１】
同一のアプリケーションを実行する複数の情報処理装置と、前記情報処理装置を管理する管理装置とを含むコンピュータシステムであって、
前記情報処理装置は、
前記アプリケーションとして、複数の部分処理に分割可能なアプリケーションを実行制御する実行制御部と、
前記実行制御部によって実行済みの部分処理を示す進捗情報を収集する収集部と、
前記管理装置の指示に従って、前記アプリケーションを実行中の前記実行制御部における計算状態を示す計算状態情報を生成する生成部と、
前記管理装置から計算状態情報が提供された場合に、当該計算状態情報によって示される計算状態を当該実行制御部における計算状態に適用する適用部とを備え、
前記管理装置は、
前記複数の情報処理装置における前記収集部によって収集された各進捗情報を比較することにより、前記複数の情報処理装置において実行済みの部分処理の数の差異が所定の閾値以上であるか否かを判定する判定部と、
前記判定部によって、第１情報処理装置よりも前記アプリケーションの実行が進行している第２情報処理装置において実行済みの部分処理の数が、前記第１情報処理装置において実行済みの部分処理の数よりも前記閾値以上多いと判定された場合に、前記第２情報処理装置によって生成された計算状態情報を前記第１情報処理装置に提供する提供部と
を備えたことを特徴とするコンピュータシステム。
【請求項２】
前記収集部は、
前記実行制御部によって前記アプリケーションが実行されている場合に、当該情報処理装置によって消費された資源に関する資源情報を収集し、
前記判定部は、
前記複数の情報処理装置の間で前記アプリケーションの実行にかかる進捗に差異がある場合に、前記収集部によって収集された資源情報に基づいて、当該複数の情報処理装置間で前記計算状態情報を送受させるか否かを判定する
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記情報処理装置は、
所定の部分処理毎に監視タイミングを示す情報が定義され、
前記収集部は、
前記実行制御部によって前記アプリケーションが実行されている間において監視タイミングとなった場合に、前回の監視タイミングから当該監視タイミングまでの監視タイミング間において当該情報処理装置によって消費された資源に関する資源情報と、当該監視タイミング間における当該情報処理装置の処理時間とを収集し、
前記情報処理装置は、
前記収集部によって収集された資源情報と処理時間とが監視タイミング間毎に対応付けられた実行プロファイルを生成するプロファイル生成部をさらに備え、
前記判定部は、
前記プロファイル生成部によって生成された実行プロファイルに基づいて、当該複数の情報処理装置間で前記計算状態情報を送受させた方が消費資源又は処理時間の浪費が小さいか否かを推定することで、当該複数の情報処理装置間で前記計算状態情報を送受させるか否かを判定する
ことを特徴とする請求項１に記載のコンピュータシステム。
【請求項４】
前記管理装置は、
前記収集部によって収集された同一の監視タイミングに対応する複数の消費資源が類似する場合、又は、前記収集部によって収集された同一の監視タイミングにおける複数の処理時間が類似する場合に、当該監視タイミングを監視タイミングから除外する改変部
をさらに備えたことを特徴とする請求項３に記載のコンピュータシステム。
【請求項５】
前記複数の情報処理装置は、
物理的な物理装置、仮想的に形成された仮想装置、複数の物理的な物理装置、又は、仮想的に形成された複数の仮想装置のいずれかである
ことを特徴とする請求項１〜３のいずれか一つに記載のコンピュータシステム。
【請求項６】
同一のアプリケーションを実行する第１情報処理装置及び第２情報処理装置と、前記第１情報処理装置及び前記第２情報処理装置を管理する管理装置とを含むコンピュータシステムで実行されるシステム制御方法であって、
前記第１情報処理装置及び前記第２情報処理装置は、
前記アプリケーションとして、複数の部分処理に分割可能なアプリケーションを実行制御する実行制御工程と、
前記実行制御工程によって実行済みの部分処理を示す進捗情報を収集する収集工程と、を実行し、
前記管理装置は、
前記収集工程によって収集された前記第１情報処理装置及び第２情報処理装置に対応する進捗情報を比較することにより、前記第１情報処理装置及び第２情報処理装置において実行済みの部分処理の数の差異が所定の閾値以上であるか否かを判定する判定工程と、
前記判定工程によって、前記第１情報処理装置よりも前記アプリケーションの実行が進行している前記第２情報処理装置において実行済みの部分処理の数が、前記第１情報処理装置において実行済みの部分処理の数よりも前記閾値以上多いと判定された場合に、前記第２情報処理装置に対して、前記アプリケーションを実行中の前記実行制御工程における計算状態を示す計算状態情報を生成するよう指示する指示工程と、を実行し、
前記第２情報処理装置は、
前記管理装置の指示に従って、前記計算状態情報を生成する生成工程を実行し、
前記管理装置は、
前記第２情報処理装置の生成工程において生成された計算状態情報を前記第１情報処理装置に提供する提供工程を実行し、
前記第１情報処理装置は、
前記管理装置から提供された計算状態情報によって示される計算状態を当該第１情報処理装置の実行制御工程における計算状態に適用する適用工程を実行する
ことを特徴とするシステム制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、コンピュータシステム及びシステム制御方法に関する。
【背景技術】
【０００２】
一般的に、様々なアプリケーション（「アプリケーションプログラム」、「アプリ」等とも呼ばれる）が各種多様なコンピュータ上で実行されている。例えば、アプリケーションは、物理的に存在する物理装置において実行される場合もあれば、仮想的に形成された仮想装置において実行される場合もある。物理装置の例としては、携帯電話機やＰＤＡ（Personal  Digital  Assistant）等の移動端末（「モバイル端末」などとも呼ばれる）や、ＰＣ（Personal  Computer）や、サーバ装置等が挙げられる。仮想装置の例としては、仮想的な移動端末やＰＣやサーバ装置等が挙げられる。
【０００３】
また、アプリケーションは、上記例に限られず、物理的に存在する移動端末、ＰＣ、サーバ装置、通信装置、外部記憶装置などによって形成される物理装置群によって協働して実行される場合もある。同様に、アプリケーションは、仮想的な移動端末、仮想的なＰＣ、仮想的なサーバ装置、仮想的な通信装置、仮想的な外部記憶装置などによって形成される仮想装置群によって協働して実行される場合もある。なお、仮想的な各種装置は、例えば、クラウドサーバ上に形成されることが多い。
【０００４】
近年、アプリケーションは、実行環境が多様化している中でも継続的に実行されることが求められている。例えば、スマートフォン（Smart  Phone）のような移動端末は、移動中にＩＰアドレスが変化したり、電波が届かない環境に置かれたり、電池切れが発生する場合がある。このように実行環境が変化する場合であっても、移動端末において実行されるアプリケーションは、継続的に実行されることが求められている。
【０００５】
このような状況下において、アプリケーションは、物理装置及び仮想装置によって協働して実行される場合がある。例えば、アプリケーションは、ローカル環境又はリモート環境における物理装置や仮想装置の資源において実行される場合がある。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】木南英夫著  「Ｇｏｏｇｌｅ  Ａｎｄｒｏｉｄ（登録商品）  アプリケーション開発入門」、日経ＢＰ社、Ｐ．２７４−２７５、２００９年６月１８日
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記の従来技術においては、アプリケーションの開発者（以下、「アプリ開発者」と表記する場合がある）の生産性が低下するおそれがあった。具体的には、アプリ開発者は、物理装置及び仮想装置によって協働して実行されるアプリケーションを開発する場合、物理装置及び仮想装置における資源の位置、性能、設計情報、固有機能等の実行環境を理解して注意深く設計することを要する。このため、アプリ開発者は、アプリケーションの主たる機能を実現するためのロジックをコーディングする他に、実行環境を意識した実行制御ロジックをコーディングすることを要することとなる。このようなことは、アプリ開発における生産性の低下を招く。
【０００８】
本願の開示する技術は、上記に鑑みてなされたものであって、アプリケーションの生産性の低下を抑制することができるコンピュータシステム及びシステム制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
実施形態に係るコンピュータシステムは、同一のアプリケーションを実行する複数の情報処理装置と、前記情報処理装置を管理する管理装置とを含むコンピュータシステムであって、前記情報処理装置は、前記アプリケーションを実行制御する実行制御部と、前記実行制御部における前記アプリケーションの実行にかかる進捗を示す進捗情報を収集する収集部と、前記管理装置の指示に従って、前記アプリケーションを実行中の前記実行制御部における計算状態を示す計算状態情報を生成する生成部と、前記管理装置から計算状態情報が提供された場合に、当該計算状態情報によって示される計算状態を当該実行制御部における計算状態に適用する適用部とを備え、前記管理装置は、前記複数の情報処理装置における前記収集部によって収集された各進捗情報を比較することにより、当該複数の情報処理装置の間で前記アプリケーションの実行にかかる進捗に差異があるか否かを判定する判定部と、前記判定部による進捗の差異の有無に応じて、第１情報処理装置よりも前記アプリケーションの実行が進行している第２情報処理装置に対して前記計算状態情報を生成させ、生成された計算状態情報を前記第１情報処理装置に提供する提供部とを備えることを特徴とする。
【発明の効果】
【００１０】
実施形態に係るコンピュータシステム及びシステム制御方法は、アプリケーションの生産性の低下を抑制することができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１の実施形態に係るコンピュータシステムの構成例を示す図である。
【図２】図２は、第１の実施形態に係るコンピュータシステムによる処理の一例を説明するための説明図である。
【図３】図３は、第１の実施形態に係るコンピュータシステムに含まれる各装置の構成例を示す図である。
【図４】図４は、第１の実施形態に係るコンピュータシステムによる処理手順を示すフローチャートである。
【図５】図５は、第２の実施形態に係るコンピュータシステムに含まれる各装置の構成例を示す図である。
【図６】図６は、第２の実施形態に係るプロファイル生成部によって生成される実行プロファイルの一例を概念的に示す図である。
【図７】図７は、管理プログラムを実行するコンピュータを示す図である。
【発明を実施するための形態】
【００１２】
以下に、本願に係るコンピュータシステム及びシステム制御方法の実施形態を図面に基づいて詳細に説明する。なお、この実施形態により本願に係るコンピュータシステム及びシステム制御方法が限定されるものではない。
【００１３】
（第１の実施形態）
［第１の実施形態に係るコンピュータシステムの構成］
まず、図１を用いて、第１の実施形態に係るコンピュータシステムについて説明する。図１は、第１の実施形態に係るコンピュータシステム１の構成例を示す図である。図１に例示するように、第１の実施形態に係るコンピュータシステム１には、管理装置１００と、移動端末２００と、クラウドサーバ３００とが含まれる。
【００１４】
第１の実施形態に係るコンピュータシステム１では、移動端末２００及びクラウドサーバ３００において同一のアプリケーションが実行される。管理装置１００は、移動端末２００及びクラウドサーバ３００におけるアプリケーションの実行状況を管理する。かかる管理装置１００は、ネットワークＮを介して移動端末２００と通信可能に接続される。また、管理装置１００は、クラウドサーバ３００とも通信可能に接続される。
【００１５】
移動端末２００は、例えば、携帯電話機やＰＤＡ等の情報処理装置であって、ネットワークＮと無線通信を行うことにより、管理装置１００と通信可能に接続される。かかる移動端末２００は、利用者による操作に従ってアプリケーションを実行したり、所定の時刻になった際にアプリケーションを実行したり、起動中に常駐型のアプリケーションを常に実行したりする。
【００１６】
なお、第１の実施形態に係る移動端末２００は、スマートフォンであり、Ａｎｄｒｏｉｄ（登録商標）等のモバイルＯＳ（Operating  System）がインストールされているものとする。すなわち、第１の実施形態に係る移動端末２００は、例えば、モバイルＯＳ上で動作するアプリケーションを実行する。
【００１７】
クラウドサーバ３００は、１台以上の物理装置が含まれ、かかる物理装置によって仮想的な移動端末、仮想的なＰＣ、仮想的なサーバ装置、仮想的な通信装置、仮想的な外部記憶装置などを含む仮想装置群が形成される。第１の実施形態に係るクラウドサーバ３００は、移動端末２００に対応する仮想移動端末３０１を形成する。そして、クラウドサーバ３００は、かかる仮想移動端末３０１によって、移動端末２００において実行されるアプリケーションと同一のアプリケーションを実行する。
【００１８】
なお、図１に示した例において、管理装置１００は、物理的に存在する物理装置であってもよいし、クラウドサーバ３００によって実現される仮想装置であってもよいし、図示しない他のクラウドサーバによって実現される仮想装置であってもよい。
【００１９】
［第１の実施形態に係るコンピュータシステムによる処理例］
次に、図２を用いて、第１の実施形態に係るコンピュータシステム１による処理について説明する。図２は、第１の実施形態に係るコンピュータシステム１による処理の一例を説明するための説明図である。
【００２０】
図２に示した例において、移動端末２００及びクラウドサーバ３００は、同一のアプリケーションＸを同時に実行する。移動端末２００におけるアプリケーションＸの実行環境は、物理的な装置で実行されることを示す物理実行環境Ｐに該当する。また、クラウドサーバ３００におけるアプリケーションＸの実行環境は、仮想的な仮想移動端末３０１で実行されることを示す仮想実行環境Ｖに該当する。
【００２１】
アプリケーションＸは、移動端末２００及びクラウドサーバ３００に対して共通の実行態様となるように、中間コード（バイトコード）化されている。すなわち、移動端末２００及びクラウドサーバ３００は、アプリケーションＸに対応する同一のバイナリコードを実行することで、それぞれ同一の実行結果を得る。かかるアプリケーションＸの実行時に行われる全体処理は、所定の部分処理毎に区分けすることができる。部分処理の一例としては、関数型プログラムの場合には「関数」、オブジェクト指向プログラムの場合には「メソッド」などが挙げられる。図２では、アプリケーションＸによる全体処理が部分処理Ｊ１〜Ｊ１０に区分けされる例を示している。
【００２２】
また、移動端末２００及びクラウドサーバ３００は、各種アプリケーションを実行する際に、アプリケーションの実行状況等を確認するタイミングであるチェックポイントが設定される。そして、移動端末２００及びクラウドサーバ３００は、チェックポイントが設定されている時刻になった場合に、アプリケーションをどこまで実行したかを示す進捗情報を管理装置１００に通知する。第１の実施形態では、一定の時間間隔（例えば、１分、５分、３０分など）毎にチェックポイントが設定されるものとする。
【００２３】
このような前提の下、図２に示した例において、移動端末２００（物理実行環境Ｐ）は、１番目のチェックポイントＣＰ１の時点で、部分処理Ｊ１の実行を完了している。このとき、移動端末２００は、部分処理Ｊ１の実行が完了したことを示す進捗情報を管理装置１００に通知する。同様に、クラウドサーバ３００（仮想実行環境Ｖ）は、チェックポイントＣＰ１の時点で、部分処理Ｊ１の実行を完了しており、部分処理Ｊ１の実行が完了したことを示す進捗情報を管理装置１００に通知する。
【００２４】
管理装置１００は、チェックポイントＣＰ１の時点で、移動端末２００及びクラウドサーバ３００から進捗情報を受信する。ここでは、管理装置１００は、移動端末２００及びクラウドサーバ３００から受信した進捗情報に差異がないので、移動端末２００及びクラウドサーバ３００に対して処理を行わない。
【００２５】
続いて、２番目のチェックポイントＣＰ２の時点において、移動端末２００は、図中に点線で示した部分処理Ｊ２まで実行を完了しているものとする。かかる場合に、移動端末２００は、部分処理Ｊ１及びＪ２の実行が完了したことを示す進捗情報を管理装置１００に通知する。一方、クラウドサーバ３００は、チェックポイントＣＰ２の時点で、部分処理Ｊ５の実行を完了しているものとする。かかる場合に、クラウドサーバ３００は、部分処理Ｊ１〜Ｊ５の実行が完了したことを示す進捗情報を管理装置１００に通知する。
【００２６】
管理装置１００は、チェックポイントＣＰ２の時点において、移動端末２００及びクラウドサーバ３００から受信した進捗情報に基づいて、移動端末２００では部分処理Ｊ２まで実行が完了しているが、クラウドサーバ３００では部分処理Ｊ５まで実行が完了していることを検知する。かかる場合に、管理装置１００は、移動端末２００及びクラウドサーバ３００における実行済みの部分処理数の差が所定の処理数閾値以上であるか否かを判定する。そして、管理装置１００は、実行済みの部分処理数の差が処理数閾値（ここでは、処理数閾値「３」とする）以上である場合には、移動端末２００及びクラウドサーバ３００におけるアプリケーションＸの実行状況を同期させる。
【００２７】
具体的には、管理装置１００は、実行済みの部分処理数が多いクラウドサーバ３００から、「継続（continuation）」を取得する。ここで、「継続（continuation）」とは、これから実行する計算処理がデータとして具現化されたデータを示し、これまでの計算処理で到達した計算状態（ＣＰＵ、スタック、ヒープ、プログラムカウンタ）をスナップショットとして切りとったデータ構造に相当する。
【００２８】
図２の例では、実行済みの部分処理数の差「３」が処理数閾値「３」以上であるので、管理装置１００は、部分処理Ｊ５が完了した時点での継続（continuation）をクラウドサーバ３００から取得し、取得した継続（continuation）を移動端末２００に送信する。移動端末２００は、管理装置１００から受信した継続（continuation）を実行することで、アプリケーションＸの実行状況を部分処理Ｊ５の実行完了まで進めることができる。
【００２９】
続いて、チェックポイントＣＰ３の時点では、移動端末２００は、図中に点線で示した部分処理Ｊ８まで実行を完了しているものとする。かかる場合に、移動端末２００は、部分処理Ｊ１〜Ｊ８の実行が完了したことを示す進捗情報を管理装置１００に通知する。一方、クラウドサーバ３００は、チェックポイントＣＰ３の時点で、部分処理Ｊ１０まで実行を完了しているものとする。かかる場合に、クラウドサーバ３００は、部分処理Ｊ１〜Ｊ１０の実行が完了したことを示す進捗情報を管理装置１００に通知する。
【００３０】
管理装置１００は、チェックポイントＣＰ３の時点において、移動端末２００及びクラウドサーバ３００における実行済みの部分処理数の差「２」が処理数閾値「３」以上でないと判定する。かかる場合には、管理装置１００は、移動端末２００及びクラウドサーバ３００におけるアプリケーションＸの実行状況を同期させない。すなわち、管理装置１００は、移動端末２００とクラウドサーバ３００との間で継続（continuation）の受け渡しを行わせない。
【００３１】
このように、第１の実施形態に係るコンピュータシステム１では、複数の情報処理装置である移動端末２００及びクラウドサーバ３００におけるアプリケーションの実行状況を同期させる。具体的には、コンピュータシステム１では、一方の情報処理装置（移動端末２００又はクラウドサーバ３００）よりも他方の情報処理装置（移動端末２００又はクラウドサーバ３００）の方がアプリケーションの実行が進行している場合に、実行が遅れている一方の情報処理装置の実行状況を、実行が進行している他方の情報処理装置の実行状況に同期させる。
【００３２】
これにより、第１の実施形態に係るコンピュータシステム１では、移動端末２００におけるアプリケーションの実行状況がクラウドサーバ３００よりも遅れている場合には、移動端末２００におけるアプリケーションの実行状況をクラウドサーバ３００における実行状況まで進行させることができる。また、第１の実施形態に係るコンピュータシステム１では、クラウドサーバ３００におけるアプリケーションの実行状況が移動端末２００よりも遅れている場合には、クラウドサーバ３００におけるアプリケーションの実行状況を移動端末２００における実行状況まで進行させることができる。すなわち、コンピュータシステム１では、移動端末２００等の情報処理装置における実行環境が変化する場合であっても、アプリケーションの実行を維持することができる。
【００３３】
例えば、移動端末２００は、アプリケーションの実行中に、ＩＰアドレスが変化したり、電波が届かない環境に置かれたり、電池切れが発生したりすることがある。そして、移動端末２００は、このように実行環境が変化した場合には、アプリケーションの実行が遅延、中断又は停止することがある。しかし、第１の実施形態に係るコンピュータシステム１では、移動端末２００におけるアプリケーションの実行に遅延等が発生した場合であっても、クラウドサーバ３００においてアプリケーションの実行が維持される。このため、コンピュータシステム１では、移動端末２００の実行環境が改善された場合に、かかる移動端末２００の実行状況をクラウドサーバ３００の実行状況に同期させることができる。このようなことから、第１の実施形態に係るコンピュータシステム１では、スマートフォンのような移動端末２００における実行環境が変化する場合であっても、アプリケーションを継続的に実行することができる。
【００３４】
そして、コンピュータシステム１では、移動端末２００（物理実行環境Ｐ）と、クラウドサーバ３００（仮想実行環境Ｖ）のように、複数の実行環境でアプリケーションが実行されるが、同一のアプリケーションが双方の実行環境内において実行される。すなわち、コンピュータシステム１において実行されるアプリケーションを開発するアプリ開発者は、物理装置内で実行されるアプリケーションを開発すればよいので、物理装置及び仮想装置における資源の位置、性能、設計情報、固有機能等の実行環境を理解して注意深く設計することを要せず、実行環境を意識した実行制御ロジックをコーディングすることを要しない。このようなことから、第１の実施形態に係るコンピュータシステム１は、移動端末２００等の情報処理装置における実行環境が変化する場合であっても、アプリケーションを継続的に実行することができる実行環境を提供することができるとともに、アプリ開発のアプリケーション開発にかかる生産性の低下を抑制することができる。
【００３５】
なお、上記図２では、部分処理Ｊ１、Ｊ２、・・、Ｊ１０の順に実行される例を示したが、部分処理の実行順序はこの例に限られない。例えば、アプリケーション実行時には、同一の部分処理が繰り返し実行される場合や、分岐処理によって実行されない部分処理が存在する場合もある。したがって、移動端末２００や仮想移動端末３０１が管理装置１００に送信する進捗情報には、「部分処理Ｊ１＝１回実行、部分処理Ｊ２＝３回実行」といった例も含まれる。
【００３６】
［第１の実施形態に係る各装置の構成］
次に、図３を用いて、第１の実施形態に係るコンピュータシステム１に含まれる各装置の構成について説明する。図３は、第１の実施形態に係る各装置の構成例を示す図である。なお、図３に示したクラウドサーバ３００が有する各処理部は、仮想移動端末３０１によって実現される。図３に示すように、管理装置１００は、チェックポイント定義部１１１と、チェックポイント合成部１１２と、分散データ共有部１２０と、継続分散共有部１３０とを有する。
【００３７】
チェックポイント定義部１１１は、アプリケーションの実行状況等を確認するタイミングであるチェックポイントが定義されたチェックポイント設定データを生成する。第１の実施形態に係るチェックポイント定義部１１１は、所定の時間間隔毎であることが定義されたチェックポイント設定データを生成する。そして、チェックポイント定義部１１１は、アプリケーションのソースコード及びチェックポイント設定データをチェックポイント合成部１１２に出力する。
【００３８】
なお、チェックポイント定義部１１１は、例えば、移動端末２００によって実行され得るアプリケーションのソースコードを図示しない記憶部に保持する。そして、チェックポイント定義部１１１は、移動端末２００によって所定のアプリケーションが実行される場合に、かかるアプリケーションを識別する情報を移動端末２００から受信することで、移動端末２００で実行されるアプリケーションに対応するソースコードを記憶部から取得する。また、例えば、チェックポイント定義部１１１がソースコードを保持するのではなく、移動端末２００やクラウドサーバ３００や仮想移動端末３０１や図示しない記憶部がソースコードを保持してもよい。かかる場合には、チェックポイント定義部１１１は、ソースコードを保持する装置から、移動端末２００で実行されるアプリケーションに対応するソースコードを取得する。
【００３９】
チェックポイント合成部１１２は、チェックポイント定義部１１１によって生成されたチェックポイント設定データに基づいて、チェックポイントが定義された中間コードを生成する。第１の実施形態に係るチェックポイント合成部１１２は、チェックポイントが所定の時間間隔毎であることが定義された中間コードを生成する。そして、チェックポイント合成部１１２は、チェックポイント定義済みの中間コードを移動端末２００及び仮想移動端末３０１に出力する。なお、チェックポイント合成部１１２は、移動端末２００及び仮想移動端末３０１に対して共通の実行態様となるように、チェックポイント定義部１１１から出力されたソースコードを中間コード化する。
【００４０】
分散データ共有部１２０は、移動端末２００及び仮想移動端末３０１から送信される進捗情報等に基づいて、移動端末２００と仮想移動端末３０１との間で継続（continuation）の引き渡しを行わせるか否かを判定する。なお、分散データ共有部１２０による処理については後述する。
【００４１】
継続分散共有部１３０は、分散データ共有部１２０によって継続（continuation）の引き渡しを要すると判定された場合に、移動端末２００及び仮想移動端末３０１の一方から継続（continuation）を取得し、取得した継続（continuation）を移動端末２００及び仮想移動端末３０１の他方に提供する。
【００４２】
また、図３に示すように、移動端末２００は、プログラム配置部２１１と、実行制御部２１２と、チェックポイントトリガ部２２０と、収集部２３０と、継続データ化部２４１と、継続適用部２４２とを有する。
【００４３】
プログラム配置部２１１は、チェックポイント合成部１１２からチェックポイント定義済みの中間コードを受信し、受信した中間コードを実行制御部２１２に出力する。これにより、プログラム配置部２１１は、実行制御部２１２にアプリケーションを実行させる。
【００４４】
実行制御部２１２は、プログラム配置部２１１から出力されたチェックポイント定義済みの中間コードを処理することで、アプリケーションを実行する。かかる実行制御部２１２は、物理実行環境Ｐである移動端末２００内の計算資源（ＣＰＵ時間、メモリ使用量等の計算リソース）を用いて、アプリケーションを実行する。
【００４５】
チェックポイントトリガ部２２０は、実行制御部２１２による実行制御の動作プロセスに対して、チェックポイント定義部１１１で定義されたチェックポイントを監視する。そして、チェックポイントトリガ部２２０は、チェックポイントとなった場合に、イベントを発生させて、収集部２３０に対して移動端末２００（物理実行環境Ｐ）における実行状態に関する各種情報を測定させる。
【００４６】
また、第１の実施形態に係るチェックポイントトリガ部２２０は、実行制御部２１２によって実行済みの部分処理を示す進捗情報を収集部２３０に通知する。具体的には、実行制御部２１２によって実行される中間コードには、部分処理の実行完了時に実行制御部２１２が完了通知するための目印となるマーキングコードが所定の部分処理毎に埋め込まれる。このようなマーキングコードは、例えば、アプリ開発者であるプログラマ等によって埋め込まれる。また、例えば、アプリ開発者がマーキングコードを明示的に埋め込まなくても、メタプログラミング（アスペクト指向プログラミング）等を活用して、関数の評価結果やメソッドが送り返すメッセージを取得する論理的節目を自動的にマークできる手法によって、上記マーキングコードが埋め込まれてもよい。かかる手法を用いた場合には、実行時にどの処理単位（関数評価、メソッド実施）を何回実行したかをメタレベルのハッシュテーブル等に記録して実行状況を管理することが可能となる。そして、チェックポイントトリガ部２２０は、かかる完了通知を実行制御部２１２から受信することで、実行制御部２１２によって進捗情報を取得することができる。
【００４７】
なお、第１の実施形態において、チェックポイントトリガ部２２０は、実行制御レベル（メタ実行レベル）で独立したスレッドを起こし、ローカルタイマを参照しながら一定の時間が経過するたびに（チェックポイントに達した時点で）、収集部２３０に対して実行状態に関する各種情報を測定するように割り込みを発生させてもよい。ここで、移動端末２００（物理実行環境Ｐ）に、チェックポイントとなる一定の時間間隔が設定されている場合には、チェックポイント定義部１１１は、チェックポイント設定データを生成しなくてよく、また、チェックポイント合成部１１２は、チェックポイントが定義された中間コードを生成しなくてよい。
【００４８】
収集部２３０は、チェックポイントトリガ部２２０からチェックポイントである旨の通知を受け付けた場合に、移動端末２００（物理実行環境Ｐ）における実行状態に関する各種（移動端末２００が消費した資源に関する資源情報等）を収集する。第１の実施形態に係る収集部２３０は、電力測定部２３１を有する。
【００４９】
電力測定部２３１は、移動端末２００（物理実行環境Ｐ）における実行状態の要素として、移動端末２００が要した消費電力を測定する。例えば、電力測定部２３１は、実行制御部２１２によってアプリケーションの実行が開始されてから現チェックポイントに至るまでに移動端末２００が要した消費電力の累積を測定する。また、例えば、電力測定部２３１は、前回のチェックポイントから現チェックポイントまでに移動端末２００が要した消費電力を測定する。第１の実施形態では、電力測定部２３１は、消費電力の累積を測定するものとする。なお、電力測定部２３１は、例えば、消費電力をモニタリングするための専用デバイス等によって移動端末２００によって消費された電力を取得することができる。また、例えば、スマートフォン等には消費電力を監視するアプリや機構が一般的に搭載されているので、電力測定部２３１は、このようなアプリや機構を用いて消費電力を取得することができる。
【００５０】
そして、収集部２３０は、チェックポイントトリガ部２２０から通知された進捗情報と、電力測定部２３１によって測定された消費電力を示す消費電力情報を分散データ共有部１２０に送信する。
【００５１】
ここで、第１の実施形態において、管理装置１００の分散データ共有部１２０は、チェックポイントのたびに、移動端末２００の収集部２３０から進捗情報及び消費電力情報を受信するとともに、クラウドサーバ３００上に形成された仮想移動端末３０１の収集部３３０からも進捗情報及び消費電力情報を受信する。かかる分散データ共有部１２０は、双方から受信した進捗情報を比較することにより、移動端末２００と仮想移動端末３０１との間でアプリケーションの実行にかかる進捗に差異があるか否かを判定する。具体的には、分散データ共有部１２０は、移動端末２００において実行済みの部分処理の数と、仮想移動端末３０１において実行済みの部分処理の数との差異が所定の処理数閾値以上であるか否かを判定する。
【００５２】
また、図２の説明では省略したが、分散データ共有部１２０は、実行済みの部分処理の数の差異が所定の処理数閾値以上である場合であっても、移動端末２００及び仮想移動端末３０１から受信した消費電力情報に基づいて、移動端末２００と仮想移動端末３０１との間で継続（continuation）を送受するべきか否かを判定する。具体的には、分散データ共有部１２０は、移動端末２００の消費電力と仮想移動端末３０１の消費電力との差異を算出する。そして、分散データ共有部１２０は、算出した消費電力の差異が、移動端末２００又は仮想移動端末３０１が継続（continuation）を受信するのに要すると想定される消費電力（以下、「想定消費電力」と表記する場合がある）よりも大きいか否かを判定する。そして、分散データ共有部１２０は、消費電力の差異が想定消費電力よりも大きい場合には、継続（continuation）を送受するべきであると判定し、消費電力の差異が受信側の想定消費電力以下である場合には、継続（continuation）を送受するべきでないと判定する。
【００５３】
このような分散データ共有部１２０による処理の一例について説明する。ここでは、処理数閾値が「３」であるものとする。また、分散データ共有部１２０が、移動端末２００から進捗情報「Ｊ１〜Ｊ５」及び消費電力情報「５０」を受信し、仮想移動端末３０１から進捗情報「Ｊ１〜Ｊ１０」及び消費電力情報「２００」を受信したものとする。
【００５４】
かかる場合に、分散データ共有部１２０は、移動端末２００よりも仮想移動端末３０１の方が実行済みの部分処理が５個多く、双方の実行済みの部分処理数の差異が処理数閾値「３」以上であると判定する。この例の場合、分散データ共有部１２０は、消費電力情報に基づいて、仮想移動端末３０１の継続（continuation）を移動端末２００に提供するか否かを判定する。具体的には、分散データ共有部１２０は、仮想移動端末３０１の消費電力情報「２００」と、移動端末２００の消費電力情報「５０」との差「１５０」を算出する。これにより、分散データ共有部１２０は、移動端末２００が部分処理「Ｊ６〜Ｊ１０」を実行するのに消費電力「１５０」を要すると推定できる。
【００５５】
ここで、分散データ共有部１２０は、移動端末２００が仮想移動端末３０１の継続（continuation）を受信するのに要すると想定される消費電力を取得する。例えば、分散データ共有部１２０は、移動端末２００が継続（continuation）を受信及び適用するのに要する既知の想定消費電力を所定の記憶部に記憶しておき、かかる記憶部から想定消費電力を取得する。ここでは、分散データ共有部１２０によって取得される想定消費電力が「１００」であるものとする。すなわち、ここの例では、上記において算出された消費電力情報の差「１５０」が想定消費電力「１００」よりも大きい。かかる場合に、分散データ共有部１２０は、移動端末２００が部分処理「Ｊ６〜Ｊ１０」を実行するのに要する消費電力「１５０」が、仮想移動端末３０１の継続（continuation）を移動端末２００が受信するのに要する想定消費電力「１００」よりも大きいと判定できる。このため、分散データ共有部１２０は、移動端末２００に仮想移動端末３０１の継続（continuation）を提供した方が消費電力を抑制することができるので、継続（continuation）を送受するべきであると判定する。
【００５６】
また、上記例において、分散データ共有部１２０が、移動端末２００から進捗情報「Ｊ１〜Ｊ７」及び消費電力情報「１５０」を受信し、仮想移動端末３０１から進捗情報「Ｊ１〜Ｊ１０」及び消費電力情報「２００」を受信したものとする。この例の場合、分散データ共有部１２０は、消費電力情報に基づいて、仮想移動端末３０１の継続（continuation）を移動端末２００に提供するか否かを判定する。
【００５７】
具体的には、分散データ共有部１２０は、仮想移動端末３０１の消費電力情報「２００」と、移動端末２００の消費電力情報「１５０」との差「５０」を算出する。これにより、分散データ共有部１２０は、移動端末２００が部分処理「Ｊ８〜Ｊ１０」を実行するのに消費電力「５０」を要すると推定できる。また、分散データ共有部１２０は、上記例と同様に、移動端末２００が継続（continuation）を受信するのに要すると想定される消費電力「１００」を取得する。かかる場合に、分散データ共有部１２０は、移動端末２００が部分処理「Ｊ８〜Ｊ１０」を実行するのに要する消費電力「５０」が、仮想移動端末３０１の継続（continuation）を移動端末２００が受信するのに要する想定消費電力「１００」以下であると判定できる。このため、分散データ共有部１２０は、移動端末２００に仮想移動端末３０１の継続（continuation）を提供しない方が消費電力を抑制することができるので、継続（continuation）を送受するべきでないと判定する。
【００５８】
このような分散データ共有部１２０は、一方の情報処理装置（移動端末２００又は仮想移動端末３０１）に対して、他方の情報処理装置（移動端末２００又は仮想移動端末３０１）の継続（continuation）を提供すべきであると判定した場合には、他方の情報処理装置に対して継続（continuation）を生成するように指示する。例えば、分散データ共有部１２０は、仮想移動端末３０１の継続（continuation）を移動端末２００に提供すべきであると判定した場合には、仮想移動端末３０１の継続データ化部３４１に対して、継続（continuation）を生成するように指示する。
【００５９】
継続データ化部２４１は、任意の時点における計算状態（ＣＰＵ、スタック、ヒープ、プログラムカウンタ）をスナップショットとして保存したデータ構造に相当する継続（continuation）を生成する。かかる継続データ化部２４１は、分散データ共有部１２０による指示に従って継続（continuation）を生成し、生成した継続（continuation）を継続分散共有部１３０に送信する。かかる継続分散共有部１３０は、継続データ化部２４１から受信した継続（continuation）を、仮想移動端末３０１の継続適用部３４２に送信する。また、継続分散共有部１３０は、仮想移動端末３０１の継続データ化部３４１から継続（continuation）を受信した場合には、受信した継続（continuation）を移動端末２００の継続適用部２４２に送信する。
【００６０】
継続適用部２４２は、継続分散共有部１３０から、仮想移動端末３０１の継続データ化部３４１によって生成された継続（continuation）を受信した場合に、受信した継続（continuation）を実行制御部２１２に適用する。具体的には、継続適用部２４２は、継続分散共有部１３０から提供された継続（continuation）を実行することで、移動端末２００と仮想移動端末３０１におけるアプリケーションの実行状況を同期させる。
【００６１】
また、図３に示すように、クラウドサーバ３００は、プログラム配置部３１１と、実行制御部３１２と、チェックポイントトリガ部３２０と、収集部３３０と、継続データ化部３４１と、継続適用部３４２とを有する。これらの各処理部は、図１に示した仮想移動端末３０１によって実現される処理部であって、クラウドサーバ３００（仮想実行環境Ｖ）内において、上記の移動端末２００が有する各処理部と同様の処理を行う。なお、一般的には、クラウドサーバ３００の計算資源（メモリ、ＣＰＵパワー、電力、ストレージ）は安定供給が期待できる。高速・安定電源・確実なデータ保管能力から、不安定な通信状態にある移動端末２００より確実な実行結果を達成できる期待がある。
【００６２】
［第１の実施形態に係るコンピュータシステムによる処理手順］
次に、図４を用いて、第１の実施形態に係るコンピュータシステム１による処理の手順について説明する。図４は、第１の実施形態に係るコンピュータシステム１による処理手順を示すフローチャートである。
【００６３】
図４に示すように、管理装置１００のチェックポイント合成部１１２は、チェックポイント定義済みの中間コードを生成し、生成したチェックポイント定義済みの中間コードを、移動端末２００とクラウドサーバ３００に形成された仮想移動端末３０１に送信する（ステップＳ１０１）。
【００６４】
移動端末２００の実行制御部２１２は、管理装置１００から送信されたチェックポイント定義済みの中間コードを処理することで、アプリケーションを実行制御する（ステップＳ１０２）。同様に、仮想移動端末３０１の実行制御部３１２は、管理装置１００から送信されたチェックポイント定義済みの中間コードを処理することで、アプリケーションを実行制御する（ステップＳ１０３）。
【００６５】
そして、移動端末２００のチェックポイントトリガ部２２０は、実行制御部２１２によってアプリケーションが実行されている場合に、チェックポイントとなったか否かを監視する（ステップＳ１０４）。同様に、仮想移動端末３０１のチェックポイントトリガ部３２０は、実行制御部３１２によってアプリケーションが実行されている場合に、チェックポイントとなったか否かを監視する（ステップＳ１０５）。
【００６６】
そして、移動端末２００の電力測定部２３１は、チェックポイントとなった場合に（ステップＳ１０４肯定）、消費電力を測定する（ステップＳ１０６）。そして、収集部２３０は、進捗情報、消費電力情報を管理装置１００に送信する（ステップＳ１０７）。同様に、仮想移動端末３０１の電力測定部３３１は、チェックポイントとなった場合に（ステップＳ１０５肯定）、消費電力を測定する（ステップＳ１０８）。そして、収集部３３０は、進捗情報、消費電力情報を管理装置１００に送信する（ステップＳ１０９）。
【００６７】
続いて、管理装置１００の分散データ共有部１２０は、移動端末２００及び仮想移動端末３０１から送信される進捗情報等に基づいて、移動端末２００と仮想移動端末３０１との間で継続（continuation）の引き渡しを行わせるか否かを判定する（ステップＳ１１０）。
【００６８】
ここでは、分散データ共有部１２０は、仮想移動端末３０１の継続（continuation）を移動端末２００に引き渡しさせると判定するものとする。かかる場合に、分散データ共有部１２０は、仮想移動端末３０１に対して、継続（continuation）を生成するよう指示する（ステップＳ１１１）。かかる指示を受け付けた仮想移動端末３０１の継続データ化部３４１は、継続（continuation）を生成して管理装置１００に送信する（ステップＳ１１２）。
【００６９】
管理装置１００の継続分散共有部１３０は、仮想移動端末３０１から受信した継続（continuation）を移動端末２００に提供する（ステップＳ１１３）。そして、移動端末２００の継続適用部２４２は、管理装置１００から受信した継続（continuation）を実行制御部２１２に適用する（ステップＳ１１４）。
【００７０】
［第１の実施形態の効果］
上述してきたように、第１の実施形態に係るコンピュータシステム１には、同一のアプリケーションを実行する複数の情報処理装置として、移動端末２００及び仮想移動端末３０１が含まれる。また、コンピュータシステム１には、移動端末２００及び仮想移動端末３０１を管理する管理装置１００が含まれる。そして、移動端末２００は、アプリケーションを実行制御する実行制御部２１２と、実行制御部２１２におけるアプリケーションの実行にかかる進捗を示す進捗情報を収集する収集部２３０と、管理装置１００の指示に従って、アプリケーションを実行中の実行制御部２１２における計算状態を示す計算状態情報として継続（continuation）を生成する継続データ化部２４１と、管理装置１００から継続（continuation）が提供された場合に、かかる継続（continuation）を実行制御部２１２における計算状態に適用する継続適用部２４２とを有する。また、仮想移動端末３０１は、移動端末２００と同様の構成を有する。また、管理装置１００は、移動端末２００及び仮想移動端末３０１の収集部によって収集された各進捗情報を比較することにより、移動端末２００とクラウドサーバ３００との間でアプリケーションの実行にかかる進捗に差異があるか否かを判定する分散データ共有部１２０と、分散データ共有部１２０による進捗の差異の有無に応じて、移動端末２００又はクラウドサーバ３００に対して継続（continuation）を生成させ、生成された継続（continuation）を移動端末２００又はクラウドサーバ３００に提供する継続分散共有部１３０とを有する。
【００７１】
これにより、第１の実施形態に係るコンピュータシステム１では、移動端末２００等の情報処理装置における実行環境が変化する場合であっても、アプリケーションを継続的に実行することができる実行環境を提供することができるとともに、アプリ開発者のアプリケーション開発にかかる生産性の低下を抑制することができる。
【００７２】
また、例えば、写真の編集処理など高度に専門的で複雑なアプリケーションは、従来では独自のスタンドアロンプログラムで実装されていたが、昨今、スマートフォン（多機能電話装置）等でも利用される動きが加速している。一方、デバイスの省電力化・低コスト化の動きも加速しており、低速デバイスでのコンピューティングは依然としてニーズが高い。すなわち、移動中の低速デバイスで高度で複雑なアプリケーションを利用したいといった相反するコンピューティングニーズが拡大しているといえる。
【００７３】
第１の実施形態に係るコンピュータシステム１では、移動端末２００と仮想移動端末３０１におけるアプリケーションの実行状況を同期させるので、例えば、移動中の低速デバイスは、高度なアプリケーションを実行した場合であっても、省電力かつ高速にレスポンス結果を得ることができる。また、アプリ開発者は、デバイスの違い（高速、低速）を予め意識せずにアプリケーションの設計・実装を行うことができるので、既存のアプリ開発スタイル（ノウハウ）を大胆におき変えずに設計・実装することができる。
【００７４】
なお、上記第１の実施形態において、分散データ共有部１２０は、移動端末２００の消費電力と仮想移動端末３０１の消費電力との差異が、移動端末２００又は仮想移動端末３０１が継続（continuation）を受信するのに要すると想定される消費電力（想定消費電力）よりも大きいか否かを判定する。しかし、分散データ共有部１２０による判定処理はこの例に限られない。
【００７５】
例えば、分散データ共有部１２０は、移動端末２００及び仮想移動端末３０１における双方の合計消費電力を極力低減するために、移動端末２００及び仮想移動端末３０１における消費電力の差異が、移動端末２００又は仮想移動端末３０１が継続（continuation）を送信及び受信するのに要すると想定される消費電力よりも大きいか否かを判定してもよい。
【００７６】
また、例えば、仮想移動端末３０１が実現されるクラウドサーバ３００環境では安定した電力供給が可能であり消費電力の低減が重要視されない前提が存在する場合には、分散データ共有部１２０は、移動端末２００における消費電力の低減を優先してもよい。具体的には、分散データ共有部１２０は、仮想移動端末３０１の継続（continuation）を移動端末２００に送信する場合に、上記例のように、移動端末２００及び仮想移動端末３０１における消費電力の差異が、移動端末２００が仮想移動端末３０１の継続（continuation）を受信するのに要すると想定される消費電力よりも大きいか否かを判定する。
【００７７】
また、分散データ共有部１２０は、移動端末２００及び仮想移動端末３０１における過去の消費電力をプロファイルとして蓄積しておき、移動端末２００と仮想移動端末３０１における消費電力の比率に基づいて、想定消費電力を推定してもよい。例えば、分散データ共有部１２０は、かかる比率を用いて、仮想移動端末３０１の消費電力を移動端末２００の消費電力に換算するなどして、移動端末２００の消費電力を推定する。
【００７８】
（第２の実施形態）
上記第１の実施形態では、チェックポイントが一定の時間間隔毎に設定される例を示した。しかし、チェックポイントは、所定の部分処理毎に設定されてもよい。第２の実施形態では、チェックポイントが所定の部分処理毎に設定される例について説明する。なお、第２の実施形態では、以下に説明する移動端末５００及びクラウドサーバ６００によって、同一のアプリケーションが長期間に渡って繰り返し実行されるものとする。例えば、第２の実施形態におけるアプリケーションは、何度も繰り返し実行される常住プログラム等に該当する。
【００７９】
［第２の実施形態に係る各装置の構成］
まず、図５を用いて、第２の実施形態に係るコンピュータシステム２に含まれる各装置の構成について説明する。図５は、第２の実施形態に係る各装置の構成例を示す図である。図５に示すように、第２の実施形態に係るコンピュータシステム２には、管理装置４００と、移動端末５００と、クラウドサーバ６００とが含まれる。なお、以下では、既に示した構成部位と同様の機能を有する部位には同一符号を付すこととして、その詳細な説明を省略する。また、第２の実施形態に係るコンピュータシステム２の構成は、図１に示した構成例と同様であるので、以下では説明を省略する。
【００８０】
管理装置４００は、図５に示すように、チェックポイント定義部４１１と、チェックポイント合成部４１２と、分散データ共有部４２０と、プロファイル記憶部４４０と、チェックポイント改変部４５０とを有する。また、移動端末５００は、チェックポイントトリガ部５２０と、収集部５３０と、プロファイル生成部５４０とを有する。また、クラウドサーバ６００は、移動端末５００に対応する仮想移動端末（以下、「仮想移動端末６０１」とする）を形成し、かかる仮想移動端末６０１によって実現される処理部として、収集部６３０と、プロファイル生成部６４０とを有する。なお、収集部６３０及びプロファイル生成部６４０は、収集部５３０及びプロファイル生成部５４０に対応する処理部であるので、以下では説明を省略する。また、以下では、管理装置４００及び移動端末５００が有する処理部について、処理の順序に沿って説明する。
【００８１】
管理装置４００のチェックポイント定義部４１１は、アプリケーションのソースコードに含まれる所定の部分処理（関数やメソッド）毎に、チェックポイントが定義されたチェックポイント設定データを生成する。チェックポイントを埋め込む位置は、アプリ開発者であるプログラマ等によって指定される。例えば、第２の実施形態に係るチェックポイント定義部４１１は、アプリ開発者であるプログラマ等が利用する端末装置の表示装置にソースコードを表示するなどして、アプリ開発者であるプログラマ等と対話的にチェックポイントを埋め込む位置を指定させる。なお、第１の実施形態でも説明したように、メタプログラミング（アスペクト指向プログラミング）等を活用することで、アプリ開発者が明示的にチェックポイントを埋め込まなくても、自動的にチェックポイントを埋め込むこともできる。
【００８２】
管理装置４００のチェックポイント合成部４１２は、チェックポイント定義部４１１によって生成されたチェックポイント設定データに基づいて、チェックポイントが定義された中間コードを生成する。例えば、第２の実施形態に係るチェックポイント合成部４１２は、アスペクト指向におけるインターセプトのロジックの織り込み又は自己反映計算モデルであるメタロジックの定義に基づくプログラムコードの合成及び翻訳により、チェックポイント定義済みの中間コードを生成する。
【００８３】
移動端末５００のチェックポイントトリガ部５２０は、実行制御部２１２による実行制御の動作プロセスに対して、チェックポイント定義部４１１で定義されたチェックポイントを監視する。そして、チェックポイントトリガ部５２０は、チェックポイントとなった場合に、イベントを発生させて、収集部５３０に対して移動端末５００（物理実行環境Ｐ）における実行状態を測定させる。
【００８４】
また、第２の実施形態に係るチェックポイントトリガ部５２０は、チェックポイントとなった場合に、かかるチェックポイントを特定するための進捗情報（ＣＰ情報）として収集部５３０に通知する。
【００８５】
移動端末５００の収集部５３０は、図５に示すように、電力測定部５３１と、計時部５３２とを有する。第２の実施形態に係る電力測定部５３１は、移動端末５００（物理実行環境Ｐ）における実行状態の要素として、前回のチェックポイントから現チェックポイントまでに移動端末５００が要した消費電力を測定する。
【００８６】
計時部５３２は、移動端末５００（物理実行環境Ｐ）における実行状態の要素として、移動端末５００におけるアプリケーションの処理時間を計時する。例えば、計時部５３２は、前回のチェックポイントから現チェックポイントまでの経過時間を処理時間として計時する。また、例えば、計時部５３２は、実行制御部２１２によってアプリケーションの実行が開始されてから現チェックポイントに至るまでの累積の経過時間を処理時間として計時する。第２の実施形態では、計時部５３２は、チェックポイント間の経過時間を処理時間として計時するものとする。
【００８７】
そして、収集部５３０は、チェックポイントのたびにチェックポイントトリガ部２２０から通知される進捗情報（ＣＰ情報）と、電力測定部５３１によって測定された消費電力を示す消費電力情報と、計時部５３２によって計時された処理時間を示す処理時間情報とをプロファイル生成部５４０に出力するとともに、進捗情報（ＣＰ情報）を分散データ共有部４２０に送信する。
【００８８】
プロファイル生成部５４０は、収集部５３０から出力された進捗情報、消費電力情報及び処理時間情報を用いて、常駐プログラムであるアプリケーションの実行プロファイルを生成する。具体的には、プロファイル生成部５４０は、部分処理間における消費電力及び処理時間を実行プロファイルとして生成し、生成した実行プロファイルを管理装置４００のプロファイル記憶部４４０に格納する。
【００８９】
ここで、図６を用いて、プロファイル生成部５４０によって生成される実行プロファイルについて説明する。図６は、第２の実施形態に係るプロファイル生成部５４０によって生成される実行プロファイルの一例を概念的に示す図である。
【００９０】
図６に示すように、プロファイル生成部５４０は、各チェックポイント間の消費電力情報及び処理時間情報を記録する。図６に示した例では、チェックポイントＣＰ１１の次は、チェックポイントＣＰ１２又はＣＰ１３を通る例を示しており、チェックポイントＣＰ１２の次は、チェックポイントＣＰ１４又はＣＰ１５を通る例を示している。これは、アプリケーションには分岐処理が存在するからであり、アプリケーションに定義されたチェックポイントＣＰ１１、ＣＰ１２、・・・、ＣＰ１９の順に実行されるとは限らないからである。
【００９１】
そして、プロファイル生成部５４０は、収集部５３０から順次出力される進捗情報であるＣＰ情報を図６に示した例のようにマッピングする。例えば、収集部５３０によって、チェックポイントＣＰ１１を示すＣＰ情報が出力された後に、チェックポイントＣＰ１２を示すＣＰ情報が出力された場合には、プロファイル生成部５４０は、図６に示すように、チェックポイントＣＰ１１からチェックポイントＣＰ１２へ接続する。さらに、プロファイル生成部５４０は、チェックポイントＣＰ１１からチェックポイントＣＰ１２までに移動端末５００が要した消費電力「Δｅ」として、チェックポイントＣＰ１２において収集部５３０から出力された消費電力情報（図６では、「ｅ１２」）を設定する。また、プロファイル生成部５４０は、チェックポイントＣＰ１１からチェックポイントＣＰ１２までの処理時間「Δｔ」として、チェックポイントＣＰ１２において収集部５３０から出力された処理時間情報（図６では、「ｔ１２」）を設定する。
【００９２】
また、実行制御部２１２によって中間コードが繰り返し実行されることにより、収集部５３０によって、チェックポイントＣＰ１１を示すＣＰ情報が再度出力された後に、チェックポイントＣＰ１３を示すＣＰ情報が出力された場合には、プロファイル生成部５４０は、図６に示すように、チェックポイントＣＰ１１からチェックポイントＣＰ１３へ接続する。そして、プロファイル生成部５４０は、チェックポイントＣＰ１１からチェックポイントＣＰ１３までの消費電力「Δｅ」（図６では、「ｅ１３」）と、処理時間「Δｔ」（図６では、「ｔ１３」）とを設定する。
【００９３】
すなわち、プロファイル生成部５４０によって生成される実行プロファイルは、実行制御部２１２によるアプリケーションの実行状況として、各チェックポイント間における消費電力及び処理時間を示すこととなる。
【００９４】
なお、仮想移動端末６０１のプロファイル生成部６４０も、図６に例示した実行プロファイルを生成する。ここで、仮想移動端末６０１は、移動端末５００と同一のアプリケーションを実行する。したがって、プロファイル生成部５４０及びプロファイル生成部６４０によって生成される各実行プロファイルは、チェックポイント間の接続関係が同一となる。しかし、移動端末５００と仮想移動端末６０１におけるアプリケーションの実行速度等は同一でないので、双方の実行プロファイルに設定される消費電力「Δｅ」や処理時間「Δｔ」については異なる。
【００９５】
管理装置４００のプロファイル記憶部４４０は、プロファイル生成部５４０及び６４０によって生成された実行プロファイルを記憶する。すなわち、プロファイル記憶部４４０は、図６に例示したような実行プロファイルを所定のデータ構造（例えば、ハッシュテーブル、Ｋｅｙ−Ｖａｌｕｅ−Ｓｔｏｒｅ等）により記憶する。
【００９６】
管理装置４００の分散データ共有部４２０は、チェックポイントのたびに、移動端末５００の収集部５３０から進捗情報を受信し、仮想移動端末６０１の収集部６３０からも進捗情報を受信する。ただし、移動端末５００と仮想移動端末６０１とでは、アプリケーションの実行にかかる処理時間が異なるので、分散データ共有部４２０は、移動端末５００及び仮想移動端末６０１の双方から同時に進捗情報を受信しないことが多い。
【００９７】
分散データ共有部４２０は、移動端末５００及び仮想移動端末６０１から受信した進捗情報を比較することにより、移動端末５００と仮想移動端末６０１との間でアプリケーションの実行にかかる進捗に差異があるか否かを判定する。
【００９８】
具体的には、第２の実施形態に係る分散データ共有部４２０は、移動端末５００から進捗情報を受信した場合に、移動端末５００において通過したチェックポイントを蓄積しておき、仮想移動端末６０１から進捗情報を受信した場合に、仮想移動端末６０１において通過したチェックポイントを蓄積しておく。例えば、分散データ共有部４２０は、移動端末５００や仮想移動端末６０１の通過チェックポイントとして、「ＣＰ１１、ＣＰ１２、ＣＰ１４、・・・」といった情報を蓄積する。
【００９９】
そして、分散データ共有部４２０は、移動端末５００から進捗情報を受信した場合には、かかる進捗情報（ＣＰ情報）によって示される通過チェックポイントと、蓄積しておいた仮想移動端末６０１の通過チェックポイントとに差異があるか否かを判定する。また、分散データ共有部４２０は、仮想移動端末６０１から進捗情報を受信した場合には、かかる進捗情報（ＣＰ情報）によって示される通過チェックポイントと、蓄積しておいた移動端末５００の通過チェックポイントとに差異があるか否かを判定する。例えば、分散データ共有部４２０は、移動端末５００の通過チェックポイント数と、仮想移動端末６０１の通過チェックポイント数との差異が所定のＣＰ閾値以上であるか否かを判定する。
【０１００】
そして、分散データ共有部４２０は、通過チェックポイントに差異がある場合に、プロファイル記憶部４４０に記憶されている実行プロファイルの消費電力又は処理時間に基づいて、移動端末５００と仮想移動端末６０１との間で継続（continuation）を送受するべきか否かを判定する。
【０１０１】
このような分散データ共有部４２０による処理の一例について説明する。ここでは、ＣＰ閾値が「１」であるものとする。また、チェックポイントの接続関係は図６に示した例であるものとする。また、分散データ共有部４２０が、移動端末５００の通過チェックポイントとして「ＣＰ１１」を蓄積しており、同様に、仮想移動端末６０１の通過チェックポイントとして「ＣＰ１１」を蓄積しているものとする。また、分散データ共有部４２０が、仮想移動端末６０１から進捗情報「ＣＰ１２」を受信したものとする。
【０１０２】
かかる場合に、分散データ共有部４２０は、仮想移動端末６０１の通過チェックポイントに「ＣＰ１２」を追加して「ＣＰ１１、ＣＰ１２」を蓄積する。この例の場合、移動端末５００の通過チェックポイント数が「１」であり、仮想移動端末６０１の通過チェックポイント数が「２」であり、その差がＣＰ閾値「１」以上である。このとき、分散データ共有部４２０は、移動端末５００の実行プロファイルにおける消費電力又は処理時間に基づいて、仮想移動端末６０１の継続（continuation）を移動端末５００に提供するか否かを判定する。
【０１０３】
分散データ共有部４２０が消費電力に基づいて判定する例について説明する。分散データ共有部４２０は、仮想移動端末６０１から進捗情報を受信した際に、プロファイル記憶部４４０から、図６に例示したような移動端末５００の実行プロファイルを取得する。この時点では、移動端末５００の通過チェックポイントがＣＰ１１であり、仮想移動端末６０１の通過チェックポイントがＣＰ１２である。ここで、分散データ共有部４２０は、図６に示した実行プロファイルを参照して、移動端末５００がチェックポイントＣＰ１１からチェックポイントＣＰ１２までに要する消費電力「Δｅ＝ｅ１２」を取得する。
【０１０４】
また、分散データ共有部４２０は、移動端末５００が仮想移動端末６０１の継続（continuation）を受信するのに要すると想定される想定消費電力を取得する。そして、分散データ共有部４２０は、プロファイル記憶部４４０から取得した消費電力「Δｅ＝ｅ１２」が想定消費電力よりも所定の電力閾値以上大きい場合には、移動端末５００に仮想移動端末６０１の継続（continuation）を提供するべきであると判定する。これは、移動端末５００がチェックポイントＣＰ１１からチェックポイントＣＰ１２を通過するまでに要する消費電力「Δｅ＝ｅ１２」が、少なくとも移動端末５００が仮想移動端末６０１の継続（continuation）を受信するのに要する想定消費電力以上であると判定できるからである。
【０１０５】
一方、分散データ共有部４２０は、消費電力「Δｅ＝ｅ１２」が想定消費電力よりも所定の電力閾値以上大きくない場合には、移動端末５００に仮想移動端末６０１の継続（continuation）を提供するべきでないと判定する。
【０１０６】
続いて、分散データ共有部４２０が処理時間に基づいて判定する例について説明する。分散データ共有部４２０は、仮想移動端末６０１から進捗情報を受信した際に、プロファイル記憶部４４０から、図６に例示したような移動端末５００の実行プロファイルを取得する。この時点では、移動端末５００の通過チェックポイントがＣＰ１１であり、仮想移動端末６０１の通過チェックポイントがＣＰ１２である。ここで、分散データ共有部４２０は、図６に示した実行プロファイルを参照して、移動端末５００がチェックポイントＣＰ１１からチェックポイントＣＰ１２までに要する処理時間「Δｔ＝ｔ１２」を取得する。
【０１０７】
また、分散データ共有部４２０は、移動端末５００が仮想移動端末６０１の継続（continuation）を受信するのに要すると想定される想定処理時間を取得する。そして、分散データ共有部４２０は、プロファイル記憶部４４０から取得した処理時間「Δｔ＝ｔ１２」が想定処理時間よりも所定の時間閾値以上大きい場合には、移動端末５００に仮想移動端末６０１の継続（continuation）を提供するべきであると判定する。これは、移動端末５００がチェックポイントＣＰ１１からチェックポイントＣＰ１２を通過するまでに要する処理時間「Δｔ＝ｔ１２」が、少なくとも移動端末５００が仮想移動端末６０１の継続（continuation）を受信するのに要する処理時間以上であると判定できるからである。
【０１０８】
一方、分散データ共有部４２０は、処理時間「Δｔ＝ｔ１２」が想定処理時間よりも所定の電力閾値以上大きくない場合には、移動端末５００に仮想移動端末６０１の継続（continuation）を提供するべきでないと判定する。
【０１０９】
管理装置４００のチェックポイント改変部４５０は、プロファイル記憶部４４０に記憶されている実行プロファイルを分析し、中間コードに定義されるチェックポイントを改変させる。チェックポイント改変部４５０は、プロファイル記憶部４４０に蓄積されている実行プロファイルを分析することにより、毎回同様の消費電力や処理時間が得られるチェックポイントについては自明であると判定し、かかるチェックポイントをスキップするようにチェックポイント定義部４１１に指示する。例えば、図６に示した例において、「ＣＰ１１→ＣＰ１２」における「Δｅ」及び「Δｔ」が毎回同様の値である場合には、チェックポイントＣＰ１１からチェックポイントＣＰ１２までの消費電量や処理時間については自明であるといえる。かかる場合に、チェックポイント改変部４５０は、チェックポイントＣＰ１２を削除するようにチェックポイント定義部４１１に指示する。
【０１１０】
かかるチェックポイント定義部４１１は、チェックポイント改変部４５０からの指示に従って、新たにチェックポイントが定義されたチェックポイント設定データを生成する。そして、チェックポイント合成部４１２は、新たなチェックポイントが定義された中間コードを生成し、実行制御部２１２がかかる中間コードを実行制御することとなる。
【０１１１】
これにより、第２の実施形態に係るコンピュータシステム２では、プログラマ等によって初期設定されたチェックポイントに固執せずに、自明なチェックポイントについてはスキップすることができ、チェックポイントにおいて発生するオーバヘッドを軽減することができる。
【０１１２】
［第２の実施形態の効果］
上述してきたように、第２の実施形態に係るコンピュータシステム２では、チェックポイントが所定の部分処理毎に設定される場合であっても、移動端末５００等の情報処理装置における実行環境が変化する状況において、アプリケーションを継続的に実行することができる実行環境を提供することができるとともに、アプリ開発者のアプリケーション開発にかかる生産性の低下を抑制することができる。
【０１１３】
第２の実施形態に係るコンピュータシステム２では、消費電力又は処理時間に基づいて、継続（continuation）の受け渡しを行うか否かを判定するので、分散した計算資源にまたがったアプリケーションを単一のプログラムとして設計・実装可能であり、単一のプログラムで異なる物理処理環境群、仮想処理環境群のいずれかの装置の性能低下や故障トラブルを回避して実行できる。
【０１１４】
（第３の実施形態）
上述したコンピュータシステム１及び２は、上記実施形態以外にも種々の異なる形態にて実施されてよい。そこで、第３の実施形態では、上記のコンピュータシステム１及び２の他の実施形態について説明する。
【０１１５】
［装置の組合せ］
上記の実施形態では、例えば、移動端末及び仮想移動端末を例に挙げて説明した。すなわち、上記の実施形態では、物理装置及び仮想装置に同一のアプリケーションを実行させる例について説明した。しかし、上述したコンピュータシステム１及び２は、複数の物理装置に同一のアプリケーションを実行させて、複数の物理装置におけるアプリケーションの実行状況を同期させてもよい。また、この例に限られず、上述したコンピュータシステム１及び２は、複数の仮想装置に同一のアプリケーションを実行させてもよい。
【０１１６】
また、上述したコンピュータシステム１及び２は、移動端末及び仮想移動端末に同一のアプリケーションを実行させるのではなく、物理的に存在する通信装置（ルータ、モバイルルータ、ホームゲートウェイ等）と仮想的な通信装置（ルータ等）に同一のアプリケーションを実行させてもよい。また、上述したコンピュータシステム１及び２は、単一の移動端末及び単一の仮想移動端末に同一のアプリケーションを実行させるのではなく、複数の物理装置により形成される物理装置群と、複数の仮想装置により形成される仮想装置群とに対して同一のアプリケーションを実行させてもよい。
【０１１７】
［資源情報］
また、上記の実施形態では、収集部２３０や５３０等が、チェックポイント時に、移動端末２００が消費した資源情報として「消費電力」や「処理時間」等を収集する例を示した。しかし、収集部２３０や５３０等は、チェックポイント時に、メモリ使用量、ネットワーク通信状態（ネットワーク負荷）などを収集してもよい。そして、例えば、分散データ共有部１２０は、仮想移動端末３０１のメモリ使用量が閾値以上である場合や、管理装置１００と仮想移動端末３０１とのネットワーク負荷が閾値以上である場合には、仮想移動端末３０１の継続（continuation）を移動端末２００に提供しないと判定してもよい。
【０１１８】
［実行プロファイル］
また、第２の実施形態に係るプロファイル生成部５４０や６４０は、実行制御部２１２や３１２による計算回数の実績値、処理時間の実績値、消費電力の実績値、メモリ使用量の実績値、ファイルアクセスの実績値、ネットワーク通信料の実績値等の履歴を実行プロファイルとして蓄積してもよい。これにより、プロファイル記憶部４４０に記憶されている実行プロファイルを参照することで、常駐型プログラムの最適な実行環境を選択することができる。例えば、実行プロファイルに含まれる各種パラメータを考慮して、特定の部分処理のみを移動端末５００側で実行させ、他の部分処理については仮想移動端末６０１側で実行させる等の最適化を実現することができる。
【０１１９】
また、このような実行プロファイルを参照することにより、例えば、部分処理毎に、ファイルアクセスやネットワークトラフィックの実績が０のまま推移している場合には、故障やデータ損失の危険性を察知し回避する活用が可能になる。このように長期間の実行プロファイルを活用することで、１日前より１日後、１週間前より１週間後、１ヶ月前より１ヶ月後の実行制御を見直し、最適な計算資源の利用を再計画しながら、高速処理、データ保全、省電力処理、セキュリティ遵守の処理制御指針に合わせたセルフチューニングが容易となる。
【０１２０】
［システム構成］
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上記文書中や図面中で示した処理手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。例えば、図６に示したチェックポイントの通過順序は一例であって任意に変更することができる。
【０１２１】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【０１２２】
［プログラム］
また、上記実施形態において説明した管理装置１００や移動端末２００や仮想移動端末３０１等の各種装置が実行する処理をコンピュータが実行可能な言語で記述したプログラムを作成することもできる。例えば、管理装置１００が実行する処理をコンピュータが実行可能な言語で記述した管理プログラムを作成することもできる。また、例えば、移動端末２００が実行する処理をコンピュータが実行可能な言語で記述した情報処理プログラムを作成することもできる。この場合、コンピュータが管理プログラムや情報処理プログラムを実行することにより、上記実施形態と同様の効果を得ることができる。さらに、かかる管理プログラムや情報処理プログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録された管理プログラムや情報処理プログラムをコンピュータに読み込ませて実行することにより上記実施形態と同様の処理を実現してもよい。以下に、一例として、図３に示した管理装置１００と同様の機能を実現する管理プログラムを実行するコンピュータの一例を説明する。
【０１２３】
図７は、管理プログラムを実行するコンピュータ１０００を示す図である。図７に例示するように、コンピュータ１０００は、例えば、メモリ１０１０と、ＣＰＵ１０２０と、ハードディスクドライブインタフェース１０３０と、ディスクドライブインタフェース１０４０と、シリアルポートインタフェース１０５０と、ビデオアダプタ１０６０と、ネットワークインタフェース１０７０とを有し、これらの各部はバス１０８０によって接続される。
【０１２４】
メモリ１０１０は、図７に例示するように、ＲＯＭ（Read  Only  Memory）１０１１及びＲＡＭ１０１２を含む。ＲＯＭ１０１１は、例えば、ＢＩＯＳ（Basic  Input  Output  System）等のブートプログラムを記憶する。ハードディスクドライブインタフェース１０３０は、図７に例示するように、ハードディスクドライブ１０３１に接続される。ディスクドライブインタフェース１０４０は、図７に例示するように、ディスクドライブ１０４１に接続される。例えば磁気ディスクや光ディスク等の着脱可能な記憶媒体が、ディスクドライブに挿入される。シリアルポートインタフェース１０５０は、図７に例示するように、例えばマウス１０５１、キーボード１０５２に接続される。ビデオアダプタ１０６０は、図７に例示するように、例えばディスプレイ１０６１に接続される。
【０１２５】
ここで、図７に例示するように、ハードディスクドライブ１０３１は、例えば、ＯＳ１０９１、アプリケーションプログラム１０９２、プログラムモジュール１０９３、プログラムデータ１０９４を記憶する。すなわち、上記の管理プログラムは、コンピュータ１０００によって実行される指令が記述されたプログラムモジュールとして、例えばハードディスクドライブ１０３１に記憶される。例えば、図３に例示したチェックポイント定義部１１１と同様の情報処理を実行するチェックポイント定義手順と、チェックポイント合成部１１２と同様の情報処理を実行するチェックポイント合成手順と、分散データ共有部１２０と同様の情報処理を実行する判定手順と、継続分散共有部１３０と同様の情報処理を実行する提供手順とが記述されたプログラムモジュール１０９３が、ハードディスクドライブ１０３１に記憶される。
【０１２６】
そして、ＣＰＵ１０２０が、メモリ１０１０やハードディスクドライブ１０３１に記憶されたプログラムモジュール１０９３やプログラムデータ１０９４を必要に応じてＲＡＭ１０１２に読み出し、チェックポイント定義手順、チェックポイント合成手順、判定手順、提供手順を実行する。
【０１２７】
なお、管理プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ハードディスクドライブ１０３１に記憶される場合に限られず、例えば着脱可能な記憶媒体に記憶され、ディスクドライブ等を介してＣＰＵ１０２０によって読み出されてもよい。あるいは、管理プログラムに係るプログラムモジュール１０９３やプログラムデータ１０９４は、ネットワーク（ＬＡＮ（Local  Area  Network）、ＷＡＮ（Wide  Area  Network）等）を介して接続された他のコンピュータに記憶され、ネットワークインタフェース１０７０を介してＣＰＵ１０２０によって読み出されてもよい。
【符号の説明】
【０１２８】
１  コンピュータシステム
１００  管理装置
１２０  分散データ共有部（判定部）
１３０  継続分散共有部（提供部）
２００  移動端末
２１２  実行制御部
２３０  収集部
２３１  電力測定部
２４１  継続データ化部
２４２  継続適用部
３００  クラウドサーバ
３０１  仮想移動端末
５３２  計時部
５４０  プロファイル生成部
【図１】
0005635027.tif 000002
【図２】
0005635027.tif 000003
【図３】
0005635027.tif 000004
【図４】
0005635027.tif 000005
【図５】
0005635027.tif 000006
【図６】
0005635027.tif 000007
【図７】
0005635027.tif 000008