(57)【要約】【課題】  ソフトウェアエミュレーション方式を用いた仮想計算機は、従来の専用ハードを用いた計算機に比べて信頼性が低下することを防止する。【解決手段】  ソフトウェアエミュレーション方式を用いた仮想計算機において、単一ＯＳ上に現用系エミュレーションプログラムと待機系エミュレーションプログラムを配置し、現用系障害時には待機系へ処理を引き継ぐ。処理を引き継いだ待機系エミュレーションプログラムは現用系となり、さらに待機系エミュレーションプログラムを自動生成する。【選択図】  図５
2006178552.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアエミュレーションによる仮想計算機を実現する仮想計算機システムにおいて、
共有メモリ領域に割り当てられたオペレーティングシステムと、
前記オペレーティングシステム上に搭載され、各々属性が異なる第1のエミュレーションソフトウェアと第2のエミュレーションソフトウェアを有し、
前記第1、第2のエミュレーションソフトウェアは相互のソフトウェア上の障害監視を実行するものであって、
いずれか一方のソフトウェアにおいてソフトウェア処理中に障害が発生した場合には前記属性を変更し、障害が発生したソフトウェア処理を他方のソフトウェアが引継ぐことを特徴とする仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに係り、特に仮想計算機システムのエミュレーションソフトウェア実装方法に関する。
【背景技術】
【０００２】
従来、信頼性やスピードを求めるメインフレーム等の分野では、用途に応じて開発した専用ハードウェアが用いられてきた。しかし、近年汎用コンピュータの性能は高性能化し、製造技術の向上により信頼性も高まってきたため、汎用コンピュータをこの分野でも利用する機会が増えてきた。
【０００３】
汎用コンピュータを基本とした新たなシステムを構築した場合、通常ユーザが所有しているソフトウェア・ハードウェア資産をそのまま有効利用することはできない。そこで、汎用コンピュータ上にソフトウェアエミュレーション技術を用いた、従来システム相当の仮想システムをソフトウェアにより実装し、顧客資産を最新ハードウェア上で有効利用する方式が用いられるようになってきた。
【０００４】
図１は専用ハードウェアを用いた計算機構成の一例である。図２はソフトウェアエミュレーション方式を用いた計算機構成の一例である。専用ハードウェアを用いた図１では、専用ハードウェア（１４）、ファームウェア（１３）、ホストオペレーションシステム（以下、ホストＯＳ）（１２）、ユーザプログラム（１１）から構成される。これに対して、ソフトウェアエミュレーション方式を用いた図２では、汎用ハードウェア（２６）と、汎用ハードウェアの上の階層にある、ファームウェア（２５）、ホストＯＳ（２４）、エミュレーションプログラム（２３）、ゲストＯＳ（２２）、ユーザプログラム（２１）を有する。ソフトウェアエミュレーション方式を用いた図２において、専用ハードウェアを用いた図１のホストＯＳ（１２）に相当するのはゲストＯＳ（２２）であり、ホストＯＳ（２４）、エミュレーションプログラム（２３）が追加された形態をとる。
【０００５】
図３はソフトエミュレーション方式を用いた構成における、エミュレーションプログラムの一例である。各モジュールは専用ハードウェアを用いた構成を模した形態をとり、命令を実行するＩＰ（命令実行プロセッサ）（２３１）、システム監視を行うＳＶＰ（サービスプロセッサ）（２３２）、Ｉ／Ｏ処理全般をコントロールするＩＯＰ（Ｉ／Ｏプロセッサ）（２３４）、Ｉ／Ｏ機器を制御するＩＯＣ（Ｉ／Ｏ制御プロセッサ）（２３５）を有する。また、エミュレーションプログラムの確保したヒープメモリ（２３６）に仮想レジスタ領域（２３５１）、仮想メモリ領域（２３５２）を配置する。ゲストＯＳ（２２）のプログラムは仮想メインメモリ（２３５２）にロードし、ＩＰ（２３１）はＩＯＰ（２３４）を介してこれらの命令を受け取る。ＩＰ（２３１）は受け取った命令をホストＯＳ、汎用ハードウェアに適合した形式に変換したあと演算処理を実行し、その演算結果を仮想レジスタ（２３５１）や仮想メインメモリ（２３５２）へ書き込む。これらの処理により、ゲストＯＳは実行環境を意識せずに従来の専用ハードウェア相当の機能を実現する。
【０００６】
なお、システムハードウェアの冗長化により信頼性を向上させる方法が、特開平１０−２４０５５６号公報に記載されている。
【０００７】
【特許文献１】特開平１０−２４０５５６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
汎用コンピュータ・汎用ＯＳとソフトウェアエミュレーションを組み合わせた仮想計算機システムでは、従来の専用ハードウェアを用いた計算機システムと比較して、ソフトウェアエミュレーション・汎用ＯＳが汎用ハードとの間に介在するため、信頼性を下げてしまう。システムの冗長化による信頼性向上策は、追加システムが必要となり、ユーザの導入コストに大きく影響する。
【０００９】
本発明は、単体ハード・単一ＯＳで信頼性を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、１つのＯＳ上に、通常の現用系ソフトウェアエミュレーションプログラムと待機系エミュレーションプログラムを配置する。各々の属性の優劣によって、現用系または待機系となる。これらのエミュレーションプログラムは互いに状態監視を行い、異常検出時には即座に待機系エミュレーションプログラムへと処理を引継ぐ。待機系エミュレーションプログラムはその時点で属性を変更し現用系エミュレーションプログラムとなり、起動を引き継ぐと自プログラムに対する待機系エミュレーションプログラムを生成する。エミュレーション対象ＯＳは共有メモリ領域に配置し、待機系への切り替え時に実行開始アドレスを取得することにより処理の継続を可能とする。
【発明の効果】
【００１１】
ソフトウェアエミュレーション方式を用いた仮想計算機に適用することにより、現用系エミュレーションプログラムの障害発生時に、待機系エミュレーションプログラムへと処理を引き継ぐことが可能となり、さらにシステムダウンを回避することが可能である。また、ソフトウェアエミュレーション方式を用いた仮想計算機における信頼性の向上が可能である。
【発明を実施するための最良の形態】
【００１２】
以下、図面を使用して本発明を実施する場合の一形態を具体的に説明する。
【００１３】
図４は、本発明実施の一形態を示すシステム構成図である。汎用ハードウェア（３７）、ファームウェア（３６）、ホストＯＳ（３５）、エミュレーションプログラムＡ（３３）、エミュレーションプログラムＢ（３４）、ゲストＯＳ（３２）、ユーザソフトウェア（３１）で構成する。従来技術として説明済みである図２と比較して、エミュレーションプログラムを２つ配置していることが特徴である。
【００１４】
この２つのエミュレーションプログラムについて、図５を用いて説明する。
【００１５】
本実施の形態にて使用するエミュレーションレイヤは、エミュレーションプログラムＡ（３３）、エミュレーションプログラムＢ（３４）、ホストＯＳ共有ヒープメモリ（３９）を有する。２つのエミュレーションプログラムはそれぞれ別プロセスで実行し、エミュレーションプログラムＡ（３３）よりエミュレーションプログラムＢ（３４）を生成する。従来のシステムとの相違点として、プロセス同期制御部ＳＮＣ（３３５）（３４５）を有する。このＳＮＣはお互いにエミュレーションプログラムを監視し、エミュレーションプログラム異常時の動作引継ぎ処理やバックアッププログラムを生成する。また、従来はエミュレーションプログラムのヒープメモリ236に配置していた仮想メインメモリ、仮想レジスタをホストＯＳの共有ヒープメモリ（３９）へ配置し、双方のエミュレーションプログラムから仮想メインメモリ（３９２）、仮想レジスタ（３９１）へのアクセスを可能としている。
【００１６】
エミュレーションプログラムＡ（３３）とエミュレーションプログラムＢ（３４）の動作について、図５を用いて説明する。
【００１７】
ホストＯＳ（３５）が起動すると、まずエミュレーションプログラムＡ（３３）を現用系として起動する。エミュレーションプログラム内の各モジュールはスレッドとして起動し、初期設定を開始する。設定が完了すると、ＳＶＰ（３３２）はゲストＯＳ（３２）を仮想メインメモリ（３９２）へロードし、起動処理を実行する。本実施の形態では、ＳＶＰ（３３２）は起動処理実行前にＳＮＣ（３３５）へ起動準備完了通知を行い、ＳＮＣ（３３５）からの起動指示でゲストＯＳ（３２）の実行を開始する。ＳＮＣ（３３５）はＯＳのシステムコールfork()を用いて、エミュレーションプログラムＢ（３４）をエミュレーションプログラムＡ（３３）の複製として作成し、待機系とする。
【００１８】
この場合の、ＳＮＣの動作を図６を用いて説明する。図６はＳＮＣの動作を示すフローチャートである。現用系エミュレーションプログラム（３３）が起動し（４０１）、ＳＶＰからの起動準備完了通知を受けた（４０２）ＳＮＣは、はじめに自プログラムが現用系エミュレーションプログラムであるのか、待機系エミュレーションプログラムであるかを調べる（４０３）。これは、各々のプログラムの属性で判断する。すなわち、自プログラムで行っているプロセスが親プロセスであるか、子プロセスであるかに基づいて判定し、親プロセスであれば現用系エミュレーションプログラム、子プロセスであれば待機系エミュレーションプログラムである。ここで、現用系エミュレーションプログラムである親プロセスであると識別すると、子プロセスである待機系エミュレーションプログラムが存在するか否かを確認する（４０４）。待機系エミュレーションプログラムが存在しない場合、ホストOSのシステムコールであるfork()機能を用いて自プログラムの複製を作成し、待機系エミュレーションプログラムとする（４０５）。
【００１９】
このとき、待機系エミュレーションプログラムは現用系エミュレーションプログラムの完全な複製であり、同じ動作を行うプロセスが２つ実行されることになってしまう。そこで、再度プロセス属性の判定を行い（４０６）、親プロセスである場合には、現用系エミュレーションプログラムとしての動作モード設定（４０７）、ＳＶＰへのエミュレーション開始通知（４０８）を行う。子プロセスである場合には、子プロセスとしての動作モード設定（４１３）、ＳＶＰへのエミュレーション待機通知を行う。なお、待機系エミュレーションプログラム作成後、待機系ＳＮＣからＳＶＰへ行われるエミュレーション待機通知は各モジュールへ即座に通知され、新たな処理が実行される前に各モジュールが停止するものとする。
【００２０】
次に、プロセス属性判定（４０３）で子プロセスであると識別した場合、ならびに子プロセスの判定処理（４０４）で子プロセスが存在する場合の処理について説明する。これは障害監視処理であり、現用系ＳＮＣ-待機系ＳＮＣ間でプロセス間通信を行い実行状態を確認するとともに、対向プロセスの有無確認を行う。現用系エミュレーションプログラム(親プロセス)が異常であると判定した場合（４０９）、待機系エミュレーションプログラム(子プロセス)で親プロセス異常処理（４１０）を実行する。また、待機系エミュレーションプログラム(子プロセス)が異常と判定した場合（４１１）、現用系エミュレーションプログラム(親プロセス)で子プロセス異常処理（４１２）を実行する。
【００２１】
このプロセス異常処理について、図７、図８を用いて説明する。図７は待機系エミュレーションプログラム(子プロセス)における親プロセス異常処理である。親プロセスが実行中である場合（４０９２）、ヘルスチェックに用いている現用系ＳＮＣ-待機系ＳＮＣ間のプロセス間通信機能を用いて、現用系エミュレーションプログラム(親プロセス)の停止処理を要求する（４０９６）。停止処理実行後、さらに実行中であった場合（４０９４）、親プロセスの強制停止（ｋｉｌｌ）を行い（４０９５）、異常処理を終了する。この時点で現用系エミュレーションプログラムは存在せず、待機系エミュレーションプログラムが現用系エミュレーションプログラム(親プロセス)となり、図６のループへと戻る。プロセス属性判定部（４０３）、子プロセスの有無判定（４０４）、待機系エミュレーションプロセス(子プロセス)の生成（４０５）、プロセス属性判定（４０７）、動作モード設定（４０７）、ＳＶＰへのエミュレーション開始通知（４０８）と続き、自プログラムのバックアップ用子プロセス生成、エミュレーションの実行を行う。この時、仮想レジスタ（３９１）、仮想メモリ（３９２）のデータを引き継ぎ、仮想レジスタ（３９１）に格納しているプログラムカウンタの値よりエミュレーションを再開する。この機能により、エミュレーションを実行している現用系エミュレーションプログラムが停止した場合にも、待機系エミュレーションプログラムへ処理を引き継ぐことができ、機能を継続することが可能となる。また、現用系エミュレーションプログラムが自プログラムのバックアップ（待機系エミュレーションプログラム）を自動的に作成するため、プロセスが継続して引き継がれ、異常時にもシステムダウンしにくいシステムとする事が可能である。
【００２２】
図９はこれらの仕組みを、各プロセスに着目して記述したものである。現用系エミュレーションプログラムＡ（３３）が起動し（５０１）、ＳＮＣ（３３５）がＳＶＰ（３３２）からの起動準備完了通知を受けると（５０２）、ＳＮＣ（３３５）は待機系エミュレーションプログラムＢのプロセス有無を確認する（５０３）。初回起動時に待機系エミュレーションプログラムは生成されていないので、自プログラムの複製として、エミュレーションプログラムＢ(子プロセス)（３４）を生成する（５０４）。エミュレーションプログラム（５０４）（５１１）はそれぞれのプロセスの属性(親プロセス、子プロセス)の状態から動作モードを設定し（５０５）（５１２）、ＳＶＰへエミュレーション開始指示（５０６）、エミュレーション待機指示を送信する（５１３）。ここで、現用系エミュレーションプログラム（３３）に障害が発生した場合を想定する。（５０８）にて障害が発生し、ヘルスチェックに失敗、プロセスはそのまま残っている状態に陥ったと想定する（５１５）。この場合、まずＳＮＣ（３４５）はＳＮＣ（３３５）にエミュレーションプログラム終了コマンドを発行する（５１６）。それでも、プロセスが終了されない場合には、エミュレーションプログラムの強制終了を行う（５１８）。現用系エミュレーションプログラムＡ（３３）が終了後、待機系エミュレーションプログラムＢ（３４）は現用系エミュレーションプログラムＢとなり（５１９）、自プログラムのバックアップである待機系エミュレーションプログラムＣを生成する（５２０）（５２３）。その後も、障害発生のたびに、同様のプロセスを繰り返す。
【００２３】
次に、図６（４０９）（４１１）で行われているヘルスチェックについて説明する。このヘルスチェックは各エミュレーションプログラムのＳＮＣ（３３５）-（３４５）間で、プロセス間通信として実行する。
【００２４】
図１０に、ヘルスチェックに用いるデータフォーマットを示す。ヘルスチェックデータ（６０）は１６ｂｉｔからなり、オペレーション（６０１）、ステータス（６０２）、タイムスタンプ（６０３）で構成する。オペレーションフィールド（６０１）は１ｂｉｔからなり、ヘルスチェックデータが通常のヘルスチェックなのか、エミュレーションプログラム異常時の停止要求データなのかを示す。ステータスフィールド（６０２）は、ヘルスチェックデータ送信側エミュレーションプログラムの実行状態を示し、０:実行待機(待機系エミュレーションプログラムの正常状態)、１:命令実行中、２:ｗａｉｔ、３:停止中(エミュレーションプログラム以外の障害)を示す。タイムスタンプフィールドは１３ｂｉｔからなり、送信側システム時計時刻の分以下をミリ秒単位に変換し、フィールドのデータとする。
【００２５】
本実施の形態では、システムが正常動作時、「２００［ｍｓ］+ヘルスチェックにかかる時間」の周期で、ヘルスチェックを実行する。この時、ＳＮＣ（３３５）（３４５）は対向プロセスへヘルスチェックデータを投げると同時に、受信したヘルスチェックデータを刈り取り、データ受信タイムスタンプを更新する。このタイムスタンプが１秒を超えたとき、ヘルスチェック異常とみなす。
【００２６】
上記の通り、本発明は以下の構成を有する。
【００２７】
第1に、単一ＯＳ上にソフトウェアエミュレーションによる1台の仮想計算機を実現する仮想計算機システムにおいて、現用系エミュレーションソフトウェアと待機系エミュレーションソフトウェアを配置し、現用系エミュレーションソフトウェア障害時には待機系エミュレーションソフトウェアに処理を引き継ぎ、待機系にて運用継続を行う。
【００２８】
さらに、現用系エミュレーションソフトウェアと待機系エミュレーションソフトウェアの間でお互いの状態監視を行い、その監視結果に基づき仮想計算機の運用を行う。
【００２９】
または、現用系エミュレーションソフトウェアが障害により待機系エミュレーションソフトウェアに切り替わった後、待機系エミュレーションソフトウェアを現用系エミュレーションソフトウェアとし、さらに現用系となったエミュレーションソフトウェアが待機系エミュレーションソフトウェアを自動的に起動する。
【００３０】
これらの機能により早期に異常を検出し、待機系エミュレーションプログラムへと機能を引き継ぐ事によりシステムダウンが減少し、結果として信頼性の向上が可能となる。
【図面の簡単な説明】
【００３１】
【図１】従来の専用ハードウェアを用いた計算機の構成例
【図２】従来のソフトウェアエミュレーション方式を用いた計算機の構成例
【図３】従来のソフトウェアエミュレーション方式を用いた計算機のエミュレーションプログラム構成例
【図４】エミュレーションプログラムの二重化を実装した計算機の構成例である。
【図５】エミュレーションプログラムの二重化を実装した計算機における、エミュレーションプログラム構成例である。
【図６】エミュレーションプログラムの二重化を実装した計算機における、プロセス同期部ＳＮＣの制御フローの一例である。
【図７】プロセス同期部ＳＮＣにおける、親プロセス異常終了処理制御フローの一例である。
【図８】プロセス同期部ＳＮＣにおける、子プロセス異常終了処理制御フローの一例である。
【図９】エミュレーションプログラム開始から、障害回復まで、各プロセス毎の動作の一例である。
【図１０】ヘルスチェックデータフォーマットの一例である。
【符号の説明】
【００３２】
21・・・ユーザプログラム、22・・・ゲストＯＳ。23・・・エミュレーションプログラム、24・・・ホストＯＳ、25・・・ファームウェア、26・・・汎用ハードウェア、231・・・、232・・・ＳＶＰ、234・・・ＩＯＰ、235・・・ＩＯＣ、2351・・・仮想レジスタ、2352・・・仮想メインメモリ、236・・・ヒープメモリ
【図１】
2006178552.tif 000003
【図２】
2006178552.tif 000004
【図３】
2006178552.tif 000005
【図４】
2006178552.tif 000006
【図５】
2006178552.tif 000007
【図６】
2006178552.tif 000008
【図７】
2006178552.tif 000009
【図８】
2006178552.tif 000010
【図９】
2006178552.tif 000011
【図１０】
2006178552.tif 000012