以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第1の実施の形態〕
まず第1の実施の形態について説明する。
図1は、第1の実施の形態に係る情報処理システムの機能構成例を示す図である。情報処理システムCPは、記憶手段1、第1の実行手段2、生成手段3、および第2の実行手段4を有する。情報処理システムCPは、例えば1または複数のコンピュータにより実現されている。
記憶手段1は、第1のプログラム1aや第2のプログラム1bを記憶する。第1のプログラム1aは、第1の動作環境で実行可能なプログラムである。例えば第1のプログラム1aは、第1の動作環境を提供するプラットフォームを有するコンピュータが、直接解釈可能なコードで記述されている。なお、情報処理システムCPのプラットフォームは、第1の動作環境とは別の第2の動作環境を提供している。第2のプログラム1bは、第2の動作環境に実行可能なプログラムである。
第1の実行手段2は、情報処理システムCPで提供される第2の動作環境において動作し、第1の動作環境における情報処理を模倣する。そして第1の実行手段2は、模倣した第1の動作環境により、第1のプログラム1aを実行する。
生成手段3は、第1の実行手段2による第1のプログラム1aの実行と並行して、第2のプログラム1bを生成する。第2のプログラム1bは、第2の動作環境で実行可能であり、第1のプログラム1aと同じ処理結果を得ることができるプログラムである。生成手段3は、例えば、第1のプログラム1a内に記述されたバイナリコードを、第2の動作環境で実行可能なバイナリコードに変換する。
第2の実行手段4は、第2のプログラム1bの生成完了後、第1の実行手段2による第1のプログラム1aの実行を停止させるとともに、第2の動作環境により第2のプログラム1bを実行する。
このような情報処理システムCPによれば、第1のプログラム1aの情報処理システムCPへの移行時に、早期に第1のプログラム1aの実行を開始できると共に、移行処理完了後は、第2のプログラム1bを効率的に実行することができる。
図2は、第1の実施の形態におけるプログラム移行処理の一例を示す図である。第1のプログラム1aは、例えば第1の動作環境5を有するコンピュータで実行されていたプログラムである。このプログラム1aを、第1の実施の形態に係る情報処理システムCPに移行する場合、情報処理システムCPでは、まず第1の実行手段2により、第1のプログラム1aの実行が開始される。また第1の実行手段2による第1のプログラム1aの実行と並行して、生成手段3により第2のプログラム1bが生成される。生成された第2のプログラム1bは、例えば記憶手段1に格納される。
第2のプログラム1bの生成が完了すると、第2の実行手段4により、第1の実行手段2に、第1のプログラム1aの実行停止が指示される。その指示を受けて、第1の実行手段2は、第1のプログラム1aの実行を停止する。また第2の実行手段4は、第2のプログラム1bを、情報処理システムCPが有する第2の動作環境6上で実行する。
このように、第1の実施の形態によれば、情報処理システムCPにおいて、第1のプログラム1aを早期に実行開始できると共に、第2のプログラム1b生成後は、第2のプログラム1bを実行することにより、効率的な処理を行うことができる。
なお、生成手段3は、例えば、第1のプログラム1aのバイナリコードを、第2の動作環境6で実行可能なバイナリコードに変換することで、第2のプログラム1bを生成することができる。これにより、例えば第1のプログラム1aのソースコードが入手できない場合でも、第2の動作環境6で実行可能であり、第1のプログラム1aと同じ処理結果を得ることができる第2のプログラム1bを生成することができる。なお、第1のプログラム1aのソースコードが入手できる場合、そのソースコードをコンパイルすることで、第2のプログラム1bを生成してもよい。
また、生成手段3は、例えば第2のプログラム1bが正常に動作しない場合、前回とは異なる生成アルゴリズムにより、第2の動作環境6で実行可能であり、第1のプログラム1aと同じ処理結果を得ることができる第3のプログラムを生成してもよい。なお、第3のプログラムを生成する期間は、第1の実行手段2により第1のプログラム1aを実行させる。これにより、移行後に実行されるプログラムの信頼性を高めることができる。
また、第2の実行手段4は、停止した第1のプログラム1aの最後に実行されたコードの次のコードを特定し、特定したコードに対応する第2のプログラム1b内のコードから、第2のプログラム1bの実行を開始してもよい。これにより、実行するプログラムの切り替えにおいて、重複した処理が発生せず、処理の効率化が図れる。
また第2の実行手段4は、第1のプログラム1aと第2のプログラム1bとを並行して実行した後、第1のプログラム1aを停止させるようにしてもよい。これにより、第2のプログラム1bが実行できることを確認した上で、第1のプログラム1aを停止させることができる。その結果、第2のプログラム1bの不具合により第1のプログラム1aまたは第2のプログラム1bの実行期間に空白が生じることが抑止される。
また第1のプログラム1aと第2のプログラム1bとを並行して実行する間、第2の実行手段4は、第1のプログラム1aの処理結果と第2のプログラム1bの処理結果とを比較してもよい。この場合、第2の実行手段4は、比較結果に基づいて第2のプログラム1bに基づく情報処理が正常に実行されているか否かを判定する。これにより、第2のプログラム1bの信頼性をより高めることができる。このとき第2の実行手段4は、例えば、第2のプログラム1bが所定期間以上正常に動作したことを確認後、第1のプログラム1aの実行を停止してもよい。これにより、信頼性の低い状態で、第2のプログラム1bの単独での実行状態になることを抑止できる。
なお、第1の実行手段2、生成手段3、および第2の実行手段4は、例えば情報処理システムCPが有するプロセッサにより実現することができる。また、記憶手段1は、例えば情報処理システムCPが有するRAM(Random Access Memory)などのメモリにより実現することができる。
また、図1に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第2の実施の形態〕
次に第2の実施の形態について説明する。第2の実施の形態は、クラウドシステムにプログラムを移行するものである。なお第2の実施の形態では、即時切り替え方式により、プログラムの動作環境をエミュレータ環境からネイティブ環境へ変更する。即時切り替え方式は、プログラムのコード変換が完了すると、エミュレータ環境でのプログラムの実行を停止すると共に、ネイティブ環境でのプログラムの実行を開始するものである。
ここで、エミュレータ環境は、エミュレータが他のコンピュータの情報処理動作を模倣することで実現された、プログラムの動作環境である。それに対し、ネイティブ環境は、エミュレータを介さずに、コンピュータ本来の機能により提供されるプログラムの動作環境である。
図3は、第2の実施の形態のシステム構成例を示す図である。クラウドシステム20内には、ネットワーク21を介して複数のコンピュータ100,100a,100b,・・・が設けられている。ネットワーク21は、広域のネットワーク22に接続されており、複数のコンピュータ100,100a,100b,・・・は、広域のネットワーク22を介して受信した要求に応じて、情報処理のサービスを不特定多数の利用者に提供する。クラウドシステム20は、例えばIaaS(Infrastructure as a Service)またはPaaS(Platform as a Service)型のパブリッククラウドである。IaaSとは、サーバ、CPU、ストレージなどのインフラを提供するクラウドサービスである。PaaSは、アプリケーションプログラムなどのプログラムを稼働させるための基盤を提供するクラウドサービスである。
広域のネットワーク22には、例えば、企業内システム23のネットワーク24や端末装置25が接続されている。企業内システム23のネットワーク24には、端末装置26やコンピュータ27が接続されている。
このようなシステムにおいて、例えば企業内システム23のコンピュータ27で実行していたプログラムを、クラウドシステム20のコンピュータ100に移行する場合がある。企業が企業内に閉じたシステム上で利用していたプログラムを、クラウドシステム20上で利用できるようにすれば、企業はコンピュータシステムの保有や保守に係る費用や手間を削減できる。またクラウドシステム20では、ユーザが必要な時に必要な分だけのシステム資源を利用し、利用した分だけ課金されることが行われている。このようなサービスを利用すれば、企業は、利用する資源の量を削減することで、システム運用に係る費用を削減できる。
ところで、企業内に閉じたシステムのOSやハードウェアなどの動作環境と、クラウドシステム20内のコンピュータ100の動作環境とは、異なる場合がある。しかも、企業内で利用されてきたプログラムの中には、開発され運用開始されてから長い期間を経た結果、ソースコードを紛失し、バイナリコードしか存在しないものもある。
そこで、第2の実施の形態では、クラウドシステム20に既存システム(例えばコンピュータ27)のプログラム(例えばアプリケーションプログラム)を動作させることができるエミュレータを配置する。さらに、プログラムのソースコード修正や再コンパイルを行うことなく、既存システムのバイナリコードを、例えばコンピュータ27からクラウドシステム20へ送信する。そして、クラウドシステム20がエミュレーションすることで、コンピュータ27に適合したコードのプログラムを実行する。
さらにクラウドシステム20では、エミュレーションによるプログラムの実行と並行して、バックグラウンドでプログラムのバイナリコードを、クラウドシステム20のアーキテクチャに適合するように変換する。そしてクラウドシステム20は、変換が完了したタイミングで、エミュレータ環境による実行からクラウドシステム20のネイティブ環境の実行へ切り換えるようにする。このような処理を実現するために、クラウドシステム20内のコンピュータ100,100a,100b,・・・は、例えば、以下のようなハードウェア構成を有している。
図4は、本実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ100は、プロセッサ101によって装置全体が制御されている。プロセッサ101には、バス109を介してメモリ102と複数の周辺機器が接続されている。プロセッサ101は、マルチプロセッサであってもよい。プロセッサ101は、例えばCPU、MPU(Micro Processing Unit)、またはDSP(Digital Signal Processor)である。プロセッサ101の機能の少なくとも一部を、ASIC(Application Specific Integrated Circuit)、PLD(Programmable Logic Device)などの電子回路で実現してもよい。
メモリ102は、コンピュータ100の主記憶装置として使用される。メモリ102には、プロセッサ101に実行させるOSのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ102には、プロセッサ101による処理に必要な各種データが格納される。メモリ102としては、例えばRAMが使用される。
バス109に接続されている周辺機器としては、HDD(Hard Disk Drive)103、グラフィック処理装置104、入力インタフェース105、光学ドライブ装置106、機器接続インタフェース107およびネットワークインタフェース108がある。
HDD103は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。HDD103は、コンピュータ100の補助記憶装置として使用される。HDD103には、OSのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
グラフィック処理装置104には、モニタ11が接続されている。グラフィック処理装置104は、プロセッサ101からの命令に従って、画像をモニタ11の画面に表示させる。モニタ11としては、CRT(Cathode Ray Tube)を用いた表示装置や液晶表示装置などがある。
入力インタフェース105には、キーボード12とマウス13とが接続されている。入力インタフェース105は、キーボード12やマウス13から送られてくる信号をプロセッサ101に送信する。なお、マウス13は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
光学ドライブ装置106は、レーザ光などを利用して、光ディスク14に記録されたデータの読み取りを行う。光ディスク14は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク14には、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。
機器接続インタフェース107は、コンピュータ100に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース107には、メモリ装置15やメモリリーダライタ16を接続することができる。メモリ装置15は、機器接続インタフェース107との通信機能を搭載した記録媒体である。メモリリーダライタ16は、メモリカード17へのデータの書き込み、またはメモリカード17からのデータの読み出しを行う装置である。メモリカード17は、カード型の記録媒体である。
ネットワークインタフェース108は、ネットワーク21に接続されている。ネットワークインタフェース108は、ネットワーク21を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
以上のようなハードウェア構成によって、第2の実施の形態の処理機能を実現することができる。なお、第1の実施の形態に示した情報処理システムCPも、図4に示したコンピュータ100と同様のハードウェアにより実現することができる。また図3に示した他のコンピュータ100a,100b,・・・,27も、コンピュータ100と同様のハードウェアで実現できる。ただし、企業内システム23に設けられたコンピュータ27のプロセッサのアーキテクチャは、コンピュータ100のプロセッサ101のアーキテクチャとは異なる。
コンピュータ100は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第2の実施の形態の処理機能を実現する。コンピュータ100に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、コンピュータ100に実行させるプログラムをHDD103に格納しておくことができる。プロセッサ101は、HDD103内のプログラムの少なくとも一部をメモリ102にロードし、プログラムを実行する。またコンピュータ100に実行させるプログラムを、光ディスク14、メモリ装置15、メモリカード17などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ101からの制御により、HDD103にインストールされた後、実行可能となる。またプロセッサ101が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
次に、第2の実施の形態のコンピュータ100における、プログラム移行機能について説明する。
図5は、第2の実施の形態のプログラム移行機能を示すブロック図である。コンピュータ100は、ナレッジベース110、エミュレータ120、トランスレータ130、チェックポイントトラッカー140、アプリケーションモニタ150、アプリケーションコントローラ160、プログラム記憶部170、およびOS180を有する。
ナレッジベース110は、ナレッジ111を記憶する。ナレッジ111は、バイナリトランスレーションに関する知識(情報)である。ナレッジ111は、エミュレータの種類ごとに用意され、様々なアプリケーションプログラムのコード変換に利用される。例えば、コンピュータ100のメモリ102またはHDD103の記憶領域の一部が、ナレッジベース110として使用される。
エミュレータ120は、コンピュータ100の本来の動作環境以外の動作環境の情報処理を模倣する。例えば、エミュレータ120は、図3に示す企業内システム23のコンピュータ27で提供される動作環境における情報処理を模倣する。エミュレータ120は、他のコンピュータの動作環境の情報処理を模倣することにより、模倣対象の動作環境で動作可能なプログラムを実行することができる。
トランスレータ130は、エミュレータ環境で実行可能なプログラムを、入力に対する処理結果を変えずに、ネイティブ環境で実行可能なプログラムに変換する。例えばトランスレータ130は、元のプログラムのバイナリコードを、コンピュータ100に適用されているアーキテクチャで定義された命令セットを用いたバイナリコードに変換する。なおトランスレータ130は、ナレッジ111を参照することで、バイナリコードの変換に用いる変換アルゴリズムを認識する。
チェックポイントトラッカー140は、コード変換時のチェックポイント情報を記録する。例えばチェックポイントトラッカー140は、変換前のプログラム171中にチェックポイントを定義し、そのチェックポイントでプログラムを区切る。チェックポイントは、例えば、所定数おきのバイナリコードをチェックポイントとすることができる。また、プログラム中に出現する1または複数の命令コードのいずれかを含むバイナリコードをチェックポイントとしてもよい。
チェックポイントによって区切られたプログラムの範囲を、チェックポイント分割域とする。チェックポイント分割域には、1または複数のブロックが含まれる。ブロックは、意味のある処理を示すバイナリコード列である。そしてチェックポイントトラッカー140は、チェックポイントで区切られたバイナリコード列ごとに、バイナリコードの変換内容を、チェックポイント情報として記憶する。例えばチェックポイントトラッカー140は、チェックポイント情報をメモリ102に格納する。
アプリケーションモニタ150は、コード変換の状況やアプリケーションの実行状況を監視する。例えばアプリケーションモニタ150は、トランスレータ130によるプログラムの変換状況を監視して、変換処理の終了の有無を判断する。またアプリケーションモニタ150は、コード変換により生成されたプログラムの実行状況の監視により、そのプログラムによる処理が正常に動作しているかどうかを判断する。
アプリケーションコントローラ160は、アプリケーションモニタ150が状況の変化を抽出した際に、抽出した変化に応じて実行するプログラムを切り替える。例えばアプリケーションコントローラ160は、コード変換が終了すると、変換前のプログラム171のエミュレータ環境での実行を停止し、変換後のプログラム172のネイティブ環境での実行を開始する。またアプリケーションコントローラ160は、アプリケーションモニタ150により変換後のプログラム172が正常に動作していないことが検出されると、変換後のプログラム172のネイティブ環境での実行を停止させる。そしてアプリケーションコントローラ160は、変換前のプログラム171のエミュレータ環境での実行を再開させる。
なおアプリケーションコントローラ160は、変換後のプログラム172のネイティブ環境での実行時には、そのプログラム172に関するHDD103内のデータのスナップショットを定期的に作成する。スナップショットとは、ある特定の時点におけるHDD103内のデータを抜き出したものである。
プログラム記憶部170は、移行対象のプログラム171と、そのプログラム171にコード変換を施すことで生成されるプログラム172とを記憶する。移行対象のプログラム171は、例えば、他の記憶媒体、またはネットワーク経由でコンピュータ100に入力される。変換後のプログラム172は、トランスレータ130により生成され、プログラム記憶部170に格納される。プログラム記憶部170としては、例えばメモリ102またはHDD103の記憶領域の一部が使用される。
OS180は、コンピュータ100全体を管理する。例えば、ナレッジベース110、エミュレータ120、トランスレータ130、チェックポイントトラッカー140、アプリケーションモニタ150、アプリケーションコントローラ160、プログラム記憶部170は、OS180によって管理される。アプリケーションコントローラ160からの変換後のプログラム172の実行命令を受け取ると、コンピュータ100にプログラム172を実行させる。例えばOS180は、プログラム172を実行するプロセスを作成し、そのプロセスにプロセッサ101の処理時間を割り当てることで、コンピュータ100にプログラム172を実行させる。
なお、図5に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路もある。例えば図5では省略しているが、図5中のOS180以外の各要素は、OS180とデータや命令の受け渡しを行うことができる。また、図5にはコンピュータ100の機能を示したが、クラウドシステム20内の他のコンピュータ100a,100b,・・・も、コンピュータ100と同様の機能を有している。
次に、ナレッジベース110に格納されるナレッジ111のデータ構造について詳細に説明する。
図6は、ナレッジのデータ構造の一例を示す図である。第2の実施の形態においては、コード変換は、例えば、バイナリコードのブロック単位で行われる。コード変換の実行時は、一旦バイナリコードをパターンで抽象化する。バイナリコードのパターンでの抽象化とは、実装上のバイナリコードを、同種の処理を示す複数のバイナリコードパターンを包含するようなコード表記に変更することである。同種の処理とは、例えば同じトランスレーションアルゴリズムを適用可能な処理である。そして抽象化されたパターンごとに適切なトランスレーションアルゴリズムが選択され、そのトランスレーションアルゴリズムに従ってコード変換が実施される。このようなコード変換を実現するために、ナレッジ111は、変換前コードパターンリスト111a、トランスレーションアルゴリズムリスト111b、およびトランスレーションアルゴリズム評価テーブル111cを有する。
変換前コードパターンリスト111aには、変換前のコードを抽象化した変換前コードパターンが複数登録されている。変換前コードパターンには、それぞれ識別子(PTN1,PTN2,PTN3,・・・)が設定されている。
トランスレーションアルゴリズムリスト111bには、コード変換の変換手順を示すトランスレーションアルゴリズムが複数登録されている。トランスレーションアルゴリズムには、それぞれ識別子(AL1,AL2,AL3,・・・)が設定されている。
トランスレーションアルゴリズム評価テーブル111cには、対象パターンと適用アルゴリズムおよび、それらの組み合わせの動作実績が登録されている。対象パターンには、コード変換対象のバイナリコードが合致した変換前コードパターンの識別子が登録される。適用アルゴリズムには、コード変換に使用されたトランスレーションアルゴリズムの識別子が登録される。動作実績には、コード変換後に生成されたバイナリコードの動作の成否が登録される。例えばコード変換後のバイナリコードの正常動作が確認できた場合は、動作実績として「動作成功」が記録される。コード変換後のバイナリコードの動作が確認できていない場合は、動作実績として「確認待ち」が記録される。コード変換後のバイナリコードの動作に異常が発生した場合は、動作実績として「動作失敗」が記録される。
なおコード変換後のバイナリコードの動作が「動作失敗」となった場合には、別のトランスレーションアルゴリズムが選択され、再変換が行われる。再変換後のバイナリコードの動作が成功すれば、次に同じ変換前コードパターンに合致するコードのコード変換時には、最初から「動作成功」の実績のあるトランスレーションアルゴリズムが選択されることになる。
なお、エミュレータ120を修正した場合、トランスレーションアルゴリズム評価テーブル111cも再作成することとなる。
次に、チェックポイントトラッカー140が保存するチェックポイント情報141について詳細に説明する。
図7は、チェックポイント情報のデータ構造の一例を示す図である。図7の例では、チェックポイント情報141を、テーブル形式で表している。チェックポイント情報141には、チェックポイント番号、エミュレータ環境、ネイティブ環境、変換アルゴリズム、スナップショット実行、および実行回数の欄が設けられている。
チェックポイント番号の欄には、変換元のプログラムのチェックポイントの識別番号が設定される。各チェックポイント番号の列には、そのチェックポイントで示されるチェックポイント以後、次のチェックポイントの前に記述されたバイナリコードの情報が、ブロック単位で設定される。
エミュレータ環境の欄には、変換元のプログラムにおける、各ブロックの先頭アドレスとサイズとが設定される。
ネイティブ環境の欄には、対応する変換元のブロックのバイナリコードを変換することで得られたブロックの、変換後のプログラムにおける先頭アドレスとサイズとが設定される。
変換アルゴリズムの欄には、変換元のプログラム内のブロックのコード変換に適用したトランスレーションアルゴリズムの識別子が設定される。
スナップショット実行の欄には、変換後のブロック内のバイナリコードがネイティブ環境で実行されたことによる、メモリやHDDのデータのスナップショット取得処理の実施時刻が設定される。なおメモリやHDDのスナップショットは、任意のチェックポイントのタイミングで実施される。スナップショットを実施した時刻は、実時間もしくはシステムの持つ時間である。スナップショットは、例えば任意の世代分保存され、古いものから順に破棄される。破棄されたスナップショットが格納されていた記憶領域は開放される。スナップショットが破棄された場合、そのスナップショットの取得により設定されたスナップショットの実施時刻は、チェックポイント情報141から削除される。
実行回数の欄には、チェックポイント番号に対応する変換後のブロック内のバイナリコードの実行回数が設定される。なおコード変換のやり直しなどによりチェックポイントが変更された場合は、以前のチェックポイントのチェックポイント番号に設定された実行回数はクリアされる。
以上のようなコンピュータ100により、移行対象のプログラムの早期の実行開始を可能としつつも、移行時のみ余分なハードウェアリソースが必要で、移行完了後は必要最小限のハードウェアリソースのみの利用で済ませるようなプログラムの移行が実現できる。
図8は、第2の実施の形態におけるプログラム移行の一例を示す図である。コンピュータ100には、プログラムの実行環境として、エミュレータ環境とネイティブ環境との2つがある。プラットフォーム30上で実行されているエミュレータ120を介してプログラム171を実行する環境が、エミュレータ環境である。またプラットフォーム30によってプログラム172を実行する環境が、ネイティブ環境である。エミュレータ環境とネイティブ環境とは、メモリ102やHDD103などの資源を共有している。なお第2の実施の形態では、エミュレータ環境でのプログラム171の実行と、ネイティブ環境でのプログラム172の実行とが並行して行われることはなく、ある時刻においては、いずれか一方のプログラムのみが実行される。
図8の例では、コンピュータ100本来の動作環境(プラットフォーム30で提供される動作環境)は、プロセッサ101の種別が「cpu1」、OS180の種別が「os1」である。それに対し、移行対象のプログラム171は、プロセッサの種別が「cpu2」、OSの種別が「os2」のプラットフォーム用のバイナリコードで作成されている。そこで、エミュレータ120により、プログラム171が実行される。これにより、プログラムの再コンパイルやコード変換の完了を待たずに、クラウドシステム20において、移行対象のプログラム171の実行を早期に開始できる。
なお、プログラムを実行可能な動作環境として、プロセッサやOSの種別以外の要素が指定されている場合もある。例えば、HDDアクセス用のインタフェースの種別である。この場合、エミュレータ120は、プログラム171を実行可能な動作環境による情報処理を、プロセッサやOS以外の資源が実行する処理も含めて再現する。またトランスレータ130は、プロセッサやOS以外のコンピュータ100の資源構成にも適合したプログラム172を生成する。
またエミュレータ環境でのプログラム171の実行と並行して、トランスレータ130により、プログラム171のバイナリコードが、プラットフォーム30が直接実行可能なバイナリコードに変換される。その結果、変換後のバイナリコードで記述されたプログラム172が生成される。例えば、トランスレータ130は、ナレッジベース110内のナレッジ111を参照し、バイナリコードの変換を行う。またトランスレータ130は、バイナリ変換の適切な単位でチェックポイントを作成し、チェックポイントトラッカー140に通知する。通知を受けたチェックポイントトラッカー140は、コード変換における変換元のバイナリコードと変換後のバイナリコードの対応関係を、チェックポイント情報141に記録する。
トランスレータ130がコード変換を行っている間、アプリケーションモニタ150は、コード変換の実行状況を監視している。そしてアプリケーションモニタ150は、コード変換が完了し、プログラム172が生成されたことを検出すると、そのことをアプリケーションコントローラ160に通知する。
アプリケーションコントローラ160は、コード変換完了の通知を受けると、エミュレータ環境によるプログラム171の実行を停止させると共に、ネイティブ環境によるプログラム172の実行を開始させる。例えば、アプリケーションコントローラ160は、エミュレータ120に対してプログラム171の実行停止を指示する。またアプリケーションコントローラ160は、プラットフォーム30を提供するOSに対して、プログラム172の実行を指示する。
ネイティブ環境でのプログラム172の実行が開始されると、アプリケーションモニタ150は、プログラム172の実行状況を監視し、プログラム172の実行状況をアプリケーションコントローラ160とチェックポイントトラッカー140とに通知する。プログラム172の実行状況を受け取ったチェックポイントトラッカー140は、同一チェックポイント番号が割り当てられたブロック群ごとに、実行回数を計数する。そしてチェックポイントトラッカー140は、チェックポイント情報141における実行回数の値を更新する。
アプリケーションコントローラ160は、アプリケーションモニタ150からの通知により、プログラム172の動作結果を認識し、ナレッジベース110に動作結果を登録する。例えばアプリケーションコントローラ160は、プログラム172が正常に実行された場合、ナレッジ111に対し、プログラム171からプログラム172へのコード変換に適用されたアルゴリズムについて、動作が成功したことを登録する。
またアプリケーションコントローラ160は、プログラム172が実行されている間、所定のタイミングで、メモリ102やHDD103内のプログラム172の実行に使用されている記憶領域内のデータ33のスナップショット34を作成する。スナップショット34は、例えばHDD103に保存される。スナップショット34を作成するタイミングは、例えばチェックポイントのタイミングである。なおすべてのチェックポイントでスナップショットを作成するのではなく、例えばプログラム172の実行場所として、所定数のチェックポイントを通過したときにスナップショットを作成することができる。
またアプリケーションコントローラ160は、プログラム172が正常に動作しない場合は、変換後のプログラム172の実行を停止させ、移行対象のプログラム171の実行を再開させる。このような動作を、プログラムの切り戻しと呼ぶ。プログラムの切り戻しを行う場合、例えば、アプリケーションコントローラ160は、正常動作が確認できている最新のスナップショットのデータを、メモリ102とHDD103に書き戻す。そしてアプリケーションコントローラ160は、エミュレータ120にプログラム171の実行開始を指示する。
プログラムの切り戻しが行われると、トランスレータ130により、再度コード変換が行われ、ネイティブ環境に適合したバイナリコードを有するプログラムが再度作成される。なおコード変換を再度行う場合、トランスレータ130は、前回のコード変換時とは異なるアルゴリズムを適用して、コード変換を実行する。
このように、変換後のプログラム172が正常に動作しない場合には、自動で、エミュレータ環境でのプログラム171の実行が再開され、異なるアルゴリズムによるコード変換が行われる。これにより、信頼性の高いプログラムの生成が可能となる。
図9は、第2の実施の形態における動作環境の切り替え例を示す図である。図9では、横方向に時間軸が示されており、コード変換の処理、エミュレータ環境でのプログラムの実行処理、ネイティブ環境でのプログラムの実行処理それぞれの実行期間が、上から順に示されている。
プログラムの移行処理が開始されると、まず時刻t1において、エミュレータ環境でのコード変換前のプログラム171の実行が開始される。次に時刻t2において、プログラム171のコード変換が開始される。
時刻t3にコード変換が完了すると、その後の時刻t4において、エミュレータ環境でのプログラムの実行が停止され、ネイティブ環境でのプログラムの実行が開始される。ネイティブ環境で実行されるプログラムは、コード変換によって生成されたプログラムである。
図9の例では、ネイティブ環境でのプログラムの実行中の時刻t5に、プログラムの正常実行に対する障害が検出されている。障害が検出されると、ネイティブ環境でのプログラムの実行が停止され、エミュレータ環境でのプログラムの実行が再開される。続いて、時刻t6にコード変換処理が再開され、プログラムのコード変換が再度実行される。再実行されたコード変換では、少なくとも一部のバイナリコードについて、以前に実行したコード変換と異なるトランスレーションアルゴリズムが適用される。
時刻t7に2回目のコード変換が完了すると、その後の時刻t8において、エミュレータ環境でのプログラムの実行が停止され、ネイティブ環境でのプログラムの実行が開始される。
このように、第2の実施の形態では、コード変換が完了すると、即時に、ネイティブ環境でのプログラムの実行に切り替えられる。そして、障害発生時には、即時にエミュレータ環境でのプログラム実行を再開される。このように、エミュレータ環境でのプログラムの実行と、ネイティブ環境でのプログラムの実行との切り替えを行うことで、プログラムの実行に空き期間が発生することを抑止することができる。しかも、障害が発生した場合、異なるトランスレーションアルゴリズムでコード変換をやり直すため、最終的に信頼性の高いプログラムを生成することが可能となる。
次に、第2の実施の形態に係るプログラムの移行処理の手順について、詳細に説明する。
図10は、第2の実施の形態におけるプログラム移行処理の手順の一例を示すフローチャートである。以下の処理は、移行対象のプログラムを指定した移行指示が入力されたときに実行される。なお、以下の説明では、図8に示すプログラム171を指定した移行指示が入力されたものとする。
[ステップS101]エミュレータ120は、移行対象として指定されたプログラム171を、エミュレータ環境で実行開始する。例えばエミュレータ120は、コンピュータ100のプラットフォーム30上で、プログラム171を実行可能な動作環境を模倣する。そしてエミュレータ120は、プログラム171のバイナリコードを解釈し、プラットフォーム30で実行可能なコードに変換して、コンピュータ100のプロセッサ101に処理を実行させる。以後、エミュレータ120は、プログラム171の実行停止の指示を受けるまで、プログラム171の実行を継続する。
[ステップS102]トランスレータ130は、移行対象として指定されたプログラム171のバイナリコードの変換を開始する。コード変換処理の詳細は後述する(図11参照)。
[ステップS103]アプリケーションモニタ150は、バイナリコードの変換が完了したか否かを判断する。例えばアプリケーションモニタ150は、トランスレータ130からコード変換完了の通知を取得した場合、バイナリコードの変換が完了したと判断する。また、アプリケーションモニタ150は、例えばトランスレータ130によるバイナリコードの変換処理を停止したら、コード変換が完了したと判断する。コード変換が完了した場合、処理がステップS104に進められる。コード変換が完了していなければ、ステップS103の処理が繰り返される。
[ステップS104]アプリケーションモニタ150は、コード変換が正常に完了したか否かを判断する。アプリケーションモニタ150は、例えばトランスレータ130が、正常終了を示すメッセージを出力して終了した場合、プログラムの終了を示すコードであれば、コード変換が正常に完了したものと判断する。またアプリケーションモニタ150は、例えばトランスレータ130が、エラーメッセージを出力して終了した場合、コード変換は正常に完了していないと判断する。コード変換が正常に完了した場合、処理がステップS106に進められる。コード変換が正常に完了していない場合(異常終了の場合)、処理がステップS105に進められる。
[ステップS105]異常終了の場合、アプリケーションモニタ150は、プログラムの移行を指示したユーザに、ネイティブ環境への移行失敗を通知する。例えば、アプリケーションモニタ150は、ユーザが入力したプログラムの移行指示への応答として、移行失敗のメッセージを出力する。出力されたメッセージは、例えばユーザが使用する端末装置に表示される。その後、プログラム移行処理は終了する。
[ステップS106]コード変換が正常に終了した場合、アプリケーションコントローラ160は、ネイティブ環境への切り替え処理を実行する。ネイティブ環境への切り替え処理により、プログラム171のエミュレータ環境での実行が停止され、プログラムのネイティブ環境での実行が開始される。この処理の詳細は後述する(図12参照)。
[ステップS107]アプリケーションコントローラ160は、所定のタイミングでHDD103内の所定領域のスナップショットを作成する。例えば、アプリケーションコントローラ160は、HDD103の記憶領域うち、少なくともプログラム172が使用している記憶領域のスナップショットを作成する。スナップショットのタイミングは、例えば、前回のスナップショットから所定期間経過後に、プログラム172の実行箇所がチェックポイントに達したタイミングである。なお、スナップショットの取得タイミングでは、任意に設定できる。例えば、プログラム172の実行箇所がチェックポイントに達するごとにスナップショットを作成してもよい。
[ステップS108]アプリケーションコントローラ160は、ネイティブ環境におけるプログラム172の実行に異常が発生していないかどうかを判断する。例えば、アプリケーションコントローラ160は、プログラム172が正常応答時に出力することになっているコードを出力せずに終了した場合、異常が発生したと判断する。プログラム172の実行に異常が発生した場合、処理がステップS109に進められる。プログラム172の実行に異常が発生していなければ、処理がステップS111に進められる。
[ステップS109]プログラム172の実行に異常が発生した場合、アプリケーションコントローラ160は、直近のスナップショットに基づいて、そのスナップショット作成時点におけるHDD103の状態を復元する。そしてアプリケーションコントローラ160は、ネイティブ環境でのプログラム172の実行を停止し、エミュレータ環境におけるプログラム171の実行を再開する。このとき、ネイティブ環境でのプログラム172の実行が終了していなければ、アプリケーションコントローラ160は、プログラム172の実行を強制的に終了する。
なお、エミュレータ環境でのプログラム171の実行の再開を、オペレータからの指示を待って行うこともできる。例えばアプリケーションコントローラ160は、オペレータが使用する端末装置に、エミュレータ環境でのプログラム171の再実行準備が完了したことを表示する。オペレータが、再実行を指示する操作を行うと、アプリケーションコントローラ160は、エミュレータ環境でのプログラム171の再実行を開始する。
[ステップS110]アプリケーションコントローラ160は、異常が発生したことを記録する。例えばアプリケーションコントローラ160は、ナレッジベース110内のトランスレーションアルゴリズム評価テーブル111cに、異常が発生したときに実行していた部分のトランスレーションアルゴリズムの動作実績として、「動作失敗」を登録する。その後、処理がステップS102に進められ、コード変換が再度実行される。
[ステップS111]プログラム172の実行で異常が発生していない場合、アプリケーションコントローラ160は、プログラム172の実行を開始してから一定時間以上経過したか否かを判断する。一定時間以上経過している場合、処理がステップS112に進められる。一定時間以上経過していなければ、処理がステップS107に進められる。
[ステップS112]プログラム172の実行を開始してから、異常を検出せずに一定期間以上経過した場合、アプリケーションコントローラ160は、エミュレータ環境でプログラム171を実行するために確保されている資源を、すべて開放する。例えば、プログラム171を実行するプロセスが占有していたメモリ領域が開放される。その後、プログラム移行処理が終了する。
このようにして、移行対象のプログラム171のエミュレータ環境での実行と、変換後のプログラム172のネイティブ環境での実行とを、相互に切り替えながら、信頼性の高いコード変換を実現することができる。コード変換は、例えばナレッジベース110に登録されたナレッジ111に基づいて実行される。
以下、コード変換処理について詳細に説明する。
図11は、コード変換処理の手順の一例を示すフローチャートである。
[ステップS121]トランスレータ130は、移行対象のプログラム171の複数のバイナリコードを読み込み、コードパターンを認識する。例えばトランスレータ130は、プログラム171の先頭から順にバイナリコードをブロック単位で読み込む。そしてトランスレータ130は、読み込んだ実装レベルのバイナリコードのコードパターンを認識して、そのパターンを抽象化する。
[ステップS122]トランスレータ130は、抽出した複数のバイナリコードを、そのバイナリコードのコードパターン用のトランスレーションアルゴリズムで変換する。例えばトランスレータ130は、ナレッジベース110を参照し、変換前コードパターンリスト111aから、読み出したバイナリコードから抽象化したコードパターンに合致する変換前コードパターンを検出する。次にトランスレータ130は、トランスレーションアルゴリズム評価テーブル111cを参照し、検出した変換前コードパターンに対応付けられた1以上のトランスレーションアルゴリズムを抽出する。そしてトランスレータ130は、抽出したトランスレーションアルゴリズムのうちの1つを、適用するアルゴリズムに決定する。例えばトランスレータ130は、複数のトランスレーションアルゴリズムが抽出された場合、動作実績において「動作成功」となっているトランスレーションアルゴリズムを最優先で、適用するアルゴリズムに決定する。トランスレータ130は、動作実績が「動作成功」のトランスレーションアルゴリズムがなければ、確認待ちのトランスレーションアルゴリズムを、適用するアルゴリズムに決定する。適用するトランスレーションアルゴリズムが決定すると、トランスレータ130は、そのトランスレーションアルゴリズムを、トランスレーションアルゴリズムリスト111bから抽出する。そしてトランスレータ130は、抽出したバイナリコードを、抽出したトランスレーションアルゴリズムに従って別のバイナリコードに変換する。
[ステップS123]トランスレータ130は、移行対象のプログラム171内のすべてのバイナリコードを変換したか否かを判断する。すべてのバイナリコードの変換が完了した場合、処理がステップS126に進められる。未変換のバイナリコードがある場合、処理がステップS124に進められる。
[ステップS124]トランスレータ130は、一定量のバイナリコードの変換を行ったか否かを判断する。例えばトランスレータ130は、変換後にチェックポイントトラッカー140への通知を行っていないコード変換により変換された、変換前のバイナリコードの数が、予め設定された値以上となった場合、一定量のバイナリコードの変換を行ったと判断する。一定量のバイナリコードの変換が行われた場合、処理がステップS125に進められる。また一定量のバイナリコードの変換が行われていなければ、処理がステップS121に進められる。
[ステップS125]トランスレータ130は、変換内容が未通知の一定量のバイナリコードの変換について、変換内容を、チェックポイントトラッカー140に通知する。通知される変換内容は、例えば、コード変換前のバイナリコードとコード変換後のバイナリコードとの対応関係、および適用したトランスレーションアルゴリズムである。通知では、コード変換前のバイナリコードは、例えば移行対象のプログラム内でのそのバイナリコードの先頭アドレスとサイズとによって特定される。また、通知では、コード変換後のバイナリコードは、例えば移行対象のプログラム内でのそのバイナリコードの先頭アドレスとサイズとによって特定される。通知を受けたチェックポイントトラッカー140は、通知内容を、チェックポイント情報141(図7参照)に登録する。その後、処理がステップS121に進められる。
[ステップS126]トランスレータ130は、アプリケーションモニタ150に、コード変換の完了を通知する。このとき、トランスレータ130は、コード変換が正常終了した場合、例えば、正常終了を示すメッセージをアプリケーションモニタ150に送信する。
このようにして、コード変換を行うと共に、チェックポイント情報141に変換内容を記録することができる。
次に、ネイティブ環境でのプログラム172への切り替え処理の詳細について説明する。
図12は、ネイティブ環境への切り替え処理の手順の一例を示すフローチャートである。
[ステップS131]アプリケーションコントローラ160は、エミュレータ120による移行対象のプログラム171の次の実行位置が、チェックポイントとして指定されたバイナリコードの位置か否かを判断する。チェックポイントのバイナリコードを実行する場合、処理がステップS132に進められる。チェックポイントに達していなければ、ステップS131の処理が繰り返される。
[ステップS132]アプリケーションコントローラ160は、メモリ102またはHDD103が更新処理中か否かを判断する。更新処理中であれば、ステップS132の処理が繰り返される。更新処理中でなければ、ステップS133に処理が進められる。
[ステップS133]アプリケーションコントローラ160は、エミュレータ環境のOSやプロセッサの状態を保存し、エミュレータ120を停止させる。例えばアプリケーションコントローラ160は、エミュレータ120によって模倣されている仮想のプロセッサ内のレジスタの内容を、メモリ102またはHDD103に書き出す。そしてアプリケーションコントローラ160は、エミュレータ120に対し、処理の停止を指示する。これにより、エミュレータ環境が静止状態となる。
[ステップS134]アプリケーションコントローラ160は、エミュレータ環境を破棄する。例えばアプリケーションコントローラ160は、プログラム171の実行プロセス、およびエミュレータ120が占有していたOS180の環境を開放する。例えばプログラム171の実行プロセス、およびエミュレータ120に割り当てられていたメモリ空間が開放される。
[ステップS135]アプリケーションコントローラ160は、ネイティブ環境のメモリ領域に、変換後のプログラム172を展開する。
[ステップS136]アプリケーションコントローラ160は、ステップS133で保存したOSやプロセッサの状態を読み込み、ネイティブ環境向けにプログラムカウンタなどの変更を行う。例えばアプリケーションコントローラ160は、エミュレータ環境静止時のエミュレータ120で模倣されたプロセッサ内のレジスタの値を、ネイティブ環境のプロセッサ101のレジスタに設定する。このときアプリケーションコントローラ160は、プロセッサ101のプログラムカウンタに、移行対象のプログラム171の次の実行位置となるバイナリコードに対応する、変換後のプログラム172内のバイナリコードの格納アドレスを設定する。
なお移行対象のプログラム171のバイナリコードと、変換後のプログラム172のバイナリコードとの対応関係は、チェックポイントトラッカー140に問い合わせることで認識できる。例えばアプリケーションコントローラ160は、エミュレータ環境のプログラムカウンタに示されたアドレスに対応する移行対象のプログラムの位置を指定して、対応アドレス取得要求をチェックポイントトラッカー140に送信する。チェックポイントトラッカー140は、チェックポイント情報141を参照し、移行対象のプログラム171の指定された位置に対応する、変換後のプログラム172の位置を特定する。そしてチェックポイントトラッカー140は、特定した位置(例えば、プログラム172の先頭からのオフセット)を、アプリケーションコントローラ160に通知する。アプリケーションコントローラ160は、変換後のプログラム172が展開されたメモリ空間内の、通知された位置に対応するアドレスを、プログラム172実行時のプログラムカウンタに設定する。
[ステップS137]アプリケーションコントローラ160は、OS180に対して、ネイティブ環境での変換後のプログラム172の実行命令を出力する。するとOS180が、プログラム172の実行を開始する。
このようにして、エミュレータ環境でのプログラム171の実行状態をネイティブ環境に再構築し、移行対象プログラムの静止時の位置に対応する変換後のプログラム172の位置から、ネイティブ環境でのプログラム172の実行を開始することができる。
以上説明したように、第2の実施の形態では、プログラム171の移行処理が開始すると、エミュレータ120によって、コンピュータ100における移行対象のプログラム171の実行を早期に開始することができる。そしてエミュレータ120によるプログラム171の実行と並行して、トランスレータ130によるコード変換を行い、コード変換が完了すると、自動で、ネイティブ環境での変換後のプログラム172の実行に切り替えられる。これにより、移行処理完了後は、エミュレータ120のような余分な処理を介在させずにプログラム172を実行することができ、効率的な処理が実現される。これにより、エミュレータ120を利用することによるシステム環境の移行の準備期間の短さを維持しつつ、プログラムの移行処理完了後は、エミュレータ120を利用し続けなくて済むようにできる。
さらに、プログラムの移行処理完了後は、移行後のプログラム172の実行に使用する資源量が少なくて済む。
図13は、第2の実施の形態におけるプログラムの移行に伴うハードウェア資源の消費量の推移の一例を示す図である。図13では、横軸に移行フェーズを示し、縦軸に消費するハードウェア資源の量を示している。なお、ハードウェア資源の量は、プロセッサ、メモリ、ディスクなどのリソースの消費量を、抽象的なハードウェアの指標として表現したものである。
プログラムの移行処理前は、移行対象のプログラム171は、そのプログラム171の動作環境を、プラットフォームとして有するコンピュータにより、ネイティブ環境で実行される。従って、エミュレータを介した実行に比べて、消費するハードウェア資源は少なくて済む。
その状態からプログラム171の移行処理を開始すると、移行先のコンピュータ100では、まず、エミュレータ120によって移行対象のプログラム171が実行される。エミュレータ120は、コンピュータ100とは別のプラットフォームの動作を模倣するという複雑な処理を行う。そのため、ネイティブ環境に比べて多くの資源を消費する。その後、コンピュータ100では、プログラム171のコード変換が開始され、さらに多くの資源が消費される。
コード変換処理が完了すると、移行先のコンピュータ100においても、変換後のプログラム172がネイティブ環境で実行される。そのため、プログラムの移行処理が完了後は、ネイティブ環境により、少ない消費資源でプログラム172を実行することができる。
このように、プログラムの移行後の消費資源の量を抑止することで、資源の効率的な利用が可能となる。特に企業が企業内に閉じたシステム上で利用していたアプリケーションプログラムを、クラウドシステムに移行させた場合、企業はコンピュータシステムの保有や保守に係る費用や手間を削減できる。またクラウドシステムでは、例えばユーザが必要なときに必要な分だけのシステム資源を利用し、利用した分だけ課金される。そのため、第2の実施の形態の技術を用いたプログラムをクラウドシステムに移行すれば、企業がクラウドシステムを利用する際に係る費用を削減できる。
なお、プログラムの移行先が、例えば自社保有システムであれば、クラウドシステムのような課金の問題は発生しない。しかし、例えば第2の実施の形態の技術を適用せずに、エミュレータを利用したプログラムの移行を行った場合、エミュレータも動作させ続けることとなる。この場合、余裕を持った処理能力のコンピュータを購入し保守し続ける分の費用がかかる。自社保有システムの場合であっても、第2の実施の形態の技術を適用すれば、移行処理が完了後は、少ないハードウェア資源でシステムを運用でき、保守費用などの運用コストを削減できる。
また、第2の実施の形態では、プログラムの実行環境をエミュレータ環境からネイティブ環境へ切り替える場合、エミュレータ環境を停止したときのプログラム171の実行箇所に対応するプログラム172の位置から、ネイティブ環境で処理が実行される。これにより、プログラム171の処理からプログラム172の処理への切り替え時にも、処理のやり直しや、処理のスキップなどが発生せず、効率的な切り替えが行われる。
さらに、第2の実施の形態では、変換後のプログラム172をネイティブ環境で実行開始後に障害が発生した場合、即座にエミュレータ環境による移行対象のプログラム171の実行が再開される。これにより、移行先のコンピュータ100によるプログラム171またはプログラム172の実行による情報処理サービスの提供を、安定して行うことができる。
しかも、変換後のプログラム172をネイティブ環境で実行開始後に障害が発生した場合には、異なる変換アルゴリズムによるコード変換が行われる。これにより、信頼性の高いプログラムへのコード変換を自動で行うことができる。
〔第3の実施の形態〕
次に第3の実施の形態について説明する。第3の実施の形態は、並行稼働方式により、プログラムの動作環境をエミュレータ環境からネイティブ環境へ変更するものである。並行稼働方式は、プログラムの動作環境の変更の過程で、エミュレータ環境でのプログラムの実行と、ネイティブ環境でのプログラムの実行とを並行して行うものである。以下、第3の実施の形態における第2の実施の形態との相違点を説明する。なお、第2の実施の形態と同じ要素に同一の符号を付し、説明を省略する。
図14は、第3の実施の形態におけるプログラム移行の一例を示す図である。第3の実施の形態では、アプリケーションコントローラ161の処理が第2の実施の形態と異なる。第3の実施の形態におけるアプリケーションコントローラ161は、トランスレータ130によるコード変換が完了した後も、エミュレータ環境でのプログラム171の実行を続行する。これにより、エミュレータ環境とネイティブ環境とで、プログラム171,172が並行稼働する。
並行稼働する場合、メモリ102やHDD103などの資源は共有されない。すなわち、エミュレータ環境によるプログラム171の実行に使用するメモリ102やHDD103の記憶領域と、ネイティブ環境によるプログラム172の実行に使用するメモリ102やHDD103の記憶領域とは、別領域となる。アプリケーションコントローラ161は、エミュレータ環境とネイティブ環境とでプログラムを並行動作させている間、メモリ102やHDD103の内容を比較して正常に稼働していることを確認する。比較の結果ネイティブ環境での異常を検出した場合、トランスレータ130は、再度コード変換を試みる。なお、異常発生時の異常発生原因は、ナレッジベース110に登録される。そこでトランスレータ130は、再トランスレーション時に、ナレッジベース110内のナレッジ111を参照して前回とは異なる変換アルゴリズムでコード変換を実施する。このように、バイナリトランスレーションの情報が順次蓄積されて、次第にコード変換の精度を向上させることができる。
図15は、第3の実施の形態における動作環境の切り替え例を示す図である。図15では、横方向に時間軸が示されており、コード変換の処理、メモリ・HDD同期化、エミュレータ環境でのプログラムの実行処理、ネイティブ環境でのプログラムの実行処理それぞれの実行期間が、上から順に示されている。
プログラムの移行処理が開始されると、まず時刻t11において、エミュレータ環境でのコード変換前のプログラム171の実行が開始される。次に時刻t12において、プログラム171のコード変換が開始されると共に、メモリ102とHDD103との同期化が行われる。メモリ102とHDD103との同期化は、エミュレータ環境においてプログラム171の実行に使用している記憶領域に格納されているデータのコピーを、ネイティブ環境で使用する記憶領域に格納する処理である。
時刻t13にコード変換が完了し、その後の時刻t14にメモリ・HDDの同期化が完了している。コード変換とメモリ・HDDの同期化が共に完了した後、時刻t15にネイティブ環境でのプログラム172の実行が開始される。
エミュレータ環境でのプログラム171の実行と、ネイティブ環境でのプログラム172の実行とは、所定の期間だけ、並行して行われる。その間、所定の間隔で、エミュレータ環境とネイティブ環境とにおける、メモリ102とHDD103とに格納されたデータの比較処理が行われる。比較処理により、メモリ102とHDD103とに格納されたデータが一致している間は、変換後のプログラム172がネイティブ環境で正常に稼働していると判断される。時刻t16に、変換後のプログラム172がネイティブ環境で正常に稼働している期間が所定の期間に達すると、エミュレータ環境でのプログラム171の実行が停止される。
メモリ102やHDD103内のデータの比較のため、例えば、所定のタイミングでスナップショットを作成してもよい。その場合、スナップショットのデータで比較が行われる。これにより、データの比較によりプログラムに基づく処理の進行が停滞するのを抑止できる。
次に、第3の実施の形態におけるプログラム移行処理の手順について説明する。
図16は、第3の実施の形態におけるプログラム移行処理の手順の一例を示すフローチャートである。
[ステップS201]エミュレータ120は、移行対象として指定されたプログラム171を、エミュレータ環境で実行開始する。
[ステップS202]トランスレータ130は、移行対象として指定されたプログラム171のバイナリコードの変換を開始する。なお、この処理の詳細は、図11を参照して説明した通りである。
[ステップS203]アプリケーションコントローラ161は、エミュレータ環境で使用するメモリおよびHDDの記憶領域と、ネイティブ環境で使用するメモリおよびHDDの記憶領域との内容の同期化を開始する。例えば、アプリケーションコントローラ161は、ネイティブ環境でプログラム172の実行に使用する記憶領域を、メモリ102とHDD103とに確保する。そしてアプリケーションコントローラ161は、エミュレータ環境用の記憶領域と、ネイティブ環境用に確保した記憶領域との同期化処理を行う。同期化処理により、エミュレータ環境用の記憶領域に格納されているデータのコピーが、ネイティブ環境用に確保した記憶領域に格納される。
[ステップS204]アプリケーションモニタ150は、バイナリコードの変換が完了したか否かを判断する。コード変換が完了した場合、処理がステップS205に進められる。コード変換が完了していなければ、ステップS204の処理が繰り返される。
[ステップS205]アプリケーションモニタ150は、コード変換が正常に完了したか否かを判断する。コード変換が正常に完了した場合、処理がステップS207に進められる。コード変換が正常に完了していない場合(異常終了の場合)、処理がステップS206に進められる。
[ステップS206]異常終了の場合、アプリケーションモニタ150は、プログラムの移行を指示したユーザに、ネイティブ環境への移行失敗を通知する。その後、プログラム移行処理は終了する。
[ステップS207]アプリケーションコントローラ161は、メモリとHDDとの内容の同期化が完了したか否かを判断する。同期化が完了した場合、処理がステップS208に進められる。同期化が完了していなければ、ステップS207の処理が繰り返される。
[ステップS208]アプリケーションコントローラ161は、エミュレータ環境でのプログラム171の実行位置がチェックポイントに達すると、ネイティブ環境でのプログラム172の実行を開始する。この際、エミュレータ環境でのプログラム171の実行は継続したままである。この場合、外部との通信は、例えばエミュレータ環境でプログラム171を実行するプロセスが行う。すなわち、移行対象のプログラム171または変換後のプログラム172を実行することで提供されるサービスへの要求は、プログラム171を実行するプロセスに入力される。またその要求への応答は、プログラム171を実行するプロセスから出力される。
[ステップS209]アプリケーションコントローラ161は、所定のタイミングで、メモリとHDDの内容を比較する。例えばアプリケーションコントローラ161は、エミュレータ環境でのプログラム171の実行位置がチェックポイントに達すると、エミュレータ環境とネイティブ環境との双方で、メモリやHDD内のデータのスナップショットを作成する。そしてアプリケーションコントローラ161は、作成したスナップショットを用い、プログラム171の実行で使用されている記憶領域のデータと、プログラム172の実行で使用されている記憶領域のデータとを比較する。なお、この処理の詳細は後述する(図17〜図19参照)。
[ステップS210]アプリケーションコントローラ161は、並行したプログラムの処理に異常が発生せず、かつ比較の結果が正常かどうかを判断する。例えばアプリケーションコントローラ161は、アプリケーションモニタ150から、移行対象のプログラム171または変換後のプログラム172の異常終了の通知を受け取った場合、異常が発生したと判断する。またアプリケーションコントローラ161は、ステップS209の比較の結果、エミュレータ環境の記憶領域内のデータとネイティブ環境の記憶領域のデータとが不一致であれば、比較結果を異常と判断する。異常が検出されなければ、処理がステップS213に進められる。異常が検出された場合、処理がステップS211に進められる。
[ステップS211]異常が検出された場合、アプリケーションコントローラ161は、ネイティブ環境でのプログラム172の実行を停止する。
[ステップS212]アプリケーションコントローラ161は、異常が発生したことを記録する。その後、処理がステップS202に進められる。
[ステップS213]異常が発生していない場合、アプリケーションコントローラ161は、プログラム172の実行を開始してから一定時間以上経過したか否かを判断する。一定時間以上経過している場合、処理がステップS214に進められる。一定時間以上経過していなければ、処理がステップS209に進められる。
[ステップS214]プログラム172の実行を開始してから、異常を検出せずに一定時間以上経過した場合、アプリケーションコントローラ161は、エミュレータ環境でのプログラム171の実行を停止する。そしてアプリケーションコントローラ161は、エミュレータ環境でプログラム171を実行するために確保されている資源を、すべて開放する。アプリケーションコントローラ161は、プログラム171またはプログラム172の実行により提供されるサービスに対する外部からの通信先は、ネイティブ環境でプログラム172を実行しているプロセスに切り替えられる。
このようにして、並行稼働状態を経たプログラムの移行が行われる。並行稼働状態の間に、エミュレータ環境で実行されているプログラム171の実行状況と、ネイティブ環境で実行されているプログラム172の実行状況との同一性が、メモリやHDDに記憶されたデータの同一性によって判断される。これにより、変換後のプログラム172の信頼性が確認できた後に、プログラム172のネイティブ環境での単独動作の状態に移行することができる。
次に、メモリとHDD内のデータの比較処理について詳細に説明する。
図17は、メモリとHDD内のデータの比較処理の一例を示す図である。図17では、比較処理の時間進行に伴う処理の遷移を示している。
エミュレータ環境では、プログラム171の実行により、エミュレータ環境用のメモリ領域41とHDD記憶領域42とにアクセスが行われる。他方ネイティブ環境では、プログラム172の実行により、ネイティブ環境用のメモリ領域51とHDD記憶領域52とにアクセスが行われる。各記憶領域のへのアクセスには、書き込みアクセスと読み出しアクセスとがある。記憶領域に書き込みアクセスが行われた場合、その記憶領域の内容が変更される。
スナップショットの作成タイミングになると、それぞれの動作環境において、スナップショットが作成される。例えばエミュレータ環境では、メモリ領域41内のデータのスナップショット43が作成される。またHDD記憶領域42内のデータのスナップショット44も作成される。ネイティブ環境では、メモリ領域51内のデータのスナップショット53が作成される。またHDD記憶領域52内のデータのスナップショット54も作成される。スナップショットを作成している期間中は、プログラムの進行が静止している。
スナップショットの作成が完了すると、エミュレータ環境とネイティブ環境との双方において、プログラムの実行が再開される。プログラムの実行が再開されることで、エミュレータ環境用のメモリ領域41とHDD記憶領域42へのアクセスや、ネイティブ環境用のメモリ領域51とHDD記憶領域52とにアクセスが再開される。
スナップショットには、プログラムの実行に基づくアクセスは行われない。そこで、作成されたスナップショット同士でデータが比較される。例えば、エミュレータ環境用のメモリ領域41のスナップショット43と、ネイティブ環境用のメモリ領域51のスナップショット53とが比較される。またエミュレータ環境用のHDD記憶領域42のスナップショット44と、ネイティブ環境用のHDD記憶領域52のスナップショット54とが比較される。比較の結果、メモリ内のデータまたはHDD内のデータの少なくとも一方に不一致があれば、異常が発生したものと判断される。異常が発生すると、異常の発生箇所が記録されると共に、コード変換がやり直される。
なお、メモリおよびHDD内のデータを比較する場合、比較時点における各プログラムの進行度合いを揃えるため、先に進んだ方の処理の待ち合わせが行われる。
図18は、比較のための待ち合わせの一例を示す図である。アプリケーションコントローラ161は、例えば、メモリやディスクの更新時期に差異が出ないように、チェックポイントごとに待ち合わせを行うように、各プログラムの進行を制御する。この場合、外部入出力や割り込み処理は、常にチェックポイントとなるようにする。
多くの場合、ネイティブ環境の方がエミュレーションによるオーバヘッドがないため動作が早く、処理が先に終了することが期待される。この場合、ネイティブ環境でのプログラム172の実行を、チェックポイントで一時停止させることで、待ち合わせを行う。なお、処理内容によっては、エミュレータ環境でのプログラム171の実行の方が、処理が先行する場合もあり得る。その場合、エミュレータ環境によるプログラム171の実行を一時停止することで、待ち合わせが行われる。
図19は、データ比較処理の手順を示すフローチャートである。
[ステップS221]アプリケーションコントローラ161は、エミュレータ環境またはネイティブ環境のいずれかで実行しているプログラムの実行位置がチェックポイントとなっている処理を、次に実行するか否かを判断する。チェックポイントを次に実行する場合、処理がステップS222に進められる。チェックポイントを実行する段階に達していない場合、ステップS221の処理が繰り返される。
[ステップS222]アプリケーションコントローラ161は、プログラムの次の実行位置がチェックポイントとなった環境におけるそのプログラムの実行を、一時停止状態にする。
[ステップS223]アプリケーションコントローラ161は、プログラムの実行位置がチェックポイントとなった環境とは別の環境におけるプログラムの実行が、同じチェックポイントを、次に実行するか否かを判断する。チェックポイントを次に実行する場合、処理がステップS224に進められる。チェックポイントを実行する段階に達していない場合、ステップS223の処理が繰り返される。
[ステップS224]アプリケーションコントローラ161は、プログラムの次の実行位置がチェックポイントとなった環境におけるそのプログラムの実行を、一時停止状態にする。
[ステップS225]アプリケーションコントローラ161は、エミュレータ環境とネイティブ環境とのそれぞれについて、プログラムの実行に使用している、メモリとHDD内の記憶領域のスナップショットを取得する。
[ステップS226]アプリケーションコントローラ161は、エミュレータ環境とネイティブ環境とにおけるプログラムの実行を再開する。
[ステップS227]アプリケーションコントローラ161は、スナップショットを用いて、エミュレータ環境とネイティブ環境とにおけるプログラムの実行により、メモリとHDDとに格納されたデータを比較する。
このようにして、エミュレータ環境で移行対象のプログラム171を実行することでメモリとHDDに格納されたデータと、エミュレータ環境で変換後のプログラム172を実行することでメモリとHDDに格納されたデータとを比較することができる。
以上説明したようにして、第3の実施の形態では、第2の実施の形態と同様に、コンピュータ100における移行対象のプログラム171の実行を早期に開始することができると共に、移行処理完了後は、効率的な処理が実現される。これにより、エミュレータ120を利用することによるシステム環境の移行の準備期間の短さを維持しつつ、プログラムの移行処理完了後は、エミュレータ120を利用し続けなくて済むようにできる。
さらに、第3の実施の形態においても、第2の実施の形態と同様に、プログラムの移行処理完了後は、移行後のプログラム172の実行に使用する資源量が少なくて済む。
図20は、第3の実施の形態におけるプログラムの移行に伴うハードウェア資源の消費量の推移の一例を示す図である。図20では、図13と同様に、横軸に移行フェーズを示し、縦軸に消費するハードウェア資源の量を示している。
プログラムの移行処理前は、移行対象のプログラム171は、そのプログラム171の動作環境を、プラットフォームとして有するコンピュータにより、ネイティブ環境で実行される。従って、エミュレータを介した実行に比べて、消費するハードウェア資源は少なくて済む。
その状態からプログラム171の移行処理を開始すると、移行先のコンピュータ100では、まず、エミュレータ120によって移行対象のプログラム171が実行される。この場合、エミュレータ120によるエミュレート処理の分、ネイティブ環境に比べて多くの資源を消費する。その後、コンピュータ100では、プログラム171のコード変換が開始され、さらに多くの資源が消費される。
コード変換処理が完了すると、移行先のコンピュータ100において、エミュレータ環境でのプログラム171の実行と並行して、変換後のプログラム172がネイティブ環境で実行される。また定期的に、メモリやHDDに格納したデータの比較処理が行われる。そのため、さらに多くの資源が消費される。
プログラムの並行稼働により変換後のプログラム172の信頼性が確認できた後は、エミュレータ環境でのプログラム171の実行が停止されると共に、データの比較処理も終了する。その結果、プログラムの移行処理の完了後は、ネイティブ環境により、少ない消費資源でプログラム172を実行することができる。
このように、プログラムの移行後の消費資源の量を抑止することで、資源の効率的な利用が可能となる。クラウドシステムにおける資源の利用量に応じて課金される場合、消費する資源量の抑止により、クラウドシステムの使用料が削減される。
また第3の実施の形態では、所定期間、エミュレータ環境とネイティブ環境との双方で、プログラムを並行して実行することで、変換後のプログラム172が正常に動作することを確認した後に、変換後のプログラム172を用いた運用へ移行することができる。これにより、単に変換後のプログラム172が支障なく実行できるというだけではなく、移行対象のプログラム171と同じ処理結果が得られることが確認できる。その結果、変換後のプログラム172の信頼性をより高めることができる。
しかも、変換後のプログラム172をネイティブ環境で実行開始後に障害が発生した場合には、異なる変換アルゴリズムによるコード変換が行われる。これにより、信頼性の高いプログラムへのコード変換を自動で行うことができる。
なお2つの環境でプログラム171,172を並行稼働させることで、並行稼働中に変換後のプログラム172で不具合が見つかっても、他の装置との通信は、エミュレータ環境でのプログラムの実行はそのまま継続する。そのため、変換後のプログラム172で不具合があった場合でも、ユーザからの要求に対する応答の遅延が生じることはない。
また第3の実施の形態では、変換後のプログラム172の正常動作を確認するために、メモリ102やHDD103に格納されたデータを比較しているが、他の方法で正常動作を確認してもよい。例えば、エミュレータ環境とネイティブ環境とのそれぞれに入力された処理要求に対する応答内容を比較して、正常に動作しているかどうかを確認することもできる。
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。