(57)【要約】【課題】割込みによりエミュレータ−などの仮想計算機環境の提供手段が突然停止することを防止する。【解決手段】割込みモニタをホストＯＳと計算機との間に介在させ、モニタ結果に応じて割込みをホストＯＳではなく、エミュレータに引き渡し、ゲストＯＳの機能によって割込みの例外処理を実行させる。【選択図】図１
2004013240.tif 000002
【特許請求の範囲】
【請求項１】
ホスト計算機上で稼動するホストＯＳと、仮想計算機環境を提供するエミュレータと、エミュレータ上で稼動するゲストＯＳと、仮想計算機の命令セットアーキテクチャ向けに開発されたアプリケーションプログラムからなり、特定の命令セットアーキテクチャを有する計算機上で異なる命令セットアーキテクチャ向けに開発されたプログラムを実行可能な仮想計算機環境を提供する計算機システムにおいて、ハードウェアとホストＯＳとの間に介在し、ホスト計算機から発生する割込み情報を受け取り、エミュレータに通知する割込みモニタを有することを特徴とする計算機システム。
【請求項２】
ホスト計算機上で稼動するホストＯＳと、仮想計算機環境を提供するエミュレータと、エミュレータ上で稼動するゲストＯＳと、仮想計算機の命令セットアーキテクチャ向けに開発されたアプリケーションプログラムとからなり、特定の命令セットアーキテクチャを有する計算機上で異なる命令セットアーキテクチャ向けに開発されたプログラムを実行可能な仮想計算機環境を提供する計算機システムにおいて、ハードウェアとホストＯＳとの間に介在し、ホスト計算機から発生する割込み情報を受け取り、割込み要因を変換してホストＯＳに通知する割込みモニタを有することを特徴とする計算機システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は特定の命令セットアーキテクチャを有する計算機上で異なる命令セットアーキテクチャ向けに開発されたプログラムを実行するプロセッサエミュレータに係り、特にソフトウェアやハードウェアからの割込みによって、上記の異なる命令セットアーキテクチャ向けに開発されたプログラムが異常終了してしまうことを防止するソフトウェア技術に係わる。
【０００２】
【従来の技術】
エミュレータに代表される仮想計算機技術では、ある特定の命令セットアーキテクチャを有する計算機（以下ホスト計算機と呼ぶ）上で、異なる命令セットアーキテクチャ向けに開発されたプログラム（以下アプリケーションプログラムと呼ぶ）を実行することができる。この種の技術は、たとえば特開平１１−６５８５４に開示されているように、ホスト計算機上で稼動するエミュレータプログラムがアプリケーションプログラムをメモリ上に配置し、命令語一つ一つを解読し、アプリケーションプログラムの意図する動作を実現する。つまり、エミュレータはアプリケーションプログラムが前提としている命令セットアーキテクチャの計算機をホスト計算機上に仮想計算機として実現する手段である。
【０００３】
より詳細には、ホスト計算機上にはホスト計算機向けのオペレーティングシステム（以下ホストＯＳと呼ぶ）が稼動しており、エミュレータは、このホストＯＳ上の一プログラムとして稼動する。仮想計算機上でも仮想計算機向けのオペレーティングシステム（以降ゲストＯＳと呼ぶ）が動作しており、仮想計算機向けのアプリケーションプログラムの実行環境を提供する。
【０００４】
以上のような構成により、仮想計算機の範囲内で機能が完結しているアプリケーションプログラムを実行することができる。しかし、利用するハードウェアに依存した動作あるいは機能に関しては、エミュレータによって提供される仮想計算機が実現している範囲を越えて想定外の動作をすることがある。たとえば、先に引例とした特開平１１−６５８５４では、ホストＯＳやエミュレータ自身に不備があり、ＣＰＵから割込み処理が発生した場合、ホストＯＳが異常処理を実施する。具体的には、不正命令の実行のように重大なエラーが発生した場合、ホストＯＳはエミュレータの実行を即時停止し、メモリのダンプ等の例外処理を実行する。
【０００５】
【発明が解決しようとする課題】
上述のように、重大なエラーの検出などでホストＯＳにＣＰＵから割込みが発生した場合には、エミュレータ自身が停止してしまうため、アプリケーションプログラムの側からは仮想計算機が突然停止してしまったかのように見える。しかし、正しくはゲストＯＳの例外処理によってアプリケーションプログラムの後処理が行われるべきであって、ホストＯＳの例外処理によってエミュレータが停止し、ゲストＯＳの例外処理が起動される機会を奪うことが問題である。
【０００６】
そこで、本発明の課題としては、ＣＰＵなどから割込みが発生した場合に、ホストＯＳの例外処理を回避し、ゲストＯＳの例外処理によってアプリケーションプログラムの適切な後処理を実現することにある。
【０００７】
【課題を解決するための手段】
上記の課題は次の手段により解決される。特定の命令セットアーキテクチャを有する計算機上で異なる命令セットアーキテクチャ向けに開発されたプログラムを実行可能な仮想計算機環境を提供する計算機システムであって、ホスト計算機上で稼動するホストＯＳと、仮想計算機環境を提供するエミュレータと、エミュレータ上で稼動するゲストＯＳと、仮想計算機の命令セットアーキテクチャ向けに開発されたアプリケーションプログラムとからなる計算機システムにおいて、ハードウェアとホストＯＳとの間に介在し、ホスト計算機から発生する割込み情報を受け取り、エミュレータに通知する割込みモニタを設けることで、計算機から発生した割込みを、ホストＯＳの処理を回避してゲストＯＳの機能にて例外処理を行わせる。
【０００８】
【発明の実施の形態】
図１に本発明の第１の実施例を示す。ハードウェアが異常を検知して割込み１００が発生すると、割込みモニタで割込み先判定１０１が行なわれる。割込み先判定１０１は、割込み要因を調べ、ホストＯＳで処理すべき割込み要因なのか、ゲストＯＳで処理すべき割込み要因なのかを判定する。この時、ホストＯＳがエミュレータに通知を行う割込み要因であれば、ホストＯＳで処理すべきであると判断し、ホストＯＳがエミュレータに割込み通知を行わない割込み要因であれば、ゲストＯＳで処理すべきであると判断する。
【０００９】
上記ホストＯＳで処理すべき割込み要因である場合は、割込みモニタはホストＯＳに制御を移す。ホストＯＳは割込み（例外）処理１０３を行い、割込みを終了する（処理１０４）。上記ゲストＯＳで処理すべき割込み要因である場合は、割込みモニタはエミュレータに割込み通知１０２を行う。具体的には、エミュレータ内の割込みフラグを１にすることでエミュレータへの割込み通知を行う。割込み通知１０２が完了すると、割込みを終了する（処理１０４）。
【００１０】
割込みが終了し、エミュレータが動作可能になると、エミュレータ内で定期的に実行される割込通知判定１０５が行われる。事前にエミュレータに割込み通知１０２が実行されていなければ、エミュレーションの継続１０９を行う。事前にエミュレータへの割込み通知１０２が実行されていれば、エミュレータはハードウェアが発生した割込みの要因をゲストＯＳでの割込み要因に割り当てるため、ゲストＯＳの割込み要因への変換１０６を行う。
【００１１】
たとえばメモリ障害の割込みについて、ホストＯＳの稼働するハードウェアでは割込み要因が３と定義されており、ゲストＯＳの稼働するハードウェア（エミュレータ）では１と定義されていた場合、割込み要因３（メモリ障害）が発生すると、エミュレータは割込み要因１としてゲストＯＳに割込みの通知を行う。さらに、エミュレータは変換した割込み要因を用いてゲストＯＳに割込み通知１０７を行う。ゲストＯＳに通知が行われると、ゲストＯＳは割込み（例外）処理１０８を行う。割込み（例外）処理１０８が終了すると、エミュレーションの継続１０９を行う。
【００１２】
図５に本実施例における割込み処理の流れを示す。本実施例では、ハードウェア６０５が異常を検知して割込みを発生した際、ホストＯＳ６０３がエミュレータ６０２に対して割込みの通知を行わない割込み要因であっても、割込みモニタ６０４がエミュレータ６０２に割込みを通知することで、エミュエータ６０２が動作可能になった時にゲストＯＳ６０１がアプリケーションプログラム６００の後処理を行うことができる。
【００１３】
図２に本実施例における割込み発生の詳細を示す。同図（ａ）のように、ハードウェアから割込み２００が発生すると、プロセッサは割込み種別毎に異なるアドレスに分岐し、割込み種別毎の割込み処理命令を実行する。すなわち、割込み種別判定２０１を行い、割込み種別に対応する割込み処理アドレス計算２０２を行い、計算で求めた割込み処理アドレスへ分岐２０３する。メモリ２０４には、同図（ｂ）のように割込み種別ごとに決まる割込み処理アドレスから割込み処理命令が格納されている。これによって、割込み種別毎の割込み処理が可能になっている。
【００１４】
図３に本実施例におけるメモリ２０４の割込み処理命令の設定手順である起動時処理の詳細を示す。本システムの起動時には、割込みモニタのロード、ホストＯＳのロードと割込み処理命令の設定が行なわれる。
【００１５】
まずプログラムローダをディスクからメモリに転送し、プログラムローダ起動３００を行う。プログラムローダは、割込みモニタをディスクからメモリに転送し、割込みモニタ起動３０１を行う。割込みモニタは、割込み命令変更３０２でメモリ２０４の割込み処理命令に、割込みモニタへの分岐命令を格納する。さらに、割込みモニタは割込み命令の変更をメモリ保護機構を用いて監視するために、特権レベル取得３０３とメモリ保護設定３０４を行い、割込み処理命令が格納されているアドレスへの書き込み、読み出しがある場合にメモリ保護割込みが発生するように設定する。
【００１６】
続いて、プログラムローダは、ホストＯＳをディスクからメモリに転送し、ホストＯＳ起動３０５を行う。ホストＯＳは割込み命令変更３０６でメモリ２０４の割込み処理命令に、ホストＯＳへの分岐命令を格納する。この時、割込みモニタが割込み処理命令が格納されているアドレスへの書き込み、読み出しでメモリ保護割込みが発生する。割込みモニタは、ホストＯＳへの分岐命令をホストＯＳによる割込み処理の実行１０３に格納する。
【００１７】
以上の手順により、すべての割込みは、割込みモニタに分岐するようにできる。また、割込みモニタ内で割込み処理をホストＯＳで実行すると判断した場合に、ホストＯＳ内の割込み処理命令に分岐することができる。
【００１８】
図４に本発明の第２の実施例における割込み処理の詳細を示す。本実施例では、ゲストＯＳへ割込み通知を行う際、ハードウェアで発生した割込み要因のままホストＯＳに割込みを通知するとホストＯＳがエミュレータに対して割込みを発生しない場合には、割込み内容を変換し、ソフトウェア割込みを用いてホストＯＳに割込みを通知し、ホストＯＳからエミュレータに割込み通知が行なわれる様にする点が第１の実施形態と異なる。
【００１９】
以下では、第１の実施例と異なる部分のみ詳細に説明する。ある割込み要因によって、ハードウェアが割込み５００を発生させると、割込みモニタで割込み先判定５０１が行なわれる。
【００２０】
割込み先判定５０１は、割込み要因を調べ、ホストＯＳで処理すべき割込み要因なのか、ゲストＯＳで処理すべき割込み要因なのかを判定する。この時、ホストＯＳがエミュレータに通知を行う割込み要因であれば、ホストＯＳで処理すべきであると判断し、ホストＯＳがエミュレータに通知を行わない割込み要因であれば、ゲストＯＳで処理すべきであると判断する。
【００２１】
ホストＯＳで処理すべき割込み要因である場合は、割込みモニタはホストＯＳに制御を移す。ホストＯＳは割込み（例外）処理の実行５０７を呼び出して、割込みを終了する。
【００２２】
ゲストＯＳで処理すべき割込み要因である場合は、割込みモニタはホストＯＳからエミュレータに割込み通知が行なわれる割込み要因とするため割込み要因の変更５０２を行う。
【００２３】
さらに、得られた割込み要因を用いてソフト割込み５０３を実行する。ソフト割込み５０３が実行されると、ホストＯＳはエミュレータに割込み通知を行う。エミュレータは、割込み要因をゲストＯＳの割込み要因に変更５０４し、得られた割込み要因でゲストＯＳへ割込み通知５０５を行い、ゲストＯＳによる割込み処理５０６を呼び出して、割込みを終了する。
【００２４】
【発明の効果】
本発明によれば、計算機の発生する割込みを一旦割込みモニタが受け取り、エミュレータに制御を渡すため、ホストＯＳの割込み処理（例外処理）を回避してゲストＯＳによる例外処理を実行できる。これにより、不正な命令や不正なメモリアドレス参照による割込みにより、ホストＯＳがエミュレータ自体の動作を停止させ、ユーザのアプリケーションプログラムが何の後処理も無く停止してしまうことを防止できる。
【図面の簡単な説明】
【図１】本発明の一実施例の割込み処理を示すフローチャート。
【図２】システムの割込み発生時の動作説明図。
【図３】システム起動時の割込みベクトル変更方法の説明図。
【図４】本発明の他の実施例の割込み処理を示すフローチャート。
【図５】本発明における割込み処理の流れを示すフローチャート。
【符号の説明】
２００…割込み、２０１…割込み種別判定、２０２…割込み処理アドレス判定、２０３…割込み処理アドレスに分岐。
【図１】
2004013240.tif 000003
【図２】
2004013240.tif 000004
【図３】
2004013240.tif 000005
【図４】
2004013240.tif 000006
【図５】
2004013240.tif 000007