JP2012216091A - システムおよびマイグレーション方法 - Google Patents

システムおよびマイグレーション方法 Download PDF

Info

Publication number
JP2012216091A
JP2012216091A JP2011081135A JP2011081135A JP2012216091A JP 2012216091 A JP2012216091 A JP 2012216091A JP 2011081135 A JP2011081135 A JP 2011081135A JP 2011081135 A JP2011081135 A JP 2011081135A JP 2012216091 A JP2012216091 A JP 2012216091A
Authority
JP
Japan
Prior art keywords
application
unit
variable
execution
identification information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2011081135A
Other languages
English (en)
Other versions
JP5678778B2 (ja
Inventor
Hideto Kihara
英人 木原
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2011081135A priority Critical patent/JP5678778B2/ja
Priority to US13/424,693 priority patent/US9146779B2/en
Publication of JP2012216091A publication Critical patent/JP2012216091A/ja
Application granted granted Critical
Publication of JP5678778B2 publication Critical patent/JP5678778B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration

Abstract

【課題】固定リソースの再バインドを容易にすること。
【解決手段】システム1の第一の実行部は、アプリケーションを実行する。第一の記憶部は、アプリケーションの実行時に参照される固定リソースを参照するための変数を識別する識別情報を記憶する。第一の設定部は、実行されたアプリケーションにおいて用いられる変数のうち、記憶された識別情報が示す変数に値を設定し、固定リソースを開放する。抽出部は、アプリケーションを停止させ、実行状態を抽出する。サーバの第二の実行部は、アプリケーションを実行する。第二の記憶部は、固定リソースを参照する変数を識別する識別情報を記憶する。第二の設定部は、アプリケーションにおいて用いられる変数のうち、記憶された識別情報が示す変数の値を抽出し、実行状態に基づいて生成されるインスタンスの対応する変数に抽出した値を設定する。再開部は、端末で停止されたアプリケーションを再開させる。
【選択図】図1

Description

本発明は、システムおよびマイグレーション方法に関する。
従来、Java(登録商標)アプリケーションの装置間のマイグレーションにおいて、一方の装置では、アプリケーションを実行中に、実行状態を保存し、内部形式の実行状態をバイト列に変換し、変換したバイト列を他方の装置に送信する。また、他方の装置では、受信したバイト列の実行状態を内部形式に変換し、内部形式に変換した実行状態を再開する。なお、実行状態を保存する技術は、「Checkpoint」と称される。また、実行状態を再開する技術は、「Restart」と称される。また、内部形式の実行状態をバイト列に変換する技術は、シリアライズ(serialize)と称される。また、バイト列の実行状態を内部形式に変換する技術は、デシリアライズ(deserialize)と称される。
また、Javaアプレットを、ブラウザから切り離して、独自ウインドウに表示するために、Javaアプレットのソースに、開発者などによって、切り離し部分を明示する技術がある。また、マイグレーション可能なアプリケーションのGUI(Graphical User Interface)のレイアウトまたは、ページサイズをターゲットとなるプラットホーム用に動的に変更する技術がある。また、アプリケーションの装置間のマイグレーションにおいて、移動元の装置がシリアライズできない固定リソースを有する場合には、移動先の装置が有する固定リソースを参照可能なように、変数を再バインドする技術がある。
特開平11−167489号公報 特開2003−330715号公報
「分散システム 原理とパラダイム 第二版」(アンドリュー・S・タネンバウム)
しかしながら、上記の従来の技術では、固定リソースの再バインドが容易でないという問題がある。
これを説明すると、従来技術では、マイグレート前後で、マイグレートする部分と、固定リソースの関係との切り張り処理が行われるように、アプリケーションを把握した上で、人がソースに記述を行う。また、従来技術では、GUI以外の固定リソースに関しても、再バインドする。そのため、固定リソースの再バインドに、人の労力や時間などがかかり、固定リソースの再バインドが容易でない。
開示の技術は、上記に鑑みてなされたものであって、固定リソースの再バインドを容易にすることができるシステム、およびマイグレーション方法を提供することを目的とする。
本願の開示するシステムは、端末およびサーバを有する。端末は、第一の実行部と、第一の記憶部と、第一の設定部と、抽出部と、送信部とを有する。第一の実行部は、アプリケーションを実行する。第一の記憶部は、アプリケーションの実行時に参照される固定リソースを参照するための変数を識別する識別情報を記憶する。第一の設定部は、第一の実行部により実行されたアプリケーションにおいて用いられる変数のうち、第一の記憶部に記憶された識別情報が示す変数に値を設定し、前記固定リソースを開放する。抽出部は、アプリケーションを停止させ、アプリケーションの実行状態を抽出する。送信部は、実行状態をクラウドサーバに送信する。サーバは、第二の実行部と、受信部と、第二の記憶部と、第二の設定部と、再開部とを有する。第二の実行部は、アプリケーションを実行する。受信部は、送信部により送信された実行状態を受信する。第二の記憶部は、アプリケーションが参照する固定リソースを参照する変数を識別する識別情報を記憶する。第二の設定部は、第二の実行部により実行されたアプリケーションにおいて用いられる変数のうち、第二の記憶部に記憶された識別情報が示す変数の値を抽出し、受信部により受信された実行状態に基づいて生成されるインスタンスの対応する変数に抽出した値を設定する。再開部は、第二の設定部により設定されたインスタンスを再開することで、端末で停止されたアプリケーションを再開させる。
本願の開示するシステムおよびマイグレーション方法の一つの態様によれば、固定リソースの再バインドを容易にすることができる。
図1は、実施例1に係るクラウドシステムの構成の一例を示す図である。 図2は、固定リソースリストの一例を示す図である。 図3は、固定リソースリストに登録されるクラス名およびメンバ変数名の抽出方法の一例について説明するための図である。 図4は、インスタンス管理表の一例を示す図である。 図5は、端末およびクラウドサーバの処理を説明するための図である。 図6は、再設定変数リストの一例を示す図である。 図7は、変数値の更新処理方法の一例について説明するための図である。 図8は、実施例1に係るクラウドシステムの処理の手順を示すシーケンス図である。 図9は、実施例1に係るクラウドシステムの処理の手順を示すシーケンス図である。
以下に、本願の開示するシステムおよびマイグレーション方法の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
実施例1に係るシステムについて説明する。図1は、実施例1に係るクラウドシステムの構成の一例を示す図である。本実施例に係るクラウドシステム1は、端末10と、クラウドサーバ20とを有する。なお、図1の例では、クラウドシステム1に、端末10およびクラウドサーバ20が各々1台の場合が示されているが、端末10およびクラウドサーバ20の台数はこれに限られない。例えば、端末10およびクラウドサーバ20のそれぞれの台数は、複数台であってもよい。端末10は、スマートフォンなどの携帯電話や、PDA(Personal Digital Assistants)、またはPC(Personal Computer)である。クラウドシステム1では、端末10とクラウドサーバ20とが連携し、端末10で実行中のアプリケーションの実行状態をマイグレートして、クラウドサーバ20でアプリケーションの続きを実行する。これにより、端末10が備えるバッテリの消費が抑制され、また、アプリケーションの処理速度が向上される。
端末10で実行中のアプリケーションの実行状態をクラウドサーバ20にマイグレートし、クラウドサーバ20が続きからアプリケーションを実行し、クラウドサーバ20で実行されるアプリケーションの画面を端末10に転送して表示する場合を想定する。この場合には、表示される画面がシームレスになる。そのため、あたかも、端末10が、アプリケーションを高速に処理しているように見える。また、端末10およびクラウドサーバ20で実行されるアプリケーションの一例として、GUIを有するJavaアプリケーションが挙げられる。以下の説明では、端末10およびクラウドサーバ20で実行されるアプリケーションが、GUIを有するJavaアプリケーションである場合を例に挙げて説明する。
ここで、GUIを備えるJavaアプリケーションをマイグレートする場合を想定する。GUIフレームワークでは、画面表示のためにnativeライブラリが使用される。GUIフレームワークでは、実行状態を抽出する場合に必要となる、メモリに記憶されたnativeライブラリの内容を、Javaからは取得できない。そのため、GUIを有するJavaアプリケーションのマイグレーションにおいて、GUIフレームワークは、実行状態をバイト列として出力できないので、他の装置に転送できない。このような場合に、マイグレートを実現するためには、シリアライズ可能な部分と、シリアライズ可能でない固定リソースの部分とを分離することが考えられる。例えば、シリアライズ可能な部分である計算処理の部分が、固定リソースに依存しない構造に変更することが考えられる。しかしながら、このような変更は、時間や労力などのコストがかかる。なお、GUI以外にも、固定リソースとしては、DB(Data Base)接続、ソケット接続、デバイス(カメラ、GPS(Global Positioning System))などが挙げられる。
そこで、本実施例に係るクラウドシステム1が有する端末10およびクラウドサーバ20は、固定リソースの再バインドを容易にする。端末10は、入力部11と、出力部12と、通信部13と、記憶部14と、制御部15とを有する。
入力部11は、各種情報を制御部15に入力する。例えば、入力部11は、ユーザから、マイグレーション要求を受け付け、マイグレーション要求を制御部15に入力する。入力部11のデバイスの一例としては、マウスやキーボードなどが挙げられる。
出力部12は、各種情報を出力する。例えば、出力部12は、制御部15から画像が入力された場合には、画像を表示出力する。出力部12のデバイスの一例としては、CRT(Cathode Ray Tube)や液晶ディスプレイなどが挙げられる。
通信部13は、無線通信を行う。例えば、通信部13は、制御部15と、クラウドサーバ20との無線通信を行う。通信部13は、制御部15から情報が入力されると、入力された情報をクラウドサーバ20へ送信する。また、通信部13は、クラウドサーバ20から情報が入力されると、入力された情報を制御部15へ送信する。通信部13の一例としては、無線通信インタフェースが挙げられる。
記憶部14は、固定リソースリスト14aと、インスタンス管理表14bとを記憶する。固定リソースリスト14aには、固定リソースを参照するための各メンバ変数のクラス名と変数名とが対応付けられて登録される。図2は、固定リソースリストの一例を示す図である。図2の例では、固定リソースリスト14aには、クラス名が「CalcThread」のクラスと、メンバ変数名が「b」であるメンバ変数とが対応付けられて登録されている。また、図2の例では、固定リソースリスト14aには、クラス名が「CalcThread」のクラスと、メンバ変数名が「c」であるメンバ変数とが対応付けられて登録されている。
ここで、固定リソースリスト14aに登録されるクラス名およびメンバ変数名の抽出方法の一例について説明する。図3は、固定リソースリストに登録されるクラス名およびメンバ変数名の抽出方法の一例について説明するための図である。図3の例では、端末10およびクラウドサーバ20が模式的に示されている。図3の例では、開発者などは、アプリケーションの改変を行い、固定リソース判別ツールを使って、固定リソースリスト14aを生成する。開発者などは、固定リソース判別ツールを、マイグレート対象の計算処理スレッドクラスを指定して起動する。ここで、固定リソース判別ツールについて説明する。固定リソース判別ツールは、計算処理スレッドクラスに対して「checkpoint」を行い、シリアライズ時に「Exception」が発生するメンバ変数、および計算処理スレッドクラスのクラス名を固定リソースリスト14aに登録するツールである。このようにして、固定リソースリスト14aおよび後述の固定リソースリスト24aのそれぞれに登録されるクラス名およびメンバ変数名を抽出する。
また、後述のクラウドサーバ20の記憶部24に記憶される再設定変数リスト24bの生成方法の一例についても、図3を参照して説明する。クラウドシステム1の開発者などが、アプリケーションのソースを改変し、ユーザからのマイグレート要求を受け取った時の処理をソースに記述する。例えば、開発者などは、マイグレート対象とする計算処理スレッドを指定して、マイグレート用API(Application Program Interface)の呼び出しを行う。また、開発者などは、GUIから計算処理部を参照している場所を、計算処理部ラッパを使うように変更する。また、開発者などは、このラッパ内で、計算処理部を参照する変数を、後述の再設定変数リスト24bに登録する。
そして、開発者などは、改変したアプリケーションと、生成した固定リソースリストを、端末10およびクラウドサーバ20のそれぞれの記憶部に記憶させる。また、開発者などは、再設定変数リスト24bをクラウドサーバ20の記憶部24に記憶させる。
インスタンス管理表14bには、マイグレートされるインスタンスの種類であるインスタンス種類と、インスタンス参照(アドレス)とが対応付けられて登録される。図4は、インスタンス管理表の一例を示す図である。図4の例では、インスタンス管理表14bには、「マイグレートインスタンス」として、「計算処理部」が登録されている場合が示されている。また、図4の例では、インスタンス管理表14bには、「ラッパインスタンス」として「計算処理部ラッパ」が登録されている場合が示されている。
記憶部14は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部14は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部15は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図1に示すように、制御部15は、第一の実行部15aと、第一の設定部15bと、抽出部15cと、送信部15dとを有する。
第一の実行部15aは、アプリケーションを実行する。例えば、第一の実行部15aは、GUIを有するJavaアプリケーションを実行する。なお、このアプリケーションは、上述したように、開発者などによって、ソースが改変されたものである。例えば、かかるアプリケーションは、クラス名およびメンバ変数名が固定ソースリスト14aに抽出され、毎グレート要求を受け取った時の処理がソースに記述されており、また、この処理が、抽出されたクラス名およびメンバ変数名に基づいて行われる。図5は、端末およびクラウドサーバの処理を説明するための図である。図5の例では、端末10およびクラウドサーバ20で行われる処理が模式的に示されている。第一の実行部15aは、入力部11からマイグレート要求を受信すると、クラウドサーバ20にアプリケーションを実行する要求であるアプリケーション実行要求を送信する。これにより、クラウドサーバ20は、アプリケーションを実行する。そして、第一の実行部15aは、マイグレート処理エンジンのマイグレート用APIを呼び出す。マイグレート処理エンジンは、第一の設定部15bに、固定リソースリスト14aに登録されているクラス名およびメンバ変数名と一致するスレッドクラスのメンバ変数名を所定値、例えば、nullを設定するように指示を出す。
第一の設定部15bは、第一の実行部15aにより実行されたアプリケーションにおいて用いられる変数のうち、アプリケーションの実行時に参照される固定リソースを参照するためのメンバ変数に値を設定し、固定リソースを開放する。また、抽出部15cは、アプリケーションを停止させ、アプリケーションの実行状態を抽出する。図5の例では、マイグレート処理エンジンからの指示を第一の設定部15bが受信した場合には、第一の設定部15bは、次のような処理を行う。すなわち、第一の設定部15bは、固定リソースリスト14aに登録されているクラス名およびメンバ変数名と一致するスレッドクラスのメンバ変数に所定値、例えば、nullを設定する。また、図5の例では、抽出部15cは、端末10上の計算処理部を停止し、計算処理部に対して「checkpoint」を実行して、変数値、スタック内容および実行場所を含む実行状態を抽出する。スタック内容には、ローカル変数やメソッド呼び出し履歴が保持されている。
送信部15dは、実行状態をクラウドサーバ20に送信する。図5の例では、送信部15dは、抽出された実行状態をシリアライズし、シリアライズされた実行状態をクラウドサーバ20に送信する。
図1に戻り、クラウドサーバ20は、入力部21と、出力部22と、通信部23と、記憶部24と、制御部25とを有する。
入力部21は、各種情報を制御部25に入力する。入力部21のデバイスの一例としては、マウスやキーボードなどが挙げられる。
出力部22は、各種情報を出力する。例えば、出力部22は、制御部25から画像が入力された場合には、外部のディスプレイに画像を表示するように、ディスプレイの表示を制御する。
通信部23は、無線通信を行う。例えば、通信部23は、制御部25と、端末10との無線通信を行う。通信部23は、制御部25から情報が入力されると、入力された情報を端末10へ送信する。また、通信部23は、端末10から情報が入力されると、入力された情報を制御部25へ送信する。通信部23の一例としては、無線通信インタフェースが挙げられる。
記憶部24は、固定リソースリスト24aと、再設定変数リスト24bと、インスタンス管理表24cとを記憶する。固定リソースリスト24aには、固定リソースリスト14aと同一の内容が登録される。すなわち、固定リソースリスト24aには、アプリケーションが参照する固定リソースを参照する変数を識別する識別情報が登録される。また、再設定変数リスト24bには、上述したように、計算処理部を参照する変数が登録される。図6は、再設定変数リストの一例を示す図である。図6の例では、再設定変数リスト24bには、クラス名が「計算処理部ラッパ」であるラッパを参照するメンバ変数の変数名が「calcThread」であることが登録されている。また、インスタンス管理表24cについては、上述したインスタンス管理表14bと同様のものであるので、説明を省略する。
記憶部24は、例えば、フラッシュメモリなどの半導体メモリ素子、または、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部24は、上記の種類の記憶装置に限定されるものではなく、RAM(Random Access Memory)、ROM(Read Only Memory)であってもよい。
制御部25は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。図1に示すように、制御部25は、第二の実行部25aと、受信部25bと、第二の設定部25cと、再開部25dとを有する。
第二の実行部25aは、アプリケーションを実行する。例えば、第二の実行部25aは、GUIを有するJavaアプリケーションを実行する。なお、このアプリケーションは、上述したように、開発者などによって、ソースが改変されたものである。例えば、かかるアプリケーションは、クラス名およびメンバ変数名が固定ソースリスト24aに抽出され、毎グレート要求を受け取った時の処理がソースに記述されており、また、この処理が、抽出されたクラス名およびメンバ変数名に基づいて行われる。図5の例では、第二の実行部25aによって、計算処理部1が起動されている。
受信部25bは、送信部15dにより送信された実行状態を受信する。図5の例では、受信部25bは、端末10の送信部15dから送信された実行状態を受信し、受信した実行状態をデシリアライズし、計算処理部の新しいインスタンス(計算処理部2)を生成する。
第二の設定部25cは、第二の実行部25aにより実行されたアプリケーションにおいて用いられる変数のうち、記憶部24に記憶された固定リソースリスト24aに登録された識別情報が示す変数の値を抽出し、次のように処理する。すなわち、第二の設定部25cは、受信部25bにより受信された実行状態に基づいて生成されるインスタンスの対応する変数に、抽出した値を設定する。図5の例では、第二の設定部25cは、計算処理部1で用いられる変数のうち、固定リソースリスト24aに登録された識別情報が示す変数b、cの各値を、計算処理部2の対応する変数、すなわち計算処理部2の変数b、cのそれぞれに設定する。また、図5の例では、第二の設定部25cは、計算処理部ラッパの参照先を、計算処理部1から、計算処理部2に変更する。
再開部25dは、第二の設定部25cにより設定されたインスタンスを再開することで、端末10で停止されたアプリケーションを再開させる。図5の例では、再開部25dは、計算処理部1を停止させ、計算処理部2を再開させることで、端末10で停止されたアプリケーションを再開させる。
端末10からクラウドサーバ20へのマイグレーションについて説明した。ここで、クラウドサーバ20が、端末10の制御部15が有する各部15a、15b、15c、15dと同様の機能を備え、端末10が、クラウドサーバ20の制御部25が有する各部25a、25b、25c、25dおよび再設定変数リスト24bと同様の機能を備えた場合を想定する。このような場合には、同様にして、クラウドサーバ20から端末10へのマイグレーションを行うこともできる。
ここで、変数値の更新処理方法の一例について説明する。図7は、変数値の更新処理方法の一例について説明するための図である。Java仮想マシンでは、例えば以下のように変数が管理されている。あるオブジェクト・リファレンスが指す先はJavaヒープメモリ領域内のハンドル・プール内のアドレスである。該当アドレスの内容は、オブジェクト・プール内のアドレスと、クラス・データのアドレスから成る。オブジェクト・プール内のアドレスにある内容は、対象オブジェクトの各メンバ変数の値のアドレスである。各アドレスに各メンバ変数の値がある。メンバ変数の型がクラスの場合は、メンバ変数の値として、該当クラスのインスタンスのアドレス(オブジェクト・リファレンス)が入っている。また、クラス・データのアドレスには、メソッドエリア領域内にある、対象オブジェクトのクラス構造が配置されている。クラス・データは、クラス名、コンスタント・プール、フィールド情報、メソッド情報、クラス変数などから成る。このうち、フィールド情報にメンバ変数の情報が配置されており、各メンバ変数の変数名と型から成る。
マイグレート開始時には、マイグレート対象オブジェクトとして、あるオブジェクト・リファレンスが指定される。固定リソースの切り張りの際に使用するデータである、固定リソースリスト14a、24aには、以下の例のように、固定リソースを参照する各メンバ変数の、クラス名と変数名が登録されている。
(1)マイグレート対象オブジェクトとして指定されたオブジェクト・リファレンスが指すアドレスにあるクラス・データのアドレスにあるクラス・データから、クラス名を取得し、固定リソースリスト内で該当するクラス名を抜き出す。
(2)(1)で抜き出した固定リソースリストの各メンバ変数名を、クラス・データ内のフィールド情報(メンバ変数情報)内で探し、何番目の変数か(インデックス)を特定する。
(3)指定されたオブジェクト・リファレンスが指すアドレスにあるオブジェクト・プールのアドレスから、(2)で特定したインデックスにある変数値のアドレスにある変数値をnullに変更する。
(4)(1)で取得したクラス・データ内のフィールド情報(メンバ変数情報)の各変数の型がクラスの場合、該当する各変数について、(3)と同様の方法で変数値のアドレスを特定して変数値を取得し、再帰的に(1)−(4)の処理を行う。
「checkpoint」は、実行状態の抽出を可能にするライブラリ(例: Apache Commons Javaflow)を使用する。このライブラリは、コンパイル後のJavaのプログラム(バイトコード)を変更することで、ローカル変数・メソッド呼び出し履歴・現在の実行場所などの実行状態を抽出可能にする。
シリアライズは、「checkpoint」で抽出した実行状態を、マイグレート対象オブジェクトとして、Java付属のシリアライズ用メソッド(java.io.ObjectOutputStream#writeObject())に渡すことによって、シリアライズを行う。Java付属のシリアライズ用メソッドでは、メンバ変数のシリアライズにあたって、以下の処理が行われる。
(A)マイグレート対象オブジェクトとして指定されたオブジェクト・リファレンスが指すアドレスにあるクラス・データのアドレスにあるクラス・データ内のフィールド情報(メンバ変数情報)を取得し、各メンバ変数の型を取得する。その後、オブジェクト・プールのアドレスから、各変数値のアドレスにある変数値を取得し、型が基本データ型(int等)・Stringクラスの場合は変数値をバイト列として書き出し、他のクラスの場合は(A)を再帰的に実行して、バイト列を書き出す。
デシリアライズは、シリアライズされたバイト列を、Java付属のデシリアライズ用メソッド(java.io.ObjectInputStream#readObject())で読み込むことで、シリアライズ前と同内容のオブジェクトを生成する。
Java付属のデシリアライズ用メソッドでは、メンバ変数のデシリアライズにあたって、以下の処理が行われる。
(B)シリアライズされたバイト列に含まれるクラス名をもとに、メソッドエリア内のクラス・データを探し、クラス・データ内のフィールド情報(メンバ変数情報)を取得する。
(C)各メンバ変数値のアドレス用の領域をオブジェクト・プール内に確保する。
(D)ハンドル・プール内のオブジェクト・プールのアドレスの値として、確保したオブジェクト・プール内のアドレスをセットする。
(E)シリアライズされたバイト列から各メンバ変数の型を取得する。メンバ変数の型が基本データ型・Stringクラスでない場合は、(B)−(F)を再帰的に実行する。メンバ変数の型が基本データ型・Stringクラスの場合は、シリアライズされたバイト列から各メンバ変数の値を取得する。各メンバ変数値用の領域をオブジェクト・プール内に確保し、取得したメンバ変数値をセットする。
(F)各メンバ変数値のアドレスの値として、確保したメンバ変数値のアドレスをセットする。
(a)デシリアライズされたオブジェクトのオブジェクト・リファレンスが指すアドレスにあるクラス・データのアドレスにあるクラス・データから、クラス名を取得し、固定リソースリスト内で該当するクラス名を抜き出す。
(b)(a)で抜き出した固定リソースリストの各メンバ変数名を、クラス・データ内のフィールド情報(メンバ変数情報)内で探し、何番目の変数か(インデックス)を特定する。
(c)インスタンス管理表から、マイグレートインスタンスを取得(オブジェクト・リファレンス)し、オブジェクト・リファレンスが指すアドレスにあるオブジェクト・プールのアドレスから、(b)で特定したインデックスにある変数値のアドレスにある変数値を取得する。
(d)デシリアライズされたオブジェクト・リファレンスが指すアドレスにあるオブジェクト・プールのアドレスから、(b)で特定したインデックスにある変数値のアドレスにある変数値を、(c)で取得した変数値に変更する。
(e)(a)で取得したクラス・データ内のフィールド情報(メンバ変数情報)の各変数の型がクラスの場合、該当する各変数について、(d)と同様の方法で変数値のアドレスを特定して変数値を取得し、再帰的に(a)−(e)の処理を行う。
(10)インスタンス管理表から、ラッパインスタンスを取得(オブジェクト・リファレンス)し、オブジェクト・リファレンスが指すアドレスにあるクラス・データのアドレスにあるクラス・データから、クラス名を取得し、再設定変数リスト内で該当するクラス名を抜き出す。
(11)(10)で抜き出した再設定変数リストの各メンバ変数名を、クラス・データのフィールド情報(メンバ変数情報)内で探し、何番目の変数か(インデックス)を特定する。
(12)インスタンス管理表から、マイグレートインスタンスを取得(オブジェクト・リファレンス)。
(13)(10)で取得したラッパインスタンスのオブジェクト・リファレンスが指すアドレスにあるオブジェクト・プールのアドレスから、(11)で特定したインデックスにある変数値のアドレスにある変数値が、(12)で取得した値と等しい場合、変数値をデシリアライズされたオブジェクト・リファレンスに変更する。
再開部25dは、インスタントを再開させる場合に、「restart」を使用する。「restart」は、「checkpoint」時に使用したライブラリの「restart」機能を使用する。「checkpoint」で抽出された実行状態の続きから処理を再開する。
制御部25は、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)などの集積回路またはCPU(Central Processing Unit)やMPU(Micro Processing Unit)などの電子回路である。
[処理の流れ]
次に、本実施例に係るクラウドシステム1の処理の流れを説明する。図8および図9は、実施例1に係るクラウドシステムの処理の手順を示すシーケンス図である。
図8に示すように、第一の実行部15aは、アプリケーションを実行する(ステップS101)。第一の実行部15aは、マイグレートされるインスタンスをインスタンス管理表14bに登録する(ステップS102)。
第一の実行部15aは、計算処理部ラッパインスタンスをインスタンス管理表14bに登録する(ステップS103)。第一の実行部15aは、マイグレート要求を受信する(ステップS104)。第一の実行部15aは、マイグレート要求を受信すると、クラウドサーバ20にアプリケーションを実行する要求であるアプリケーション実行要求を送信する(ステップS105)。アプリケーション実行要求を受けたクラウドサーバ20の第二の実行部25aは、アプリケーションを実行する(ステップS201)。
第一の実行部15aは、マイグレート処理エンジンのマイグレート用APIを呼び出す(ステップS106)。第一の設定部15bは、固定リソースリスト14aに登録されているクラス名およびメンバ変数名と一致するスレッドクラスのメンバ変数に所定値、例えば、nullを設定する(ステップS107)。抽出部15cは、マイグレート対象のインスタンスを停止させる(ステップS108)。
抽出部15cは、マイグレート対象のインスタンスに対して「checkpoint」を実行して、変数値、スタック内容および実行場所を含む実行状態を抽出する(ステップS109)。送信部15dは、抽出された実行状態をシリアライズする(ステップS110)。送信部15dは、シリアライズされた実行状態のバイト列をクラウドサーバ20に送信する(ステップS111)。
クラウドサーバ20の受信部25bは、端末10の送信部15dから送信された実行状態のバイト列を受信する(ステップS202)。受信部25bは、受信した実行状態をデシリアライズし、計算処理部の新しいインスタンス(計算処理部2)を生成する(ステップS203)。第二の設定部25cは、第二の実行部25aにより実行されたアプリケーションにおいて用いられる変数のうち、記憶部24に記憶された固定リソースリスト24aに登録された識別情報が示す変数の値を、次のように処理する。すなわち、第二の設定部25cは、かかる変数の値を、受信部25bにより受信された実行状態に基づいて生成されるインスタンスの対応する変数に設定する(ステップS204)。
第二の設定部25cは、計算処理部ラッパの参照先を、既に実行されていたインスタンス(登録インスタンス)ではなく、新たに生成されたインスタンス(生成インスタンス)となるように、設定する(ステップS205)。
再開部25dは、登録インスタンスを停止させる(ステップS206)。再開部25dは、生成インスタンスを再開(「restart」)させることで、端末10で停止されたアプリケーションを再開させる(ステップS207)。再開部25dは、生成インスタンスを、マイグレートされるインスタンスとして、インスタンス管理表24cのマイグレートインスタンスの参照の値を、生成インスタンスに更新する(ステップS208)。そして、ユーザの操作により、または、ステップS111の処理を実行してから、所定時間が経過すると、端末10は、マイグレート要求をクラウドサーバ20に送信する(ステップS112)。
そして、図9に示す以降の処理(ステップS113〜119、S209〜213)については、図8に示すステップS202〜208、S106〜111と同様であるので説明を省略する。
[実施例1の効果]
上述してきたように、本実施例に係るクラウドシステム1では、マイグレーション元の端末10、マイグレーション先のクラウドサーバ20で、共通のアプリケーションが実行される。本実施例に係るクラウドシステム1では、マイグレーション先で、生成インスタンスの変数に、既に実行されているインスタンスの変数の値がコピーされて、固定リソースの再バインドが行われる。そのため、本実施例に係るクラウドシステム1では、固定リソースの再バインドを容易に行うことができる。
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
例えば、実施例1では、マイグレート先の装置に、予めソースが改変されたアプリケーションや、固定リソースリストを保持させる場合を例示したが、開示の装置はこれに限られない。例えば、マイグレート時に、マイグレート元の装置が、マイグレート先の装置に、予めソースが改変されたアプリケーションや、固定リソースリストを送信するようにしてもよい。この場合、マイグレート先の装置は、受信したアプリケーションを実行し、固定リソースリストを用いて、上述したマイグレートの方法と同様に、マイグレートを行う。
また、実施例1において説明した処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともできる。また、実施例1において説明した処理のうち、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。例えば、ステップS208、ステップS119において、人間がインスタンス管理表の更新を行ってもよい。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理を任意に細かくわけたり、あるいはまとめたりすることができる。また、ステップを省略することもできる。ステップS102、ステップS103の処理をまとめることもできる。
また、各種の負荷や使用状況などに応じて、各実施例において説明した各処理の各ステップでの処理の順番を変更できる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的状態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、第一の設定部15bと、抽出部15cとが統合されてもよい。また、第二の設定部25cと、再開部25dとが統合されてもよい。
以上説明した実施形態及びその変形例に関し、更に以下の付記を開示する。
(付記1)端末およびサーバを有するシステムであって、
前記端末は、
アプリケーションを実行する第一の実行部と、
前記アプリケーションの実行時に参照される固定リソースを参照するための変数を識別する識別情報を記憶する第一の記憶部と、
前記第一の実行部により実行されたアプリケーションにおいて用いられる変数のうち、前記第一の記憶部に記憶された識別情報が示す変数に値を設定し、前記固定リソースを開放する第一の設定部と、
前記アプリケーションを停止させ、前記アプリケーションの実行状態を抽出する抽出部と、
前記実行状態を前記サーバに送信する送信部とを有し、
前記サーバは、
前記アプリケーションを実行する第二の実行部と、
前記送信部により送信された前記実行状態を受信する受信部と、
前記アプリケーションが参照する固定リソースを参照する変数を識別する識別情報を記憶する第二の記憶部と、
前記第二の実行部により実行されたアプリケーションにおいて用いられる変数のうち、前記第二の記憶部に記憶された識別情報が示す変数の値を抽出し、前記受信部により受信された実行状態に基づいて生成されるインスタンスの対応する変数に前記抽出した値を設定する第二の設定部と、
前記第二の設定部により設定されたインスタンスを再開することで、前記端末で停止されたアプリケーションを再開させる再開部とを有する
ことを特徴とするシステム。
(付記2)前記第二の設定部は、固定リソースが参照する再設定変数に、前記再開部により再開されたアプリケーションの情報を設定する
ことを特徴とする付記1に記載のシステム。
(付記3)端末およびサーバを有するシステムが実行するマイグレーション方法であって、
前記端末は、
アプリケーションを実行し、
前記第一の実行部により実行されたアプリケーションにおいて用いられる変数のうち、前記アプリケーションの実行時に参照される固定リソースを参照するための変数を識別する識別情報を記憶する第一の記憶部に記憶された識別情報が示す変数に値を設定し、前記固定リソースを開放し、
前記アプリケーションを停止させ、前記アプリケーションの実行状態を抽出し、
前記実行状態を前記サーバに送信し、
前記サーバは、
前記アプリケーションを実行し、
送信された前記実行状態を受信し、
前記第二の実行部により実行されたアプリケーションにおいて用いられる変数のうち、前記アプリケーションが参照する固定リソースを参照する変数を識別する識別情報を記憶する第二の記憶部に記憶された識別情報が示す変数の値を抽出し、前記受信部により受信された実行状態に基づいて生成されるインスタンスの対応する変数に前記抽出した値を設定し、
設定されたインスタンスを再開することで、前記端末で停止されたアプリケーションを再開させることを特徴とするマイグレーション方法。
(付記4)前記抽出した値を設定する方法は、固定リソースが参照する再設定変数に、再開されたアプリケーションの情報を設定する
ことを特徴とする付記3に記載のマイグレーション方法。
1 クラウドシステム
10 端末
14 記憶部
14a 固定リソースリスト
15 制御部
15a 第一の実行部
15b 第一の設定部
15c 抽出部
15d 送信部
20 クラウドサーバ
24 記憶部
24a 固定リソースリスト
25 制御部
25a 第二の実行部
25b 受信部
25c 第二の設定部
25d 再開部

Claims (3)

  1. 端末およびサーバを有するシステムであって、
    前記端末は、
    アプリケーションを実行する第一の実行部と、
    前記アプリケーションの実行時に参照される固定リソースを参照するための変数を識別する識別情報を記憶する第一の記憶部と、
    前記第一の実行部により実行されたアプリケーションにおいて用いられる変数のうち、前記第一の記憶部に記憶された識別情報が示す変数に値を設定し、前記固定リソースを開放する第一の設定部と、
    前記アプリケーションを停止させ、前記アプリケーションの実行状態を抽出する抽出部と、
    前記実行状態を前記サーバに送信する送信部とを有し、
    前記サーバは、
    前記アプリケーションを実行する第二の実行部と、
    前記送信部により送信された前記実行状態を受信する受信部と、
    前記アプリケーションが参照する固定リソースを参照する変数を識別する識別情報を記憶する第二の記憶部と、
    前記第二の実行部により実行されたアプリケーションにおいて用いられる変数のうち、前記第二の記憶部に記憶された識別情報が示す変数の値を抽出し、前記受信部により受信された実行状態に基づいて生成されるインスタンスの対応する変数に前記抽出した値を設定する第二の設定部と、
    前記第二の設定部により設定されたインスタンスを再開することで、前記端末で停止されたアプリケーションを再開させる再開部とを有する
    ことを特徴とするシステム。
  2. 前記第二の設定部は、固定リソースが参照する再設定変数に、前記再開部により再開されたアプリケーションの情報を設定する
    ことを特徴とする請求項1に記載のシステム。
  3. 端末およびサーバを有するシステムが実行するマイグレーション方法であって、
    前記端末は、
    アプリケーションを実行し、
    前記第一の実行部により実行されたアプリケーションにおいて用いられる変数のうち、前記アプリケーションの実行時に参照される固定リソースを参照するための変数を識別する識別情報を記憶する第一の記憶部に記憶された識別情報が示す変数に値を設定し、前記固定リソースを開放し、
    前記アプリケーションを停止させ、前記アプリケーションの実行状態を抽出し、
    前記実行状態を前記サーバに送信し、
    前記サーバは、
    前記アプリケーションを実行し、
    送信された前記実行状態を受信し、
    前記第二の実行部により実行されたアプリケーションにおいて用いられる変数のうち、前記アプリケーションが参照する固定リソースを参照する変数を識別する識別情報を記憶する第二の記憶部に記憶された識別情報が示す変数の値を抽出し、前記受信部により受信された実行状態に基づいて生成されるインスタンスの対応する変数に前記抽出した値を設定し、
    設定されたインスタンスを再開することで、前記端末で停止されたアプリケーションを再開させることを特徴とするマイグレーション方法。
JP2011081135A 2011-03-31 2011-03-31 システムおよびマイグレーション方法 Expired - Fee Related JP5678778B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2011081135A JP5678778B2 (ja) 2011-03-31 2011-03-31 システムおよびマイグレーション方法
US13/424,693 US9146779B2 (en) 2011-03-31 2012-03-20 System and method for migrating an application

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011081135A JP5678778B2 (ja) 2011-03-31 2011-03-31 システムおよびマイグレーション方法

Publications (2)

Publication Number Publication Date
JP2012216091A true JP2012216091A (ja) 2012-11-08
JP5678778B2 JP5678778B2 (ja) 2015-03-04

Family

ID=46928758

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011081135A Expired - Fee Related JP5678778B2 (ja) 2011-03-31 2011-03-31 システムおよびマイグレーション方法

Country Status (2)

Country Link
US (1) US9146779B2 (ja)
JP (1) JP5678778B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014155684A1 (ja) * 2013-03-29 2014-10-02 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8782434B1 (en) 2010-07-15 2014-07-15 The Research Foundation For The State University Of New York System and method for validating program execution at run-time
US9176773B2 (en) 2011-06-29 2015-11-03 Microsoft Technology Licensing, Llc Virtual machine migration tool
US9122873B2 (en) 2012-09-14 2015-09-01 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9069782B2 (en) 2012-10-01 2015-06-30 The Research Foundation For The State University Of New York System and method for security and privacy aware virtual machine checkpointing
US9015832B1 (en) * 2012-10-19 2015-04-21 Google Inc. Application auditing through object level code inspection
WO2014189481A1 (en) * 2013-05-20 2014-11-27 Empire Technology Development, Llc Object migration between cloud environments
US9684545B2 (en) * 2014-03-26 2017-06-20 Unisys Corporation Distributed and continuous computing in a fabric environment
US9971622B2 (en) * 2015-06-25 2018-05-15 Intel Corporation Technologies for application migration using lightweight virtualization
JP2017033375A (ja) * 2015-08-04 2017-02-09 富士通株式会社 並列計算システム、マイグレーション方法、及びマイグレーションプログラム
CN107967170B (zh) * 2017-11-30 2020-11-10 深圳先进技术研究院 迁移计算方法、装置、设备及存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009075877A (ja) * 2007-09-20 2009-04-09 Toshiba Corp 情報処理システム、および監視方法
JP2010257429A (ja) * 2009-04-28 2010-11-11 Toshiba Corp 計算機

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6401134B1 (en) 1997-07-25 2002-06-04 Sun Microsystems, Inc. Detachable java applets
US7895522B2 (en) * 2001-09-28 2011-02-22 Ntt Docomo, Inc. Layout of platform specific graphical user interface widgets migrated between heterogeneous device platforms
US20080313282A1 (en) * 2002-09-10 2008-12-18 Warila Bruce W User interface, operating system and architecture
US20060149741A1 (en) * 2005-01-04 2006-07-06 Oracle International Corporation Efficient Approach to Implement Applications on Server Systems in a Networked Environment
US8543636B1 (en) * 2005-04-01 2013-09-24 Sprint Communications Company L.P. System migration using hardware virtualization
US9864628B2 (en) * 2005-08-23 2018-01-09 Blackberry Limited Method and system for transferring an application state from a first electronic device to a second electronic device
US7716610B2 (en) * 2007-01-05 2010-05-11 International Business Machines Corporation Distributable and serializable finite state machine
US8468230B2 (en) * 2007-10-18 2013-06-18 Fujitsu Limited Method, apparatus and recording medium for migrating a virtual machine
US8510757B2 (en) * 2008-01-11 2013-08-13 Google Inc. Gathering pages allocated to an application to include in checkpoint information
US8473577B2 (en) * 2010-10-13 2013-06-25 Google Inc. Continuous application execution between multiple devices

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009075877A (ja) * 2007-09-20 2009-04-09 Toshiba Corp 情報処理システム、および監視方法
JP2010257429A (ja) * 2009-04-28 2010-11-11 Toshiba Corp 計算機

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2014155684A1 (ja) * 2013-03-29 2014-10-02 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法
JPWO2014155684A1 (ja) * 2013-03-29 2017-02-16 富士通株式会社 プログラム、情報処理システム、およびプログラム移行方法
US9733990B2 (en) 2013-03-29 2017-08-15 Fujitsu Limited Information processing system and program migration method

Also Published As

Publication number Publication date
JP5678778B2 (ja) 2015-03-04
US9146779B2 (en) 2015-09-29
US20120254355A1 (en) 2012-10-04

Similar Documents

Publication Publication Date Title
JP5678778B2 (ja) システムおよびマイグレーション方法
US20240095043A1 (en) Execution of sub-application processes within application program
US10467025B2 (en) Managing delivery of code and dependent data using application containers
CN107015823B (zh) 具有动态子包加载的应用容器
CN107636612B (zh) 应用迁移装置、方法与存储介质
US10684838B2 (en) Dynamic application deployment
CN111767090A (zh) 小程序的启动方法、装置、电子设备以及存储介质
CN107291481B (zh) 一种组件更新方法、装置和系统
US10303523B2 (en) Method and apparatus to migrate stacks for thread execution
CN112650541A (zh) 一种应用程序启动加速方法、系统、设备及存储介质
CN112988277B (zh) 规则文件加载方法、装置、服务器及介质
CN114995970A (zh) 任务处理方法、装置、存储介质及电子设备
CN106775608B (zh) 独立系统进程的实现方法和装置
CN113110941B (zh) 使用应用容器管理代码和依赖性数据的传递
WO2020133455A1 (zh) 应用程序的管理方法、装置、存储介质及电子设备
CN114510334A (zh) 类实例的调用方法、装置、电子设备及自动驾驶车辆
CN116954678A (zh) 对象更新方法、装置和计算机可读存储介质
CN116737251A (zh) 一种启动方法、装置、终端设备及介质
CN117193874A (zh) 插件处理方法、装置、存储介质及电子设备
CN113703989A (zh) 基于Android系统的消息处理方法、装置、设备和存储介质
CN116610370A (zh) 一种启动方法、装置、设备及存储介质
CN115878915A (zh) 页面访问方法、装置、存储介质以及计算机设备
CN114924890A (zh) 小程序的调用方法、检测方法、装置及系统
CN117971250A (zh) 应用安装方法、装置、电子设备和可读存储介质

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140204

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140930

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141007

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141120

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20141209

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141222

R150 Certificate of patent or registration of utility model

Ref document number: 5678778

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees