(57)【要約】  移行先のコンピュータでプログラムを早期に実行を開始しながらも、移行処理完了後にはプログラムを効率的に実行可能とする。  第１の実行手段（２）は、第１のプログラム（１ａ）を実行可能な第１の動作環境における情報処理を模倣することで、第１のプログラム（１ａ）を実行する。生成手段（３）は、情報処理システム（ＣＰ）が有する第２の動作環境で実行可能であり、第１のプログラム（１ａ）と同じ処理結果を得ることができる第２のプログラム（１ｂ）を、第１のプログラム（１ａ）の実行と並行して生成する。第２の実行手段（４）は、第２のプログラム（１ｂ）の生成完了後、第１の実行手段（２）による第１のプログラム（１ａ）の実行を停止させるとともに、第２のプログラム（１ｂ）を実行する。
2014155684.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行し、
前記コンピュータが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成し、
前記第２のプログラムの生成完了後、前記第１のプログラムの実行を停止するとともに、前記第２のプログラムを実行する、
処理を実行させるプログラム。
【請求項２】
前記第２のプログラムの生成では、前記第１のプログラム内に記述されたバイナリコードを、前記第２の動作環境で実行可能なバイナリコードに変換することを特徴とする請求の範囲第１項記載のプログラム。
【請求項３】
前記コンピュータに、さらに、
前記第２のプログラムが正常に動作しない場合、前記第１のプログラムを実行すると共に、該第２のプログラムの生成に利用したものとは異なる生成アルゴリズムにより、前記第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第３のプログラムを生成する、
処理を実行させることを特徴とする請求の範囲第１項または第２項記載のプログラム。
【請求項４】
前記第１のプログラムの実行停止および前記第２のプログラムの実行では、停止した前記第１のプログラムの最後に実行されたコードの次のコードに対応する、前記第２のプログラム内のコードから、前記第２のプログラムの実行を開始することを特徴とする請求の範囲第１項乃至第３項のいずれかに記載のプログラム。
【請求項５】
前記第１のプログラムの実行停止および前記第２のプログラムの実行では、前記第１のプログラムと前記第２のプログラムを並行して実行した後、前記第１のプログラムを停止することを特徴とする請求の範囲第１項乃至第３項のいずれかに記載のプログラム。
【請求項６】
前記コンピュータに、さらに、
前記第１のプログラムと前記第２のプログラムを並行して実行している間に、前記第１のプログラムの処理結果と前記第２のプログラムの処理結果とを比較し、比較結果に基づいて前記第２のプログラムに基づく情報処理が正常に実行されているか否かを判定する、
処理を実行させることを特徴とする請求の範囲第５項記載のプログラム。
【請求項７】
前記第１のプログラムの実行停止および前記第２のプログラムの実行では、前記第２のプログラムに基づく情報処理が所定期間以上正常に動作したことを確認後、前記第１のプログラムの実行を停止することを特徴とする請求の範囲第５項または第６項記載のプログラム。
【請求項８】
情報処理システムであって、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行する第１の実行手段と、
前記情報処理システムが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成する生成手段と、
前記第２のプログラムの生成完了後、前記第１の実行手段による前記第１のプログラムの実行を停止させるとともに、前記第２のプログラムを実行する第２の実行手段と、
を有する情報処理システム。
【請求項９】
情報処理システムが、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行し、
前記情報処理システムが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成し、
前記第２のプログラムの生成完了後、前記第１のプログラムの実行を停止するとともに、前記第２のプログラムを実行する、
プログラム移行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行プログラムのコードを変換するプログラム、情報処理システム、およびプログラム移行方法に関する。
【背景技術】
【０００２】
コンピュータシステムでは、プログラムの移行（マイグレーション）が行われる場合がある。プログラムの移行とは、あるコンピュータで実行されているプログラムを、別のコンピュータで実行できるようにすることである。例えば、プログラムを実行しているコンピュータのハードウェア性能が不足した場合に、高性能なコンピュータにプログラムが移行される。また、ローカルに設置されたコンピュータで実行していたプログラムを、クラウドシステムに実行させる場合にも、クラウドシステム内のコンピュータにプログラムが移行される。【０００３】
なおプログラムには、そのプログラムを正常に実行できる動作環境の指定がある。移行先のコンピュータのプラットフォームが、プログラムに指定された動作環境に適合していれば、移行先のコンピュータにプログラムをインストールすることで、プログラムを移行できる。プラットフォームとは、プログラムの動作基盤となる、ＣＰＵ（Central Processing Unit）やＯＳ（Operating System）などのハードウェア資源やソフトウェア資源である。プログラムの動作環境としては、例えばプラットフォームのＣＰＵやＯＳの種類が指定される。ＣＰＵやＯＳの種類は、例えば適用された設計思想（アーキテクチャ）によって決められる。【０００４】
プログラムの移行を行う場合において、移行先のコンピュータのプラットフォームが、そのプログラムに指定された動作環境に適合しない場合がある。この場合、例えばそのプログラムのソースコードがあれば、移行対象のプログラムを再コンパイルすることが考えられる。ソースコードから移行先のコンピュータ用に再コンパイルして得られたプログラムを移行先のコンピュータにインストールすることで、プログラムを移行できる。【０００５】
他方、ソースコードが入手できないプログラムもある。ソースコードが入手できない場合、例えば、プログラムのバイナリ変換が行われる。バイナリ変換では、プログラム内に記述されているバイナリコードが、移行先のコンピュータのプラットフォームに適合したバイナリコードへ変換される。バイナリ変換後のプログラムを、移行先のコンピュータにインストールすることで、プログラムを移行できる。【０００６】
また、例えばエミュレータを用いてプログラムを移行することも可能である。エミュレータは、あるコンピュータ上で、別のコンピュータで提供される動作環境を模倣し、模倣されたコンピュータ用のプログラムを実行できるようにするものである。エミュレータを用いてプログラムを移行する場合、移行先のコンピュータにおいて、エミュレータにより移行元のコンピュータで提供される動作環境を模倣する。そして移行先のコンピュータに、エミュレータを介して、移行対象のプログラムを実行させる。エミュレータを用いた技術としては、例えば、ＢＩＯＳ（Basic Input/OutPut System）エミュレータによりＢＩＯＳ動作のエミュレーションを行わせる技術がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−１６９４５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、従来の技術では、プラットフォームの異なるコンピュータへプログラムを移行する場合において、移行先のコンピュータでのプログラムの早期の実行開始と、移行処理完了後のプログラムの効率的な実行とを両立させることが困難である。【０００９】
例えば、再コンパイルやバイナリ変換によるプログラムの移行では、移行処理の完了後は、移行先のコンピュータのプラットフォームに適合したバイナリコードのプログラムにより、効率的な処理が可能である。その一方で、再コンパイルまたはバイナリ変換が問題なく完了するまで、移行先のコンピュータでプログラムを実行することができず、移行先のコンピュータでのプログラム実行開始が遅れてしまう。【００１０】
また、エミュレータを利用したプログラムの移行では、移行先のコンピュータでプログラムを早期に実行開始できる。その一方で、プログラムの移行完了後もエミュレータを動作させることとなり、エミュレータが動作する分だけ、プログラムの移行完了後のプログラムの実行が非効率となる。非効率なプログラムの実行は、コンピュータの資源の使用効率の低下や、処理速度低下の原因となる。【００１１】
１つの側面では、本発明は、移行先のコンピュータでプログラムを早期に実行を開始し、移行処理完了後にはプログラムを効率的に実行可能とすることを目的とする。
【課題を解決するための手段】
【００１２】
１つの側面では、コンピュータに、第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行し、前記コンピュータが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成し、前記第２のプログラムの生成完了後、前記第１のプログラムの実行を停止するとともに、前記第２のプログラムを実行する、処理を実行させるプログラムが提供される。
【発明の効果】
【００１３】
１つの側面によれば、移行先のコンピュータでプログラムを早期に実行を開始し、移行処理完了後にはプログラムを効率的に実行することが可能となる。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態に係る情報処理システムの機能構成例を示す図である。
【図２】第１の実施の形態におけるプログラム移行処理の一例を示す図である。
【図３】第２の実施の形態のシステム構成例を示す図である。
【図４】本実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。
【図５】第２の実施の形態のプログラム移行機能を示すブロック図である。
【図６】ナレッジのデータ構造の一例を示す図である。
【図７】チェックポイント情報のデータ構造の一例を示す図である。
【図８】第２の実施の形態におけるプログラム移行の一例を示す図である。
【図９】第２の実施の形態における動作環境の切り替え例を示す図である。
【図１０】第２の実施の形態におけるプログラム移行処理の手順の一例を示すフローチャートである。
【図１１】コード変換処理の手順の一例を示すフローチャートである。
【図１２】ネイティブ環境への切り替え処理の手順の一例を示すフローチャートである。
【図１３】第２の実施の形態におけるプログラムの移行に伴うハードウェア資源の消費量の推移の一例を示す図である。
【図１４】第３の実施の形態におけるプログラム移行の一例を示す図である。
【図１５】第３の実施の形態における動作環境の切り替え例を示す図である。
【図１６】第３の実施の形態におけるプログラム移行処理の手順の一例を示すフローチャートである。
【図１７】メモリとＨＤＤ内のデータの比較処理の一例を示す図である。
【図１８】比較のための待ち合わせの一例を示す図である。
【図１９】データ比較処理の手順を示すフローチャートである。
【図２０】第３の実施の形態におけるプログラムの移行に伴うハードウェア資源の消費量の推移の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態について図面を参照して説明する。なお各実施の形態は、矛盾のない範囲で複数の実施の形態を組み合わせて実施することができる。
〔第１の実施の形態〕
まず第１の実施の形態について説明する。
【００１６】
図１は、第１の実施の形態に係る情報処理システムの機能構成例を示す図である。情報処理システムＣＰは、記憶手段１、第１の実行手段２、生成手段３、および第２の実行手段４を有する。情報処理システムＣＰは、例えば１または複数のコンピュータにより実現されている。
【００１７】
記憶手段１は、第１のプログラム１ａや第２のプログラム１ｂを記憶する。第１のプログラム１ａは、第１の動作環境で実行可能なプログラムである。例えば第１のプログラム１ａは、第１の動作環境を提供するプラットフォームを有するコンピュータが、直接解釈可能なコードで記述されている。なお、情報処理システムＣＰのプラットフォームは、第１の動作環境とは別の第２の動作環境を提供している。第２のプログラム１ｂは、第２の動作環境に実行可能なプログラムである。
【００１８】
第１の実行手段２は、情報処理システムＣＰで提供される第２の動作環境において動作し、第１の動作環境における情報処理を模倣する。そして第１の実行手段２は、模倣した第１の動作環境により、第１のプログラム１ａを実行する。
【００１９】
生成手段３は、第１の実行手段２による第１のプログラム１ａの実行と並行して、第２のプログラム１ｂを生成する。第２のプログラム１ｂは、第２の動作環境で実行可能であり、第１のプログラム１ａと同じ処理結果を得ることができるプログラムである。生成手段３は、例えば、第１のプログラム１ａ内に記述されたバイナリコードを、第２の動作環境で実行可能なバイナリコードに変換する。
【００２０】
第２の実行手段４は、第２のプログラム１ｂの生成完了後、第１の実行手段２による第１のプログラム１ａの実行を停止させるとともに、第２の動作環境により第２のプログラム１ｂを実行する。
【００２１】
このような情報処理システムＣＰによれば、第１のプログラム１ａの情報処理システムＣＰへの移行時に、早期に第１のプログラム１ａの実行を開始できると共に、移行処理完了後は、第２のプログラム１ｂを効率的に実行することができる。
【００２２】
図２は、第１の実施の形態におけるプログラム移行処理の一例を示す図である。第１のプログラム１ａは、例えば第１の動作環境５を有するコンピュータで実行されていたプログラムである。このプログラム１ａを、第１の実施の形態に係る情報処理システムＣＰに移行する場合、情報処理システムＣＰでは、まず第１の実行手段２により、第１のプログラム１ａの実行が開始される。また第１の実行手段２による第１のプログラム１ａの実行と並行して、生成手段３により第２のプログラム１ｂが生成される。生成された第２のプログラム１ｂは、例えば記憶手段１に格納される。
【００２３】
第２のプログラム１ｂの生成が完了すると、第２の実行手段４により、第１の実行手段２に、第１のプログラム１ａの実行停止が指示される。その指示を受けて、第１の実行手段２は、第１のプログラム１ａの実行を停止する。また第２の実行手段４は、第２のプログラム１ｂを、情報処理システムＣＰが有する第２の動作環境６上で実行する。
【００２４】
このように、第１の実施の形態によれば、情報処理システムＣＰにおいて、第１のプログラム１ａを早期に実行開始できると共に、第２のプログラム１ｂ生成後は、第２のプログラム１ｂを実行することにより、効率的な処理を行うことができる。
【００２５】
なお、生成手段３は、例えば、第１のプログラム１ａのバイナリコードを、第２の動作環境６で実行可能なバイナリコードに変換することで、第２のプログラム１ｂを生成することができる。これにより、例えば第１のプログラム１ａのソースコードが入手できない場合でも、第２の動作環境６で実行可能であり、第１のプログラム１ａと同じ処理結果を得ることができる第２のプログラム１ｂを生成することができる。なお、第１のプログラム１ａのソースコードが入手できる場合、そのソースコードをコンパイルすることで、第２のプログラム１ｂを生成してもよい。
【００２６】
また、生成手段３は、例えば第２のプログラム１ｂが正常に動作しない場合、前回とは異なる生成アルゴリズムにより、第２の動作環境６で実行可能であり、第１のプログラム１ａと同じ処理結果を得ることができる第３のプログラムを生成してもよい。なお、第３のプログラムを生成する期間は、第１の実行手段２により第１のプログラム１ａを実行させる。これにより、移行後に実行されるプログラムの信頼性を高めることができる。
【００２７】
また、第２の実行手段４は、停止した第１のプログラム１ａの最後に実行されたコードの次のコードを特定し、特定したコードに対応する第２のプログラム１ｂ内のコードから、第２のプログラム１ｂの実行を開始してもよい。これにより、実行するプログラムの切り替えにおいて、重複した処理が発生せず、処理の効率化が図れる。
【００２８】
また第２の実行手段４は、第１のプログラム１ａと第２のプログラム１ｂとを並行して実行した後、第１のプログラム１ａを停止させるようにしてもよい。これにより、第２のプログラム１ｂが実行できることを確認した上で、第１のプログラム１ａを停止させることができる。その結果、第２のプログラム１ｂの不具合により第１のプログラム１ａまたは第２のプログラム１ｂの実行期間に空白が生じることが抑止される。
【００２９】
また第１のプログラム１ａと第２のプログラム１ｂとを並行して実行する間、第２の実行手段４は、第１のプログラム１ａの処理結果と第２のプログラム１ｂの処理結果とを比較してもよい。この場合、第２の実行手段４は、比較結果に基づいて第２のプログラム１ｂに基づく情報処理が正常に実行されているか否かを判定する。これにより、第２のプログラム１ｂの信頼性をより高めることができる。このとき第２の実行手段４は、例えば、第２のプログラム１ｂが所定期間以上正常に動作したことを確認後、第１のプログラム１ａの実行を停止してもよい。これにより、信頼性の低い状態で、第２のプログラム１ｂの単独での実行状態になることを抑止できる。
【００３０】
なお、第１の実行手段２、生成手段３、および第３の実行手段４は、例えば情報処理システムＣＰが有するプロセッサにより実現することができる。また、記憶手段１は、例えば情報処理システムＣＰが有するＲＡＭ（Random Access Memory）などのメモリにより実現することができる。
【００３１】
また、図１に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路も設定可能である。
〔第２の実施の形態〕
次に第２の実施の形態について説明する。第２の実施の形態は、クラウドシステムにプログラムを移行するものである。なお第２の実施の形態では、即時切り替え方式により、プログラムの動作環境をエミュレータ環境からネイティブ環境へ変更する。即時切り替え方式は、プログラムのコード変換が完了すると、エミュレータ環境でのプログラムの実行を停止すると共に、ネイティブ環境でのプログラムの実行を開始するものである。
【００３２】
ここで、エミュレータ環境は、エミュレータが他のコンピュータの情報処理動作を模倣することで実現された、プログラムの動作環境である。それに対し、ネイティブ環境は、エミュレータを介さずに、コンピュータ本来の機能により提供されるプログラムの動作環境である。
【００３３】
図３は、第２の実施の形態のシステム構成例を示す図である。クラウドシステム２０内には、ネットワーク２１を介して複数のコンピュータ１００，１００ａ，１００ｂ，・・・が設けられている。ネットワーク２１は、広域のネットワーク２２に接続されており、複数のコンピュータ１００，１００ａ，１００ｂ，・・・は、広域のネットワーク２２を介して受信した要求に応じて、情報処理のサービスを不特定多数の利用者に提供する。クラウドシステム２０は、例えばＩａａＳ（Infrastructure as a Service）またはＰａａＳ（Platform as a Service）型のパブリッククラウドである。ＩａａＳとは、サーバ、ＣＰＵ、ストレージなどのインフラを提供するクラウドサービスである。ＰａａＳは、アプリケーションプログラムなどのプログラムを稼働させるための基盤を提供するクラウドサービスである。
【００３４】
広域のネットワーク２２には、例えば、企業内システム２３のネットワーク２４や端末装置２５が接続されている。企業内システム２３のネットワーク２４には、端末装置２６やコンピュータ２７が接続されている。
【００３５】
このようなシステムにおいて、例えば企業内システム２３のコンピュータ２７で実行していたプログラムを、クラウドシステム２０のコンピュータ１００に移行する場合がある。企業が企業内に閉じたシステム上で利用していたプログラムを、クラウドシステム２０上で利用できるようにすれば、企業はコンピュータシステムの保有や保守に係る費用や手間を削減できる。またクラウドシステム２０では、ユーザが必要な時に必要な分だけのシステム資源を利用し、利用した分だけ課金されることが行われている。このようなサービスを利用すれば、企業は、利用する資源の量を削減することで、システム運用に係る費用を削減できる。
【００３６】
ところで、企業内に閉じたシステムのＯＳやハードウェアなどの動作環境と、クラウドシステム２０内のコンピュータ１００の動作環境とは、異なる場合がある。しかも、企業内で利用されてきたプログラムの中には、開発され運用開始されてから長い期間を経た結果、ソースコードを紛失し、バイナリコードしか存在しないものもある。
【００３７】
そこで、第２の実施の形態では、クラウドシステム２０に既存システム（例えばコンピュータ２７）のプログラム（例えばアプリケーションプログラム）を動作させることができるエミュレータを配置する。さらに、プログラムのソースコード修正や再コンパイルを行うことなく、既存システムのバイナリコードを、例えばコンピュータ２７からクラウドシステム２０へ送信する。そして、クラウドシステム２０がエミュレーションすることで、コンピュータ２７に適合したコードのプログラムを実行する。
【００３８】
さらにクラウドシステム２０では、エミュレーションによるプログラムの実行と並行して、バックグラウンドでプログラムのバイナリコードを、クラウドシステム２０のアーキテクチャに適合するように変換する。そしてクラウドシステム２０は、変換が完了したタイミングで、エミュレータ環境による実行からクラウドシステム２０のネイティブ環境の実行へ切り換えるようにする。このような処理を実現するために、クラウドシステム２０内のコンピュータ１００，１００ａ，１００ｂ，・・・は、例えば、以下のようなハードウェア構成を有している。
【００３９】
図４は、本実施の形態に用いるコンピュータのハードウェアの一構成例を示す図である。コンピュータ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１には、バス１０９を介してメモリ１０２と複数の周辺機器が接続されている。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＭＰＵ（Micro Processing Unit）、またはＤＳＰ（Digital Signal Processor）である。プロセッサ１０１の機能の少なくとも一部を、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現してもよい。
【００４０】
メモリ１０２は、コンピュータ１００の主記憶装置として使用される。メモリ１０２には、プロセッサ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、メモリ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。メモリ１０２としては、例えばＲＡＭが使用される。
【００４１】
バス１０９に接続されている周辺機器としては、ＨＤＤ（Hard Disk Drive）１０３、グラフィック処理装置１０４、入力インタフェース１０５、光学ドライブ装置１０６、機器接続インタフェース１０７およびネットワークインタフェース１０８がある。
【００４２】
ＨＤＤ１０３は、内蔵したディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３は、コンピュータ１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、フラッシュメモリなどの半導体記憶装置を使用することもできる。
【００４３】
グラフィック処理装置１０４には、モニタ１１が接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令に従って、画像をモニタ１１の画面に表示させる。モニタ１１としては、ＣＲＴ（Cathode Ray Tube）を用いた表示装置や液晶表示装置などがある。
【００４４】
入力インタフェース１０５には、キーボード１２とマウス１３とが接続されている。入力インタフェース１０５は、キーボード１２やマウス１３から送られてくる信号をプロセッサ１０１に送信する。なお、マウス１３は、ポインティングデバイスの一例であり、他のポインティングデバイスを使用することもできる。他のポインティングデバイスとしては、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００４５】
光学ドライブ装置１０６は、レーザ光などを利用して、光ディスク１４に記録されたデータの読み取りを行う。光ディスク１４は、光の反射によって読み取り可能なようにデータが記録された可搬型の記録媒体である。光ディスク１４には、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などがある。
【００４６】
機器接続インタフェース１０７は、コンピュータ１００に周辺機器を接続するための通信インタフェースである。例えば機器接続インタフェース１０７には、メモリ装置１５やメモリリーダライタ１６を接続することができる。メモリ装置１５は、機器接続インタフェース１０７との通信機能を搭載した記録媒体である。メモリリーダライタ１６は、メモリカード１７へのデータの書き込み、またはメモリカード１７からのデータの読み出しを行う装置である。メモリカード１７は、カード型の記録媒体である。
【００４７】
ネットワークインタフェース１０８は、ネットワーク２１に接続されている。ネットワークインタフェース１０８は、ネットワーク２１を介して、他のコンピュータまたは通信機器との間でデータの送受信を行う。
【００４８】
以上のようなハードウェア構成によって、第２の実施の形態の処理機能を実現することができる。なお、第１の実施の形態に示した情報処理システムＣＰも、図４に示したコンピュータ１００と同様のハードウェアにより実現することができる。また図３に示した他のコンピュータ１００ａ，１００ｂ，・・・，２７も、コンピュータ１００と同様のハードウェアで実現できる。ただし、企業内システム２３に設けられたコンピュータ２７のプロセッサのアーキテクチャは、コンピュータ１００のプロセッサ１０１のアーキテクチャとは異なる。
【００４９】
コンピュータ１００は、例えばコンピュータ読み取り可能な記録媒体に記録されたプログラムを実行することにより、第２の実施の形態の処理機能を実現する。コンピュータ１００に実行させる処理内容を記述したプログラムは、様々な記録媒体に記録しておくことができる。例えば、コンピュータ１００に実行させるプログラムをＨＤＤ１０３に格納しておくことができる。プロセッサ１０１は、ＨＤＤ１０３内のプログラムの少なくとも一部をメモリ１０２にロードし、プログラムを実行する。またコンピュータ１００に実行させるプログラムを、光ディスク１４、メモリ装置１５、メモリカード１７などの可搬型記録媒体に記録しておくこともできる。可搬型記録媒体に格納されたプログラムは、例えばプロセッサ１０１からの制御により、ＨＤＤ１０３にインストールされた後、実行可能となる。またプロセッサ１０１が、可搬型記録媒体から直接プログラムを読み出して実行することもできる。
【００５０】
次に、第２の実施の形態のコンピュータ１００における、プログラム移行機能について説明する。
図５は、第２の実施の形態のプログラム移行機能を示すブロック図である。コンピュータ１００は、ナレッジベース１１０、エミュレータ１２０、トランスレータ１３０、チェックポイントトラッカー１４０、アプリケーションモニタ１５０、アプリケーションコントローラ１６０、プログラム記憶部１７０、およびＯＳ１８０を有する。
【００５１】
ナレッジベース１１０は、ナレッジ１１１を記憶する。ナレッジ１１１は、バイナリトランスレーションに関する知識（情報）である。ナレッジ１１１は、エミュレータの種類ごとに用意され、様々なアプリケーションプログラムのコード変換に利用される。例えば、コンピュータ１００のメモリ１０２またはＨＤＤ１０３の記憶領域の一部が、ナレッジベース１１０として使用される。
【００５２】
エミュレータ１２０は、コンピュータ１００の本来の動作環境以外の動作環境の情報処理を模倣する。例えば、エミュレータ１２０は、図３に示す企業内システム２３のコンピュータ２７で提供される動作環境における情報処理を模倣する。エミュレータ１２０は、他のコンピュータの動作環境の情報処理を模倣することにより、模倣対象の動作環境で動作可能なプログラムを実行することができる。
【００５３】
トランスレータ１３０は、エミュレータ環境で実行可能なプログラムを、入力に対する処理結果を変えずに、ネイティブ環境で実行可能なプログラムに変換する。例えばトランスレータ１３０は、元のプログラムのバイナリコードを、コンピュータ１００に適用されているアーキテクチャで定義された命令セットを用いたバイナリコードに変換する。なおトランスレータ１３０は、ナレッジ１１１を参照することで、バイナリコードの変換に用いる変換アルゴリズムを認識する。
【００５４】
チェックポイントトラッカー１４０は、コード変換時のチェックポイント情報を記録する。例えばチェックポイントトラッカー１４０は、変換前のプログラム１７１中にチェックポイントを定義し、そのチェックポイントでプログラムを区切る。チェックポイントは、例えば、所定数おきのバイナリコードをチェックポイントとすることができる。また、プログラム中に出現する１または複数の命令コードのいずれかを含むバイナリコードをチェックポイントとしてもよい。
【００５５】
チェックポイントによって区切られたプログラムの範囲を、チェックポイント分割域とする。チェックポイント分割域には、１または複数のブロックが含まれる。ブロックは、意味のある処理を示すバイナリコード列である。そしてチェックポイントトラッカー１４０は、チェックポイントで区切られたバイナリコード列ごとに、バイナリコードの変換内容を、チェックポイント情報として記憶する。例えばチェックポイントトラッカー１４０は、チェックポイント情報をメモリ１０２に格納する。
【００５６】
アプリケーションモニタ１５０は、コード変換の状況やアプリケーションの実行状況を監視する。例えばアプリケーションモニタ１５０は、トランスレータ１３０によるプログラムの変換状況を監視して、変換処理の終了の有無を判断する。またアプリケーションモニタ１５０は、コード変換により生成されたプログラムの実行状況の監視により、そのプログラムによる処理が正常に動作しているかどうかを判断する。
【００５７】
アプリケーションコントローラ１６０は、アプリケーションモニタ１５０が状況の変化を抽出した際に、抽出した変化に応じて実行するプログラムを切り替える。例えばアプリケーションコントローラ１６０は、コード変換が終了すると、変換前のプログラム１７１のエミュレータ環境での実行を停止し、変換後のプログラム１７２のネイティブ環境での実行を開始する。またアプリケーションコントローラ１６０は、アプリケーションモニタ１５０により変換後のプログラム１７２が正常に動作していないことが検出されると、変換後のプログラム１７２のネイティブ環境での実行を停止させる。そしてアプリケーションコントローラ１６０は、変換前のプログラム１７１のエミュレータ環境での実行を再開させる。
【００５８】
なおアプリケーションコントローラ１６０は、変換後のプログラム１７２のネイティブ環境での実行時には、そのプログラム１７２に関するＨＤＤ１０３内のデータのスナップショットを定期的に作成する。スナップショットとは、ある特定の時点におけるＨＤＤ１０３内のデータを抜き出したものである。
【００５９】
プログラム記憶部１７０は、移行対象のプログラム１７１と、そのプログラム１７１にコード変換を施すことで生成されるプログラム１７２とを記憶する。移行対象のプログラム１７１は、例えば、他の記憶媒体、またはネットワーク経由でコンピュータ１００に入力される。変換後のプログラム１７２は、トランスレータ１３０により生成され、プログラム記憶部１７０に格納される。プログラム記憶部１７０としては、例えばメモリ１０２またはＨＤＤ１０３の記憶領域の一部が使用される。
【００６０】
ＯＳ１８０は、コンピュータ１００全体を管理する。例えば、ナレッジベース１１０、エミュレータ１２０、トランスレータ１３０、チェックポイントトラッカー１４０、アプリケーションモニタ１５０、アプリケーションコントローラ１６０、プログラム記憶部１７０は、ＯＳ１８０によって管理される。アプリケーションコントローラ１６０からの変換後のプログラム１７２の実行命令を受け取ると、コンピュータ１００にプログラム１７２を実行させる。例えばＯＳ１８０は、プログラム１７２を実行するプロセスを作成し、そのプロセスにプロセッサ１０１の処理時間を割り当てることで、コンピュータ１００にプログラム１７２を実行させる。
【００６１】
なお、図５に示した各要素間を接続する線は通信経路の一部を示すものであり、図示した通信経路以外の通信経路もある。例えば図５では省略しているが、図５中のＯＳ１８０以外の各要素は、ＯＳ１８０とデータや命令の受け渡しを行うことができる。また、図５にはコンピュータ１００の機能を示したが、クラウドシステム２０内の他のコンピュータ１００ａ，１００ｂ，・・・も、コンピュータ１００と同様の機能を有している。
【００６２】
次に、ナレッジベース１１０に格納されるナレッジ１１１のデータ構造について詳細に説明する。
図６は、ナレッジのデータ構造の一例を示す図である。第２の実施の形態においては、コード変換は、例えば、バイナリコードのブロック単位で行われる。コード変換の実行時は、一旦バイナリコードをパターンで抽象化する。バイナリコードのパターンでの抽象化とは、実装上のバイナリコードを、同種の処理を示す複数のバイナリコードパターンを包含するようなコード表記に変更することである。同種の処理とは、例えば同じトランスレーションアルゴリズムを適用可能な処理である。そして抽象化されたパターンごとに適切なトランスレーションアルゴリズムが選択され、そのトランスレーションアルゴリズムに従ってコード変換が実施される。このようなコード変換を実現するために、ナレッジ１１１は、変換前コードパターンリスト１１１ａ、トランスレーションアルゴリズムリスト１１１ｂ、およびトランスレーションアルゴリズム評価テーブル１１１ｃを有する。
【００６３】
変換前コードパターンリスト１１１ａには、変換前のコードを抽象化した変換前コードパターンが複数登録されている。変換前コードパターンには、それぞれ識別子（ＰＴＮ１，ＰＴＮ２，ＰＴＮ３，・・・）が設定されている。
【００６４】
トランスレーションアルゴリズムリスト１１１ｂには、コード変換の変換手順を示すトランスレーションアルゴリズムが複数登録されている。トランスレーションアルゴリズムには、それぞれ識別子（ＡＬ１，ＡＬ２，ＡＬ３，・・・）が設定されている。
【００６５】
トランスレーションアルゴリズム評価テーブル１１１ｃには、対象パターンと適用アルゴリズムおよび、それらの組み合わせの動作実績が登録されている。対象パターンには、コード変換対象のバイナリコードが合致した変換前コードパターンの識別子が登録される。適用アルゴリズムには、コード変換に使用されたトランスレーションアルゴリズムの識別子が登録される。動作実績には、コード変換後に生成されたバイナリコードの動作の成否が登録される。例えばコード変換後のバイナリコードの正常動作が確認できた場合は、動作実績として「動作成功」が記録される。コード変換後のバイナリコードの動作が確認できていない場合は、動作実績として「確認待ち」が記録される。コード変換後のバイナリコードの動作に異常が発生した場合は、動作実績として「動作失敗」が記録される。
【００６６】
なおコード変換後のバイナリコードの動作が「動作失敗」となった場合には、別のトランスレーションアルゴリズムが選択され、再変換が行われる。再変換後のバイナリコードの動作が成功すれば、次に同じ変換前コードパターンに合致するコードのコード変換時には、最初から「動作成功」の実績のあるトランスレーションアルゴリズムが選択されることになる。
【００６７】
なお、エミュレータ１２０を修正した場合、トランスレーションアルゴリズム評価テーブル１１１ｃも再作成することとなる。
次に、チェックポイントトラッカー１４０が保存するチェックポイント情報１４１について詳細に説明する。
【００６８】
図７は、チェックポイント情報のデータ構造の一例を示す図である。図７の例では、チェックポイント情報１４１を、テーブル形式で表している。チェックポイント情報１４１には、チェックポイント番号、エミュレータ環境、ネイティブ環境、変換アルゴリズム、スナップショット実行、および実行回数の欄が設けられている。
【００６９】
チェックポイント番号の欄には、変換元のプログラムのチェックポイントの識別番号が設定される。各チェックポイント番号の列には、そのチェックポイントで示されるチェックポイント以後、次のチェックポイントの前に記述されたバイナリコードの情報が、ブロック単位で設定される。
【００７０】
エミュレータ環境の欄には、変換元のプログラムにおける、各ブロックの先頭アドレスとサイズとが設定される。
ネイティブ環境の欄には、対応する変換元のブロックのバイナリコードを変換することで得られたブロックの、変換後のプログラムにおける先頭アドレスとサイズとが設定される。
【００７１】
変換アルゴリズムの欄には、変換元のプログラム内のブロックのコード変換に適用したトランスレーションアルゴリズムの識別子が設定される。
スナップショット実行の欄には、変換後のブロック内のバイナリコードがネイティブ環境で実行されたことによる、メモリやＨＤＤのデータのスナップショット取得処理の実施時刻が設定される。なおメモリやＨＤＤのスナップショットは、任意のチェックポイントのタイミングで実施される。スナップショットを実施した時刻は、実時間もしくはシステムの持つ時間である。スナップショットは、例えば任意の世代分保存され、古いものから順に破棄される。破棄されたスナップショットが格納されていた記憶領域は開放される。スナップショットが破棄された場合、そのスナップショットの取得により設定されたスナップショットの実施時刻は、チェックポイント情報１４１から削除される。
【００７２】
実行回数の欄には、チェックポイント番号に対応する変換後のブロック内のバイナリコードの実行回数が設定される。なおコード変換のやり直しなどによりチェックポイントが変更された場合は、以前のチェックポイントのチェックポイント番号に設定された実行回数はクリアされる。
【００７３】
以上のようなコンピュータ１００により、移行対象のプログラムの早期の実行開始を可能としつつも、移行時のみ余分なハードウェアリソースが必要で、移行完了後は必要最小限のハードウェアリソースのみの利用で済ませるようなプログラムの移行が実現できる。
【００７４】
図８は、第２の実施の形態におけるプログラム移行の一例を示す図である。コンピュータ１００には、プログラムの実行環境として、エミュレータ環境とネイティブ環境との２つがある。プラットフォーム３０上で実行されているエミュレータ１２０を介してプログラム１７１を実行する環境が、エミュレータ環境である。またプラットフォーム３０によってプログラム１７２を実行する環境が、ネイティブ環境である。エミュレータ環境とネイティブ環境とは、メモリ１０２やＨＤＤ１０３などの資源を共有している。なお第２の実施の形態では、エミュレータ環境でのプログラム１７１の実行と、ネイティブ環境でのプログラム１７２の実行とが並行して行われることはなく、ある時刻においては、いずれか一方のプログラムのみが実行される。
【００７５】
図８の例では、コンピュータ１００本来の動作環境（プラットフォーム３０で提供される動作環境）は、プロセッサ１０１の種別が「ｃｐｕ１」、ＯＳ１８０の種別が「ｏｓ１」である。それに対し、移行対象のプログラム１７１は、プロセッサの種別が「ｃｐｕ２」、ＯＳの種別が「ｏｓ２」のプラットフォーム用のバイナリコードで作成されている。そこで、エミュレータ１２０により、プログラム１７１が実行される。これにより、プログラムの再コンパイルやコード変換の完了を待たずに、クラウドシステム２０において、移行対象のプログラム１７１の実行を早期に開始できる。
【００７６】
なお、プログラムを実行可能な動作環境として、プロセッサやＯＳの種別以外の要素が指定されている場合もある。例えば、ＨＤＤアクセス用のインタフェースの種別である。この場合、エミュレータ１２０は、プログラム１７１を実行可能な動作環境による情報処理を、プロセッサやＯＳ以外の資源が実行する処理も含めて再現する。またトランスレータ１３０は、プロセッサやＯＳ以外のコンピュータ１００の資源構成にも適合したプログラム１７２を生成する。
【００７７】
またエミュレータ環境でのプログラム１７１の実行と並行して、トランスレータ１３０により、プログラム１７１のバイナリコードが、プラットフォーム３０が直接実行可能なバイナリコードに変換される。その結果、変換後のバイナリコードで記述されたプログラム１７２が生成される。例えば、トランスレータ１３０は、ナレッジベース１１０内のナレッジ１１１を参照し、バイナリコードの変換を行う。またトランスレータ１３０は、バイナリ変換の適切な単位でチェックポイントを作成し、チェックポイントトラッカー１４０に通知する。通知を受けたチェックポイントトラッカー１４０は、コード変換における変換元のバイナリコードと変換後のバイナリコードの対応関係を、チェックポイント情報１４１に記録する。
【００７８】
トランスレータ１３０がコード変換を行っている間、アプリケーションモニタ１５０は、コード変換の実行状況を監視している。そしてアプリケーションモニタ１５０は、コード変換が完了し、プログラム１７２が生成されたことを検出すると、そのことをアプリケーションコントローラ１６０に通知する。
【００７９】
アプリケーションコントローラ１６０は、コード変換完了の通知を受けると、エミュレータ環境によるプログラム１７１の実行を停止させると共に、ネイティブ環境によるプログラム１７２の実行を開始させる。例えば、アプリケーションコントローラ１６０は、エミュレータ１２０に対してプログラム１７１の実行停止を指示する。またアプリケーションコントローラ１６０は、プラットフォーム３０を提供するＯＳに対して、プログラム１７２の実行を指示する。
【００８０】
ネイティブ環境でのプログラム１７２の実行が開始されると、アプリケーションモニタ１５０は、プログラム１７２の実行状況を監視し、プログラム１７２の実行状況をアプリケーションコントローラ１６０とチェックポイントトラッカー１４０とに通知する。プログラム１７２の実行状況を受け取ったチェックポイントトラッカー１４０は、同一チェックポイント番号が割り当てられたブロック群ごとに、実行回数を計数する。そしてチェックポイントトラッカー１４０は、チェックポイント情報１４１における実行回数の値を更新する。
【００８１】
アプリケーションコントローラ１６０は、アプリケーションモニタ１５０からの通知により、プログラム１７２の動作結果を認識し、ナレッジベース１１０に動作結果を登録する。例えばアプリケーションコントローラ１６０は、プログラム１７２が正常に実行された場合、ナレッジ１１１に対し、プログラム１７１からプログラム１７２へのコード変換に適用されたアルゴリズムについて、動作が成功したことを登録する。
【００８２】
またアプリケーションコントローラ１６０は、プログラム１７２が実行されている間、所定のタイミングで、メモリ１０２やＨＤＤ１０３内のプログラム１７２の実行に使用されている記憶領域内のデータ３３のスナップショット３４を作成する。スナップショット３４は、例えばＨＤＤ１０３に保存される。スナップショット３４を作成するタイミングは、例えばチェックポイントのタイミングである。なおすべてのチェックポイントでスナップショットを作成するのではなく、例えばプログラム１７２の実行場所として、所定数のチェックポイントを通過したときにスナップショットを作成することができる。
【００８３】
またアプリケーションコントローラ１６０は、プログラム１７２が正常に動作しない場合は、変換後のプログラム１７２の実行を停止させ、移行対象のプログラム１７１の実行を再開させる。このような動作を、プログラムの切り戻しと呼ぶ。プログラムの切り戻しを行う場合、例えば、アプリケーションコントローラ１６０は、正常動作が確認できている最新のスナップショットのデータを、メモリ１０２とＨＤＤ１０３に書き戻す。そしてアプリケーションコントローラ１６０は、エミュレータ１２０にプログラム１７１の実行開始を指示する。
【００８４】
プログラムの切り戻しが行われると、トランスレータ１３０により、再度コード変換が行われ、ネイティブ環境に適合したバイナリコードを有するプログラムが再度作成される。なおコード変換を再度行う場合、トランスレータ１３０は、前回のコード変換時とは異なるアルゴリズムを適用して、コード変換を実行する。
【００８５】
このように、変換後のプログラム１７２が正常に動作しない場合には、自動で、エミュレータ環境でのプログラム１７１の実行が再開され、異なるアルゴリズムによるコード変換が行われる。これにより、信頼性の高いプログラムの生成が可能となる。
【００８６】
図９は、第２の実施の形態における動作環境の切り替え例を示す図である。図９では、横方向に時間軸が示されており、コード変換の処理、エミュレータ環境でのプログラムの実行処理、ネイティブ環境でのプログラムの実行処理それぞれの実行期間が、上から順に示されている。
【００８７】
プログラムの移行処理が開始されると、まず時刻ｔ１において、エミュレータ環境でのコード変換前のプログラム１７１の実行が開始される。次に時刻ｔ２において、プログラム１７１のコード変換が開始される。
【００８８】
時刻ｔ３にコード変換が完了すると、その後の時刻ｔ４において、エミュレータ環境でのプログラムの実行が停止され、ネイティブ環境でのプログラムの実行が開始される。ネイティブ環境で実行されるプログラムは、コード変換によって生成されたプログラムである。
【００８９】
図９の例では、ネイティブ環境でのプログラムの実行中の時刻ｔ５に、プログラムの正常実行に対する障害が検出されている。障害が検出されると、ネイティブ環境でのプログラムの実行が停止され、エミュレータ環境でのプログラムの実行が再開される。続いて、時刻ｔ６にコード変換処理が再開され、プログラムのコード変換が再度実行される。再実行されたコード変換では、少なくとも一部のバイナリコードについて、以前に実行したコード変換と異なるトランスレーションアルゴリズムが適用される。
【００９０】
時刻ｔ７に２回目のコード変換が完了すると、その後の時刻ｔ８において、エミュレータ環境でのプログラムの実行が停止され、ネイティブ環境でのプログラムの実行が開始される。
【００９１】
このように、第２の実施の形態では、コード変換が完了すると、即時に、ネイティブ環境でのプログラムの実行に切り替えられる。そして、障害発生時には、即時にエミュレータ環境でのプログラム実行を再開される。このように、エミュレータ環境でのプログラムの実行と、ネイティブ環境でのプログラムの実行との切り替えを行うことで、プログラムの実行に空き期間が発生することを抑止することができる。しかも、障害が発生した場合、異なるトランスレーションアルゴリズムでコード変換をやり直すため、最終的に信頼性の高いプログラムを生成することが可能となる。
【００９２】
次に、第２の実施の形態に係るプログラムの移行処理の手順について、詳細に説明する。
図１０は、第２の実施の形態におけるプログラム移行処理の手順の一例を示すフローチャートである。以下の処理は、移行対象のプログラムを指定した移行指示が入力されたときに実行される。なお、以下の説明では、図８に示すプログラム１７１を指定した移行指示が入力されたものとする。
【００９３】
［ステップＳ１０１］エミュレータ１２０は、移行対象として指定されたプログラム１７１を、エミュレータ環境で実行開始する。例えばエミュレータ１２０は、コンピュータ１００のプラットフォーム３０上で、プログラム１７１を実行可能な動作環境を模倣する。そしてエミュレータ１２０は、プログラム１７１のバイナリコードを解釈し、プラットフォーム３０で実行可能なコードに変換して、コンピュータ１００のプロセッサ１０１に処理を実行させる。以後、エミュレータ１２０は、プログラム１７１の実行停止の指示を受けるまで、プログラム１７１の実行を継続する。
【００９４】
［ステップＳ１０２］トランスレータ１３０は、移行対象として指定されたプログラム１７１のバイナリコードの変換を開始する。コード変換処理の詳細は後述する（図１１参照）。
【００９５】
［ステップＳ１０３］アプリケーションモニタ１５０は、バイナリコードの変換が完了したか否かを判断する。例えばアプリケーションモニタ１５０は、トランスレータ１３０からコード変換完了の通知を取得した場合、バイナリコードの変換が完了したと判断する。また、アプリケーションモニタ１５０は、例えばトランスレータ１３０によるバイナリコードの変換処理を停止したら、コード変換が完了したと判断する。コード変換が完了した場合、処理がステップＳ１０４に進められる。コード変換が完了していなければ、ステップＳ１０３の処理が繰り返される。
【００９６】
［ステップＳ１０４］アプリケーションモニタ１５０は、コード変換が正常に完了したか否かを判断する。アプリケーションモニタ１５０は、例えばトランスレータ１３０が、正常終了を示すメッセージを出力して終了した場合、プログラムの終了を示すコードであれば、コード変換が正常に完了したものと判断する。またアプリケーションモニタ１５０は、例えばトランスレータ１３０が、エラーメッセージを出力して終了した場合、コード変換は正常に完了していないと判断する。コード変換が正常に完了した場合、処理がステップＳ１０６に進められる。コード変換が正常に完了していない場合（異常終了の場合）、処理がステップＳ１０５に進められる。
【００９７】
［ステップＳ１０５］異常終了の場合、アプリケーションモニタ１５０は、プログラムの移行を指示したユーザに、ネイティブ環境への移行失敗を通知する。例えば、アプリケーションモニタ１５０は、ユーザが入力したプログラムの移行指示への応答として、移行失敗のメッセージを出力する。出力されたメッセージは、例えばユーザが使用する端末装置に表示される。その後、プログラム移行処理は終了する。
【００９８】
［ステップＳ１０６］コード変換が正常に終了した場合、アプリケーションコントローラ１６０は、ネイティブ環境への切り替え処理を実行する。ネイティブ環境への切り替え処理により、プログラム１７１のエミュレータ環境での実行が停止され、プログラムのネイティブ環境での実行が開始される。この処理の詳細は後述する（図１２参照）。
【００９９】
［ステップＳ１０７］アプリケーションコントローラ１６０は、所定のタイミングでＨＤＤ１０３内の所定領域のスナップショットを作成する。例えば、アプリケーションコントローラ１６０は、ＨＤＤ１０３の記憶領域うち、少なくともプログラム１７２が使用している記憶領域のスナップショットを作成する。スナップショットのタイミングは、例えば、前回のスナップショットから所定期間経過後に、プログラム１７２の実行箇所がチェックポイントに達したタイミングである。なお、スナップショットの取得タイミングでは、任意に設定できる。例えば、プログラム１７２の実行箇所がチェックポイントに達するごとにスナップショットを作成してもよい。
【０１００】
［ステップＳ１０８］アプリケーションコントローラ１６０は、ネイティブ環境におけるプログラム１７２の実行に異常が発生していないかどうかを判断する。例えば、アプリケーションコントローラ１６０は、プログラム１７２が正常応答時に出力することになっているコードを出力せずに終了した場合、異常が発生したと判断する。プログラム１７２の実行に異常が発生した場合、処理がステップＳ１０９に進められる。プログラム１７２の実行に異常が発生していなければ、処理がステップＳ１１１に進められる。
【０１０１】
［ステップＳ１０９］プログラム１７２に実行に異常が発生した場合、アプリケーションコントローラ１６０は、直近のスナップショットに基づいて、そのスナップショット作成時点におけるＨＤＤ１０３との状態を復元する。そしてアプリケーションコントローラ１６０は、ネイティブ環境でのプログラム１７２の実行を停止し、エミュレータ環境におけるプログラム１７１の実行を再開する。このとき、ネイティブ環境でのプログラム１７２の実行が終了していなければ、アプリケーションコントローラ１６０は、プログラム１７２の実行を強制的に終了される。
【０１０２】
なお、エミュレータ環境でのプログラム１７１の実行の再開を、オペレータからの指示を待って行うこともできる。例えばアプリケーションコントローラ１６０は、オペレータが使用する端末装置に、エミュレータ環境でのプログラム１７１の再実行準備が完了したことを表示する。オペレータが、再実行を指示する操作を行うと、アプリケーションコントローラ１６０は、エミュレータ環境でのプログラム１７１の再実行を開始する。
【０１０３】
［ステップＳ１１０］アプリケーションコントローラ１６０は、異常が発生したことを記録する。例えばアプリケーションコントローラ１６０は、ナレッジベース１１０内のトランスレーションアルゴリズム評価テーブル１１１ｃに、異常が発生したときに実行していた部分のトランスレーションアルゴリズムの動作実績として、「動作失敗」を登録する。その後、処理がステップＳ１０２に進められ、コード変換が再度実行される。
【０１０４】
［ステップＳ１１１］プログラム１７２の実行で異常が発生していない場合、アプリケーションコントローラ１６０は、プログラム１７２の実行を開始してから一定時間以上経過したか否かを判断する。一定時間以上経過している場合、処理がステップＳ１１２に進められる。一定時間以上経過していなければ、処理がステップＳ１０７に進められる。
【０１０５】
［ステップＳ１１２］プログラム１７２の実行を開始してから、異常を検出せずに一定期間以上経過した場合、アプリケーションコントローラ１６０は、エミュレータ環境でプログラム１７１を実行するために確保されている資源を、すべて開放する。例えば、プログラム１７１を実行するプロセスが占有していたメモリ領域が開放される。その後、プログラム移行処理が終了する。
【０１０６】
このようにして、移行対象のプログラム１７１のエミュレータ環境での実行と、変換後のプログラム１７２のネイティブ環境での実行とを、相互に切り替えながら、信頼性の高いコード変換を実現することができる。コード変換は、例えばナレッジベース１１０に登録されたナレッジ１１１に基づいて実行される。
【０１０７】
以下、コード変換処理について詳細に説明する。
図１１は、コード変換処理の手順の一例を示すフローチャートである。
［ステップＳ１２１］トランスレータ１３０は、移行対象のプログラム１７１の複数のバイナリコードを読み込み、コードパターンを認識する。例えばトランスレータ１３０は、プログラム１７１の先頭から順にバイナリコードをブロック単位で読み込む。そしてトランスレータ１３０は、読み込んだ実装レベルのバイナリコードのコードパターンを認識して、そのパターンを抽象化する。
【０１０８】
［ステップＳ１２２］トランスレータ１３０は、抽出した複数のバイナリコードを、そのバイナリコードのコードパターン用のトランスレーションアルゴリズムで変換する。例えばトランスレータ１３０は、ナレッジベース１１０を参照し、変換前コードパターンリスト１１１ａから、読み出したバイナリコードから抽象化したコードパターンに合致する変換前コードパターンを検出する。次にトランスレータ１３０は、トランスレーションアルゴリズム評価テーブル１１１ｃを参照し、検出した変更前コードパターンに対応付けられた１以上のトランスレーションアルゴリズムを抽出する。そしてトランスレータ１３０は、抽出したトランスレーションアルゴリズムのうちの１つを、適用するアルゴリズムに決定する。例えばトランスレータ１３０は、複数のトランスレーションアルゴリズムが抽出された場合、動作実績において「動作成功」となっているトランスレーションアルゴリズムを最優先で、適用するアルゴリズムに決定する。トランスレータ１３０は、動作実績が「動作成功」のトランスレーションアルゴリズムがなければ、確認待ちのトランスレーションアルゴリズムを、適用するアルゴリズムに決定する。適用するトランスレーションアルゴリズムが決定すると、トランスレータ１３０は、そのトランスレーションアルゴリズムを、トランスレーションアルゴリズムリスト１１１ｂから抽出する。そしてトランスレータ１３０は、抽出したバイナリコードを、抽出したトランスレーションアルゴリズムに従って別のバイナリコードに変換する。
【０１０９】
［ステップＳ１２３］トランスレータ１３０は、移行対象のプログラム１７１内のすべてのバイナリコードを変換したか否かを判断する。すべてのバイナリコードの変換が完了した場合、処理がステップＳ１２６に進められる。未変換のバイナリコードがある場合、処理がステップＳ１２４に進められる。
【０１１０】
［ステップＳ１２４］トランスレータ１３０は、一定量のバイナリコードの変換を行ったか否かを判断する。例えばトランスレータ１３０は、変換後にチェックポイントトラッカー１４０への通知を行っていないコード変換により変換された、変換前のバイナリコードの数が、予め設定された値以上となった場合、一定量のバイナリコードの変換を行ったと判断する。一定量のバイナリコードの変換が行われた場合、処理がステップＳ１２５に進められる。また一定量のバイナリコードの変換が行われていなければ、処理がステップＳ１２１に進められる。
【０１１１】
［ステップＳ１２５］トランスレータ１３０は、変換内容が未通知の一定量のバイナリコードの変換について、変換内容を、チェックポイントトラッカー１４０に通知する。通知される変換内容は、例えば、コード変換前のバイナリコードとコード変換後のバイナリコードとの対応関係、および適用したトランスレーションアルゴリズムである。通知では、コード変換前のバイナリコードは、例えば移行対象のプログラム内でのそのバイナリコードの先頭アドレスとサイズとによって特定される。また、通知では、コード変換後のバイナリコードは、例えば移行対象のプログラム内でのそのバイナリコードの先頭アドレスとサイズとによって特定される。通知を受けたチェックポイントトラッカー１４０は、通知内容を、チェックポイント情報１４１（図７参照）に登録する。その後、処理がステップＳ１２１に進められる。
【０１１２】
［ステップＳ１２６］トランスレータ１３０は、アプリケーションモニタ１５０に、コード変換の完了を通知する。このとき、トランスレータ１３０は、コード変換が正常終了した場合、例えば、正常終了を示すメッセージをアプリケーションモニタ１５０に送信する。
【０１１３】
このようにして、コード変換を行うと共に、チェックポイント情報１４１に変換内容を記録することができる。
次に、ネイティブ環境でのプログラム１７２への切り替え処理の詳細について説明する。
【０１１４】
図１２は、ネイティブ環境への切り替え処理の手順の一例を示すフローチャートである。
［ステップＳ１３１］アプリケーションコントローラ１６０は、エミュレータ１２０による移行対象のプログラム１７１の次の実行位置が、チェックポイントとして指定されたバイナリコードの位置か否かを判断する。チェックポイントのバイナリコードを実行する場合、処理がステップＳ１３２に進められる。チェックポイントに達していなければ、ステップＳ１３１の処理が繰り返される。
【０１１５】
［ステップＳ１３２］アプリケーションコントローラ１６０は、メモリ１０２またはＨＤＤ１０３が更新処理中か否かを判断する。更新処理中であれば、処理がステップＳ１３２の処理が繰り返される。更新処理中でなければ、ステップＳ１３３に処理が進められる。
【０１１６】
［ステップＳ１３３］アプリケーションコントローラ１６０は、エミュレータ環境のＯＳやプロセッサの状態を保存し、エミュレータ１２０を停止させる。例えばアプリケーションコントローラ１６０は、エミュレータ１２０によって模倣されている仮想のプロセッサ内のレジスタの内容を、メモリ１０２またはＨＤＤ１０３に書き出す。そしてアプリケーションコントローラ１６０は、エミュレータ１２０に対し、処理の停止を指示する。これにより、エミュレータ環境が静止状態となる。
【０１１７】
［ステップＳ１３４］アプリケーションコントローラ１６０は、エミュレータ環境を破棄する。例えばアプリケーションコントローラ１６０は、プログラム１７１の実行プロセス、およびエミュレータ１２０が占有していたＯＳ１８０の環境を開放する。例えばプログラム１７１の実行プロセス、およびエミュレータ１２０に割り当てられていたメモリ空間が開放される。
【０１１８】
［ステップＳ１３５］アプリケーションコントローラ１６０は、ネイティブ環境のメモリ領域に、変換後のプログラム１７２を展開する。
［ステップＳ１３６］アプリケーションコントローラ１６０は、ステップＳ１３３で保存したＯＳやプロセッサの状態を読み込み、ネイティブ環境向けにプログラムカウンタなどの変更を行う。例えばアプリケーションコントローラ１６０は、エミュレータ環境静止時のエミュレータ１２０で模倣されたプロセッサ内のレジスタの値を、ネイティブ環境のプロセッサ１０１のレジスタに設定する。このときアプリケーションコントローラ１６０は、プロセッサ１０１のプログラムカウンタに、移行対象のプログラム１７１の次の実行位置となるバイナリコードに対応する、変換後のプログラム１７２内のバイナリコードの格納アドレスを設定する。
【０１１９】
なお移行対象のプログラム１７１のバイナリコードと、変換後のプログラム１７２のバイナリコードとの対応関係は、チェックポイントトラッカー１４０に問い合わせることで認識できる。例えばアプリケーションコントローラ１６０は、エミュレータ環境のプログラムカウンタに示されたアドレスに対応する移行対象のプログラムの位置を指定して、対応アドレス取得要求をチェックポイントトラッカー１４０に送信する。チェックポイントトラッカー１４０は、チェックポイント情報１４１を参照し、移行対象のプログラム１７１の指定された位置に対応する、変換後のプログラム１７２の位置を特定する。そしてチェックポイントトラッカー１４０は、特定した位置（例えば、プログラム１７２の先頭からのオフセット）を、アプリケーションコントローラ１６０に通知する。アプリケーションコントローラ１６０は、変換後のプログラム１７２が展開されたメモリ空間内の、通知された位置に対応するアドレスを、プログラム１７２実行時のプログラムカウンタに設定する。
【０１２０】
［ステップＳ１３７］アプリケーションコントローラ１６０は、ＯＳ１８０に対して、ネイティブ環境での変換後のプログラム１７２の実行命令を出力する。するとＯＳ１８０が、プログラム１７２の実行を開始する。
【０１２１】
このようにして、エミュレータ環境でのプログラム１７１の実行状態をネイティブ環境に再構築し、移行対象プログラムの静止時の位置に対応する変換後のプログラム１７２の位置から、ネイティブ環境でのプログラム１７２の実行を開始することができる。
【０１２２】
以上説明したように、第２の実施の形態では、プログラム１７１の移行処理が開始すると、エミュレータ１２０によって、コンピュータ１００における移行対象のプログラム１７１の実行を早期に開始することができる。そしてエミュレータ１２０によるプログラム１７１の実行と並行して、トランスレータ１３０によるコード変換を行い、コード変換が完了すると、自動で、ネイティブ環境での変換後のプログラム１７２の実行に切り替えられる。これにより、移行処理完了後は、エミュレータ１２０のような余分な処理を介在させずにプログラム１７２を実行することができ、効率的な処理が実現される。これにより、エミュレータ１２０を利用することによるシステム環境の移行の準備期間の短さを維持しつつ、プログラムの移行処理完了後は、エミュレータ１２０を利用し続けなくて済むようにできる。
【０１２３】
さらに、プログラムの移行処理完了後は、移行後のプログラム１７２の実行に使用する資源量が少なくて済む。
図１３は、第２の実施の形態におけるプログラムの移行に伴うハードウェア資源の消費量の推移の一例を示す図である。図１３では、横軸に移行フェーズを示し、縦軸に消費するハードウェア資源の量を示している。なお、ハードウェア資源の量は、プロセッサ、メモリ、ディスクなどのリソースの消費量を、抽象的なハードウェアの指標として表現したものである。
【０１２４】
プログラムの移行処理前は、移行対象のプログラム１７１は、そのプログラム１７１の動作環境を、プラットフォームとして有するコンピュータにより、ネイティブ環境で実行される。従って、エミュレータを介した実行に比べて、消費するハードウェア資源は少なくて済む。
【０１２５】
その状態からプログラム１７１の移行処理を開始すると、移行先のコンピュータ１００では、まず、エミュレータ１２０によって移行対象のプログラム１７１が実行される。エミュレータ１２０は、コンピュータ１００とは別のプラットフォームの動作を模倣するという複雑な処理を行う。そのため、ネイティブ環境に比べて多くの資源を消費する。その後、コンピュータ１００では、プログラム１７１のコード変換が開始され、さらに多くの資源が消費される。
【０１２６】
コード変換処理が完了すると、移行先のコンピュータ１００においても、変換後のプログラム１７２がネイティブ環境で実行される。そのため、プログラムの移行処理が完了後は、ネイティブ環境により、少ない消費資源でプログラム１７２を実行することができる。
【０１２７】
このように、プログラムの移行後の消費資源の量を抑止することで、資源の効率的な利用が可能となる。特に企業が企業内に閉じたシステム上で利用していたアプリケーションプログラムを、クラウドシステムに移行させた場合、企業はコンピュータシステムの保有や保守に係る費用や手間を削減できる。またクラウドシステムでは、例えばユーザが必要なときに必要な分だけのシステム資源を利用し、利用した分だけ課金される。そのため、第２の実施の形態の技術を用いたプログラムをクラウドシステムに移行すれば、企業がクラウドシステムを利用する際に係る費用を削減できる。
【０１２８】
なお、プログラムの移行先が、例えば自社保有システムであれば、クラウドシステムのような課金の問題は発生しない。しかし、例えば第２の実施の形態の技術を適用せずに、エミュレータを利用したプログラムの移行を行った場合、エミュレータも動作させ続けることとなる。この場合、余裕を持った処理能力のコンピュータを購入し保守し続ける分の費用がかかる。自社保有システムの場合であっても、第２の実施の形態の技術を適用すれば、移行処理が完了後は、少ないハードウェア資源でシステムを運用でき、保守費用などの運用コストを削減できる。
【０１２９】
また、第２の実施の形態では、プログラムの実行環境をエミュレータ環境からネイティブ環境へ切り替える場合、エミュレータ環境を停止したときのプログラム１７１の実行箇所に対応するプログラム１７２の位置から、ネイティブ環境で処理が実行される。これにより、プログラム１７１の処理からプログラム１７２の処理への切り替え時にも、処理のやり直しや、処理のスキップなどが発生せず、効率的な切り替えが行われる。
【０１３０】
さらに、第２の実施の形態では、変換後のプログラム１７２をネイティブ環境で実行開始後に障害が発生した場合、即座にエミュレータ環境による移行対象のプログラム１７１の実行が再開される。これにより、移行先のコンピュータ１００によるプログラム１７１またはプログラム１７２の実行による情報処理サービスの提供を、安定して行うことができる。
【０１３１】
しかも、変換後のプログラム１７２をネイティブ環境で実行開始後に障害が発生した場合には、異なる変換アルゴリズムによるコード変換が行われる。これにより、信頼性の高いプログラムへのコード変換を自動で行うことができる。
【０１３２】
〔第３の実施の形態〕
次に第３の実施の形態について説明する。第３の実施の形態は、並行稼働方式により、プログラムの動作環境をエミュレータ環境からネイティブ環境へ変更するものである。並行稼働方式は、プログラムの動作環境の変更の過程で、エミュレータ環境でのプログラムの実行と、ネイティブ環境でのプログラムの実行とを並行して行うものである。以下、第３の実施の形態における第２の実施の形態との相違点を説明する。なお、第２の実施の形態と同じ要素に同一の符号を付し、説明を省略する。
【０１３３】
図１４は、第３の実施の形態におけるプログラム移行の一例を示す図である。第３の実施の形態では、アプリケーションコントローラ１６１の処理が第２の実施の形態と異なる。第３の実施の形態におけるアプリケーションコントローラ１６１は、トランスレータ１３０によるコード変換が完了した後も、エミュレータ環境でのプログラム１７１の実行を続行する。これにより、エミュレータ環境とネイティブ環境とで、プログラム１７１，１７２が並行稼働する。
【０１３４】
並行稼働する場合、メモリ１０２やＨＤＤ１０３などの資源は共有されない。すなわち、エミュレータ環境によるプログラム１７１の実行に使用するメモリ１０２やＨＤＤ１０３の記憶領域と、ネイティブ環境によるプログラム１７２の実行に使用するメモリ１０２やＨＤＤ１０３の記憶領域とは、別領域となる。アプリケーションコントローラ１６１は、エミュレータ環境とネイティブ環境とでプログラムを並行動作させている間、メモリ１０２やＨＤＤ１０３の内容を比較して正常に稼働していることを確認する。比較の結果ネイティブ環境での異常を検出した場合、トランスレータ１３０は、再度コード変換を試みる。なお、異常発生時の異常発生原因は、ナレッジベース１１０に登録される。そこでトランスレータ１３０は、再トランスレーション時に、ナレッジベース１１０内のナレッジ１１１を参照して前回とは異なる変換アルゴリズムでコード変換を実施する。このように、バイナリトランスレーションの情報が順次蓄積されて、次第にコード変換の精度を向上させることができる。
【０１３５】
図１５は、第３の実施の形態における動作環境の切り替え例を示す図である。図１５では、横方向に時間軸が示されており、コード変換の処理、メモリ・ＨＤＤ同期化、エミュレータ環境でのプログラムの実行処理、ネイティブ環境でのプログラムの実行処理それぞれの実行期間が、上から順に示されている。
【０１３６】
プログラムの移行処理が開始されると、まず時刻ｔ１１において、エミュレータ環境でのコード変換前のプログラム１７１の実行が開始される。次に時刻ｔ１２において、プログラム１７１のコード変換が開始されると共に、メモリ１０２とＨＤＤ１０３との同期化が行われる。メモリ１０２とＨＤＤ１０３との同期化は、エミュレータ環境においてプログラム１７１の実行に使用している記憶領域に格納されているデータのコピーを、ネイティブ環境で使用する記憶領域に格納する処理である。
【０１３７】
時刻ｔ１３にコード変換が完了し、その後の時刻ｔ１４にメモリ・ＨＤＤの同期化が完了している。コード変換とメモリ・ＨＤＤの同期化が共に完了した後、時刻ｔ１５にネイティブ環境でのプログラム１７２の実行が開始される。
【０１３８】
エミュレータ環境でのプログラム１７１の実行と、ネイティブ環境でのプログラム１７２の実行とは、所定の期間だけ、並行して行われる。その間、所定の間隔で、エミュレータ環境とネイティブ環境とにおける、メモリ１０２とＨＤＤ１０３とに格納されたデータの比較処理が行われる。比較処理により、メモリ１０２とＨＤＤ１０３とに格納されたデータが一致している間は、変換後のプログラム１７２がネイティブ環境で正常に稼働していると判断される。時刻ｔ１６に、変換後のプログラム１７２がネイティブ環境で正常に稼働している期間が所定の期間に達すると、エミュレータ環境でのプログラム１７１の実行が停止される。
【０１３９】
メモリ１０２やＨＤＤ１０３内のデータの比較のため、例えば、所定のタイミングでスナップショットを作成してもよい。その場合、スナップショットのデータで比較が行われる。これにより、データの比較によりプログラムに基づく処理の進行が停滞するのを抑止できる。
【０１４０】
次に、第３の実施の形態におけるプログラム移行処理の手順について説明する。
図１６は、第３の実施の形態におけるプログラム移行処理の手順の一例を示すフローチャートである。
【０１４１】
［ステップＳ２０１］エミュレータ１２０は、移行対象として指定されたプログラム１７１を、エミュレータ環境で実行開始する。
［ステップＳ２０２］トランスレータ１３０は、移行対象として指定されたプログラム１７１のバイナリコードの変換を開始する。なお、この処理の詳細は、図１１を参照して説明した通りである。
【０１４２】
［ステップＳ２０３］アプリケーションコントローラ１６１は、エミュレータ環境で使用するメモリおよびＨＤＤの記憶領域と、ネイティブ環境で使用するメモリおよびＨＤＤの記憶領域との内容の同期化を開始する。例えば、アプリケーションコントローラ１６１は、ネイティブ環境でプログラム１７２の実行に使用する記憶領域を、メモリ１０２とＨＤＤ１０３とに確保する。そしてアプリケーションコントローラ１６１は、エミュレータ環境用の記憶領域と、ネイティブ環境用に確保した記憶領域との同期化処理を行う。同期化処理により、エミュレータ環境用の記憶領域に格納されているデータのコピーが、ネイティブ環境用に確保した記憶領域に格納される。
【０１４３】
［ステップＳ２０４］アプリケーションモニタ１５０は、バイナリコードの変換が完了したか否かを判断する。コード変換が完了した場合、処理がステップＳ２０５に進められる。コード変換が完了していなければ、ステップＳ２０４の処理が繰り返される。
【０１４４】
［ステップＳ２０５］アプリケーションモニタ１５０は、コード変換が正常に完了したか否かを判断する。コード変換が正常に完了した場合、処理がステップＳ２０７に進められる。コード変換が正常に完了していない場合（異常終了の場合）、処理がステップＳ２０６に進められる。
【０１４５】
［ステップＳ２０６］異常終了の場合、アプリケーションモニタ１５０は、プログラムの移行を指示したユーザに、ネイティブ環境への移行失敗を通知する。その後、プログラム移行処理は終了する。
【０１４６】
［ステップＳ２０７］アプリケーションコントローラ１６１は、メモリとＨＤＤとの内容の同期化が完了したか否かを判断する。同期化が完了した場合、処理がステップＳ２０８に進められる。同期化が完了していなければ、ステップＳ２０７の処理が繰り返される。
【０１４７】
［ステップＳ２０８］アプリケーションコントローラ１６１は、エミュレータ環境でのプログラム１７１の実行位置がチェックポイントに達すると、ネイティブ環境でのプログラム１７２の実行を開始する。この際、エミュレータ環境でのプログラム１７１の実行は継続したままである。この場合、外部との通信は、例えばエミュレータ環境でプログラム１７１を実行するプロセスが行う。すなわち、移行対象のプログラム１７１または変換後のプログラム１７２を実行することで提供されるサービスへの要求は、プログラム１７１を実行するプロセスに入力される。またその要求への応答は、プログラム１７１を実行するプロセスから出力される。
【０１４８】
［ステップＳ２０９］アプリケーションコントローラ１６１は、所定のタイミングで、メモリとＨＤＤの内容を比較する。例えばアプリケーションコントローラ１６１は、エミュレータ環境でのプログラム１７１の実行位置がチェックポイントに達すると、エミュレータ環境とネイティブ環境との双方で、メモリやＨＤＤ内のデータのスナップショットを作成する。そしてアプリケーションコントローラ１６１は、作成したスナップショットを用い、プログラム１７１の実行で使用されている記憶領域のデータと、プログラム１７２の実行で使用されている記憶領域のデータとを比較する。なお、この処理の詳細は後述する（図１７〜図１９参照）。
【０１４９】
［ステップＳ２１０］アプリケーションコントローラ１６１は、並行したプログラムの処理に異常が発生せず、かつ比較の結果が正常かどうかを判断する。例えばアプリケーションコントローラ１６１は、アプリケーションモニタ１５０から、移行対象のプログラム１７１または変換後のプログラム１７２の異常終了の通知を受け取った場合、異常が発生したと判断する。またアプリケーションコントローラ１６１は、ステップＳ２０９の比較の結果、エミュレータ環境の記憶領域内のデータとネイティブ環境の記憶領域のデータとが不一致であれば、比較結果を異常と判断する。異常が検出されなければ、処理がステップＳ２１３に進められる。異常が検出された場合、処理がステップＳ２１１に進められる。
【０１５０】
［ステップＳ２１１］異常が検出された場合、アプリケーションコントローラ１６１は、ネイティブ環境でのプログラム１７２の実行を停止する。
［ステップＳ２１２］アプリケーションコントローラ１６１は、異常が発生したことを記録する。その後、処理がステップＳ２０２に進められる。
【０１５１】
［ステップＳ２１３］異常が発生していない場合、アプリケーションコントローラ１６１は、プログラム１７２の実行を開始してから一定時間以上経過したか否かを判断する。一定時間以上経過している場合、処理がステップＳ２１４に進められる。一定時間以上経過していなければ、処理がステップＳ２０９に進められる。
【０１５２】
［ステップＳ２１４］プログラム１７２の実行を開始してから、異常を検出せずに一定時間以上経過した場合、アプリケーションコントローラ１６１は、エミュレータ環境でのプログラム１７１の実行を停止する。そしてアプリケーションコントローラ１６１は、エミュレータ環境でプログラム１７１を実行するために確保されている資源を、すべて開放する。アプリケーションコントローラ１６１は、プログラム１７１またはプログラム１７２の実行により提供されるサービスに対する外部からの通信先は、ネイティブ環境でプログラム１７２を実行しているプロセスに切り替えられる。
【０１５３】
このようにして、並行稼働状態を経たプログラムの移行が行われる。並行稼働状態の間に、エミュレータ環境で実行されているプログラム１７１の実行状況と、ネイティブ環境で実行されているプログラム１７２の実行状況との同一性が、メモリやＨＤＤに記憶されたデータの同一性によって判断される。これにより、変換後のプログラム１７２の信頼性が確認できた後に、プログラム１７２のネイティブ環境での単独動作の状態に移行することができる。
【０１５４】
次に、メモリとＨＤＤ内のデータの比較処理について詳細に説明する。
図１７は、メモリとＨＤＤ内のデータの比較処理の一例を示す図である。図１７では、比較処理の時間進行に伴う処理の遷移を示している。
【０１５５】
エミュレータ環境では、プログラム１７１の実行により、エミュレータ環境用のメモリ領域４１とＨＤＤ記憶領域４２とにアクセスが行われる。他方ネイティブ環境では、プログラム１７２の実行により、ネイティブ環境用のメモリ領域５１とＨＤＤ記憶領域５２とにアクセスが行われる。各記憶領域のへのアクセスには、書き込みアクセスと読み出しアクセスとがある。記憶領域に書き込みアクセスが行われた場合、その記憶領域の内容が変更される。
【０１５６】
スナップショットの作成タイミングになると、それぞれの動作環境において、スナップショットが作成される。例えばエミュレータ環境では、メモリ領域４１内のデータのスナップショット４３が作成される。またＨＤＤ記憶領域４２内のデータのスナップショット４４も作成される。ネイティブ環境では、メモリ領域５１内のデータのスナップショット５３が作成される。またＨＤＤ記憶領域５２内のデータのスナップショット５４も作成される。スナップショットを作成している期間中は、プログラムの進行が静止している。
【０１５７】
スナップショットの作成が完了すると、エミュレータ環境とネイティブ環境との双方において、プログラムの実行が再開される。プログラムの実行が再開されることで、エミュレータ環境用のメモリ領域４１とＨＤＤ記憶領域４２へのアクセスや、ネイティブ環境用のメモリ領域５１とＨＤＤ記憶領域５２とにアクセスが再開される。
【０１５８】
スナップショットには、プログラムの実行に基づくアクセスは行われない。そこで、作成されたスナップショット同士でデータが比較される。例えば、エミュレータ環境用のメモリ領域４１のスナップショット４３と、ネイティブ環境用のメモリ領域５１のスナップショット５３とが比較される。またエミュレータ環境用のＨＤＤ記憶領域４２のスナップショット４４と、ネイティブ環境用のＨＤＤ記憶領域５２のスナップショット５４とが比較される。比較の結果、メモリ内のデータまたはＨＤＤ内のデータの少なくとも一方に不一致があれば、異常が発生したものと判断される。異常が発生すると、異常の発生箇所が記録されると共に、コード変換がやり直される。
【０１５９】
なお、メモリおよびＨＤＤ内のデータを比較する場合、比較時点における各プログラムの進行度合いを揃えるため、先に進んだ方の処理の待ち合わせが行われる。
図１８は、比較のための待ち合わせの一例を示す図である。アプリケーションコントローラ１６１は、例えば、メモリやディスクの更新時期に差異が出ないように、チェックポイントごとに待ち合わせを行うように、各プログラムの進行を制御する。この場合、外部入出力や割り込み処理は、常にチェックポイントとなるようにする。
【０１６０】
多くの場合、ネイティブ環境の方がエミュレーションによるオーバヘッドがないため動作が早く、処理が先に終了することが期待される。この場合、ネイティブ環境でのプログラム１７２の実行を、チェックポイントで一時停止させることで、待ち合わせを行う。なお、処理内容によっては、エミュレータ環境でのプログラム１７１の実行の方が、処理が先行する場合もあり得る。その場合、エミュレータ環境によるプログラム１７１の実行を一時停止することで、待ち合わせが行われる。
【０１６１】
図１９は、データ比較処理の手順を示すフローチャートである。
［ステップＳ２２１］アプリケーションコントローラ１６１は、エミュレータ環境またはネイティブ環境のいずれかで実行しているプログラムがチェックポイントとなっている処理を、次に実行するか否かを判断する。チェックポイントを次に実行する場合、処理がステップＳ２２２に進められる。チェックポイントを実行する段階に達していない場合、ステップＳ２２１の処理が繰り返される。
【０１６２】
［ステップＳ２２２］アプリケーションコントローラ１６１は、プログラムの次の実行位置がチェックポイントとなった環境におけるそのプログラムの実行を、一時停止状態にする。
【０１６３】
［ステップＳ２２３］アプリケーションコントローラ１６１は、プログラムの実行位置がチェックポイントとなった環境とは別の環境におけるプログラムの実行が、同じチェックポイントを、次に実行するか否かを判断する。チェックポイントを次に実行する場合、処理がステップＳ２２４に進められる。チェックポイントを実行する段階に達していない場合、ステップＳ２２３の処理が繰り返される。
【０１６４】
［ステップＳ２２４］アプリケーションコントローラ１６１は、プログラムの次の実行位置がチェックポイントとなった環境におけるそのプログラムの実行を、一時停止状態にする。
【０１６５】
［ステップＳ２２５］アプリケーションコントローラ１６１は、エミュレータ環境とネイティブ環境とのそれぞれについて、プログラムの実行に使用している、メモリとＨＤＤ内の記憶領域のスナップショットを取得する。
【０１６６】
［ステップＳ２２６］アプリケーションコントローラ１６１は、エミュレータ環境とネイティブ環境とにおけるプログラムの実行を再開する。
［ステップＳ２２７］アプリケーションコントローラ１６１は、スナップショットを用いて、エミュレータ環境とネイティブ環境とにおけるプログラムの実行により、メモリとＨＤＤとに格納されたデータを比較する。
【０１６７】
このようにして、エミュレータ環境で移行対象のプログラム１７１を実行することでメモリとＨＤＤに格納されたデータと、エミュレータ環境で変換後のプログラム１７２を実行することでメモリとＨＤＤに格納されたデータとを比較することができる。
【０１６８】
以上説明したようにして、第３の実施の形態では、第２の実施の形態と同様に、コンピュータ１００における移行対象のプログラム１７１の実行を早期に開始することができると共に、移行処理完了後は、効率的な処理が実現される。これにより、エミュレータ１２０を利用することによるシステム環境の移行の準備期間の短さを維持しつつ、プログラムの移行処理完了後は、エミュレータ１２０を利用し続けなくて済むようにできる。
【０１６９】
さらに、第３の実施の形態においても、第２の実施の形態と同様に、プログラムの移行処理完了後は、移行後のプログラム１７２の実行に使用する資源量が少なくて済む。
図２０は、第３の実施の形態におけるプログラムの移行に伴うハードウェア資源の消費量の推移の一例を示す図である。図２０では、図１３と同様に、横軸に移行フェーズを示し、縦軸に消費するハードウェア資源の量を示している。
【０１７０】
プログラムの移行処理前は、移行対象のプログラム１７１は、そのプログラム１７１の動作環境を、プラットフォームとして有するコンピュータにより、ネイティブ環境で実行される。従って、エミュレータを介した実行に比べて、消費するハードウェア資源は少なくて済む。
【０１７１】
その状態からプログラム１７１の移行処理を開始すると、移行先のコンピュータ１００では、まず、エミュレータ１２０によって移行対象のプログラム１７１が実行される。この場合、エミュレータ１２０によるエミュレート処理の分、ネイティブ環境に比べて多くの資源を消費する。その後、コンピュータ１００では、プログラム１７１のコード変換が開始され、さらに多くの資源が消費される。
【０１７２】
コード変換処理が完了すると、移行先のコンピュータ１００において、エミュレータ環境でのプログラム１７１の実行と並行して、変換後のプログラム１７２がネイティブ環境で実行される。また定期的に、メモリやＨＤＤに格納したデータの比較処理が行われる。そのため、さらに多くの資源が消費される。
【０１７３】
プログラムの並行稼働により変換後のプログラム１７２の信頼性が確認できた後は、エミュレータ環境でのプログラム１７１の実行が停止されると共に、データの比較処理も終了する。その結果、プログラムの移行処理の完了後は、ネイティブ環境により、少ない消費資源でプログラム１７２を実行することができる。
【０１７４】
このように、プログラムの移行後の消費資源の量を抑止することで、資源の効率的な利用が可能となる。クラウドシステムにおける資源の利用量に応じて課金される場合、消費する資源量の抑止により、クラウドシステムの使用料が削減される。
【０１７５】
また第３の実施の形態では、所定期間、エミュレータ環境とネイティブ環境との双方で、プログラムを並行して実行することで、変換後のプログラム１７２が正常に動作することを確認した後に、変換後のプログラム１７２を用いた運用へ移行することができる。これにより、単に変換後のプログラム１７２が支障なく実行できるというだけではなく、移行対象のプログラム１７１と同じ処理結果が得られることが確認できる。その結果、変換後のプログラム１７２の信頼性をより高めることができる。
【０１７６】
しかも、変換後のプログラム１７２をネイティブ環境で実行開始後に障害が発生した場合には、異なる変換アルゴリズムによるコード変換が行われる。これにより、信頼性の高いプログラムへのコード変換を自動で行うことができる。
【０１７７】
なお２つの環境でプログラム１７１，１７２を並行稼働させることで、並行稼働中に変換後のプログラム１７２で不具合が見つかっても、他の装置との通信は、エミュレータ環境でのプログラムの実行はそのまま継続する。そのため、変換後のプログラム１７２で不具合があった場合でも、ユーザからの要求に対する応答の遅延が生じることはない。
【０１７８】
また第３の実施の形態では、変換後のプログラム１７２の正常動作を確認するために、メモリ１０２やＨＤＤ１０３に格納されたデータを比較しているが、他の方法で正常動作を確認してもよい。例えば、エミュレータ環境とネイティブ環境とのそれぞれに入力された処理要求に対する応答内容を比較して、正常に動作しているかどうかを確認することもできる。
【０１７９】
上記については単に本発明の原理を示すものである。さらに、多数の変形、変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応するすべての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１８０】
１  記憶手段
１ａ  第１のプログラム
１ｂ  第２のプログラム
２  第１の実行手段
３  生成手段
４  第２の実行手段
５  第１の動作環境
６  第２の動作環境
ＣＰ  情報処理システム
【図１】
2014155684.tif 000003
【図２】
2014155684.tif 000004
【図３】
2014155684.tif 000005
【図４】
2014155684.tif 000006
【図５】
2014155684.tif 000007
【図６】
2014155684.tif 000008
【図７】
2014155684.tif 000009
【図８】
2014155684.tif 000010
【図９】
2014155684.tif 000011
【図１０】
2014155684.tif 000012
【図１１】
2014155684.tif 000013
【図１２】
2014155684.tif 000014
【図１３】
2014155684.tif 000015
【図１４】
2014155684.tif 000016
【図１５】
2014155684.tif 000017
【図１６】
2014155684.tif 000018
【図１７】
2014155684.tif 000019
【図１８】
2014155684.tif 000020
【図１９】
2014155684.tif 000021
【図２０】
2014155684.tif 000022
【手続補正書】
【提出日】平成27年9月8日(2015.9.8)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】変更
【補正の内容】
【００３０】
なお、第１の実行手段２、生成手段３、および第２の実行手段４は、例えば情報処理システムＣＰが有するプロセッサにより実現することができる。また、記憶手段１は、例えば情報処理システムＣＰが有するＲＡＭ（Random Access Memory）などのメモリにより実現することができる。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１０１
【補正方法】変更
【補正の内容】
【０１０１】
［ステップＳ１０９］プログラム１７２の実行に異常が発生した場合、アプリケーションコントローラ１６０は、直近のスナップショットに基づいて、そのスナップショット作成時点におけるＨＤＤ１０３の状態を復元する。そしてアプリケーションコントローラ１６０は、ネイティブ環境でのプログラム１７２の実行を停止し、エミュレータ環境におけるプログラム１７１の実行を再開する。このとき、ネイティブ環境でのプログラム１７２の実行が終了していなければ、アプリケーションコントローラ１６０は、プログラム１７２の実行を強制的に終了する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０１０８
【補正方法】変更
【補正の内容】
【０１０８】
［ステップＳ１２２］トランスレータ１３０は、抽出した複数のバイナリコードを、そのバイナリコードのコードパターン用のトランスレーションアルゴリズムで変換する。例えばトランスレータ１３０は、ナレッジベース１１０を参照し、変換前コードパターンリスト１１１ａから、読み出したバイナリコードから抽象化したコードパターンに合致する変換前コードパターンを検出する。次にトランスレータ１３０は、トランスレーションアルゴリズム評価テーブル１１１ｃを参照し、検出した変換前コードパターンに対応付けられた１以上のトランスレーションアルゴリズムを抽出する。そしてトランスレータ１３０は、抽出したトランスレーションアルゴリズムのうちの１つを、適用するアルゴリズムに決定する。例えばトランスレータ１３０は、複数のトランスレーションアルゴリズムが抽出された場合、動作実績において「動作成功」となっているトランスレーションアルゴリズムを最優先で、適用するアルゴリズムに決定する。トランスレータ１３０は、動作実績が「動作成功」のトランスレーションアルゴリズムがなければ、確認待ちのトランスレーションアルゴリズムを、適用するアルゴリズムに決定する。適用するトランスレーションアルゴリズムが決定すると、トランスレータ１３０は、そのトランスレーションアルゴリズムを、トランスレーションアルゴリズムリスト１１１ｂから抽出する。そしてトランスレータ１３０は、抽出したバイナリコードを、抽出したトランスレーションアルゴリズムに従って別のバイナリコードに変換する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１１５
【補正方法】変更
【補正の内容】
【０１１５】
［ステップＳ１３２］アプリケーションコントローラ１６０は、メモリ１０２またはＨＤＤ１０３が更新処理中か否かを判断する。更新処理中であれば、ステップＳ１３２の処理が繰り返される。更新処理中でなければ、ステップＳ１３３に処理が進められる。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１６１
【補正方法】変更
【補正の内容】
【０１６１】
図１９は、データ比較処理の手順を示すフローチャートである。
［ステップＳ２２１］アプリケーションコントローラ１６１は、エミュレータ環境またはネイティブ環境のいずれかで実行しているプログラムの実行位置がチェックポイントとなっている処理を、次に実行するか否かを判断する。チェックポイントを次に実行する場合、処理がステップＳ２２２に進められる。チェックポイントを実行する段階に達していない場合、ステップＳ２２１の処理が繰り返される。
【手続補正６】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行し、
前記コンピュータが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成し、
前記第２のプログラムの生成完了後、前記第１のプログラムの実行を停止するとともに、前記第２のプログラムを実行する、
処理を実行させるプログラム。
【請求項２】
前記第２のプログラムの生成では、前記第１のプログラム内に記述されたバイナリコードを、前記第２の動作環境で実行可能なバイナリコードに変換することを特徴とする請求項１記載のプログラム。
【請求項３】
前記コンピュータに、さらに、
前記第２のプログラムが正常に動作しない場合、前記第１のプログラムを実行すると共に、該第２のプログラムの生成に利用したものとは異なる生成アルゴリズムにより、前記第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第３のプログラムを生成する、
処理を実行させることを特徴とする請求項１または２記載のプログラム。
【請求項４】
前記第１のプログラムの実行停止および前記第２のプログラムの実行では、停止した前記第１のプログラムの最後に実行されたコードの次のコードに対応する、前記第２のプログラム内のコードから、前記第２のプログラムの実行を開始することを特徴とする請求項１乃至３のいずれかに記載のプログラム。
【請求項５】
前記第１のプログラムの実行停止および前記第２のプログラムの実行では、前記第１のプログラムと前記第２のプログラムを並行して実行した後、前記第１のプログラムを停止することを特徴とする請求項１乃至３のいずれかに記載のプログラム。
【請求項６】
前記コンピュータに、さらに、
前記第１のプログラムと前記第２のプログラムを並行して実行している間に、前記第１のプログラムの処理結果と前記第２のプログラムの処理結果とを比較し、比較結果に基づいて前記第２のプログラムに基づく情報処理が正常に実行されているか否かを判定する、
処理を実行させることを特徴とする請求項５記載のプログラム。
【請求項７】
前記第１のプログラムの実行停止および前記第２のプログラムの実行では、前記第２のプログラムに基づく情報処理が所定期間以上正常に動作したことを確認後、前記第１のプログラムの実行を停止することを特徴とする請求項５または６記載のプログラム。
【請求項８】
情報処理システムであって、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行する第１の実行手段と、
前記情報処理システムが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成する生成手段と、
前記第２のプログラムの生成完了後、前記第１の実行手段による前記第１のプログラムの実行を停止させるとともに、前記第２のプログラムを実行する第２の実行手段と、
を有する情報処理システム。
【請求項９】
情報処理システムが、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行し、
前記情報処理システムが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成し、
前記第２のプログラムの生成完了後、前記第１のプログラムの実行を停止するとともに、前記第２のプログラムを実行する、
プログラム移行方法。
【手続補正書】
【提出日】平成28年9月9日(2016.9.9)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータに、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行し、
前記コンピュータが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成し、
前記第２のプログラムの生成完了後、前記第１のプログラムと前記第２のプログラムを並行して実行し、
並行して実行した後に、前記第１のプログラムの実行を停止する、
処理を実行させるプログラム。
【請求項２】
前記第２のプログラムの生成では、前記第１のプログラム内に記述されたバイナリコードを、前記第２の動作環境で実行可能なバイナリコードに変換することを特徴とする請求項１記載のプログラム。
【請求項３】
前記コンピュータに、さらに、
前記第２のプログラムが正常に動作しない場合、前記第１のプログラムを実行すると共に、該第２のプログラムの生成に利用したものとは異なる生成アルゴリズムにより、前記第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第３のプログラムを生成する、
処理を実行させることを特徴とする請求項１または２記載のプログラム。
【請求項４】
前記コンピュータに、さらに、
前記第１のプログラムと前記第２のプログラムを並行して実行している間に、前記第１のプログラムの処理結果と前記第２のプログラムの処理結果とを比較し、比較結果に基づいて前記第２のプログラムに基づく情報処理が正常に実行されているか否かを判定する、
処理を実行させることを特徴とする請求項１乃至３のいずれかに記載のプログラム。
【請求項５】
前記第１のプログラムの実行停止および前記第２のプログラムの実行では、前記第２のプログラムに基づく情報処理が所定期間以上正常に動作したことを確認後、前記第１のプログラムの実行を停止することを特徴とする請求項１乃至４のいずれかに記載のプログラム。
【請求項６】
情報処理システムであって、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行する第１の実行手段と、
前記情報処理システムが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成する生成手段と、
前記第２のプログラムの生成完了後、前記第１のプログラムと前記第２のプログラムを並行して実行する第２の実行手段と、
並行して実行した後に、前記第１の実行手段による前記第１のプログラムの実行を停止させる停止手段と、
を有する情報処理システム。
【請求項７】
情報処理システムが、
第１のプログラムを実行可能な第１の動作環境における情報処理を模倣することで、前記第１のプログラムを実行し、
前記情報処理システムが有する第２の動作環境で実行可能であり、前記第１のプログラムと同じ処理結果を得ることができる第２のプログラムを、前記第１のプログラムの実行と並行して生成し、
前記第２のプログラムの生成完了後、前記第１のプログラムと前記第２のプログラムを並行して実行し、
並行して実行した後に、前記第１のプログラムの実行を停止する、
プログラム移行方法。
【国際調査報告】
2014155684.tif 000023
2014155684.tif 000024
2014155684.tif 000025
2014155684.tif 000026