(57)【特許請求の範囲】
【請求項１】
情報処理装置が実行するハイパーバイザ置き換え方法であって、
第１のメモリ領域に格納されている第１のハイパーバイザのファームウェアを前記情報処理装置が実行中のとき、前記第１のメモリ領域とは異なる第２のメモリ領域に、第２のハイパーバイザのファームウェアを格納し、
ハイパーバイザコールの呼び出し元を動作させたままで、前記第１のハイパーバイザから、ハイパーバイザコールを抑止するよう前記呼び出し元に命令する抑止命令を発行することで、前記呼び出し元にハイパーバイザコールを呼び出す代わりにキューに記憶するようにさせ、
前記情報処理装置が実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報を、前記第１のメモリ領域を指定する第１の値から、前記第２のメモリ領域を指定する第２の値へと書き換え、
前記指定情報の書き換えにしたがって、前記第２のハイパーバイザのファームウェアの実行を開始し、
前記第２のハイパーバイザから、前記抑止命令を解除する解除命令を前記呼び出し元に発行することで、前記キューに記憶されたハイパーバイザコールおよび新たなハイパーバイザコールの呼び出しを許可する
ことを特徴とするハイパーバイザ置き換え方法。
【請求項２】
前記第２のハイパーバイザのファームウェアの実行を開始するよりも前に、前記第１のメモリ領域に格納されており前記第１のハイパーバイザが使用する特定の情報を、前記第２のメモリ領域に格納するデータ展開処理を実行する
ことをさらに含むことを特徴とする請求項１に記載のハイパーバイザ置き換え方法。
【請求項３】
前記特定の情報の第１のフォーマットと、前記第２のハイパーバイザが使用する情報の第２のフォーマットが異なる場合に、前記データ展開処理は、前記特定の情報を前記第１のフォーマットから前記第２のフォーマットに変換するフォーマット変換処理を含む
ことを特徴とする請求項２に記載のハイパーバイザ置き換え方法。
【請求項４】
前記第２のハイパーバイザのバージョンは、前記第１のハイパーバイザのバージョンよりも新しく、
前記第２のハイパーバイザの前記ファームウェアは、前記第１のフォーマットから前記第２のフォーマットへの変換のための命令を含み、
前記情報処理装置は、前記第１のハイパーバイザから、前記第２のメモリ領域の中の前記命令を呼び出すことにより、前記フォーマット変換処理を実行する
ことを特徴とする請求項３に記載のハイパーバイザ置き換え方法。
【請求項５】
前記第１のハイパーバイザのバージョンは、前記第２のハイパーバイザのバージョンよりも新しく、
前記第１のハイパーバイザの前記ファームウェアは、前記フォーマット変換処理のための命令を含み、
前記情報処理装置は、前記命令にしたがって前記フォーマット変換処理を実行する
ことを特徴とする請求項３に記載のハイパーバイザ置き換え方法。
【請求項６】
前記第２のハイパーバイザから前記第１のハイパーバイザに復旧するよう指示する復旧指示を受け付け、
前記第２のハイパーバイザから、ハイパーバイザコールを抑止するよう前記呼び出し元に命令する新たな抑止命令を発行し、
前記指定情報を前記第２の値から前記第１の値へと書き換え、
前記指定情報の書き換えにしたがって、前記第１のハイパーバイザの前記ファームウェアの実行を開始し、
前記第１のハイパーバイザから、前記新たな抑止命令を解除する新たな解除命令を前記呼び出し元に発行する
ことをさらに含むことを特徴とする請求項１から５のいずれか１項に記載のハイパーバイザ置き換え方法。
【請求項７】
書き換え後の前記指定情報を用いて、前記情報処理装置が次に実行する命令のアドレスとして、前記第２のメモリ領域内のアドレスを算出してプログラムカウンタに設定するか、または、前記情報処理装置が実行するハイパーバイザのファームウェアが格納されているメモリ領域であるアクティブ領域にマッピングする対象のメモリ領域を、書き換え後の前記指定情報にしたがって前記第１のメモリ領域から前記第２のメモリ領域に切り換えるよう、マッピングを行う回路に対して指示することによって、前記アクティブ領域にマッピングされた前記第２のメモリ領域内のアドレスが前記プログラムカウンタにより示されるようにすることをさらに含み、
前記第２のハイパーバイザのファームウェアの実行は、書き換え後の前記指定情報に基づいて前記プログラムカウンタが示すこととなった前記第２のメモリ領域内の前記アドレスから、開始される
ことを特徴とする請求項１から６のいずれか１項に記載のハイパーバイザ置き換え方法。
【請求項８】
前記第１の値は、前記第１のメモリ領域の先頭アドレスであり、
前記第２の値は、前記第２のメモリ領域の先頭アドレスであり、
前記第２のハイパーバイザの前記ファームウェア中に含まれる所定の処理のコードの先頭を示す、前記第２のハイパーバイザの前記ファームウェア内での相対アドレスと、前記第２の値との和が、前記情報処理装置が次に実行する命令のアドレスとして、プログラムカウンタに設定され、
前記第２のハイパーバイザのファームウェアの実行は、前記指定情報の前記第２の値への書き換えに応じて前記プログラムカウンタに設定された前記アドレスから、開始される
ことを特徴とする請求項１から６のいずれか１項に記載のハイパーバイザ置き換え方法。
【請求項９】
情報処理装置であって、
１つ以上のメモリモジュールと、
前記１つ以上のメモリモジュール内のいずれか１つのメモリ領域を指定する指定情報によって指定されるメモリ領域に格納されたハイパーバイザのファームウェアを実行する制御部を備え、
前記制御部は、
前記指定情報が、第１のハイパーバイザのファームウェアが格納されている第１のメモリ領域を指定しているときに、前記第１のメモリ領域とは異なる第２のメモリ領域に、第２のハイパーバイザのファームウェアを格納し、
ハイパーバイザコールの呼び出し元を動作させたままで、前記第１のハイパーバイザから、ハイパーバイザコールを抑止するよう前記呼び出し元に命令する抑止命令を発行することで、前記呼び出し元にハイパーバイザコールを呼び出す代わりにキューに記憶するようにさせ、
前記指定情報を、前記第１のメモリ領域を指定する第１の値から、前記第２のメモリ領域を指定する第２の値へと書き換え、
前記第２のハイパーバイザの前記ファームウェアの実行を開始し、
前記第２のハイパーバイザから、前記抑止命令を解除する解除命令を前記呼び出し元に発行することで、前記キューに記憶されたハイパーバイザコールおよび新たなハイパーバイザコールの呼び出しを許可する
ことを特徴とする情報処理装置。
【請求項１０】
前記１つ以上のメモリモジュールのいずれかが所定のアドレスに前記指定情報を記憶しているか、
前記１つ以上のメモリモジュールの数が１であり、論理アドレスを当該１つのメモリモジュールの物理アドレスに変換するアドレス変換回路を前記情報処理装置がさらに備え、前記アドレス変換回路が前記指定情報を記憶しているか、
前記１つ以上のメモリモジュールの数が複数であり、前記複数のメモリモジュール間の切り換えを制御するメモリモジュール切り換え制御回路を前記情報処理装置がさらに備え、前記メモリモジュール切り換え制御回路が前記指定情報を記憶しているか、または、
前記情報処理装置が所定のレジスタをさらに備え、前記所定のレジスタが前記指定情報を記憶している
ことを特徴とする請求項９に記載の情報処理装置。
【請求項１１】
前記制御部は、さらに、書き換え後の前記指定情報を用いて、前記制御部が次に実行する命令のアドレスとして、前記第２のメモリ領域内のアドレスを算出してプログラムカウンタに設定するか、または、前記制御部が実行するハイパーバイザのファームウェアが格納されているメモリ領域であるアクティブ領域にマッピングする対象のメモリ領域を、書き換え後の前記指定情報にしたがって前記第１のメモリ領域から前記第２のメモリ領域に切り換えるよう、マッピングを行う回路に対して指示することによって、前記アクティブ領域にマッピングされた前記第２のメモリ領域内のアドレスが前記プログラムカウンタにより示されるようにし、
前記制御部は、書き換え後の前記指定情報に基づいて前記プログラムカウンタが示すこととなった前記第２のメモリ領域内の前記アドレスから、前記第２のハイパーバイザのファームウェアの実行を開始する
ことを特徴とする請求項９または１０に記載の情報処理装置。
【請求項１２】
前記第１の値は、前記第１のメモリ領域の先頭アドレスであり、
前記第２の値は、前記第２のメモリ領域の先頭アドレスであり、
前記制御部は、前記第２のハイパーバイザの前記ファームウェア中に含まれる所定の処理のコードの先頭を示す、前記第２のハイパーバイザの前記ファームウェア内での相対アドレスと、前記第２の値との和を、前記制御部が次に実行する命令のアドレスとして、プログラムカウンタに設定し、前記プログラムカウンタに設定した前記アドレスから、前記第２のハイパーバイザのファームウェアの実行を開始する
ことを特徴とする請求項９または１０に記載の情報処理装置。
【請求項１３】
第１のハイパーバイザのファームウェアであって、コンピュータに、
ハイパーバイザコールの抑止を解除するようハイパーバイザコールの呼び出し元に命令する解除命令を発行することで、前記第１のハイパーバイザの前記ファームウェアの実行開始前に前記呼び出し元がキューに記憶したハイパーバイザコールの呼び出しおよび新たなハイパーバイザコールの呼び出しを、前記呼び出し元に対して許可し、
前記第１のハイパーバイザから第２のハイパーバイザへの置き換えを指示する置き換え指示に応じて、
前記第１のハイパーバイザの前記ファームウェアが格納されている第１のメモリ領域とは異なる第２のメモリ領域に、前記第２のハイパーバイザのファームウェアを格納し、
前記呼び出し元を動作させたままで、ハイパーバイザコールを抑止するよう前記呼び出し元に命令する抑止命令を発行することで、前記呼び出し元にハイパーバイザコールを呼び出す代わりに前記キューに記憶するようにさせ、
前記コンピュータが実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報を、前記第１のメモリ領域を指定する第１の値から、前記第２のメモリ領域を指定する第２の値へと書き換え、
前記第２のメモリ領域に格納されている前記第２のハイパーバイザの前記ファームウェア内の命令を、前記コンピュータが次に実行する命令として指定することで、前記第１のハイパーバイザを前記第２のハイパーバイザに切り換える、
ことを含む処理を実行させることを特徴とするファームウェア。
【請求項１４】
前記第２のメモリ領域に格納されている前記第２のハイパーバイザの前記ファームウェア内の前記命令を、前記コンピュータが次に実行する命令として指定する処理は、
書き換え後の前記指定情報を用いて、前記コンピュータが次に実行する命令のアドレスとして、前記第２のメモリ領域内のアドレスを算出してプログラムカウンタに設定するか、または、
前記コンピュータが実行するハイパーバイザのファームウェアが格納されているメモリ領域であるアクティブ領域にマッピングする対象のメモリ領域を、書き換え後の前記指定情報にしたがって前記第１のメモリ領域から前記第２のメモリ領域に切り換えるよう、マッピングを行う回路に対して指示することによって、前記アクティブ領域にマッピングされた前記第２のメモリ領域内のアドレスが前記プログラムカウンタにより示されるようにする
ことを含み、
書き換え後の前記指定情報に基づいて前記プログラムカウンタが示すこととなった前記第２のメモリ領域内の前記アドレスから、前記第２のハイパーバイザのファームウェアの実行が開始されることにより、前記第１のハイパーバイザから前記第２のハイパーバイザへの切り換えが行われる
ことを特徴とする請求項１３に記載のファームウェア。
【請求項１５】
前記第１の値は、前記第１のメモリ領域の先頭アドレスであり、
前記第２の値は、前記第２のメモリ領域の先頭アドレスであり、
前記第１のハイパーバイザの前記ファームウェアが前記コンピュータに実行させる前記処理は、前記第２のハイパーバイザの前記ファームウェア中に含まれる所定の処理のコードの先頭を示す、前記第２のハイパーバイザの前記ファームウェア内での相対アドレスと、前記第２の値との和を、前記コンピュータが次に実行する命令のアドレスとして、プログラムカウンタに設定することをさらに含み、
前記指定情報の前記第２の値への書き換えに応じて前記プログラムカウンタに設定された前記アドレスから、前記第２のハイパーバイザのファームウェアの実行が開始されることにより、前記第１のハイパーバイザから前記第２のハイパーバイザへの切り換えが行われる
ことを特徴とする請求項１３に記載のファームウェア。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハイパーバイザのファームウェアの置き換えに関する。
【背景技術】
【０００２】
近年、ハイパーバイザの使用が広まりつつある。ハイパーバイザは仮想化技術の一つである。ハイパーバイザにはいくつか種類があり、ある種のハイパーバイザは、ファームウェアの形で提供される。
【０００３】
ファームウェアの形で提供されるハイパーバイザが使われるコンピュータシステムにおいては、例えば新しいバージョンのハイパーバイザがリリースされたときには、ファームウェアのアップグレードが行われる。あるいは、導入済みの新しいバージョンのハイパーバイザに不具合が見つかったときには、ファームウェアのダウングレードが行われることもあり得る。アップグレードとダウングレードのいずれの場合も、ファームウェアの置き換えが生じる点は同じである。
【０００４】
一方、何らかのファームウェアが使われているコンピュータシステムにおいては、ファームウェアの置き換え（例えばアップグレード）がコンピュータシステムの停止をともなうことがある。例えば、コンピュータが起動するときにのみファームウェアがメモリ上に展開されることが前提のアーキテクチャにおいては、ファームウェアの置き換えは、コンピュータの再起動をともない、したがって、コンピュータの停止をともなう。
【０００５】
また、ある種のサーバが提供するサービスは、できるだけ停止を避けることが求められる。すると、当該サーバにおいては、サービスの停止を避けるために、ファームウェアの置き換えがタイムリに行われないことがあり得る。
【０００６】
よって、システムを停止しなくてもファームウェアを置き換えることのできる技術がもしあれば、当該技術は、タイムリなファームウェアの置き換えを促進するうえで有益である。そこで、例えば、現用系と予備系を有する冗長化システムに関しては、システム全体を一旦停止させることなくファームウェアプログラムを自動的に更新することを目的とした、以下のような更新方法が提案されている。
【０００７】
プログラム管理部が制御プログラムの更新を検出した場合に、現用系と予備系それぞれの制御部に、インタフェースを介して制御プログラムがダウンロードされる。両制御部は、受信した制御プログラムを、ワークメモリを介してフラッシュメモリに格納する。
【０００８】
すると、プログラム管理部が予備系の制御部に対してプログラム更新指示を出す。更新指示を受信した予備系の制御部が、更新したい制御プログラムへの置き換えを行うと、プログラム管理部は、予備系の制御部に対して現用系へ切替指示を出し、現用系の制御部に対して予備系への切替指示を出す。さらに、現用系から予備系となった制御部に対してもプログラム管理部が更新指示を出すことで、更新したい制御プログラムへの置き換えが実現される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００２−３４２１０２号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
情報処理装置の用途によらずにハイパーバイザのファームウェアの置き換えがタイムリに実行され得るようにするには、情報処理装置を停止させずにハイパーバイザのファームウェアの置き換えを実現することが有益である。また、ハイパーバイザは、冗長化システムにおいてのみ使われるものではなく、冗長化されていない情報処理装置においても使われ得る。
【００１１】
そこで本発明は、情報処理装置が冗長化されているか否かによらず、情報処理装置が作動した状態のままでハイパーバイザのファームウェアの置き換えを実現することを目的とする。
【課題を解決するための手段】
【００１２】
一態様において、情報処理装置が実行するハイパーバイザ置き換え方法が提供される。
前記ハイパーバイザ置き換え方法は、第１のメモリ領域に格納されている第１のハイパーバイザのファームウェアを前記情報処理装置が実行中のとき、前記第１のメモリ領域とは異なる第２のメモリ領域に、第２のハイパーバイザのファームウェアを格納することを含む。前記ハイパーバイザ置き換え方法はさらに、前記第１のハイパーバイザから、ハイパーバイザコールを抑止するようハイパーバイザコールの呼び出し元に命令する抑止命令を発行することを含む。
【００１３】
また、前記ハイパーバイザ置き換え方法は、前記情報処理装置が実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報を、前記第１のメモリ領域を指定する第１の値から、前記第２のメモリ領域を指定する第２の値へと書き換えることを含む。
【００１４】
前記ハイパーバイザ置き換え方法はさらに、前記指定情報の書き換えにしたがって、前記第２のハイパーバイザのファームウェアの実行を開始することを含む。そして、前記ハイパーバイザ置き換え方法は、前記第２のハイパーバイザから、前記抑止命令を解除する解除命令を前記呼び出し元に発行することを含む。
【発明の効果】
【００１５】
上記ハイパーバイザ置き換え方法は、情報処理装置が冗長化されているか否かによらず、情報処理装置が実行することのできる方法である。
また、上記ハイパーバイザ置き換え方法によれば、第１のハイパーバイザのファームウェアを実行中の情報処理装置は、作動した状態のままであってよく、すなわち、停止する必要がない。つまり、上記ハイパーバイザ置き換え方法によれば、情報処理装置を停止させなくても、第１のハイパーバイザのファームウェアを第２のハイパーバイザのファームウェアに置き換えて、情報処理装置に第２のハイパーバイザのファームウェアを実行させることができる。
【図面の簡単な説明】
【００１６】
【図１】第１実施形態の情報処理装置の動作を説明する図である。
【図２】第２実施形態の情報処理装置のブロック構成図である。
【図３】第２実施形態の情報処理装置のハードウェア構成図である。
【図４】ハイパーバイザによる仮想化を模式的に説明する図である。
【図５】ハイパーバイザのファームウェアに関する第２実施形態でのメモリ割り当てを説明する図である。
【図６】データ領域の例を示す図である。
【図７】コード領域の例を示す図である。
【図８】ハイパーバイザの置き換えの一例を示すシーケンス図である。
【図９】ハイパーバイザを置き換えるための置き換え処理のフローチャートである。
【図１０】第２実施形態における前処理のフローチャートである。
【図１１】第２実施形態におけるコード展開処理のフローチャートである。
【図１２】第２実施形態におけるデータ展開処理のフローチャートである。
【図１３】第２実施形態における切り換え処理のフローチャートである。
【図１４】ハイパーバイザのファームウェアに関する第３実施形態でのメモリ割り当てを説明する図である。
【図１５】第３実施形態における切り換え処理のフローチャートである。
【発明を実施するための形態】
【００１７】
以下、実施形態について、図面を参照しながら詳細に説明する。具体的には、図１を参照して第１実施形態について説明し、図２〜１３を参照して第２実施形態について説明し、図１４〜１５を参照して第３実施形態について説明する。その後、その他の変形例についても説明する。
【００１８】
図１は、第１実施形態の情報処理装置の動作を説明する図である。図１には不図示の情報処理装置は、メモリとＣＰＵ（Central Processing Unit）を有する。
ＣＰＵは、メモリにプログラムをロードし、メモリをワーキングエリアとしても用いながらプログラムを実行する。ＣＰＵは、ハイパーバイザのファームウェア、ハイパーバイザ上で動作するＯＳ（Operating System）のプログラム、ＯＳ上で動作するアプリケーションプログラムなどの様々なプログラムを実行する。
【００１９】
ハイパーバイザ上の仮想環境は、「ドメイン」、「論理ドメイン」、「パーティション」などと呼ばれる。本明細書では説明の便宜上「ドメイン」という用語を用いるが、具体的なハイパーバイザの種類を限定する趣旨ではない。
【００２０】
ハイパーバイザ上のドメインの数は１でもよいし複数でもよい。各ドメインは、１つのＯＳを含む。また、各ドメインは、１つ以上のデバイスドライバ、および１つ以上のアプリケーションをさらに含んでもよい。図１の例では、ハイパーバイザ上に２つのドメインがある。また、図１では、ドメイン内のＯＳ２ａと２ｂのみが図示されており、デバイスドライバとアプリケーションは省略されている。
【００２１】
具体的には、第１実施形態の情報処理装置は以下のように動作する。
ステップＳ１において情報処理装置（より詳細には、情報処理装置が備えるＣＰＵ）は、メモリ内の第１のメモリ領域に格納されているハイパーバイザ１ａのファームウェアを実行中である。また、図１の例では、ステップＳ１においてＯＳ２ａと２ｂは、ハイパーバイザ１ａ上で動作している。
【００２２】
ステップＳ１のように情報処理装置がハイパーバイザ１ａのファームウェアを実行中のとき、ハイパーバイザ１ａをハイパーバイザ１ｂに置き換えるように指示する入力がユーザから情報処理装置に与えられることがある。例えば、ユーザはアップグレードまたはダウングレードのために、或るバージョンのハイパーバイザ１ａを別のバージョンのハイパーバイザ１ｂに置き換えたいかもしれない。すると、ユーザは、不図示の入力装置（例えばボタンやキーボードなど）を介して、ハイパーバイザ１ａをハイパーバイザ１ｂに置き換えるための置き換え指示を入力する。
【００２３】
置き換え指示が入力された後、ステップＳ２で情報処理装置は、ハイパーバイザ１ａのファームウェアが格納された第１のメモリ領域とは異なる第２のメモリ領域に、ハイパーバイザ１ｂのファームウェアを格納する。
【００２４】
具体的には、ハイパーバイザ１ａのファームウェアは、置き換え対象として指示されたハイパーバイザ１ｂのファームウェアを第２のメモリ領域に格納する処理を情報処理装置に行わせるためのコードを含む。よって、ハイパーバイザ１ａを実行中の情報処理装置は、ハイパーバイザ１ａのファームウェアにしたがって動作することで、ステップＳ２のように、ハイパーバイザ１ｂのファームウェアを第２のメモリ領域に格納する。
【００２５】
続いて、ステップＳ３において情報処理装置は、ハイパーバイザ１ａから、ハイパーバイザコールを抑止するよう、ハイパーバイザコールの呼び出し元に命令する抑止命令を発行する。抑止命令は、ハイパーバイザコールの呼び出し元すべてに対して、それぞれ発行される。図１の例では、具体的には、ハイパーバイザ１ａから、ＯＳ２ａと２ｂのそれぞれに対して抑止命令が発行される。
【００２６】
ハイパーバイザコールは「ハイパーコール」とも呼ばれる。ハイパーバイザコールは、ドメイン内のＯＳ２ａと２ｂがハイパーバイザにアクセスするためのインタフェイスである。
【００２７】
抑止命令を受け取ったＯＳ２ａと２ｂは、ハイパーバイザコールを抑止する。その結果、ＯＳ２ａと２ｂは、ハイパーバイザ１ａへのアクセスを一時的に停止する。抑止命令は、ハイパーバイザ１ａからハイパーバイザ１ｂへの切り換えの最中にＯＳ２ａまたは２ｂからハイパーバイザがアクセスされることを避けるために、発行される。
【００２８】
ところで、情報処理装置は、情報処理装置が実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報３を保持する。
指定情報３は、例えば、ＣＰＵ内の所定のレジスタに記憶されていてもよい。情報処理装置のアーキテクチャに応じて、上記の「所定のレジスタ」は、例えば、アドレッシングにおけるオフセットを表すベースレジスタでもよいし、トラップ命令が検出されたときのジャンプ先を示すためのレジスタでもよい。
【００２９】
また、ＣＰＵがアドレスバスに出力した論理アドレスを物理アドレスに変換するアドレス変換回路を、情報処理装置が含んでもよい。その場合、指定情報３は、アドレス変換回路内のレジスタなどの記憶装置に記憶されていてもよい。
【００３０】
アドレス変換回路は、指定情報３に応じて、同じ論理アドレスを異なる物理アドレスにマッピングする。よって、アドレス変換回路を有する情報処理装置においては、ＣＰＵは、１つのメモリモジュール内の異なるメモリ領域へのアクセスを、同じ論理アドレスを使って行うことができる。
【００３１】
あるいは、指定情報３は、メモリ内の所定のアドレスに記憶されていてもよい。指定情報３が記憶される所定のアドレスは、例えば、ハイパーバイザのファームウェア用の所定の領域内の所定のアドレスであってもよい。または、アーキテクチャによっては、割り込みベクタがメモリ上の所定の領域に記憶され、トラップ命令が検出されたときのジャンプ先が割り込みベクタ内の特定の要素により表されてもよい。その場合、指定情報３が記憶される所定のアドレスは、割り込みベクタ中の特定の要素のアドレスであってもよい。
【００３２】
あるいは、情報処理装置は、物理的に異なる複数のメモリモジュールを有していてもよく、複数のメモリモジュールを切り換えて使ってもよい。その場合、指定情報３は、情報処理装置がメモリモジュールを切り換えて使うためのメモリモジュール切り換え制御回路内に記憶されていてもよい。指定情報３は、例えば、メモリモジュール切り換え制御回路内のレジスタまたはフリップフロップなどの記憶装置に記憶されていてもよいし、メモリモジュール切り換え制御回路内の特定のトランジスタがオンかオフかによって表されてもよい。
【００３３】
以上のように、「指定情報３が具体的には情報処理装置内のどこに記憶されるか」ということは、実施形態に応じて様々であってよい。また、指定情報３は、例えば「メモリと、ＣＰＵ内のレジスタの双方」といったように、情報処理装置内の複数の装置に記憶されていてもよい。
【００３４】
指定情報３が具体的にはどこに記憶されるにしろ、上記のステップＳ１〜Ｓ３では、図１において矢印で示すように、指定情報３は、ハイパーバイザ１ａのファームウェアが格納された第１のメモリ領域を指定している。そこで、ステップＳ４において情報処理装置は、指定情報３を、第１のメモリ領域を指定する第１の値から、第２のメモリ領域を指定する第２の値へと書き換える。そして、情報処理装置は、指定情報３の書き換えにしたがって、ハイパーバイザ１ｂのファームウェアの実行を開始する。
【００３５】
具体的には、ハイパーバイザ１ａのファームウェアは、指定情報３の書き換えのためのコードと、ハイパーバイザ１ａからハイパーバイザ１ｂへの切り換えのためのコードを含む。したがって、ステップＳ４で情報処理装置は、ハイパーバイザ１ａのファームウェアにしたがって動作することで指定情報３を書き換え、ハイパーバイザ１ａからハイパーバイザ１ｂへの切り換えを実行する。その結果として、ステップＳ４において情報処理装置は、ハイパーバイザ１ｂのファームウェアの実行を開始する。
【００３６】
なお、ステップＳ４の時点におけるＯＳ２ａと２ｂは、ステップＳ３での指示にしたがってハイパーバイザへのアクセスを一時的に停止したままである。
そして、ハイパーバイザ１ａからハイパーバイザ１ｂへの切り換えは、ＯＳ２ａにとっては透過的である。すなわち、ＯＳ２ａがハイパーバイザ１ａにアクセスするためのインタフェイスと、ＯＳ２ａがハイパーバイザ１ｂにアクセスするためのインタフェイスは、同じハイパーバイザコールである。したがって、ＯＳ２ａは、ハイパーバイザが切り換えられたことを認識しない。また、ハイパーバイザ１ａからハイパーバイザ１ｂへの切り換えは、ＯＳ２ｂにとっても同様に透過的である。
【００３７】
そのため、図１では、ステップＳ１〜Ｓ３ではハイパーバイザ１ａのブロックの上に描かれているＯＳ２ａと２ｂのブロックが、ステップＳ４以降ではハイパーバイザ１ｂのブロックの上に描かれている。換言すれば、ステップＳ４でのハイパーバイザの切り換えの結果、ＯＳ２ａと２ｂは、ハイパーバイザ１ｂ上で動作するようになる。
【００３８】
ここで、ＯＳ２ａと２ｂにとっては、ステップＳ３での抑止命令が依然として有効である。よって、ＯＳ２ａと２ｂは、ステップＳ４ではまだ、ハイパーバイザ１ｂへの実際のアクセスは行わない。
【００３９】
そして、次のステップＳ５で情報処理装置は、ハイパーバイザ１ｂから、抑止命令を解除する解除命令を発行する。解除命令は、ハイパーバイザコールの呼び出し元すべてにそれぞれ発行される。図１の例では、具体的には、ハイパーバイザ１ｂから、ＯＳ２ａと２ｂのそれぞれに対して、解除命令が発行される。
【００４０】
上記のとおりハイパーバイザの切り換えはＯＳ２ａと２ｂにとって透過的に行われる。したがって、ＯＳ２ａと２ｂにとっては、単に、「以前、抑止するように命令されたハイパーバイザコールが、今、解禁された」と認識される。
【００４１】
ステップＳ５で解除命令を受け取ったＯＳ２ａと２ｂは、以後、必要に応じてハイパーバイザコールを呼び出す。つまり、ハイパーバイザ１ｂ上で動作するＯＳ２ａと２ｂは、ステップＳ５で解除命令を受け取ることにより、実際にハイパーバイザ１ｂにアクセスすることができるようになる。
【００４２】
なお、図１の第１実施形態では、ハイパーバイザへのアクセスがＯＳからのハイパーバイザコールを介して行われる。そのため、抑止命令と解除命令は、ＯＳ２ａと２ｂに対して発行される。他方、デバイスドライバがハイパーバイザコールを呼び出すことのある実施形態においては、ハイパーバイザ１ａは抑止命令をデバイスドライバに対しても発行し、ハイパーバイザ１ｂは解除命令をデバイスドライバに対しても発行する。「抑止命令と解除命令がＯＳに対してのみ発行されるか、それともＯＳとデバイスドライバの双方に対して発行されるか」という違いによらず、抑止命令はハイパーバイザへのアクセスを抑止し、解除命令はハイパーバイザへのアクセスを解禁する。
【００４３】
以上、図１に示したように情報処理装置が動作することにより、情報処理装置の再起動（具体的には、電源の遮断と再投入によるＣＰＵの再起動）なしに、ハイパーバイザの置き換えが実現される。つまり、ハイパーバイザのファームウェアの置き換えは、情報処理装置が作動した状態のままで（より詳しくは、情報処理装置に電源が入っている状態のまま、かつ、ＯＳ２ａと２ｂも動作中のままで）、行われる。このように、第１実施形態によれば、情報処理装置を停止させなくても、ハイパーバイザ１ａのファームウェアをハイパーバイザ１ｂのファームウェアに置き換えて、情報処理装置にハイパーバイザ１ｂのファームウェアを実行させることができる。
【００４４】
以上のように、第１実施形態によるハイパーバイザの置き換えは、ドメイン上で実行されるユーザプログラム（すなわち、ＯＳ、デバイスドライバ、アプリケーションなど）の停止を引き起こさない。換言すれば、第１実施形態によるハイパーバイザの置き換えは、ユーザプログラムに対して透過的である。よって、第１実施形態によれば、停止することが好ましくないサービスを提供するために情報処理装置が使われている場合にも、ハイパーバイザの置き換えに起因するサービスの中断が生じない。
【００４５】
したがって、情報処理装置（例えばサーバ）の管理者は、サービスの提供スケジュールとは独立して、タイムリにハイパーバイザの置き換えを決断することができる。その結果、タイムリなハイパーバイザの置き換えが促進される。タイムリなハイパーバイザの置き換えは、例えば、脆弱性を修正するパッチが適用された新たなバージョンのハイパーバイザがリリースされたときには、セキュリティ向上の観点で好ましい。
【００４６】
また、場合によっては、置き換えられたハイパーバイザ１ｂに後から不具合が見つかって、ハイパーバイザ１ｂをハイパーバイザ１ａに戻す必要が生じることもあり得る。そのような場合でも、上記と同様にして、ＣＰＵの停止をともなわずにハイパーバイザ１ｂからハイパーバイザ１ａへの置き換えが可能である。つまり、仮にハイパーバイザ１ｂに不具合が見つかったとしても、ＣＰＵを停止させる必要がないし、ユーザプログラムを停止させる必要もない。
【００４７】
また、メモリ内に第１のメモリ領域と第２のメモリ領域があり、情報処理装置が指定情報３を保持していれば、第１実施形態によるハイパーバイザの置き換えは実現可能である。つまり、情報処理装置は、現用系と待機系を含む冗長化システムである必要はない。
【００４８】
もちろん、メモリが冗長化されていてもよい。つまり、第１のメモリ領域と第２のメモリ領域が物理的に異なるメモリモジュール上にあってもよい。
いずれにせよ、第１実施形態によれば、２世代のハイパーバイザ１ａと１ｂのファームウェアを情報処理装置が２つのメモリ領域に同時に保持することにより、ＣＰＵのリセットを必要とせずに、ハイパーバイザの置き換えが可能となる。
【００４９】
続いて、図２〜１３を参照して第２実施形態について説明する。なお、以下では説明の便宜上、現在動作中のハイパーバイザを「現ハイパーバイザ」という。また、現ハイパーバイザを別の或るハイパーバイザに置き換える場合に、置き換え対象の当該或るハイパーバイザを「対象ハイパーバイザ」という。
【００５０】
例えば、バージョン２のハイパーバイザが現在動作中であり、バージョン２からバージョン３へのアップグレードを行う場合、現ハイパーバイザはバージョン２のハイパーバイザであり、対象ハイパーバイザはバージョン３のハイパーバイザである。逆に、バージョン３のハイパーバイザが現在動作中であり、バージョン３からバージョン２へのダウングレードを行う場合、現ハイパーバイザはバージョン３のハイパーバイザであり、対象ハイパーバイザはバージョン２のハイパーバイザである。
【００５１】
図２は第２実施形態の情報処理装置のブロック構成図である。図２の情報処理装置１００は管理部１１０と制御部１２０を有する。管理部１１０と制御部１２０は、協働して、ハイパーバイザのファームウェアの置き換えのための処理（以下「置き換え処理」ともいう）を行う。また、情報処理装置１００は、管理部１１０と制御部１２０の双方からアクセス可能な格納部１３０と、少なくとも制御部１２０からアクセス可能なＤＩＭＭ（Dual In-line Memory Module）１４０を有する。
【００５２】
管理部１１０は、対象ハイパーバイザのファームウェアを格納する格納部１１１を有する。格納部１１１に対象ハイパーバイザのファームウェアが格納されると、管理部１１０は、置き換え処理を開始する。具体的には、管理部１１０は、格納部１１１に格納された対象ハイパーバイザのファームウェアを格納部１３０にコピーし、コピーが完了すると、制御部１２０にコピーの完了を通知する。
【００５３】
制御部１２０は、前処理部１２１とコード展開部１２２とデータ更新部１２３と切り換え部１２４を有する。また、詳しくは後述するが、制御部１２０は、ＣＰＵがハイパーバイザのファームウェアを実行することにより実現される。すなわち、ハイパーバイザのファームウェアは、仮想環境をドメインに対して提供するためのコードだけでなく、前処理部１２１とコード展開部１２２とデータ更新部１２３と切り換え部１２４を実現するためのコードも含む。制御部１２０の動作の概要は以下のとおりである。
【００５４】
まず、前処理部１２１が上述の管理部１１０からの完了の通知を受け取る。通知の受け取りを契機として、前処理部１２１は、置き換え処理を続行するかそれとも終了するかを決定する。
【００５５】
そして、前処理部１２１は、置き換え処理の終了を決定した場合は、置き換え処理の終了を管理部１１０に通知する。逆に、前処理部１２１が置き換え処理の続行を決定した場合は、コード展開部１２２が、格納部１３０に格納された対象ハイパーバイザのファームウェアのうちのプログラムコードの部分を、ＤＩＭＭ１４０内の適宜の領域にコピーする。
【００５６】
以下では説明の便宜上、ハイパーバイザのファームウェアのうち、プログラムコードの部分を「コード領域」ともいう。また、ハイパーバイザのファームウェアのうちデータの部分を「データ領域」ともいう。
【００５７】
なお、ＤＩＭＭ１４０には、ハイパーバイザ用に使われる少なくとも２つの領域があり、一方の領域には現ハイパーバイザのファームウェア１４１が格納されている。コード展開部１２２は、現ハイパーバイザのファームウェア１４１が格納されていない方の領域に、格納部１３０から、対象ハイパーバイザのファームウェア１４２のコード領域をコピーする。
【００５８】
以下では説明の便宜上、現ハイパーバイザのファームウェア１４１が格納されている領域を「アクティブ領域」ともいう。また、現ハイパーバイザのファームウェア１４１が格納されていない方の領域を「非アクティブ領域」ともいう。
【００５９】
さらに、データ更新部１２３が、格納部１３０に格納された対象ハイパーバイザのファームウェアのデータ領域を、ＤＩＭＭ１４０の非アクティブ領域に展開する。また、データ更新部１２３は、現ハイパーバイザのファームウェア１４１のデータ領域に含まれる一部のデータを、必要に応じてフォーマット変換したうえで、ＤＩＭＭ１４０の非アクティブ領域に展開する。
【００６０】
そして、切り換え部１２４が現ハイパーバイザから対象ハイパーバイザへの切り換えを行う。切り換えにともなう処理の詳細は後述するが、概要は、図１のステップＳ３〜Ｓ５の処理と類似である。また、切り換え部１２４の一部の機能は、現ハイパーバイザのファームウェア１４１をＣＰＵが実行することによって実現され、切り換え部１２４の他の機能は、対象ハイパーバイザのファームウェア１４２をＣＰＵが実行することによって実現される。
なお、現ハイパーバイザから対象ハイパーバイザへの切り換えの完了後、切り換え部１２４は、置き換え処理の完了を管理部１１０に通知する。
【００６１】
以上のようにして管理部１１０と制御部１２０により行われる置き換え処理によれば、情報処理装置１００を物理的に再起動しなくても、現ハイパーバイザが対象ハイパーバイザに置き換えられる。つまり、ハイパーバイザを置き換えるためには電源の遮断と再投入は不要であり、情報処理装置１００が作動した状態のまま、ハイパーバイザが置き換えられる。よって、現ハイパーバイザから対象ハイパーバイザへの置き換えは、情報処理装置１００が提供するサービスの停止を招くことなく、実行される。
【００６２】
したがって、現ハイパーバイザから対象ハイパーバイザへの置き換えのスケジュールを決めるのに、サービスを停止することが許容されるタイミングを考慮に入れる必要はない。つまり、第２実施形態によれば、任意のタイミングで現ハイパーバイザから対象ハイパーバイザへの置き換えを行うことが可能であり、タイムリな置き換えが実現される。
【００６３】
続いて、図２の情報処理装置１００のハードウェア構成について、図３のハードウェア構成図を参照して説明する。
情報処理装置１００は、具体的には、サービスプロセッサ２１０と、１枚以上のシステムボードを有する。図３には、３枚のシステムボード２２０ａ〜２２０ｃが図示されているが、システムボード２２０ｂと２２０ｃは省略可能である。あるいは逆に、情報処理装置１００は４枚以上のシステムボードを有していてもよい。
【００６４】
また、情報処理装置１００は、入力装置２３０と出力装置２４０と記憶装置２５０とネットワーク接続装置２６０と駆動装置２７０を有する。そして、サービスプロセッサ２１０とシステムボード２２０ａ〜２２０ｃと入力装置２３０と出力装置２４０と記憶装置２５０とネットワーク接続装置２６０と駆動装置２７０は、互いにバス２８０で接続されている。
【００６５】
駆動装置２７０には、コンピュータ読み取り可能な記憶媒体２９０がセットされてもよい。また、バス２８０の代わりにクロスバスイッチが使われてもよい。
また、サービスプロセッサ２１０は、ＣＰＵ２１１とＮＯＲ型フラッシュメモリ２１２とＮＡＮＤ型フラッシュメモリ２１３を有する。ＣＰＵ２１１はＮＯＲ型フラッシュメモリ２１２およびＮＡＮＤ型フラッシュメモリ２１３と接続されている。もちろん、サービスプロセッサ２１０が備えるメモリの種類は、図３の例には限定されず、実施形態に応じて適宜変更されてもよい。
【００６６】
そして、システムボード２２０ａは、ＣＰＵ２２１とＥＰＲＯＭ（Erasable Programmable Read Only Memory）２２２とＳＲＡＭ（Static Random Access Memory）２２３とＤＩＭＭ２２４を有する。ＣＰＵ２２１は、ＥＰＲＯＭ２２２およびＤＩＭＭ２２４と接続されている。また、ＤＩＭＭ２２４には、ＥＰＲＯＭ２２２とＳＲＡＭ２２３も接続されている。
【００６７】
もちろん、システムボード２２０ａが備えるメモリの種類は、図３の例には限定されず、実施形態に応じて適宜変更されてもよい。また、システムボード２２０ｂと２２０ｃも、システムボード２２０ａと同様に構成されている。
【００６８】
サービスプロセッサ２１０は、システムボード２２０ａ〜２２０ｃとは独立して動作する。サービスプロセッサ２１０は、例えば、不図示のセンサの出力に基づいて電圧や温度などを監視し、監視結果に応じた適宜の処理を実行してもよい。また、サービスプロセッサ２１０は、情報処理装置１００を強制的に再起動する機能を提供してもよい。
【００６９】
具体的には、ＮＯＲ型フラッシュメモリ２１２には、サービスプロセッサ２１０用のファームウェアが予め格納されている。サービスプロセッサ２１０のＣＰＵ２１１は、ＮＯＲ型フラッシュメモリ２１２に格納されたファームウェアにしたがって、ＮＯＲ型フラッシュメモリ２１２をワーキングエリアとしても用いながら、動作する。
【００７０】
また、ＮＡＮＤ型フラッシュメモリ２１３は、サービスプロセッサ２１０とシステムボード２２０ａ〜２２０ｃとの間のデータ交換のために使われる。
例えば、システムボード２２０ａのハイパーバイザのファームウェアを置き換えるには、対象ハイパーバイザのファームウェア１４２が、システムボード２２０ａの外部からシステムボード２２０ａ上にコピーされる。本実施形態では、対象ハイパーバイザのファームウェア１４２は、一旦サービスプロセッサ２１０のＮＡＮＤ型フラッシュメモリ２１３に格納され、ＮＡＮＤ型フラッシュメモリ２１３からシステムボード２２０ａ内のＥＰＲＯＭ２２２へとコピーされる。その後、対象ハイパーバイザのファームウェア１４２は、システムボード２２０ａ内でＥＰＲＯＭ２２２からＤＩＭＭ２２４へとコピーされる。
【００７１】
ＮＡＮＤ型フラッシュメモリ２１３は、例えば上記のようにして対象ハイパーバイザのファームウェア１４２をサービスプロセッサ２１０からシステムボード２２０ａに受け渡すためのインタフェイスとして使われる。
【００７２】
なお、システムボード２２０ａ〜２２０ｃ上でそれぞれ動作中のハイパーバイザは、種類またはバージョンが互いに異なっていてもよい。換言すれば、各システムボード上のハイパーバイザは互いに独立している。よって、ある１つのシステムボード上のハイパーバイザの置き換えは、他のシステムボードとは独立して実行することが可能である。以下では便宜上、システムボード２２０ａ上のハイパーバイザの置き換えを例に説明する。
【００７３】
図２の管理部１１０は、図３のサービスプロセッサ２１０により実現される。換言すれば、ＮＯＲ型フラッシュメモリ２１２に格納されるサービスプロセッサ２１０用のファームウェアは、サービスプロセッサ２１０を管理部１１０として動作させるためのコードを含む。
【００７４】
そして、管理部１１０内で対象ハイパーバイザのファームウェアを格納する格納部１１１は、サービスプロセッサ２１０内のＮＡＮＤ型フラッシュメモリ２１３により実現されてもよい。もちろん、ＮＡＮＤ型フラッシュメモリ２１３の代わりに、書き換え可能な他の種類のメモリが、格納部１１１として使われてもよい。
【００７５】
また、システムボード２２０ａ上のハイパーバイザが置き換えられる場合、対象ハイパーバイザのファームウェアがコピーされる図２の格納部１３０は、システムボード２２０ａ内のＥＰＲＯＭ２２２により実現されてもよい。もちろん、ＥＰＲＯＭ２２２の代わりに、書き換え可能な他の種類のメモリが、格納部１３０として使われてもよい。
【００７６】
また、システムボード２２０ａ上のハイパーバイザが置き換えられる場合、図２のＤＩＭＭ１４０は、システムボード２２０ａ内のＤＩＭＭ２２４である。そして、図２の制御部１２０は、システムボード２２０ａのＣＰＵ２２１がＤＩＭＭ２２４上のハイパーバイザのファームウェアを実行することによって実現される。
【００７７】
なお、ＤＩＭＭ２２４には、ハイパーバイザのファームウェアだけでなく、ＯＳやアプリケーションなどその他の様々なプログラムもロードされる。ＣＰＵ２２１は、ＤＩＭＭ２２４をワーキングエリアとしても利用しながら、ＤＩＭＭ２２４にロードされた種々のプログラムを実行する。
【００７８】
ところで、サービスプロセッサ２１０は、管理部１１０として動作するだけでなく、上記のとおり電圧の監視など様々な処理を行う。そして、サービスプロセッサ２１０が行う処理の中には、サービスプロセッサ２１０とシステムボード２２０ａ〜２２０ｃとの間で制御データのようなサイズの小さなデータの入出力をともなう処理がある。例えば、システムボード２２０ａ上のＳＲＡＭ２２３は、サービスプロセッサ２１０とシステムボード２２０ａとの間での制御データの交換用のインタフェイスとして用いられてもよい。
【００７９】
また、上記のとおり、図２の管理部１１０は、格納部１１１から格納部１３０に対象ハイパーバイザのファームウェアをコピーし終わると、コピーの完了を制御部１２０の前処理部１２１に通知する。そして、切り換え部１２４は、ハイパーバイザの置き換えが完了すると、置き換えの完了を管理部１１０に通知する。
【００８０】
これらの完了の通知も、ＳＲＡＭ２２３を介して行われてもよい。例えば、サービスプロセッサ２１０のＣＰＵ２１１は、システムボード２２０ａのＳＲＡＭ２２３内の所定の領域のフラグをセットすることで、システムボード２２０ａのＣＰＵ２２１にコピーの完了を通知してもよい。同様に、システムボード２２０ａのＣＰＵ２２１は、ＳＲＡＭ２２３内の別の所定の領域のフラグをセットすることで、サービスプロセッサ２１０のＣＰＵ２１１に置き換えの完了を通知してもよい。
【００８１】
さて、入力装置２３０は、例えば、キーボード、ボタン、マウスやタッチスクリーンなどのポインティングデバイス、マイク、またはそれらの組み合わせである。出力装置２４０は、例えば、ディスプレイ、スピーカ、またはそれらの組み合わせである。ディスプレイはタッチスクリーンであってもよい。
【００８２】
そして、記憶装置２５０は、例えばハードディスク装置などの外部記憶装置である。例えばＯＳやアプリケーションなどの種々のプログラムは、記憶装置２５０に格納されており、記憶装置２５０からＤＩＭＭ２２４へとロードされる。
【００８３】
また、ネットワーク接続装置２６０は、例えば、有線ＬＡＮ（Local Area Network）、無線ＬＡＮ、またはその双方のネットワークインタフェイスを提供する装置である。ネットワーク接続装置２６０は、例えば、ＮＩＣ（Network Interface Card）でもよい。
【００８４】
駆動装置２７０は、コンピュータ読み取り可能な記憶媒体２９０の駆動装置である。記憶媒体２９０は、例えば、磁気ディスク、光磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disk）などの光ディスク、ＵＳＢ（Universal Serial Bus）メモリカードなどの半導体メモリのいずれであってもよい。
【００８５】
なお、図３に例示したＮＯＲ型フラッシュメモリ２１２、ＮＡＮＤ型フラッシュメモリ２１３、ＥＰＲＯＭ２２２、ＳＲＡＭ２２３、ＤＩＭＭ２２４、記憶装置２５０、および記憶媒体２９０は、いずれも、有形の（tangible）記憶媒体の例である。換言すれば、図３に例示した上記の有形の記憶媒体は、信号搬送波のような一時的な（transitory）媒体ではない。
【００８６】
ところで、図２および図３のように構成された情報処理装置１００では、ハイパーバイザによる仮想化が実現される。図４は、ハイパーバイザによる仮想化を模式的に説明する図である。なお、上記のとおり各システムボード上のハイパーバイザは互いに独立しているので、図４にはシステムボード２２０ａにおける仮想化を例示した。
【００８７】
情報処理装置１００は様々なハードウェア３１０を含む。ハードウェア３１０の例は、システムボード２２０ａ上のＣＰＵ２２１およびＤＩＭＭ２２４である。ハードウェア３１０の他の例は、システムボード２２０ａの外部の入出力装置（以下「Ｉ／Ｏ」と略記）３１１である。Ｉ／Ｏ３１１の具体例は、例えば、入力装置２３０、出力装置２４０、および記憶装置２５０、駆動装置２７０などである。ハードウェア３１０は、ネットワーク接続装置２６０などのその他の装置をさらに含んでもよい。
【００８８】
そして、ハイパーバイザ３２０は、物理的なハードウェア３１０を隠蔽し、仮想環境を提供する。ハイパーバイザ３２０により提供される仮想環境は、上記のとおり「ドメイン」とも呼ばれる。
【００８９】
図４の例では、システムボード２２０ａ上に３つのドメイン３３０ａ〜３３０ｃがある。各ドメインでは、ＯＳ、デバイスドライバ、およびアプリケーションが動作する。
ところで、ドメイン３３０ａ〜３３０ｃからハイパーバイザ３２０へのアクセスは、ハイパーバイザコールを介して行われる。例えば、ＯＳのみがハイパーバイザコールを呼び出す実施形態も可能だし、ＯＳとデバイスドライバの双方がハイパーバイザコールを呼び出す実施形態も可能である。
【００９０】
そして、ドメイン３３０ａにおけるハイパーバイザコールの呼び出し元（つまり、ＯＳ、デバイスドライバ、またはその双方）は、保留制御部３３１ａを有する。ドメイン３３０ｂと３３０ｃも同様に、それぞれ保留制御部３３１ｂと３３１ｃを含む。
【００９１】
保留制御部３３１ａは、ハイパーバイザコールの抑止をドメイン３３０ａに命令する抑止命令をハイパーバイザ３２０から受け取ると、ハイパーバイザコールを抑止する。すなわち、保留制御部３３１ａは、抑止命令を受け取ると、ハイパーバイザ３２０へのアクセスを保留する。その結果、ドメイン３３０ａからハイパーバイザ３２０へのアクセスは一時的に停止される。
【００９２】
また、保留制御部３３１ａは、抑止命令を解除する解除命令をハイパーバイザ３２０から受け取ると、ハイパーバイザコールの保留を解除する。その結果、ドメイン３３０ａからハイパーバイザ３２０へのアクセスは再開される。
【００９３】
なお、保留制御部３３１ａは、ハイパーバイザコールを記憶するための不図示のキューを有してもよい。保留制御部３３１ａは、抑止命令を受けてから解除命令を受けるまでの期間中には、ハイパーバイザコールを実際に呼び出すことはせず、代わりに、呼び出そうとするハイパーバイザコールの内容を上記キューに記憶してもよい。
【００９４】
保留制御部３３１ａは、例えば、ハイパーバイザコールが許可されているか否かを示す制御フラグを利用してもよい。保留制御部３３１ａは、制御フラグの値に応じて、ハイパーバイザコールを呼び出すか、それともハイパーバイザコールの内容をキューに記憶するかを決定することができる。
【００９５】
例えば、保留制御部３３１ａは、抑止命令を受けると、制御フラグを「ハイパーバイザコールが禁止されている」と示す値（例えば０）に設定してもよい。また、保留制御部３３１ａは、解除命令を受けると、制御フラグを「ハイパーバイザコールが許可されている」と示す値（例えば１）に設定してもよい。
【００９６】
あるいは、ハイパーバイザ３２０からの抑止命令の発行は、ハイパーバイザ３２０が上記制御フラグの値を１から０に書き換えることにより実現されてもよい。そして、ハイパーバイザ３２０からの解除命令の発行は、ハイパーバイザ３２０が上記制御フラグの値を０から１に書き換えることにより実現されてもよい。
【００９７】
保留制御部３３１ｂと３３１ｃも保留制御部３３１ａと同様に動作する。すなわち、ＯＳ、デバイスドライバ、またはその双方に含まれる保留制御部３３１ａ〜３３１ｃは、ハイパーバイザコールの保留と再開を制御する。
【００９８】
続いて、図５〜１３を参照して第２実施形態についてさらに詳しく説明する。
図５は、ハイパーバイザのファームウェアに関する第２実施形態でのメモリ割り当てを説明する図である。具体的には、図５は、図３のＤＩＭＭ２２４に相当する図２のＤＩＭＭ１４０における、物理的なメモリ割り当てを説明する図である。
【００９９】
なお、図５に示す「Ａ０」〜「Ａ５」というアドレスは、ＤＩＭＭ１４０（つまりＤＩＭＭ２２４）の物理アドレスである。また、ドメイン３３０ａ〜３３０ｃはＤＩＭＭ１４０の物理アドレス（すなわち実マシンの物理アドレス）を認識しない。
【０１００】
図５に示すように、ハイパーバイザ用の領域４００は、アドレスＡ０から始まる共通領域４１０を含む。また、ハイパーバイザ用の領域４００は、２つのバージョンのハイパーバイザのファームウェアをそれぞれ格納するための２つの領域を含む。以下では説明の便宜上、２つの領域のうちアドレスＡ１から始まる領域を「上位領域４２０」といい、アドレスＡ３から始まる領域を「下位領域４３０」という。第２実施形態では、アドレスＡ０、Ａ１、およびＡ３は、予め決められた固定的なアドレスである。
【０１０１】
図２の現ハイパーバイザのファームウェア１４１は、状況によって、上位領域４２０に格納されていることもあるし、下位領域４３０に格納されていることもある。したがって、対象ハイパーバイザのファームウェア１４２がコピーされる領域も、状況によって、下位領域４３０かもしれないし、上位領域４２０かもしれない。
【０１０２】
換言すれば、「上位領域４２０がアクティブ領域であり、下位領域４３０が非アクティブ領域である」という場合もあるし、「上位領域４２０が非アクティブ領域であり、下位領域４３０がアクティブ領域である」という場合もある。後述のフローチャートから明らかなように、上位領域４２０と下位領域４３０は、交互にアクティブ領域になる。
【０１０３】
共通領域４１０には、具体的には有効マップアドレス４１１が記憶される。有効マップアドレス４１１は、上位領域４２０と下位領域４３０のどちらに現ハイパーバイザのファームウェア１４１が格納されているのかを示す。有効マップアドレス４１１は図１の指定情報３の具体例の一つである。
【０１０４】
換言すれば、有効マップアドレス４１１は、現在有効なアドレスマップが格納されているアドレスを示す（アドレスマップについては図６とともに後述する）。より具体的には、有効マップアドレス４１１は、上位領域４２０の先頭アドレスＡ１または下位領域４３０の先頭アドレスＡ３を示す。
【０１０５】
また、上位領域４２０には現ハイパーバイザのファームウェア１４１または対象ハイパーバイザのファームウェア１４２が格納される。いずれにしろ、ハイパーバイザのファームウェアは、データ領域４２１とコード領域４２２を含む。図５の例では、データ領域４２１はアドレスＡ１から始まり、コード領域４２２はアドレスＡ２から始まる。
【０１０６】
そして、下位領域４３０には対象ハイパーバイザのファームウェア１４２または現ハイパーバイザのファームウェア１４１が格納される。いずれにしろ、ハイパーバイザのファームウェアは、データ領域４３１とコード領域４３２を含む。図５の例では、データ領域４３１はアドレスＡ３から始まり、コード領域４３２はアドレスＡ４から始まる。
【０１０７】
なお、実施形態に応じて、アドレスＡ１からアドレス（Ａ２−１）までのデータ領域４２１全体にデータがあってもよい。あるいは、ｊ＞１として、アドレスＡ１からアドレス（Ａ２−ｊ）までにのみデータがあり、データ領域４２１のうちの残りの領域（すなわちアドレス（Ａ２−ｊ＋１）からアドレス（Ａ２−１）までの領域）は使われなくてもよい。つまり、データ領域４２１はパディングを含んでいてもよい。コード領域４２２、データ領域４３１、およびコード領域４３２も同様に、使われない領域を末尾に含んでいてもよい。
【０１０８】
ところで、データ領域４２１と４３１は、いずれも、図６のような各種のデータを含む。図６はデータ領域の例を示す図である。
図６のデータ領域５００は、具体的には、図５のデータ領域４２１または４３１である。また、図６におけるアドレスＢ０〜Ｂ６は、ファームウェア内での相対アドレスである。
【０１０９】
つまり、データ領域５００がデータ領域４２１の場合、図６のアドレスは、図５のアドレスＡ１を基準とする相対アドレスである。また、データ領域５００がデータ領域４３１の場合、図６のアドレスは、図５のアドレスＡ３を基準とする相対アドレスである。
【０１１０】
データ領域５００は、静的なデータと動的なデータを含む。ここで「静的なデータ」とは、ハイパーバイザのバージョンに応じて固定的に定まる定数データか、または、可変ではあるが初期値がハイパーバイザのバージョンに応じて静的に定まるデータである。また、「動的なデータ」とは、ハイパーバイザが動作中に動的に書き換えるデータである。より詳しくは、「動的なデータ」は、ハイパーバイザがインストールされたマシンのハードウェア構成や、ハイパーバイザが管理するドメインの数と状態などに依存するデータである。
【０１１１】
静的なデータの例は、アドレスマップ５０１、ハイパーバイザのバージョン番号５０２、データフォーマットのバージョン番号５０３、動的な置き換え機能の有効／無効フラグ５０４、および領域使用中フラグ５０５である。また、動的なデータの例は、ドメイン制御用データ５０６である。データ領域５００は、図６に例示した以外の、さらに他のデータを含んでもよい。また、図６に例示したデータの並び順は一例であり、データ領域５００中の各種データの並び順は、実施形態に応じて適宜入れ替えられてよい。
【０１１２】
アドレスＢ０から始まる領域に格納されたアドレスマップ５０１は、コード領域の詳細を示す。詳しくは図７とともに後述するが、コード領域には、ハイパーバイザが行う様々な処理のためのコードが含まれる。アドレスマップ５０１は、少なくとも、各処理（つまり各サブルーチン）の先頭アドレスを示すマップである。アドレスマップ５０１は、さらに、データ領域５００内のどのアドレスに何の情報が格納されているかを示してもよい。
【０１１３】
また、図６の例では、ハイパーバイザのバージョン番号５０２がアドレスＢ１に格納されている。例えば、データ領域５００が図５のデータ領域４２１の場合、ハイパーバイザのバージョン番号５０２は、上位領域４２０にファームウェアが格納されたハイパーバイザのバージョン番号である。逆に、データ領域５００が図５のデータ領域４３１の場合、ハイパーバイザのバージョン番号５０２は、下位領域４３０にファームウェアが格納されたハイパーバイザのバージョン番号である。
【０１１４】
そして、図６の例では、ハイパーバイザが使用するデータフォーマットのバージョン番号５０３がアドレスＢ２に格納されている。第２実施形態では、ハイパーバイザ自体がバージョニングされるだけでなく、ハイパーバイザが使用するデータのフォーマットもバージョニングされる。より具体的には、データフォーマットのバージョン番号５０３は、ドメイン制御用データ５０６などの動的なデータのデータフォーマットのバージョンを示す。
【０１１５】
例えば、バージョン１から３までのハイパーバイザでは、バージョン１のデータフォーマットが使われ、バージョン４から５までのハイパーバイザでは、バージョン２のデータフォーマットが使われるかもしれない。すると、例えば、ハイパーバイザをバージョン２からバージョン３へアップグレードする場合には、データフォーマットの変換は不要である。逆に、ハイパーバイザをバージョン３からバージョン４へアップグレードする場合には、データフォーマットの変換が行われる（詳しくは図１２とともに後述する）。
【０１１６】
例えば、データ領域５００が図５のデータ領域４２１の場合、データフォーマットのバージョン番号５０３は、上位領域４２０にファームウェアが格納されたハイパーバイザが使用するデータフォーマットのバージョン番号である。逆に、データ領域５００が図５のデータ領域４３１の場合、データフォーマットのバージョン番号５０３は、下位領域４３０にファームウェアが格納されたハイパーバイザが使用するデータフォーマットのバージョン番号である。なお、２つのハイパーバイザのデータフォーマットのバージョン番号５０３が異なるとき、データフォーマットのバージョン番号５０３が新しい方のハイパーバイザのバージョン番号５０２の方が新しい。
【０１１７】
さらに、図６の例では、データ領域５００内のアドレスＢ３に、動的な置き換え機能の有効／無効フラグ５０４が格納されている。有効／無効フラグ５０４の値は、固定されていてもよいし、ハイパーバイザの動作中に、例えば入力装置２３０からの入力に応じて、切り換えられてもよい。
【０１１８】
なお、有効／無効フラグ５０４が切り換え可能な場合でも、有効／無効フラグ５０４の初期値は固定である。よって、有効／無効フラグ５０４は上記の「静的なデータ」の一つである。
【０１１９】
例えば、データ領域５００が図５のデータ領域４２１の場合、有効／無効フラグ５０４は、「上位領域４２０にファームウェアが格納されたハイパーバイザから、下位領域４３０にファームウェアが格納されたハイパーバイザへの動的な置き換えが有効か」を示す。なお、ここで「動的な置き換え」とは、ＣＰＵ２２１の物理的な再起動（すなわち電源の遮断と再投入）をともなわない、ハイパーバイザの置き換えのことである。
【０１２０】
つまり、データ領域５００が図５のデータ領域４２１の場合、有効／無効フラグ５０４は、「上位領域４２０のハイパーバイザが動作中のときに、ＣＰＵ２２１の再起動なしに、他のバージョンのハイパーバイザへの置き換えが可能か否か」を示す。同様に、データ領域５００が図５のデータ領域４３１の場合、有効／無効フラグ５０４は、「下位領域４３０のハイパーバイザが動作中のときに、ＣＰＵ２２１の再起動なしに、他のバージョンのハイパーバイザへの置き換えが可能か否か」を示す。
【０１２１】
また、図６の例では、データ領域５００内のアドレスＢ４に、領域使用中フラグ５０５が格納されている。領域使用中フラグ５０５の初期値は、「非使用中」を示す値（例えば０）である。領域使用中フラグ５０５は、置き換え処理にともなって書き換えられるが、初期値が固定なので、上記の「静的なデータ」の一つである。
【０１２２】
すなわち、データ領域５００が図５のデータ領域４２１の場合において、現ハイパーバイザが上位領域４２０のハイパーバイザであれば、領域使用中フラグ５０５の値は、「使用中」を示す値（例えば１）である。逆に、データ領域５００が図５のデータ領域４２１の場合において、現ハイパーバイザが下位領域４３０のハイパーバイザであれば、領域使用中フラグ５０５の値は、「非使用中」を示す値（例えば０）である。
【０１２３】
そして、データ領域５００が図５のデータ領域４３１の場合において、現ハイパーバイザが上位領域４２０のハイパーバイザであれば、領域使用中フラグ５０５の値は、「非使用中」を示す値である。逆に、データ領域５００が図５のデータ領域４３１の場合において、現ハイパーバイザが下位領域４３０のハイパーバイザであれば、領域使用中フラグ５０５の値は、「使用中」を示す値である。
【０１２４】
換言すれば、あるバージョンのハイパーバイザが、置き換え処理の進行につれて対象ハイパーバイザから現ハイパーバイザに変化するときに、領域使用中フラグ５０５は、「非使用中」を示す値から「使用中」を示す値に書き換えられる。そして、今まで現ハイパーバイザであったハイパーバイザが、置き換え処理の進行につれて現ハイパーバイザではなくなるときに、領域使用中フラグ５０５は、「使用中」を示す値から「非使用中」を示す値に書き換えられる。
【０１２５】
さらに、図６の例では、データ領域５００内のアドレスＢ５から始まる領域に、ドメイン制御用データ５０６が格納される。ドメイン制御用データ５０６は、ハイパーバイザがドメイン３３０ａ〜３３０ｃを制御するために用いるデータであり、ハイパーバイザが動作中に動的に書き換えるデータである。
【０１２６】
例えば、ドメイン３３０ａ内のＯＳが物理アドレス空間として認識するアドレス空間は、実際には仮想マシンのアドレス空間であって、実マシンの物理アドレス空間ではない。ドメイン３３０ａ内のＯＳが物理アドレスとして認識するアドレスを実マシンの物理アドレスに変換するためのデータ（例えばページテーブル）は、ドメイン制御用データ５０６の一例である。もちろん、アドレス変換のための同様のデータは、他のドメイン３３０ｂと３３０ｃについてもそれぞれ存在し、ドメイン制御用データ５０６に含まれる。
【０１２７】
また、ハイパーバイザ３２０は、実ＣＰＵ２２１の処理時間をドメイン３３０ａ〜３３０ｃに順に割り当てるなどのスケジューリングも行う。ドメイン制御用データ５０６は、スケジューリング用のパラメタを含んでもよい。
【０１２８】
さて、図７は、コード領域の例を示す図である。図７のコード領域６００は、具体的には図５のコード領域４２２または４３２である。また、図７におけるアドレスは、ファームウェア内での相対アドレスである。
【０１２９】
つまり、コード領域６００がコード領域４２２の場合、図７のアドレスは、図５のアドレスＡ１を基準とする相対アドレスである。また、コード領域６００がコード領域４３２の場合、図７のアドレスは、図５のアドレスＡ３を基準とする相対アドレスである。
【０１３０】
図６のアドレスマップ５０１に関して説明したように、コード領域６００は、ハイパーバイザが行う様々な処理のためのコードを含む。図７に示したコードの並び順は一例である。実施形態に応じて、コードの並び順は図７とは異なっていてもよい。
【０１３１】
図７の例では、アドレスＣ０から始まる領域に、保留解除処理のコード６０１が格納されている。保留解除処理は、保留制御部３３１ａ〜３３１ｃに対して解除命令を発行する処理である。保留解除処理は、ハイパーバイザの起動（すなわち、対象ハイパーバイザから現ハイパーバイザへの変化）の直後に実行される。
【０１３２】
また、アドレスＣ１から始まる領域には、待ち受け処理のコード６０２が格納されている。待ち受け処理は、ドメイン３３０ａ〜３３０ｃからハイパーバイザコールを受け付けて、ハイパーバイザコールに応じた適宜の処理を呼び出す処理である。
【０１３３】
さらに、アドレスＣ２から始まる領域には、前処理のコード６０３が格納されている。図２の前処理部１２１は、ＣＰＵ２２１が前処理のコード６０３を実行することによって実現される。
【０１３４】
また、アドレスＣ３から始まる領域には、コード展開処理のコード６０４が格納されている。図２のコード展開部１２２は、ＣＰＵ２２１がコード展開処理のコード６０４を実行することによって実現される。
【０１３５】
そして、アドレスＣ４から始まる領域には、データ展開処理のコード６０５が格納されており、アドレスＣ５から始まる領域には、データ変換処理のコード６０６が格納されている。図２のデータ更新部１２３は、ＣＰＵ２２１がデータ展開処理のコード６０５とデータ変換処理のコード６０６を実行することによって実現される。
【０１３６】
また、アドレスＣ６から始まる領域には、アクセス保留処理のコード６０７が格納されており、アドレスＣ７から始まる領域には、ファームウェア切り換え処理のコード６０８が格納されている。例えば、バージョン２からバージョン３へのアップグレードが行われるとき、切り換え部１２４は、以下の（ａ１）と（ａ２）のコードをＣＰＵ２２１が実行することによって実現される。
（ａ１）バージョン２のハイパーバイザのアクセス保留処理のコード６０７とファームウェア切り換え処理のコード６０８
（ａ２）バージョン３のハイパーバイザの保留解除処理のコード６０１
【０１３７】
なお、図７では省略されているが、コード領域６００は、さらに、ハイパーバイザが行う他の様々な処理のためのコードも、アドレスＣ８以降の領域に含む。例えば、コード領域６００は、ハイパーバイザが待ち受け処理で受け付けたハイパーバイザコールの種類に応じた適宜の処理のためのコードを含む。また、コード領域６００は、ＯＳが認識するアドレス（すなわち仮想マシンのアドレス）と実マシンの物理アドレスの間の変換のためのコードや、ドメイン３３０ａ〜３３０ｃ間のスケジューリングのためのコードも含む。
【０１３８】
また、図６のアドレスマップ５０１は、以下の（ｂ１）〜（ｂ８）を示す情報を少なくとも含む。
（ｂ１）保留解除処理のコード６０１の先頭アドレスがＣ０であること
（ｂ２）待ち受け処理のコード６０２の先頭アドレスがＣ１であること
（ｂ３）前処理のコード６０３の先頭アドレスがＣ２であること
（ｂ４）コード展開処理のコード６０４の先頭アドレスがＣ３であること
（ｂ５）データ展開処理のコード６０５の先頭アドレスがＣ４であること
（ｂ６）データ変換処理のコード６０６の先頭アドレスがＣ５であること
（ｂ７）アクセス保留処理のコード６０７の先頭アドレスがＣ６であること
（ｂ８）ファームウェア切り換え処理のコード６０８の先頭アドレスがＣ７であること
【０１３９】
続いて、置き換え処理の詳細について図８〜１３を参照して説明する。図８は、ハイパーバイザの置き換えの一例を示すシーケンス図である。
また、図８の動作シーケンスの開始時点におけるアクティブ領域は、図５の上位領域４２０である。つまり、図８の動作シーケンスの開始時点において、図５の有効マップアドレス４１１は、上位領域４２０の先頭アドレスＡ１を示している。なお、図８のドメイン３３０は、図４のドメイン３３０ａ〜３３０ｃのいずれであってもよい。
【０１４０】
管理部１１０としてのサービスプロセッサ２１０において、ＣＰＵ２１１は、サービスプロセッサ２１０のＮＯＲ型フラッシュメモリ２１２に格納されたファームウェアにしたがって動作する。また、図８の動作シーケンスの開始時点においてサービスプロセッサ２１０のＮＡＮＤ型フラッシュメモリ２１３（つまり図２の格納部１１１）には、既に対象ハイパーバイザのファームウェアが格納されているものとする。
【０１４１】
すると、ステップＳ１０１で管理部１１０は、ＮＡＮＤ型フラッシュメモリ２１３に格納されている対象ハイパーバイザのファームウェアを、システムボード２２０ａのＥＰＲＯＭ２２２（つまり図２の格納部１３０）に書き込む。
【０１４２】
他方、ドメイン３３０は、管理部１１０が置き換え処理を開始したことを認識しない。よって、例えば図８のステップＳ１０２に示すタイミングで、ドメイン３３０がハイパーバイザコールを呼び出すこともあり得る。
【０１４３】
すると、現ハイパーバイザは、上位領域４２０のコード領域４２２中の、待ち受け処理のコード６０２と、必要に応じた不図示の他のコードにしたがって動作する。そして、現ハイパーバイザは、ステップＳ１０３でハイパーバイザコールに対する応答をドメイン３３０に返す。
【０１４４】
また、ステップＳ１０１での書き込みが成功裡に完了すると、ステップＳ１０４において管理部１１０は、制御部１２０内の前処理部１２１に完了を通知する。図８の例では、前処理部１２１は、具体的には、上位領域４２０のコード領域４２２に格納されている現ハイパーバイザのファームウェアのうち前処理のコード６０３をＣＰＵ２２１が実行することで実現される。
【０１４５】
前処理部１２１が完了の通知を受け取ると、続くステップＳ１０５でコード展開部１２２が、ＥＰＲＯＭ２２２（つまり図２の格納部１３０）にコピーされた対象ハイパーバイザのファームウェアをメモリ上に展開する。具体的には、ステップＳ１０５でコード展開部１２２は、ＥＰＲＯＭ２２２上の対象ハイパーバイザのファームウェアのうちのコード領域を、非アクティブ領域である下位領域４３０のコード領域４３２に展開する。
【０１４６】
さらに、ステップＳ１０６でデータ更新部１２３は、ＥＰＲＯＭ２２２上の対象ハイパーバイザのファームウェアのうちのデータ領域に含まれる静的なデータを、非アクティブ領域である下位領域４３０のデータ領域４３１にコピーする。
【０１４７】
データ更新部１２３は、ステップＳ１０６でさらに、アクティブ領域である上位領域４２０のデータ領域４２１内の動的なデータも、データ領域４３１にコピーする。なお、現ハイパーバイザと対象ハイパーバイザそれぞれのデータフォーマットのバージョン番号５０３に応じて、ステップＳ１０６でデータ更新部１２３は、単純に動的なデータをコピーする場合もあるし、データフォーマットの変換をさらに行う場合もある。
【０１４８】
他方、ドメイン３３０は、置き換え処理が進行中であることを認識しない。よって、例えば図８のステップＳ１０７に示すように、ステップＳ１０６に非常に近いタイミングで、ドメイン３３０がハイパーバイザコールを呼び出すこともあり得る。
【０１４９】
すると、現ハイパーバイザは、上位領域４２０のコード領域４２２中の待ち受け処理のコード６０２にしたがって、ハイパーバイザコールを受け付ける。一方で、ステップＳ１０６の処理の終了後、ステップＳ１０８において、切り換え部１２４は、抑止命令をドメイン３３０に対して発行する。具体的には、ステップＳ１０８の処理は、現ハイパーバイザのファームウェアにおけるアクセス保留処理のコード６０７にしたがって行われる。
【０１５０】
抑止命令を受け取ったドメイン３３０は、抑止命令の解除を命令するための解除命令を受け取るまで、ハイパーバイザコールの呼び出しを抑止する。図８の例では、ステップＳ１０８から後述のステップＳ１１１までの「保留期間」と示した期間の間、ドメイン３３０はハイパーバイザコールを保留する。
【０１５１】
すなわち、保留期間においてドメイン３３０は、ハイパーバイザにアクセスしない。その代わり、保留期間においてドメイン３３０は、呼び出そうとするハイパーバイザコールをキューに記憶してもよい。
【０１５２】
また、ステップＳ１０８での抑止命令の発行に続いて、ステップＳ１０９で切り換え部１２４は、抑止命令の発行前に受け付け済みで、かつ、まだ応答を返していないハイパーバイザコールに対して、適宜の処理を行い、ドメイン３３０に応答を返す。図８の例では、ステップＳ１０７のハイパーバイザコールに対する応答がステップＳ１０９で返される。ステップＳ１０９の処理も、現ハイパーバイザのファームウェアにおけるアクセス保留処理のコード６０７にしたがって行われる。
【０１５３】
そして、次のステップＳ１１０で切り換え部１２４は、有効マップアドレス４１１を、対象ハイパーバイザのファームウェアが格納されている下位領域４３０の先頭アドレスＡ３へと書き換える。ステップＳ１１０の処理は、現ハイパーバイザのファームウェアにおけるファームウェア切り換え処理のコード６０８にしたがって行われる。
【０１５４】
ステップＳ１１０の結果、上位領域４２０にファームウェアが格納されているハイパーバイザは現ハイパーバイザではなくなり、上位領域４２０はアクティブ領域から非アクティブ領域になる。代わりに、下位領域４３０にファームウェアが格納されているハイパーバイザが対象ハイパーバイザから現ハイパーバイザになり、下位領域４３０は非アクティブ領域からアクティブ領域になる。
【０１５５】
そして、次のステップＳ１１１で切り換え部１２４は、解除命令を発行する。切り換え部１２４はさらに、ステップＳ１１２で、管理部１１０としてのサービスプロセッサ２１０に、ハイパーバイザの置き換えが完了したことを通知する。なお、ステップＳ１１１とＳ１１２の処理は、下位領域４３０のコード領域４３２における保留解除処理のコード６０１にしたがって行われる。
【０１５６】
また、解除命令を受け取ったドメイン３３０は、ハイパーバイザコールの呼び出しを再開する。具体的には、もしキューが空でなければ、ドメイン３３０はキューに蓄積されたハイパーバイザコールを順次呼び出す。また、キューが空になった後も、ドメイン３３０は、必要に応じてハイパーバイザコールを呼び出す。
【０１５７】
例えば、ドメイン３３０は、ステップＳ１１３でハイパーバイザコールを呼び出す。すると、下位領域４３０にファームウェアが格納されている現ハイパーバイザが、ハイパーバイザコールに応じた適宜の処理を行い、ステップＳ１１４で応答を返す。このように、ドメイン３３０にとってはハイパーバイザの置き換えは透過的である。つまり、ドメイン３３０は、単に一時的にハイパーバイザからハイパーバイザコールの抑止を要求されるだけであるかのように認識する。
【０１５８】
なお、図８は、ハイパーバイザの置き換えにともなって、アクティブ領域が上位領域４２０から下位領域４３０に切り換わる例である。しかし、もちろん、ハイパーバイザの置き換えにともなって、アクティブ領域が下位領域４３０から上位領域４２０に切り換わる場合もある。
【０１５９】
図９は、ハイパーバイザを置き換えるための置き換え処理のフローチャートである。今までの説明からも理解されるとおり、置き換え処理自体がハイパーバイザにより実行される。また、図９の置き換え処理は、下記（ｃ１）および（ｃ２）の条件が成立すると、開始される。
（ｃ１）管理部１１０の格納部１１１（具体的には、例えばＮＡＮＤ型フラッシュメモリ２１３）に、対象ハイパーバイザのファームウェアが格納された。
（ｃ２）置き換え処理の開始が明示的または暗黙的に指示された。
【０１６０】
なお、情報処理装置１００の外部から格納部１１１への対象ハイパーバイザのファームウェアの読み込みは、様々な方法により実現可能である。例えば、対象ハイパーバイザのファームウェアは、ネットワーク接続装置２６０を介してネットワークからダウンロードされて、ＮＡＮＤ型フラッシュメモリ２１３に格納されてもよい。
【０１６１】
あるいは、対象ハイパーバイザのファームウェアは、記憶媒体２９０に予め格納されていてもよい。そして、駆動装置２７０にセットされた記憶媒体２９０から、対象ハイパーバイザのファームウェアが読み取られ、ＮＡＮＤ型フラッシュメモリ２１３にコピーされてもよい。
【０１６２】
いずれにしろ、対象ハイパーバイザのファームウェアが格納部１１１に読み込まれると、条件（ｃ１）が成立する。また、条件（ｃ２）における明示的な指示の例は、ユーザ（例えば情報処理装置１００のアドミニストレータ）からの入力装置２３０を介した入力である。そして、条件（ｃ２）における暗黙的な指示の例は、「対象ハイパーバイザのファームウェアの格納部１１１への格納が完了した」というイベントである。
【０１６３】
さて、以上の条件（ｃ１）と（ｃ２）の成立を契機として図９の置き換え処理が開始されると、まず、ステップＳ２０１において、管理部１１０と前処理部１２１により図１０の前処理が行われる。詳しくは図１０とともに後述するが、前処理では、格納部１１１から格納部１３０へのコピー（つまりＮＡＮＤ型フラッシュメモリ２１３からＥＰＲＯＭ２２２へのコピー）が行われ、フロー制御用に「処理タイプ」が設定される。処理タイプの値は（ｄ１）〜（ｄ３）のいずれかである。
【０１６４】
（ｄ１）「制御部１２０が置き換え処理を続行することができないか、または、置き換え処理は続行する必要がない」ということを表す値。以下では説明の便宜上、この値が０であるものとする。
【０１６５】
（ｄ２）「制御部１２０が置き換え処理を続行する場合であり、かつ、対象ハイパーバイザのファームウェア１４２はＤＩＭＭ１４０の非アクティブ領域に残っている」ということを表す値。以下では説明の便宜上、この値が１であるものとする。
【０１６６】
（ｄ３）「制御部１２０が置き換え処理を続行する場合であり、かつ、対象ハイパーバイザのファームウェア１４２はＤＩＭＭ１４０の非アクティブ領域には格納されていない」ということを表す値。以下では説明の便宜上、この値が２であるものとする。
【０１６７】
例えば、現ハイパーバイザまたは対象ハイパーバイザが動的な置き換え機能に非対応の場合、制御部１２０は置き換え処理を続行することができない。よって、この場合、処理タイプの値は０である。また、対象ハイパーバイザとして現ハイパーバイザと同じハイパーバイザが指定された場合、制御部１２０は置き換え処理を続行する必要がない。よって、この場合も、処理タイプの値は０である。
【０１６８】
逆に、制御部１２０が置き換え処理を続行する場合とは、置き換え処理の続行が可能であり、かつ、現ハイパーバイザと対象ハイパーバイザが異なる場合である。そして、制御部１２０が置き換え処理を続行する場合、処理タイプの値は１または２である。
【０１６９】
例えば、対象ハイパーバイザが、現ハイパーバイザの直前に情報処理装置１００上で動作していたハイパーバイザである場合、対象ハイパーバイザのファームウェアは非アクティブ領域に残っている。よって、この場合、処理タイプの値は１である。
【０１７０】
より具体的には、例えば、バージョン２からバージョン３へのハイパーバイザのアップグレードの後、何らかの不具合が見つかることがある。その結果、バージョン３からバージョン２へのダウングレードが行われるかもしれない。
【０１７１】
このようにダウングレードのために図９の置き換え処理が行われる場合、現在の非アクティブ領域は、かつてバージョン２のハイパーバイザが動作していたときにはアクティブ領域だった領域である。つまり、現在の非アクティブ領域には、現在の対象ハイパーバイザであるバージョン２のハイパーバイザのファームウェアが格納されている。よって、処理タイプの値は１である。
【０１７２】
また、例えばバージョン５のハイパーバイザが新たにリリースされ、バージョン４からバージョン５へのアップグレードのために図９の置き換え処理が行われる場合などは、対象ハイパーバイザのファームウェアはＤＩＭＭ１４０上には存在しない。したがって、処理タイプの値は２である。
【０１７３】
あるいは、ハイパーバイザがバージョン１からバージョン２へアップグレードされ、バージョン２からバージョン３へとさらにアップグレードされた後、何らかの事情でバージョン１にダウングレードされることもあるかもしれない。この場合も、バージョン３からバージョン１へのダウングレードにおける対象ハイパーバイザ（すなわちバージョン１のハイパーバイザ）のファームウェアは、既にＤＩＭＭ１４０上には存在しない。よって、処理タイプの値は２である。
【０１７４】
さて、ステップＳ２０１の前処理において以上説明した処理タイプが設定されると、次のステップＳ２０２で前処理部１２１は、処理タイプの値が０、１、２のいずれであるかを判断する。
【０１７５】
処理タイプの値が０のとき、ステップＳ２０３以下の処理は不要であるから、図９の置き換え処理自体も終了する。また、処理タイプの値が１のとき、処理はステップＳ２０４に移行する。そして、処理タイプの値が２のとき、処理はステップＳ２０３に移行する。
【０１７６】
ステップＳ２０３でコード展開部１２２は、図１１のコード展開処理を行う。また、ステップＳ２０４でデータ更新部１２３は、図１２のデータ展開処理を行う。そして、最後のステップＳ２０５で切り換え部１２４が図１３の切り換え処理を行い、図９の置き換え処理が終了する。
【０１７７】
なお、図８のステップＳ１０１とＳ１０４は、図９のステップＳ２０１の前処理の一部である。また、図８の例では処理タイプの値が２である。そして、図８のステップＳ１０５は図９のステップＳ２０３に対応し、図８のステップＳ１０６は図９のステップＳ２０４に対応する。また、図８のステップＳ１０８〜Ｓ１１２は図９のステップＳ２０５の一部である。なお、図８のステップＳ１０２〜Ｓ１０３、Ｓ１０７、Ｓ１１３〜Ｓ１１４は、図９の置き換え処理とは独立である。
【０１７８】
続いて、図９のステップＳ２０１に示した前処理の詳細について、図１０のフローチャートを参照して説明する。
ステップＳ３０１で管理部１１０は、図２の格納部１３０（つまり図３のＥＰＲＯＭ２２２）に、管理部１１０内の格納部１１１（つまり図３のＮＡＮＤ型フラッシュメモリ２１３）に格納されている対象ハイパーバイザのファームウェアを格納する。
【０１７９】
そして、ステップＳ３０１での格納が完了すると、次のステップＳ３０２で管理部１１０は、制御部１２０内の前処理部１２１に、ファームウェアの格納が完了したことを通知する。
【０１８０】
すると、ステップＳ３０３で前処理部１２１は、ＤＩＭＭ１４０内のアクティブ領域に格納されている現ハイパーバイザのファームウェアのデータ領域５００における、動的な置き換え機能の有効／無効フラグ５０４を参照する。なお、前処理部１２１は、共通領域４１０の有効マップアドレス４１１を参照することで、上位領域４２０と下位領域４３０のいずれがアクティブ領域なのかを認識することができる。
【０１８１】
また、前処理部１２１は、格納部１３０に格納された対象ハイパーバイザのファームウェアのデータ領域５００における、動的な置き換え機能の有効／無効フラグ５０４を参照する。そして、前処理部１２１は、２つの有効／無効フラグ５０４の値に基づいて、動的な置き換え機能が有効か否かを判断する。
【０１８２】
現ハイパーバイザと対象ハイパーバイザの双方のファームウェア中の有効／無効フラグ５０４が「有効」を示す値（例えば１）の場合、処理はステップＳ３０４に移行する。逆に、現ハイパーバイザと対象ハイパーバイザのうち少なくとも一方のファームウェア中の有効／無効フラグ５０４が「無効」を示す値（例えば０）の場合、処理はステップＳ３０５に移行する。
【０１８３】
ステップＳ３０４で前処理部１２１は、ＥＰＲＯＭ２２２に格納された対象ハイパーバイザのファームウェアが、現在動作中の現ハイパーバイザのファームウェアと同じか否かを判断する。
【０１８４】
具体的には、前処理部１２１は、まず、ハイパーバイザ用の領域４００の共通領域４１０の有効マップアドレス４１１を参照することで、上位領域４２０と下位領域４３０のいずれがアクティブ領域なのかを判断する。あるいは、前処理部１２１は、ステップＳ３０３で有効マップアドレス４１１を参照した結果を記憶していてもよい。
【０１８５】
もし、有効マップアドレス４１１に上位領域４２０の先頭アドレスＡ１が記憶されていれば、現ハイパーバイザのバージョン番号は、データ領域４２１内のバージョン番号５０２である。逆に、有効マップアドレス４１１に下位領域４３０の先頭アドレスＡ３が記憶されていれば、現ハイパーバイザのバージョン番号は、データ領域４３１内のバージョン番号５０２である。以上のようにして、前処理部１２１は、現ハイパーバイザのバージョン番号を認識する。
【０１８６】
また、前処理部１２１は、ＥＰＲＯＭ２２２に格納された対象ハイパーバイザのファームウェアのデータ領域５００におけるバージョン番号５０２を参照する。そして、前処理部１２１は現ハイパーバイザと対象ハイパーバイザのバージョン番号５０２を比較する。
【０１８７】
もし、２つのバージョン番号５０２が等しければ、対象ハイパーバイザと現ハイパーバイザは同じなので置き換えの必要がない。そこで、処理はステップＳ３０５に移行する。逆に、２つのバージョン番号５０２が異なれば、処理はステップＳ３０６に移行する。
【０１８８】
ステップＳ３０５で前処理部１２１は、処理タイプの値を０に設定する。そして、図１０の前処理は終了する。
また、ステップＳ３０６で前処理部１２１は、ＥＰＲＯＭ２２２に格納されたハイパーバイザのファームウェアが、非アクティブ領域に展開済みのハイパーバイザのファームウェアと同じか否かを判断する。
【０１８９】
具体的には、前処理部１２１は、まず、ハイパーバイザ用の領域４００の共通領域４１０の有効マップアドレス４１１を参照することで、上位領域４２０と下位領域４３０のいずれが非アクティブ領域なのかを判断する。あるいは、前処理部１２１は、既に有効マップアドレス４１１を参照しているので、参照結果を記憶している場合は、ステップＳ３０６で再度有効マップアドレス４１１を参照しなくてもよい。前処理部１２１は、以前有効マップアドレス４１１を参照した結果にしたがって、上位領域４２０と下位領域４３０のいずれが非アクティブ領域なのかをステップＳ３０６で判断してもよい。
【０１９０】
もし、有効マップアドレス４１１に上位領域４２０の先頭アドレスＡ１が記憶されていれば、非アクティブ領域にファームウェアが格納されているハイパーバイザのバージョン番号は、下位領域４３０のデータ領域４３１内のバージョン番号５０２である。逆に、有効マップアドレス４１１に下位領域４３０の先頭アドレスＡ３が記憶されていれば、非アクティブ領域にファームウェアが格納されているハイパーバイザのバージョン番号は、上位領域４２０のデータ領域４２１内のバージョン番号５０２である。以上のようにして、前処理部１２１は、非アクティブ領域に展開済みのハイパーバイザのファームウェアのバージョン番号を認識する。
【０１９１】
また、前処理部１２１は、ＥＰＲＯＭ２２２に格納された対象ハイパーバイザのファームウェアのデータ領域５００におけるバージョン番号５０２を参照する。そして、前処理部１２１は、対象ハイパーバイザと、非アクティブ領域に展開済みのハイパーバイザのハイパーバイザのバージョン番号５０２を比較する。
【０１９２】
もし、２つのバージョン番号５０２が等しければ、対象ハイパーバイザのファームウェアを、ＥＰＲＯＭ２２２から現在の非アクティブ領域にコピーする必要はない。そこで、処理はステップＳ３０７に移行する。逆に、２つのバージョン番号５０２が異なれば、処理はステップＳ３０８に移行する。
【０１９３】
ステップＳ３０７で前処理部１２１は、処理タイプの値を１に設定する。そして、図１０の前処理は終了する。
また、ステップＳ３０８で前処理部１２１は、処理タイプの値を２に設定する。そして、図１０の前処理は終了する。
【０１９４】
続いて、図９のステップＳ２０３に示したコード展開処理の詳細について、図１１のフローチャートを参照して説明する。
ステップＳ４０１でコード展開部１２２は、ハイパーバイザ動作用の２つのメモリ領域のうち、非アクティブ領域のコード領域に、ＥＰＲＯＭ２２２に格納された対象ハイパーバイザのファームウェアのコードを展開する。
【０１９５】
具体的には、コード展開部１２２は、まず、図５の有効マップアドレス４１１を参照することで、上位領域４２０と下位領域４３０のいずれが非アクティブ領域であるかを認識する。
【０１９６】
有効マップアドレス４１１がアドレスＡ１を示す場合は、下位領域４３０が非アクティブ領域である。よって、コード展開部１２２は、ＥＰＲＯＭ２２２に格納された対象ハイパーバイザのファームウェアのコードを、下位領域４３０内のコード領域４３２にコピーする。
【０１９７】
逆に、有効マップアドレス４１１がアドレスＡ３を示す場合は、上位領域４２０が非アクティブ領域である。よって、コード展開部１２２は、ＥＰＲＯＭ２２２に格納された対象ハイパーバイザのファームウェアのコードを、上位領域４２０内のコード領域４２２にコピーする。
【０１９８】
続いて、図９のステップＳ２０４に示したデータ展開処理の詳細について、図１２のフローチャートを参照して説明する。
ステップＳ５０１でデータ更新部１２３は、前処理で設定された処理タイプの値を参照する。そして、処理タイプの値が上記（ｄ２）の値（具体的には１）である場合、処理はステップＳ５０３に移行する。逆に、処理タイプの値が上記（ｄ３）の値（具体的には２）である場合、処理はステップＳ５０２に移行する。
【０１９９】
なお、処理タイプの値が１の場合、対象ハイパーバイザのファームウェアはＤＩＭＭ１４０の非アクティブ領域に残っている。よって、データ領域５００に含まれる静的なデータを、ＥＰＲＯＭ２２２からＤＩＭＭ２２４上の非アクティブ領域にコピーする必要がない。そのため、処理タイプが１の場合、ステップＳ５０２は省略される。
【０２００】
逆に、処理タイプの値が２の場合、対象ハイパーバイザのファームウェアはＤＩＭＭ１４０の非アクティブ領域に存在しない。したがって、ステップＳ５０２でデータ更新部１２３は、ＥＰＲＯＭ２２２に格納されている対象ハイパーバイザのデータ領域５００の静的なデータを、ＤＩＭＭ２２４上の非アクティブ領域のデータ領域５００にコピーする。
【０２０１】
具体的には、データ更新部１２３は、図６のアドレスマップ５０１、ハイパーバイザのバージョン番号５０２、データフォーマットのバージョン番号５０３、動的な置き換え機能の有効／無効フラグ５０４、および領域使用中フラグ５０５をコピーする。ステップＳ５０２のコピーが完了すると、処理はステップＳ５０３に移行する。
【０２０２】
なお、データ更新部１２３は、有効マップアドレス４１１を参照することで、非アクティブ領域の先頭アドレス（すなわちコピー先のアドレス）を認識することができる。
有効マップアドレス４１１がアドレスＡ１を示す場合、非アクティブ領域は下位領域４３０なので、データ更新部１２３は、下位領域４３０の先頭アドレスＡ３を非アクティブ領域の先頭アドレスとして認識する。逆に、有効マップアドレス４１１がアドレスＡ３を示す場合、非アクティブ領域は上位領域４２０なので、データ更新部１２３は、上位領域４２０の先頭アドレスＡ１を非アクティブ領域の先頭アドレスとして認識する。
【０２０３】
ステップＳ５０３でデータ更新部１２３は、現ハイパーバイザと対象ハイパーバイザの間でデータフォーマットに変更があるか否かを判断する。すなわち、データ更新部１２３は、データ領域４２１とデータ領域４３１それぞれのデータフォーマットのバージョン番号５０３が互いに等しいか否かを判断する。
【０２０４】
そして、２つのバージョン番号５０３が等しいとき、データフォーマットの変更はないので、処理はステップＳ５０４に移行する。逆に、２つのバージョン番号５０３が異なるとき、処理はステップＳ５０５に移行する。
【０２０５】
ステップＳ５０４でデータ更新部１２３は、アクティブ領域内のドメイン制御用データ５０６を、非アクティブ領域内にコピーする。より具体的には、コピー先は、非アクティブ領域内のデータ領域５００におけるドメイン制御用データ５０６の格納用の領域である。
【０２０６】
データ領域５００に含まれる静的なデータの合計長が固定の場合、データ更新部１２３は、アクティブ領域の先頭アドレスに固定の長さを足すことで、コピー対象であるドメイン制御用データ５０６の先頭アドレスを認識することができる。同様に、データ更新部１２３は、非アクティブ領域の先頭アドレスに固定の長さを足すことで、ドメイン制御用データ５０６のコピー先アドレスを認識することができる。
【０２０７】
あるいは、ドメイン制御用データ５０６の先頭アドレスを示す情報をアドレスマップ５０１が含む場合、データ更新部１２３は、アクティブ領域上の現ハイパーバイザのアドレスマップ５０１を参照することで、コピー対象の先頭アドレスを認識することができる。同様に、データ更新部１２３は、非アクティブ領域上の対象ハイパーバイザのアドレスマップ５０１を参照することで、コピー先アドレスを認識することができる。
【０２０８】
ステップＳ５０４でのコピーが完了すると、図１２のデータ展開処理は終了する。
他方、ステップＳ５０５でデータ更新部１２３は、対象ハイパーバイザの方が現ハイパーバイザよりもデータフォーマットのバージョンが新しいか否かを判断する。なお、ステップＳ５０５が実行されるのは、現ハイパーバイザと対象ハイパーバイザの間でデータフォーマットのバージョンが異なる場合のみである。
【０２０９】
アップグレードのためにハイパーバイザの置き換えが行われる場合、現ハイパーバイザのデータフォーマットのバージョン番号よりも、対象ハイパーバイザのデータフォーマットのバージョン番号の方が新しい。よって、処理はステップＳ５０５からステップＳ５０６に移行する。
【０２１０】
逆に、ダウングレードのためにハイパーバイザの置き換えが行われる場合、対象ハイパーバイザのデータフォーマットのバージョン番号よりも、現ハイパーバイザのデータフォーマットのバージョン番号の方が新しい。よって、処理はステップＳ５０５からステップＳ５０７に移行する。
【０２１１】
ステップＳ５０６でデータ更新部１２３は、非アクティブ領域のコード領域におけるデータ変換処理のコード６０６のアドレスをジャンプ先アドレスに設定する。つまり、データ更新部１２３は、対象ハイパーバイザのファームウェア中のデータ変換処理のコード６０６を後述のステップＳ５１２において呼び出すことを決定する。ステップＳ５０６の具体的な処理は以下のとおりである。
【０２１２】
有効マップアドレス４１１がアドレスＡ１を示すとき、下位領域４３０が非アクティブ領域である。よって、データ更新部１２３は、ステップＳ５０６において、下位領域４３０のデータ領域４３１内のアドレスマップ５０１を参照し、データ変換処理のコード６０６の対象ファームウェア内での相対アドレスを認識する。そして、データ更新部１２３は、認識した相対アドレスと、非アクティブ領域である下位領域４３０の先頭アドレスＡ３とを足して、ジャンプ先アドレスを得る。
【０２１３】
逆に、有効マップアドレス４１１がアドレスＡ３を示すとき、上位領域４２０が非アクティブ領域である。よって、データ更新部１２３は、ステップＳ５０６において、上位領域４２０のデータ領域４２１内のアドレスマップ５０１を参照し、データ変換処理のコード６０６の対象ファームウェア内での相対アドレスを認識する。そして、データ更新部１２３は、認識した相対アドレスと、非アクティブ領域である上位領域４２０の先頭アドレスＡ１とを足して、ジャンプ先アドレスを得る。
【０２１４】
そして、ジャンプ先アドレスが設定されると、処理はステップＳ５０８に移行する。
また、ステップＳ５０７でデータ更新部１２３は、アクティブ領域のコード領域におけるデータ変換処理のコード６０６のアドレスをジャンプ先アドレスに設定する。つまり、データ更新部１２３は、現ハイパーバイザのファームウェア中のデータ変換処理のコード６０６を後述のステップＳ５１２において呼び出すことを決定する。ステップＳ５０７の具体的な処理は以下のとおりである。
【０２１５】
有効マップアドレス４１１がアドレスＡ１を示すとき、上位領域４２０がアクティブ領域である。よって、データ更新部１２３は、ステップＳ５０７において、上位領域４２０のデータ領域４２１内のアドレスマップ５０１を参照し、データ変換処理のコード６０６の現ファームウェア内での相対アドレスを認識する。そして、データ更新部１２３は、認識した相対アドレスと、アクティブ領域である上位領域４２０の先頭アドレスＡ１とを足して、ジャンプ先アドレスを得る。
【０２１６】
逆に、有効マップアドレス４１１がアドレスＡ３を示すとき、下位領域４３０がアクティブ領域である。よって、データ更新部１２３は、ステップＳ５０７において、下位領域４３０のデータ領域４３１内のアドレスマップ５０１を参照し、データ変換処理のコード６０６の現ファームウェア内での相対アドレスを認識する。そして、データ更新部１２３は、認識した相対アドレスと、アクティブ領域である下位領域４３０の先頭アドレスＡ３とを足して、ジャンプ先アドレスを得る。
そして、ジャンプ先アドレスが設定されると、処理はステップＳ５０８に移行する。
【０２１７】
以上のステップＳ５０６またはＳ５０７により、データフォーマットのバージョン番号５０３が新しい方のハイパーバイザのファームウェアが格納された領域におけるデータ変換処理のコード６０６の絶対アドレスが、ジャンプ先アドレスとして設定される。そして、本実施形態では、データ変換処理のコード６０６は、任意の下位のデータフォーマットからの変換および任意の下位のデータフォーマットへの変換をサポートするためのコードを含む。
【０２１８】
例えば、データフォーマットのバージョン番号５０３が２のハイパーバイザのファームウェアにおけるデータ変換処理のコード６０６は、下記（ｅ１）と（ｅ２）のコードを含む。
（ｅ１）バージョン１のデータフォーマットからバージョン２のデータフォーマットへの変換のためのコード
（ｅ２）バージョン２のデータフォーマットからバージョン１のデータフォーマットへの変換のためのコード
【０２１９】
また、データフォーマットのバージョン番号５０３が３のハイパーバイザのファームウェアにおけるデータ変換処理のコード６０６は、下記（ｆ１）〜（ｆ４）のコードを含む。
（ｆ１）バージョン１のデータフォーマットからバージョン３のデータフォーマットへの変換のためのコード
（ｆ２）バージョン３のデータフォーマットからバージョン１のデータフォーマットへの変換のためのコード
（ｆ３）バージョン２のデータフォーマットからバージョン３のデータフォーマットへの変換のためのコード
（ｆ４）バージョン３のデータフォーマットからバージョン２のデータフォーマットへの変換のためのコード
【０２２０】
したがって、ステップＳ５０６またはＳ５０７により設定されたジャンプ先アドレスから始まるデータ変換処理のコード６０６の中には、現ハイパーバイザのデータフォーマットから対象ハイパーバイザのデータフォーマットへの変換のためのコードが含まれる。
【０２２１】
さて、ステップＳ５０６またはＳ５０７の実行後、ステップＳ５０８〜Ｓ５１２の一連の処理が行われる。なお、ステップＳ５０８〜Ｓ５１１の順序は、実施形態に応じて入れ替えられてもよい。
【０２２２】
ステップＳ５０８においてデータ更新部１２３は、アクティブ領域内のドメイン制御用データ５０６の先頭アドレスを入力アドレスとして設定する。ここで「入力アドレス」とは、変換対象のデータの先頭アドレスであり、換言すれば、データ変換処理への入力を指定するアドレスである。
【０２２３】
なお、データ更新部１２３は、ステップＳ５０４と同様にして、アクティブ領域内のドメイン制御用データ５０６の先頭の絶対アドレスを取得することができる。よって、データ更新部１２３は、取得したアドレスを入力アドレスとして設定する。
【０２２４】
そして、次のステップＳ５０９でデータ更新部１２３は、非アクティブ領域内のドメイン制御用データ５０６の先頭アドレスを出力アドレスとして設定する。ここで「出力アドレス」とは、変換されたデータの出力先の先頭アドレスである。
【０２２５】
なお、データ更新部１２３は、ステップＳ５０４と同様にして、非アクティブ領域内のドメイン制御用データ５０６の先頭の絶対アドレスを取得することができる。よって、データ更新部１２３は、取得したアドレスを出力アドレスとして設定する。
【０２２６】
また、次のステップＳ５１０でデータ更新部１２３は、現ハイパーバイザのデータフォーマットのバージョン番号５０３を入力バージョン番号として設定する。ステップＳ５１０の具体的な処理は以下のとおりである。
【０２２７】
有効マップアドレス４１１がアドレスＡ１を示す場合、現ハイパーバイザのファームウェアは上位領域４２０に格納されている。よって、データ更新部１２３は、ステップＳ５１０において、上位領域４２０のデータ領域４２１中のデータフォーマットのバージョン番号５０３を入力バージョン番号として設定する。
【０２２８】
逆に、有効マップアドレス４１１がアドレスＡ３を示す場合、現ハイパーバイザのファームウェアは下位領域４３０に格納されている。よって、データ更新部１２３は、ステップＳ５１０において、下位領域４３０のデータ領域４３１中のデータフォーマットのバージョン番号５０３を入力バージョン番号として設定する。
【０２２９】
さらに、次のステップＳ５１１でデータ更新部１２３は、対象ハイパーバイザのデータフォーマットのバージョン番号５０３を出力バージョン番号として設定する。ステップＳ５１１の具体的な処理は以下のとおりである。
【０２３０】
有効マップアドレス４１１がアドレスＡ１を示す場合、対象ハイパーバイザのファームウェアは下位領域４３０に格納されている。よって、データ更新部１２３は、ステップＳ５１１において、下位領域４３０のデータ領域４３１中のデータフォーマットのバージョン番号５０３を出力バージョン番号として設定する。
【０２３１】
逆に、有効マップアドレス４１１がアドレスＡ３を示す場合、対象ハイパーバイザのファームウェアは上位領域４２０に格納されている。よって、データ更新部１２３は、ステップＳ５１１において、上位領域４２０のデータ領域４２１中のデータフォーマットのバージョン番号５０３を出力バージョン番号として設定する。
【０２３２】
そして、ステップＳ５１２でデータ更新部１２３は、入力アドレス、出力アドレス、入力バージョン番号、および出力バージョン番号を引数として、ジャンプ先アドレスの処理を呼び出して実行する。つまり、ステップＳ５１２の処理は、データ変換処理に対するサブルーチンコールと、データ変換処理の実行を含む。なお、引数の受け渡しは、情報処理装置１００のアーキテクチャに応じて、コールスタックを介して行われてもよいし、レジスタウィンドウを介して行われてもよい。
【０２３３】
ジャンプ先アドレスから始まるデータ変換処理のコード６０６をＣＰＵ２２１が実行し終わり、リターン命令によりデータ変換処理のサブルーチンから制御が戻ると、ステップＳ５１２の処理が終了する。すると、図９のステップＳ２０４に相当する図１２のデータ展開処理も終了し、続いてステップＳ２０５の切り換え処理が行われる。
【０２３４】
例えば、データ展開処理のコード６０５は、データ変換処理のサブルーチンコールを行うためのコール命令の直後に、アクセス保留処理のコード６０７の先頭への無条件ジャンプ命令を含んでもよい。つまり、ステップＳ５１２のサブルーチンコールのリターンアドレスには、当該無条件ジャンプ命令があってもよい。
【０２３５】
すると、ステップＳ５０６またはＳ５０７で設定されたジャンプ先アドレスから始まるデータ変換処理のコード６０６をＣＰＵ２２１が実行し終わると、ＣＰＵ２２１のプログラムカウンタは、リターンアドレスの値に更新される。その結果、ＣＰＵ２２１は、上記の無条件ジャンプ命令を実行し、続いて、現ハイパーバイザのファームウェア中のアクセス保留処理のコード６０７の実行を開始する。例えば以上のようにして、データ更新部１２３から切り換え部１２４へと制御が移り、図９のステップＳ２０４からステップＳ２０５へと処理が進む。
【０２３６】
続いて、図９のステップＳ２０５に示した切り換え処理の詳細について、図１３のフローチャートを参照して説明する。
ステップＳ６０１で切り換え部１２４は、現ハイパーバイザからドメイン３３０ａ〜３３０ｃに対して、ハイパーバイザへのアクセスを一時保留するように指示する。つまり、切り換え部１２４は、保留制御部３３１ａ〜３３１ｃに対して、それぞれ抑止命令を発行する。なお、ステップＳ６０１の実行時における切り換え部１２４は、アクティブ領域に格納された現ハイパーバイザのファームウェアのアクセス保留処理のコード６０７をＣＰＵ２２１が実行することにより、実現される。
【０２３７】
また、上記のとおり、ＯＳのみがハイパーバイザコールを呼び出す実施形態では、保留制御部はＯＳに含まれる。あるいは、ＯＳとデバイスドライバの双方がハイパーバイザコールを呼び出す実施形態では、ＯＳとデバイスドライバにそれぞれ保留制御部が含まれる。いずれにしろ、ステップＳ６０１での抑止命令の発行の結果、ドメイン３３０ａ〜３３０ｃから現ハイパーバイザへのアクセスは一時的に停止される。
【０２３８】
そして、次のステップＳ６０２で切り換え部１２４は、ドメイン３３０ａ〜３３０ｃから受け付け済みの処理がもしあれば、受け付け済みの当該処理を実行して完了する。例えば、図８のように、ステップＳ１０８での抑止命令の発行の直前に、現ハイパーバイザがステップＳ１０７のハイパーバイザコールを受け付けている場合、切り換え部１２４は、受け付け済みのハイパーバイザコールに対する処理を実行し、完了する。
【０２３９】
例えば、現ハイパーバイザが図７の待ち受け処理のコード６０２にしたがってドメイン３３０ａ〜３３０ｃから受け付けたハイパーバイザコールは、現ハイパーバイザが使用するキューに一時的に格納されてもよい。受け付け済みの１つまたは複数のハイパーバイザコールがもしあれば、切り換え部１２４は、ステップＳ６０２において、ハイパーバイザコールをキューから順に取り出し、取り出した各ハイパーバイザコールの内容に応じて、適宜のサブルーチンを呼び出す。
【０２４０】
つまり、ステップＳ６０２の実行時における切り換え部１２４は、アクティブ領域に格納された現ハイパーバイザのファームウェアにおける、下記（ｇ１）〜（ｇ２）のコードをＣＰＵ２２１が実行することにより、実現される。
（ｇ１）ファームウェア切り換え処理のコード６０８
（ｇ２）ファームウェア切り換え処理のコード６０８から呼び出される、上記サブルーチンのコード（つまり、図７には不図示の、コード領域６００内のコード）
【０２４１】
なお、ステップＳ６０２において、キューは偶然空のこともあるし、キューに１つまたは複数のハイパーバイザコールが格納されていることもある。キューが空になると、処理はステップＳ６０３に移行する。
【０２４２】
そして、ステップＳ６０３で切り換え部１２４は、共通領域４１０における有効マップアドレス４１１に、現在の非アクティブ領域の先頭アドレスを設定する。つまり、現在の有効マップアドレス４１１が上位領域４２０の先頭アドレスＡ１であれば、切り換え部１２４は、有効マップアドレス４１１を下位領域４３０の先頭アドレスＡ３に書き換える。逆に、現在の有効マップアドレス４１１が下位領域４３０の先頭アドレスＡ３であれば、切り換え部１２４は、有効マップアドレス４１１を上位領域４２０の先頭アドレスＡ１に書き換える。
【０２４３】
続いて、ステップＳ６０４で切り換え部１２４は、トラップ命令の制御用のレジスタに、現在の非アクティブ領域の先頭アドレスを設定する。
ＣＰＵ２２１のアーキテクチャに応じて詳細は様々に異なるが、ＣＰＵ２２１の命令セットは、非特権モードから特権モードに遷移するためのトラップ命令を含む。そして、ハイパーバイザコールは、トラップ命令を用いて実装される。トラップ命令の引数には、ハイパーバイザコールの種類を示す番号が含まれていてもよい。
【０２４４】
本実施形態のＣＰＵ２２１は、トラップ命令を検出すると、実行モードを非特権モードから特権モードに切り換える。また、ＣＰＵ２２１は、トラップ命令を検出すると、トラップ命令の制御用の上記の特殊なレジスタを参照する。そして、ＣＰＵ２２１は、当該レジスタに設定されているアドレスへのジャンプを実行する。なお、実施形態によっては、ＣＰＵ２２１は、当該レジスタに設定されているアドレスに、トラップ命令の引数に応じたオフセットを足したアドレスへのジャンプを実行してもよい。
【０２４５】
すると、ジャンプ先のアドレスから始まる、特権モードの処理のための一連のコードが実行される。そして、一連のコード中に含まれるリターン命令をＣＰＵ２２１が検出すると、ＣＰＵ２２１は実行モードを特権モードから非特権モードに切り換え、トラップ命令のアドレスの直後のアドレスに制御が戻る。
【０２４６】
ハイパーバイザコールは、例えば上記のようなトラップ命令を使って実装される。そこで、ステップＳ６０４で切り換え部１２４は、トラップ命令の制御用の上記レジスタに現在の非アクティブ領域の先頭アドレスを設定することで、ＣＰＵ２２１が非特権モードに戻った後で次にトラップ命令を検出したときのジャンプ先を切り換える。つまり、ステップＳ６０４で切り換え部１２４は、ハイパーバイザが切り換わった後のハイパーバイザコールでのジャンプ先を設定する。なお、ハイパーバイザに含まれる切り換え部１２４は、特権モードで動作するので、特権モードで保護された上記のような特殊なレジスタの値の書き換えを行うことができる。
【０２４７】
そして、次のステップＳ６０５で切り換え部１２４は、有効マップアドレス４１１が示す領域ではない方の領域内の領域使用中フラグ５０５の値を、「非使用中」を示す値（例えば、図１３の例では０）に設定する。つまり、切り換え部１２４は、アクティブ領域から非アクティブ領域に変化した領域における領域使用中フラグ５０５の値を、当該変化に合わせて書き換える。
【０２４８】
例えば、切り換え部１２４は、ステップＳ６０３で有効マップアドレス４１１の値をアドレスＡ１からアドレスＡ３に書き換えた場合、アドレスＡ１から始まる上位領域４２０のデータ領域４２１における領域使用中フラグ５０５の値を０に設定する。あるいは、切り換え部１２４は、ステップＳ６０３で有効マップアドレス４１１の値をアドレスＡ３からアドレスＡ１に書き換えた場合、アドレスＡ３から始まる下位領域４３０のデータ領域４３１における領域使用中フラグ５０５の値を０に設定する。
【０２４９】
さらに、ステップＳ６０６で切り換え部１２４は、有効マップアドレス４１１が示す領域内の領域使用中フラグ５０５の値を、「使用中」を示す値（例えば、図１３の例では１）に設定する。つまり、切り換え部１２４は、非アクティブ領域からアクティブ領域に変化した領域における領域使用中フラグ５０５の値を、当該変化に合わせて書き換える。
【０２５０】
例えば、切り換え部１２４は、ステップＳ６０３で有効マップアドレス４１１の値をアドレスＡ１からアドレスＡ３に書き換えた場合、アドレスＡ３から始まる下位領域４３０のデータ領域４３１における領域使用中フラグ５０５の値を１に設定する。あるいは、切り換え部１２４は、ステップＳ６０３で有効マップアドレス４１１の値をアドレスＡ３からアドレスＡ１に書き換えた場合、アドレスＡ１から始まる上位領域４２０のデータ領域４２１における領域使用中フラグ５０５の値を１に設定する。
【０２５１】
続いて、ステップＳ６０７で切り換え部１２４は、ＣＰＵ２２１内のプログラムカウンタの値を書き換える。ステップＳ６０７の処理は、新たなアクティブ領域に格納されているハイパーバイザのファームウェア内の命令を、ＣＰＵ２２１が次に実行する命令として指定することで、ハイパーバイザを切り換える処理である。
【０２５２】
具体的には、切り換え部１２４は、有効マップアドレス４１１と、有効マップアドレス４１１が示す領域内のアドレスマップ５０１により示される保留解除処理のコード６０１のアドレスの和を、プログラムカウンタに設定する。
【０２５３】
例えば、ステップＳ６０３で有効マップアドレス４１１がアドレスＡ１からアドレスＡ３に書き換えられた場合、プログラムカウンタには、下記（ｈ１）と（ｈ２）の和（Ａ３＋Ｃ０）が設定される。
（ｈ１）新たにアクティブ領域となった下位領域４３０の先頭アドレスＡ３
（ｈ２）下位領域４３０のデータ領域４３１内のアドレスマップ５０１により示される、下位領域４３０内での保留解除処理のコード６０１の相対アドレスＣ０
【０２５４】
逆に、ステップＳ６０３で有効マップアドレス４１１がアドレスＡ３からアドレスＡ１に書き換えられた場合、プログラムカウンタには、下記（ｉ１）と（ｉ２）の和（Ａ１＋Ｃ０）が設定される。
（ｉ１）新たにアクティブ領域となった上位領域４２０の先頭アドレスＡ１
（ｉ２）上位領域４２０のデータ領域４２１内のアドレスマップ５０１により示される、上位領域４２０内での保留解除処理のコード６０１の相対アドレスＣ０
【０２５５】
なお、図７にしたがって（ｈ２）と（ｉ２）では同じ「Ｃ０」という符号を使っているが、（ｈ２）の相対アドレスＣ０と（ｉ２）の相対アドレスＣ０の具体的な値は同じとは限らない。また、ステップＳ６０４〜Ｓ６０６の順序は任意に入れ替えられてもよい。また、ステップＳ６０３〜Ｓ６０７の実行時における切り換え部１２４は、ステップＳ６０２の実行時まで有効マップアドレス４１１が示していた方の領域中の、ファームウェア切り換え処理のコード６０８をＣＰＵ２２１が実行することで、実現される。
【０２５６】
また、ステップＳ６０７の実行後、次にＣＰＵ２２１が実行する命令は、ステップＳ６０７でプログラムカウンタに設定されたアドレスにある命令である。つまり、ＣＰＵ２２１は、次に、新たに現ハイパーバイザとなったハイパーバイザのファームウェアにおける、保留解除処理のコード６０１の実行を開始する。
【０２５７】
その結果、ステップＳ６０８で切り換え部１２４は、新たに現ハイパーバイザとなったハイパーバイザから、ドメイン３３０ａ〜３３０ｃに対して、ハイパーバイザへのアクセスの保留を解除するように指示する。つまり、切り換え部１２４は、保留制御部３３１ａ〜３３１ｃに対して、それぞれ解除命令を発行する。ステップＳ６０８での解除命令の発行の結果、ドメイン３３０ａ〜３３０ｃは、必要に応じてハイパーバイザコールを呼び出すようになる。
【０２５８】
また、次のステップＳ６０９で切り換え部１２４は、ハイパーバイザのファームウェアの置き換えが完了したことを管理部１１０に通知する。ステップＳ６０９での通知は、例えば、ＳＲＡＭ２２３を介して行われてもよい。
【０２５９】
なお、ステップＳ６０８〜Ｓ６０９の実行時における切り換え部１２４は、ステップＳ６０３で書き換えられた有効マップアドレス４１１が示す新たなアクティブ領域内の保留解除処理のコード６０１をＣＰＵ２２１が実行することで、実現される。
【０２６０】
また、本実施形態では、図７に示すよう保留解除処理のコード６０１の直後に待ち受け処理のコード６０２がある。したがって、次のステップＳ６１０では、通常のプログラムカウンタのインクリメントにより、ＣＰＵ２２１は待ち受け処理のコード６０２の実行を開始する。すなわち、ハイパーバイザのファームウェアの置き換えが終了すると、新たに現ハイパーバイザとなったハイパーバイザは、自動的に待ち受け処理を開始する。
【０２６１】
以上説明した第２実施形態によれば、ＣＰＵ２２１の物理的な再起動をともなわずに、ドメイン３３０ａ〜３３０ｃに対して透過的に、ハイパーバイザを置き換えることが可能である。つまり、第２実施形態によるハイパーバイザの置き換えは、ＣＰＵ２２１の再起動を必要としないので、情報処理装置１００が提供するサービスを停止させることがない。したがって、停止することが好ましくないサービスを提供するために情報処理装置１００が使われている場合であっても、サービスの運用スケジュールに左右されずに、タイムリにハイパーバイザを置き換えることができる。
【０２６２】
ＣＰＵ２２１の再起動が不要なことは、情報処理装置１００の可用性を向上させる効果がある。また、例えば現ハイパーバイザにセキュリティホールが見つかった場合などは、ハイパーバイザのタイムリなアップグレードは、セキュリティ向上のために有益である。したがって、情報処理装置１００の用途によらずにハイパーバイザのタイムリな置き換えが可能になることは、セキュリティの観点からも望ましい。
【０２６３】
また、図３には複数のシステムボード２２０ａ〜２２０ｃが図示されているが、情報処理装置１００は１枚のシステムボード２２０ａのみを含んでいてもよい。さらに、情報処理装置１００が複数のシステムボード２２０ａ〜２２０ｃを含む場合であっても、各システムボードにおけるハイパーバイザの置き換えは独立して実行可能である。
【０２６４】
すなわち、第２実施形態によれば、冗長化されていない構成の情報処理装置１００においても、ＣＰＵ２２１の再起動をともなわずにハイパーバイザを置き換えることが可能である。換言すれば、第２実施形態では、ＤＩＭＭ１４０（具体的には例えばＤＩＭＭ２２４）内に２つの領域（つまり図５の上位領域４２０と下位領域４３０）があれば、ＣＰＵ２２１の物理的な再起動をともなわないハイパーバイザの置き換えが可能である。
【０２６５】
また、新しいバージョンのハイパーバイザがリリースされた後に、不具合が見つかることもあり得る。つまり、実際にハイパーバイザがアップグレードされた後の情報処理装置１００の運用中に、新しいバージョンのハイパーバイザの不具合が初めて見つかることがあり得る。
【０２６６】
例えば、バージョン３のハイパーバイザが新たにリリースされ、情報処理装置１００において上記の第２実施形態にしたがってバージョン２からバージョン３へのアップグレードが行われたとする。その後、情報処理装置１００においては、バージョン３のハイパーバイザが動作する。
【０２６７】
ところが、バージョン３のハイパーバイザに何らかの不具合があると、例えばドメイン３３０ａ〜３３０ｃにおいて予期せぬエラーが発生するかもしれない。すると、情報処理装置１００のアドミニストレータは、ハイパーバイザをバージョン３からバージョン２に一時的にダウングレードすることに決めるかもしれない。
【０２６８】
第２実施形態によれば、ダウングレードのための置き換えも、アップグレードのための置き換えと同様に、図９〜１３のフローチャートにしたがって行われる。つまり、第２実施形態によれば、不具合が発覚した後の復旧作業としてのダウングレードも、ＣＰＵ２２１の再起動をともなわずに実行可能である。換言すれば、たとえ復旧作業が必要になったとしても、情報処理装置１００が提供するサービスを復旧作業のために停止させる必要がない。
【０２６９】
したがって、第２実施形態によれば、たとえ新たにリリースされたバージョンのハイパーバイザに不具合があったとしても、情報処理装置１００の可用性への悪影響を低レベルに抑えることができる。
【０２７０】
また、第２実施形態によるハイパーバイザの置き換えは、ドメイン３３０ａ〜３３０ｃ内で実行中のプログラム（例えばＯＳやユーザアプリケーションプログラム）の動作を大きく遅延させるものではない。むしろ、ハイパーバイザの置き換え自体にともなう遅延は非常にわずかである。
【０２７１】
具体的には、第２実施形態においてハイパーバイザコールが一時停止させられる期間は、図１３のステップＳ６０１での抑止命令の発行からステップＳ６０８での解除命令の発行までの期間である。そして、抑止命令の発行から解除命令の発行までの期間までのうち、ハイパーバイザの置き換え自体にともなう遅延をもたらすのは、ステップＳ６０３〜Ｓ６０７の処理である。
【０２７２】
ここで、ステップＳ６０３、Ｓ６０５、Ｓ６０６の処理は、多くても数バイト程度のデータをＤＩＭＭ２２４に書き込む処理である。また、ステップＳ６０４とＳ６０７の処理は、ＣＰＵ２２１内のレジスタの値を更新する処理である。したがって、ステップＳ６０３〜Ｓ６０７の処理にかかる時間は、非常に短い。つまり、ハイパーバイザの置き換え自体にともなう遅延は非常にわずかである。
【０２７３】
なお、ステップＳ６０２の処理による遅延は、ハイパーバイザの置き換えが行われるか否かに関わらず発生する遅延であるから、ハイパーバイザの置き換え自体にともなう遅延ではない。つまり、「ハイパーバイザのキューに１つまたは複数のハイパーバイザコールが既に存在するために、新たにハイパーバイザコールが呼び出されてから応答までに時間がかかる」といった事態は、ハイパーバイザの置き換えが行われるか否かに関わらず生じ得る。したがって、ステップＳ６０２の処理による遅延は、ハイパーバイザの置き換え自体にともなう遅延ではない。
【０２７４】
なお、以上説明したように非常に短い遅延のみでハイパーバイザの置き換えが可能なもう一つの理由は、抑止命令の発行の前に図９のステップＳ２０１〜Ｓ２０４の処理が行われるからである。
【０２７５】
例えば、ステップＳ２０３のコード展開処理と、ステップＳ２０４のデータ展開処理は、ハイパーバイザのファームウェアのサイズに応じたメモリアクセスをともなう。よって、ステップＳ２０３とＳ２０４の処理の実行には、多少時間がかかる場合がある。
【０２７６】
しかし、ステップＳ２０３とＳ２０４の処理が実行される時点では、まだ抑止命令は発行されていないので、ドメイン３３０ａ〜３３０ｃはハイパーバイザコールを呼び出すことができる。また、現ハイパーバイザは、マルチスレッドで動作してもよい。つまり、現ハイパーバイザは、ステップＳ２０３とＳ２０４の処理の実行と並行して、ハイパーバイザコールを受け付け、受け付けたハイパーバイザコールを処理することもできる。
【０２７７】
よって、ドメイン３３０ａ〜３３０ｃは、現ハイパーバイザがステップＳ２０３とＳ２０４の処理を実行している間ずっとハイパーバイザコールへの応答を待たされるわけではなく、単にキューの状態に応じた待ち時間が生じるだけである。このように、第２実施形態においては、多少時間がかかるおそれのあるステップＳ２０３とＳ２０４の処理を抑止命令の発行よりも前に現ハイパーバイザが実行することで、ハイパーバイザの置き換えにともなって生じる遅延時間の短縮が図られる。
【０２７８】
また、図９〜１３に示した処理の順序は一例である。例えば、図９のステップＳ２０４のデータ展開処理は、切り換えによって新たに「現ハイパーバイザ」となるハイパーバイザの実行が開始される前に行われればよい。つまり、ステップＳ２０４のデータ展開処理は、必ずしも図９のようにステップＳ２０２〜Ｓ２０３の後に実行されるのでなくてもよく、ステップＳ２０２〜Ｓ２０３の前に実行されてもよい。
【０２７９】
なお、図１に示す第１実施形態と第２実施形態とを比較すれば以下のとおりである。
図１において、ステップＳ１〜Ｓ３まではハイパーバイザ１ａが現ハイパーバイザである。また、図１のステップＳ１からステップＳ２への遷移の契機である置き換え指示の入力は、例えば、上記（ｃ２）における、図９の置き換え処理を開始するための明示的な指示に対応する。
【０２８０】
そして、図１のステップＳ２は図１１のコード展開処理に対応し、図１のステップＳ３は図１３のステップＳ６０１に対応する。
そして、図１の指定情報３は、第２実施形態での有効マップアドレス４１１に相当する。つまり、図１のステップＳ４における指定情報３の書き換えは、図１３のステップＳ６０３での有効マップアドレス４１１の書き換えに相当する。
【０２８１】
また、図１のステップＳ４において、情報処理装置は指定情報３の書き換えに応じてハイパーバイザ１ｂのファームウェアの実行を開始する。ステップＳ４におけるハイパーバイザ１ａからハイパーバイザ１ｂへの切り換えは、より詳しくは、例えば図１３のステップＳ６０４〜Ｓ６０７のような処理によって実現されてもよい。
【０２８２】
また、図１のステップＳ５での解除命令の発行は、図１３のステップＳ６０８に相当する。
続いて、第３実施形態について図１４〜１５を参照して説明する。なお、第２実施形態との共通点については説明を省略する。
【０２８３】
第３実施形態が第２実施形態と違う点は、図３のような物理的に１つのＤＩＭＭ２２４の代わりに、物理的に異なる２つののメモリモジュールが使われる点である。例えば、第３実施形態では、図３のシステムボード２２０ａは、単独のＤＩＭＭ２２４の代わりに、２つのメモリモジュールと、メモリモジュール切り換え制御回路とを有するように変形される。換言すれば、第３実施形態では、図２においてＤＩＭＭ１４０の代わりに２つのメモリモジュールが使われ、現ハイパーバイザのファームウェア１４１と対象ハイパーバイザのファームウェア１４２が、物理的に異なる２つのメモリモジュールに格納される。
【０２８４】
図１４は、ハイパーバイザのファームウェアに関する第３実施形態のメモリ割り当てを説明する図である。図１４には、図２の制御部１２０として動作する図３のＣＰＵ２２１が認識するアドレス空間７００と、２つのＤＩＭＭ７１０および７２０が例示されている。
【０２８５】
ＣＰＵ２２１が認識するアドレス空間７００は、アクティブ領域７０１と非アクティブ領域７０２を含む。また、メモリモジュール切り換え制御回路により、ＤＩＭＭ７１０と７２０のうち一方の物理メモリ空間がアクティブ領域７０１にマッピングされ、他方の物理メモリ空間が非アクティブ領域７０２にマッピングされる。
【０２８６】
アクティブ領域７０１は、アドレスＤ０から始まる領域であり、より具体的には、アドレスＤ０から始まるデータ領域７０３と、アドレスＤ１から始まるコード領域７０４を含む。また、非アクティブ領域７０２は、アドレスＤ２から始まる領域であり、より具体的には、アドレスＤ２から始まるデータ領域７０５と、アドレスＤ３から始まるコード領域７０６を含む。なお、図１４に示すアドレスＤ０〜Ｄ４は、ＣＰＵ２２１が認識するアドレス空間７００における固定アドレスである。
【０２８７】
また、ＤＩＭＭ７１０は、アドレスＥ０から始まるデータ領域７１１と、アドレスＥ１から始まるコード領域７１２を含む。そして、ＤＩＭＭ７２０は、アドレスＥ０から始まるデータ領域７２１と、アドレスＥ１から始まるコード領域７２２を含む。なお、図１４に示すアドレスＥ０〜Ｅ２は、ＤＩＭＭ内の固定的な物理アドレスである。
【０２８８】
不図示のメモリモジュール切り換え制御回路は、アクティブ領域７０１にマッピングするＤＩＭＭを切り換える。
以下では説明の便宜上、メモリモジュール切り換え制御回路がＤＩＭＭ７１０をアクティブ領域７０１にマッピングし、ＤＩＭＭ７２０を非アクティブ領域７０２にマッピングしている状態を、「第１状態」という。すなわち、第１状態では、ＣＰＵ２２１が認識するアドレス空間７００におけるデータ領域７０３とコード領域７０４の物理的な実体は、ＤＩＭＭ７１０上のデータ領域７１１とコード領域７１２である。そして、第１状態では、ＣＰＵ２２１が認識するアドレス空間７００におけるデータ領域７０５とコード領域７０６の物理的な実体は、ＤＩＭＭ７２０上のデータ領域７２１とコード領域７２２である。
【０２８９】
また、以下では説明の便宜上、メモリモジュール切り換え制御回路がＤＩＭＭ７２０をアクティブ領域７０１にマッピングし、ＤＩＭＭ７１０を非アクティブ領域７０２にマッピングしている状態を、「第２状態」という。すなわち、第２状態では、ＣＰＵ２２１が認識するアドレス空間７００におけるデータ領域７０３とコード領域７０４の物理的な実体は、ＤＩＭＭ７２０上のデータ領域７２１とコード領域７２２である。そして、第２状態では、ＣＰＵ２２１が認識するアドレス空間７００におけるデータ領域７０５とコード領域７０６の物理的な実体は、ＤＩＭＭ７１０上のデータ領域７１１とコード領域７１２である。
【０２９０】
以上の説明から理解されるように、第３実施形態においては、図１４に示すデータ領域のサイズは一定であり、図１４に示すコード領域のサイズも一定である。つまり、下記の等式（１）と（２）が成り立つ。
Ｄ１−Ｄ０＝Ｄ３−Ｄ２＝Ｅ１−Ｅ０        （１）
Ｄ２−Ｄ１＝Ｄ４−Ｄ３＝Ｅ２−Ｅ１        （２）
【０２９１】
また、図１４に示す各データ領域の詳細は、図６と同様である。そして、図１４に示す各コード領域の詳細は、図７と類似だが、多少異なる点がある。相違点については図１５とあわせて後述する。
【０２９２】
ところで、不図示のメモリモジュール切り換え制御回路は、切り換え制御信号がアサートされるたびに、第１状態と第２状態を切り換える。
第１状態から第２状態への切り換えにより、物理的にはＤＩＭＭ７１０にファームウェアが格納されているハイパーバイザが、「現ハイパーバイザ」から「直近の過去に使用されていたハイパーバイザ」に変化する。また、第１状態から第２状態への切り換えにより、物理的にはＤＩＭＭ７２０にファームウェアが格納されているハイパーバイザが、「対象ハイパーバイザ」から「現ハイパーバイザ」に変化する。
【０２９３】
逆に、第２状態から第１状態への切り換えにより、物理的にはＤＩＭＭ７１０にファームウェアが格納されているハイパーバイザが、「対象ハイパーバイザ」から「現ハイパーバイザ」に変化する。また、第２状態から第１状態への切り換えにより、物理的にはＤＩＭＭ７２０にファームウェアが格納されているハイパーバイザが、「現ハイパーバイザ」から「直近の過去に使用されていたハイパーバイザ」に変化する。
【０２９４】
ところで、ＣＰＵ２２１は、第１状態と第２状態のどちらにおいても、アクティブ領域７０１にファームウェアが格納されている方のハイパーバイザを「現ハイパーバイザ」と認識する。
【０２９５】
また、ＣＰＵ２２１は、ＤＩＭＭ７１０と７２０のどちらがアクティブ領域７０１にマッピングされているかを意識せずに、アドレス空間７００内のアドレスを指定してメモリアクセス（具体的にはロード命令やストア命令など）を実行する。つまり、ＣＰＵ２２１がアドレスバスに出力するアドレスは、アドレス空間７００におけるアドレスである。メモリモジュール切り換え制御回路は、現在の状態が第１状態であるか第２状態であるかに応じて、ＣＰＵ２２１から出力されたアドレスをＤＩＭＭ７１０または７２０のアドレスに変換し、ＤＩＭＭ７１０または７２０へのメモリアクセスを実現する。
【０２９６】
また、別の観点からアクティブ領域７０１と現ハイパーバイザについて説明すれば、次のとおりである。ハイパーバイザのための命令フェッチアドレスは、アドレス空間７００におけるアクティブ領域７０１のコード領域７０４内のアドレスに限られる。つまり、非アクティブ領域７０２のコード領域７０６内のアドレスは、ファームウェアのコードをコピーするためのストア命令の引数アドレスとして指定されることはあっても、命令フェッチアドレスとして指定されることはない。
【０２９７】
ところで、ＣＰＵ２２１は、上記のごとく、メモリアクセスの際には、現在の状態が第１状態であるか第２状態であるかを意識する必要がなく、単にアドレス空間７００におけるアドレスを指定すればよい。一方で、ＣＰＵ２２１は、第１状態と第２状態の間の切り換えをメモリモジュール切り換え制御回路に指示することもできる。
【０２９８】
具体的には、ＣＰＵ２２１は、切り換え制御信号をメモリモジュール切り換え制御回路に出力することにより、メモリモジュール切り換え制御回路に状態の切り換えを命令する。メモリモジュール切り換え制御回路は、切り換え制御信号を受け取ると、もし現在の状態が第１状態であれば、第１状態から第２状態への切り換えを実行し、もし現在の状態が第２状態であれば、第２状態から第１状態への切り換えを実行する。
【０２９９】
以上の説明から明らかなとおり、第３実施形態において図１の指定情報３に対応する情報は、メモリモジュール切り換え制御回路において管理される「現在の状態は第１状態か第２状態か」を示す情報である。メモリモジュール切り換え制御回路の回路構成にもよるが、指定情報３は、具体的にはメモリモジュール切り換え制御回路内の、レジスタまたはフリップフロップなどの記憶装置に記憶されていてもよい。あるいは、「メモリモジュール切り換え制御回路内の特定のトランジスタがオンかオフか」といった回路状態により、指定情報３が表されてもよい。
【０３００】
続いて、第３実施形態における置き換え処理の詳細について説明する。第３実施形態における置き換え処理は、第２実施形態における図９の置き換え処理と類似なので、以下では相違点を中心に説明する。
【０３０１】
第２実施形態では、制御部１２０を実現するＣＰＵ２２１により認識されるアクティブ領域の先頭アドレスは、可変であり、具体的には図５のアドレスＡ１とＡ３の間で切り換わる。しかし、第３実施形態では、ＣＰＵ２２１が認識するアクティブ領域７０１の先頭アドレスは、アドレスＤ０に固定されている。
【０３０２】
したがって、第３実施形態では、図５のような有効マップアドレス４１１は省略可能である。有効マップアドレス４１１がなくても、ＣＰＵ２２１がハイパーバイザのファームウェアを実行することで実現される制御部１２０内の各部は、アクティブ領域７０１と非アクティブ領域７０２それぞれの固定的な先頭アドレスＤ０とＤ２を認識することができる。
【０３０３】
そのため、第３実施形態では、有効マップアドレス４１１の参照が省略され、有効マップアドレス４１１の書き換えも省略される。しかし、その他の点では、図９〜１２の処理は第３実施形態においても同様である。
【０３０４】
ただし、図９のステップＳ２０５に相当する図１３の切り換え処理は、第３実施形態では図１５のように変形される。以下、図１５のフローチャートを参照して、第３実施形態における切り換え処理について説明する。
【０３０５】
ステップＳ７０１〜Ｓ７０２は、図１３のステップＳ６０１〜Ｓ６０２と類似である。
具体的には、ステップＳ７０１で切り換え部１２４は、現ハイパーバイザからドメイン３３０ａ〜３３０ｃに対して、ハイパーバイザへのアクセスを一時保留するように指示する。なお、ステップＳ７０１の実行時における切り換え部１２４は、アクティブ領域７０１内のコード領域７０４中のアクセス保留処理のコード６０７をＣＰＵ２２１が実行することにより、実現される。
【０３０６】
そして、ステップＳ７０２で切り換え部１２４は、ドメイン３３０ａ〜３３０ｃから受け付け済みの処理がもしあれば、受け付け済みの当該処理を実行して完了する。なお、ステップＳ７０２の実行時における切り換え部１２４は、アクティブ領域７０１内のコード領域７０４中の上記（ｇ１）と（ｇ２）のコードをＣＰＵ２２１が実行することにより、実現される。
【０３０７】
ところで、上述のとおり第３実施形態では、アクティブ領域７０１の先頭アドレスＤ０は固定的である。したがって、第３実施形態においては、ハイパーバイザの切り換えが生じるときにも、図１３のステップＳ６０３〜Ｓ６０４のような処理は不要である。よって、ステップＳ７０１〜Ｓ７０２の後、処理はステップＳ７０３に移行する。
【０３０８】
そして、ステップＳ７０３において切り換え部１２４は、アクティブ領域７０１内のデータ領域７０３中の領域使用中フラグ５０５の値を、「非使用中」を示す値（例えば、図１５の例では０）に設定する。つまり、切り換え部１２４は、アクティブ領域７０１にマッピングされた状態から非アクティブ領域７０２にマッピングされた状態へと切り換える対象のＤＩＭＭにおける領域使用中フラグ５０５の値を、切り換えに合わせて書き換える。
【０３０９】
なお、ステップＳ７０３での書き換えは、具体的には、アドレス空間７００におけるアドレス（Ｄ０＋Ｂ４）を指定したストア命令を、切り換え部１２４が実行することで、実現される。指定されたアドレス（Ｄ０＋Ｂ４）は、メモリモジュール切り換え制御回路により、第１状態ならばＤＩＭＭ７１０の物理アドレス（Ｅ０＋Ｂ４）に変換され、第２状態ならばＤＩＭＭ７２０の物理アドレス（Ｅ０＋Ｂ４）に変換される。
【０３１０】
また、ステップＳ７０３の実行時における切り換え部１２４は、アクティブ領域７０１内のコード領域７０４中のファームウェア切り換え処理のコード６０８をＣＰＵ２２１が実行することにより、実現される。
【０３１１】
そして、次のステップＳ７０４で切り換え部１２４は、非アクティブ領域７０２内のデータ領域７０５中の領域使用中フラグ５０５の値を、「使用中」を示す値（例えば、図１５の例では１）に設定する。つまり、切り換え部１２４は、非アクティブ領域７０２にマッピングされた状態からアクティブ領域７０１にマッピングされた状態へと切り換える対象のＤＩＭＭにおける領域使用中フラグ５０５の値を、切り換えに合わせて書き換える。
【０３１２】
なお、ステップＳ７０４における書き換えは、具体的には、アドレス空間７００におけるアドレス（Ｄ２＋Ｂ４）を指定したストア命令を、切り換え部１２４が実行することで、実現される。指定されたアドレス（Ｄ２＋Ｂ４）は、メモリモジュール切り換え制御回路により、第１状態ならばＤＩＭＭ７２０の物理アドレス（Ｅ０＋Ｂ４）に変換され、第２状態ならばＤＩＭＭ７１０の物理アドレス（Ｅ０＋Ｂ４）に変換される。
【０３１３】
また、ステップＳ７０４の実行時における切り換え部１２４も、アクティブ領域７０１内のコード領域７０４中のファームウェア切り換え処理のコード６０８をＣＰＵ２２１が実行することにより、実現される。
【０３１４】
そして、次のステップＳ７０５で切り換え部１２４は、切り換え制御信号を出力することにより、ＤＩＭＭの切り換えをメモリモジュール切り換え制御回路に指示する。このステップＳ７０５と次のステップＳ７０６に関連して、第３実施形態では、コード領域の詳細が図７と相違していてもよい。以下に、第３実施形態におけるコード領域の詳細について例示する。
【０３１５】
現ハイパーバイザのファームウェアをＣＰＵ２２１が実行するときの命令フェッチアドレスは、上記のとおり、アドレス空間７００におけるアクティブ領域７０１のコード領域７０４中のアドレスである。
【０３１６】
そして、現在の状態が第１状態であれば、命令は、物理的にはＤＩＭＭ７１０のコード領域７１２からフェッチされる。逆に、現在の状態が第２状態であれば、命令は、物理的にはＤＩＭＭ７２０のコード領域７２２からフェッチされる。なお、アドレス空間７００内のアドレスをＤＩＭＭ７１０または７２０の物理アドレスに変換する処理は、メモリモジュール切り換え制御回路により行われる。
【０３１７】
一方で、メモリモジュール切り換え制御回路が第１状態と第２状態の間の切り換えを実行すると、アクティブ領域７０１のコード領域７０４にマッピングされる物理的なメモリ領域が、コード領域７１２からコード領域７２２へ、またはその逆に、切り換わる。したがって、アドレス空間７００内のアドレスにより指定された命令フェッチアドレスに対応する物理アドレスも、別のＤＩＭＭの物理アドレスに切り換わる。
【０３１８】
そこで、第３実施形態では、コード領域の詳細が例えば以下のように変形されてもよい。図７では、コード領域６００の先頭に保留解除処理のコード６０１があり、ファームウェア切り換え処理のコード６０８は相対アドレスＣ７から始まっている。しかし、第３実施形態では、ファームウェア切り換え処理のコード６０８のうちの一部（具体的にはステップＳ７０５とＳ７０６に関する命令）が、コード領域の先頭にあってもよい。
【０３１９】
なおここで、「コード領域の先頭」は、コード領域内での固定的な相対アドレスの具体例の一つである。ステップＳ７０５とＳ７０６に関する命令は、コード領域内での所定の位置にあればよく、必ずしも先頭になくてもよい。
【０３２０】
例えば、ファームウェア切り換え処理のコード６０８の一部は、図７と同様に、コード領域の先頭以外の箇所にあってもよいが、ステップＳ７０４のためのストア命令の直後に、コード領域の先頭への無条件ジャンプ命令があってもよい。ここで、現ハイパーバイザのファームウェアのコード領域の先頭アドレスは、図１４の固定アドレスＤ１であるから、ジャンプ先は固定アドレスＤ１である。
【０３２１】
そして、コード領域の先頭に、ステップＳ７０５とＳ７０６に関する命令があってもよい。つまり、メモリモジュール切り換え制御回路に切り換え制御信号を出力するための命令と、次のステップＳ７０６のための命令が、コード領域の先頭にあってもよく、それらの命令に図７の保留解除処理のコード６０１が続いていてもよい。
【０３２２】
以上説明したような命令の並び順によれば、固定アドレスＤ１を利用して、現ハイパーバイザのファームウェアと対象ハイパーバイザのファームウェアの間で、命令フェッチアドレスが、位置合わせされる。したがって、以下のようにしてハイパーバイザの切り換えが実現されて、処理はステップＳ７０５からステップＳ７０６へと移行する。
【０３２３】
ここで、説明の便宜上、ステップＳ７０５で第１状態から第２状態への切り換えが生じるとする。つまり、ステップＳ７０５での切り換え部１２４からの指示に応じて、メモリモジュール切り換え制御回路が、アクティブ領域７０１にマッピングするＤＩＭＭをＤＩＭＭ７１０からＤＩＭＭ７２０に切り換えるとする。
【０３２４】
また、ステップＳ７０５の実行後、ＣＰＵ２２１内のプログラムカウンタは通常どおりインクリメントされる。よって、次の命令フェッチアドレスは、ステップＳ７０５のための命令の直後の、ステップＳ７０６のための命令のアドレスである。ただし、命令フェッチアドレスに対応する物理アドレスは、今までＤＩＭＭ７１０のコード領域７１２内のアドレスだったのが、ステップＳ７０５での切り換えを境にして、ＤＩＭＭ７２０のコード領域７２２内のアドレスに変わる。
【０３２５】
ここで、どのバージョンのハイパーバイザのファームウェアにおいても、上記のような順で命令が並んでいる（すなわち、コード領域の先頭にステップＳ７０５とＳ７０６のための命令がある）とする。つまり、どのバージョンのハイパーバイザのファームウェアにおいても、ある固定アドレスにステップＳ７０５とＳ７０６のための命令があるとする。
【０３２６】
すると、ステップＳ７０５の実行直後にプログラムカウンタが指すアドレスに対応する物理アドレスは、ＤＩＭＭ７２０のコード領域７２２内の、ステップＳ７０６のための命令のアドレスである。
【０３２７】
つまり、ステップＳ７０５の直後には、新たに「現ハイパーバイザ」となったハイパーバイザのファームウェア中の、ステップＳ７０６のための命令が、フェッチされる。その結果、ステップＳ７０６では、新たにアクティブ領域７０１にマッピングされるようになったＤＩＭＭ７２０に格納されたファームウェア中の、ステップＳ７０６のための命令をＣＰＵ２２１が実行することで、切り換え部１２４が実現される。換言すれば、ステップＳ７０６の実行時における切り換え部１２４は、新たに「現ハイパーバイザ」となったハイパーバイザにより実現される。
【０３２８】
なお、上記では説明の便宜上、ステップＳ７０５で第１状態から第２状態への切り換えが生じる場合を例示したが、もちろん、第２状態から第１状態への切り換えが生じる場合も同様に、処理は適切にステップＳ７０６へと移行する。
【０３２９】
そして、ステップＳ７０６で切り換え部１２４は、ＣＰＵ２２１内のプログラムカウンタの値を書き換える。具体的には、ステップＳ７０６で切り換え部１２４は、下記（ｊ１）と（ｊ２）の和をプログラムカウンタに設定する。
（ｊ１）アクティブ領域７０１の先頭アドレスＤ０
（ｊ２）アクティブ領域７０１のコード領域７０４中の保留解除処理のコード６０１の先頭の、アドレスＤ０を基準にした相対アドレス（すなわち、アクティブ領域７０１のデータ領域７０３中のアドレスマップ５０１により示される、保留解除処理のコード６０１の相対アドレス）
【０３３０】
ステップＳ７０６の処理は、より具体的には、ジャンプ命令の実行を含む。よって、ステップＳ７０６で設定されたプログラムカウンタにしたがって、ＣＰＵ２２１は、ジャンプ先の保留解除処理のコード６０１を次に実行する。換言すれば、ステップＳ７０６の次のステップＳ７０７において、ＣＰＵ２２１は、ステップＳ７０５の切り換えにより新たに「現ハイパーバイザ」となったハイパーバイザのファームウェアにおける、保留解除処理のコード６０１の実行を開始する。
【０３３１】
その結果、ステップＳ７０７で切り換え部１２４は、新たに現ハイパーバイザとなったハイパーバイザから、ドメイン３３０ａ〜３３０ｃに対して、ハイパーバイザへのアクセスの保留を解除するように指示する。
【０３３２】
また、次のステップＳ７０８で切り換え部１２４は、ハイパーバイザのファームウェアの置き換えが完了したことを管理部１１０に通知する。
なお、ステップＳ７０７〜Ｓ７０８の実行時の切り換え部１２４は、ステップＳ７０５の切り換えで新たにアクティブ領域７０１にマッピングされるようになったＤＩＭＭに格納されている保留解除処理のコード６０１をＣＰＵ２２１が実行することで、実現される。
【０３３３】
また、第３実施形態においても、図７と同様に、保留解除処理のコード６０１の直後に待ち受け処理のコード６０２がある。したがって、次のステップＳ７０９では、通常のプログラムカウンタのインクリメントにより、ＣＰＵ２２１は待ち受け処理のコード６０２の実行を開始することになる。すなわち、ハイパーバイザのファームウェアの置き換えが終了すると、新たに現ハイパーバイザとなったハイパーバイザは、自動的に待ち受け処理を開始する。
【０３３４】
なお、以上のステップＳ７０７〜Ｓ７０９の詳細は、図１３のステップＳ６０８〜Ｓ６１０と類似である。
以上説明した第３実施形態には、例えば、第２実施形態と同様の次のような効果がある。
【０３３５】
第１に、ＣＰＵ２２１の物理的な再起動をともなわずに、かつ、ドメイン３３０ａ〜３３０ｃに対して透過的に、ハイパーバイザを置き換えることが可能である。したがって、情報処理装置１００が提供するサービスを停止させずに、タイムリにハイパーバイザを置き換えることが可能である。
【０３３６】
第２に、ハイパーバイザの置き換え自体に起因する遅延はごくわずかである。
第３に、ダウングレードのための置き換えも、アップグレードのための置き換えと同様に行うことが可能である。したがって、仮に何らかの不具合に起因して復旧作業のためのダウングレードが行われるとしても、情報処理装置１００が提供するサービスを復旧作業のために停止させる必要もなく、かつ、速やかな復旧が可能である。
【０３３７】
ところで、本発明は上記実施形態に限られるものではない。上記の説明においてもいくつかの変形について説明したが、上記実施形態は、さらに例えば下記の観点から様々に変形することもできる。上記の各実施形態および下記の各種変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
【０３３８】
以前使われていたバージョンのハイパーバイザへ戻すために図９の置き換え処理が行われる場合、実施形態によっては、一部のステップが省略されてもよい。以下ではそのような省略の具体例について説明する。
【０３３９】
なお、以前使われていたバージョンのハイパーバイザへ戻す処理は、例えば下記（ｋ１）と（ｋ２）のように、ダウングレードの場合もあるし、アップグレードの場合もある。
（ｋ１）ハイパーバイザをバージョン１からバージョン２へアップグレードした後で、バージョン２からバージョン１に戻す処理（すなわちダウングレード）
（ｋ２）ハイパーバイザをバージョン３からバージョン２へダウングレードした後で、バージョン２からバージョン３に戻す処理（すなわちアップグレード）
【０３４０】
上記のとおり、置き換え処理の開始の指示は、入力装置２３０からの入力であってもよい。以下では説明の便宜上、図９の置き換え処理または一部のステップが省略された置き換え処理の開始の指示を、「開始指示」という。
【０３４１】
開始指示は、図９の置き換え処理の開始の指示（以下では便宜上「置き換え指示」という）の１種類のみでもよい。あるいは、開始指示には、置き換え指示と、一部のステップが省略された置き換え処理の開始の指示（以下では便宜上「復旧指示」という）の２種類があってもよい。
【０３４２】
開始指示には置き換え指示しかない場合、置き換え指示の入力は、例えば、特定の１つのボタンの押下、または特定の１つのコマンドの入力などである。そして、管理部１１０と制御部１２０は、置き換え指示の入力を契機として、図９の置き換え処理を上述のとおり実行する。図９の置き換え処理は、現ハイパーバイザおよび対象ハイパーバイザのバージョンによらずに適用可能な汎用的な処理であるから、開始指示は置き換え指示の１種類のみであってもよい。
【０３４３】
しかし、開始指示には、置き換え指示と復旧指示の２種類があってもよい。この場合、入力装置２３０からの入力がいずれの種類であるかに応じて、管理部１１０と制御部１２０は、図９の置き換え処理、または、一部のステップが省略された置き換え処理を実行する。
【０３４４】
復旧指示は、具体的には、以前使われていたバージョンのハイパーバイザへ戻すために、一部のステップが省略された置き換え処理を実行するよう情報処理装置１００に指示するものである。換言すれば、復旧指示は、現ハイパーバイザから、ＤＩＭＭ２２４内またはアドレス空間７００内の非アクティブ領域にファームウェアが残っているハイパーバイザへの、置き換えの指示である。
【０３４５】
管理部１１０は、例えば下記の（ｌ１）、（ｌ２）、または（ｌ３）に応じて、開始指示の種類を判別してもよい。
（ｌ１）特定の２つのボタンのうちどちらが押下されたか
（ｌ２）特定の２つのコマンドのうちどちらが入力されたか
（ｌ３）１つの特定のコマンドでどのように引数が指定されたか
【０３４６】
そして、入力された開始指示が置き換え指示であれば、管理部１１０は図９の置き換え処理を開始する。逆に、入力された開始指示が復旧指示であれば、管理部１１０は復旧指示が入力されたことを制御部１２０内の前処理部１２１に通知する。
【０３４７】
復旧指示が入力された場合の対象ハイパーバイザは、ＤＩＭＭ２２４内またはアドレス空間７００内の非アクティブ領域にファームウェアが格納されているハイパーバイザのことである。よって、復旧指示が入力されたという通知を受け取った場合、前処理部１２１は、図１０の前処理におけるステップＳ３０１〜Ｓ３０２、Ｓ３０４、Ｓ３０６、Ｓ３０８を省略する。
【０３４８】
すなわち、前処理部１２１は、復旧指示が入力されたという通知を管理部１１０から受け取ると、ステップＳ３０３の判断を実行する。そして、動的ファームウェア置き換え機能が無効であれば、前処理部１２１は、ステップＳ３０５で処理タイプを０に設定し、前処理を終了する。逆に、動的ファームウェア置き換え機能が有効であれば、前処理部１２１は、ステップＳ３０７で処理タイプを１に設定し、前処理を終了する。
【０３４９】
以上のように、復旧指示が入力された場合は、処理タイプは０または１なので、図９のステップＳ２０３（すなわち図１１のコード展開処理）は実行されない。また、処理タイプが１ならばステップＳ２０４に相当する図１２のデータ展開処理と、ステップＳ２０５に相当する図１３または図１５の切り換え処理が実行されるが、データ展開処理におけるステップＳ５０１〜Ｓ５０２は省略される。
【０３５０】
以上のように、非アクティブ領域にファームウェアが残っているハイパーバイザへ戻す処理では、いくつかのステップが省略可能である。そこで、省略可能なステップがあることを制御部１２０に明示的に通知するために、上記のように復旧指示が使われてもよい。
【０３５１】
なお、非アクティブ領域にファームウェアが残っているハイパーバイザへ戻す処理は、以上例示したような明示的な復旧指示と、一部のステップが省略された置き換え処理により実現されてもよいが、図９の置き換え処理によっても同等に実現することができる。つまり、図２の格納部１３０に格納された対象ハイパーバイザのファームウェアが、非アクティブ領域に残っているハイパーバイザのファームウェアと同じ場合、置き換え指示は、暗黙的な復旧指示であるとも見なせる。
【０３５２】
また、以上説明したような明示的または暗黙的な復旧指示は、図１の第１実施形態にももちろん適用可能である。例えば、図１のステップＳ１〜Ｓ５の実行後に、図１に関して説明した情報処理装置に対して、明示的または暗黙的な復旧指示が入力されてもよい。つまり、当該復旧指示は、ハイパーバイザ１ｂからハイパーバイザ１ａへの復旧の指示である。
【０３５３】
すると、復旧指示の入力を契機として、情報処理装置は、今度はハイパーバイザ１ｂから、ハイパーバイザコールの呼び出し元であるＯＳ２ａと２ｂに新たな抑止命令を発行する。そして、情報処理装置は、指定情報３を、ハイパーバイザ１ｂのファームウェアが格納されているメモリ領域を指定する値から、ハイパーバイザ１ａのファームウェアが格納されているメモリ領域を指定する値へと書き換える。
【０３５４】
さらに、情報処理装置は、指定情報３の書き換えにしたがって、再度ハイパーバイザ１ａの実行を開始する。また、情報処理装置は、ハイパーバイザ１ａから、上記の新たな抑止命令を解除する新たな解除命令をＯＳ２ａと２ｂに発行する。
【０３５５】
以上のようにして、情報処理装置は、復旧指示の入力を契機として、ステップＳ３〜Ｓ５とはハイパーバイザ１ａと１ｂが逆になった処理を行うことで、ハイパーバイザ１ｂからハイパーバイザ１ａへの復旧を行うことができる。
【０３５６】
また、図１に関して説明した情報処理装置は、上記のとおりアドレス変換回路を有してもよく、指定情報３がアドレス変換回路に記憶されてもよい。同様に、第２実施形態の情報処理装置１００も、アドレス変換回路を有するように変形されてもよい。
【０３５７】
例えば、情報処理装置１００は、ＣＰＵ２２１とＤＩＭＭ２２４の間にアドレス変換回路を有してもよい。アドレス変換回路は、ＣＰＵ２２１がアドレスバスに出力した同じアドレスを、場合に応じて異なる物理アドレスに変換する。具体的には、例えば次のようなアドレス変換が行われてもよい。
【０３５８】
例えば、ＣＰＵ２２１は図１４と同様にアドレス空間７００を認識してもよい。そして、図１４における２つのＤＩＭＭ７１０と７２０の代わりに、１つのＤＩＭＭ２２４内の２つの物理メモリ領域が使われてもよい。つまり、アドレス変換回路は、ＤＩＭＭ２２４内の２つの物理メモリ領域の一方をアクティブ領域７０１にマッピングし、他方を非アクティブ領域７０２にマッピングしてもよい。
【０３５９】
つまり、アドレス変換回路は、ハイパーバイザの切り換えにともなって、ＤＩＭＭ２２４内の２つの物理メモリ領域のそれぞれに対応する、アドレス変換のためのオフセット値を変更する。アドレス変換回路は、オフセット値を保持するレジスタを有してもよい。オフセット値は指定情報３の具体例である。
【０３６０】
以上のようなアドレス変換回路が使われる実施形態における置き換え処理では、第３実施形態におけるメモリモジュール切り換え制御回路によるＤＩＭＭの切り換えが、アドレス変換回路による２つのオフセット値の書き換えに変更される。
【０３６１】
なお、ハイパーバイザのファームウェアは、ＤＩＭＭ２２４に格納されるまでに一時的に他の記憶装置に格納されてもよいし、ネットワーク上を送信されてもよい。
例えば、ハイパーバイザのファームウェアは、上記のように、サービスプロセッサ２１０のＮＡＮＤ型フラッシュメモリ２１３からＥＰＲＯＭ２２２へコピーされ、ＥＰＲＯＭ２２２からＤＩＭＭ２２４の非アクティブ領域へとコピーされてもよい。
【０３６２】
あるいは、ＤＩＭＭ２２４が上位領域４２０と下位領域４３０のほかに、一時的にハイパーバイザのファームウェアを格納するための所定の領域（便宜上「一時格納領域」という）をさらに含んでいてもよい。そして、ＥＰＲＯＭ２２２の代わりに一時格納領域が使われてもよい。
【０３６３】
あるいは、ハイパーバイザのファームウェアは、記憶媒体２９０に格納されて提供され、駆動装置２７０により記憶媒体２９０から読み取られ、ＤＩＭＭ２２４にコピーされてもよい。また、ハイパーバイザのファームウェアは、ネットワーク接続装置２６０を介してネットワークからダウンロードされ、ＤＩＭＭ２２４にコピーされてもよい。
【０３６４】
なお、情報処理装置１００がハイパーバイザのファームウェアを記憶媒体２９０またはネットワークから取得する場合、ハイパーバイザのファームウェアは、一旦記憶装置２５０にコピーされて記憶装置２５０からＤＩＭＭ２２４にコピーされてもよい。
【０３６５】
また、図２の管理部１１０は、図３のサービスプロセッサ２１０のＣＰＵ２１１の代わりにシステムボード２２０ａ上のＣＰＵ２２１によって実現されてもよい。
また、図５と図１４ではデータ領域がコード領域よりも前にあるが、データ領域とコード領域の並び順は逆でもよい。実施形態によっては、データ領域とコード領域が連続していなくてもよい。また、データ領域が、静的なデータ用の第１の領域と動的なデータ用の第２の領域に分かれていてもよく、第１の領域と第２の領域は連続していなくてもよい。
【０３６６】
さらに、データ領域とコード領域は、パディングを含み得る固定長の領域であってもよいし、可変長の領域であってもよい。データ領域とコード領域の一方または双方が可変長の場合、例えば、データ領域内のアドレスマップ５０１が、データ領域とコード領域の長さを示す情報を含んでいてもよい。
【０３６７】
最後に、上記の種々の実施形態に関して、さらに下記の付記を開示する。
（付記１）
情報処理装置が実行するハイパーバイザ置き換え方法であって、
第１のメモリ領域に格納されている第１のハイパーバイザのファームウェアを前記情報処理装置が実行中のとき、前記第１のメモリ領域とは異なる第２のメモリ領域に、第２のハイパーバイザのファームウェアを格納し、
前記第１のハイパーバイザから、ハイパーバイザコールを抑止するようハイパーバイザコールの呼び出し元に命令する抑止命令を発行し、
前記情報処理装置が実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報を、前記第１のメモリ領域を指定する第１の値から、前記第２のメモリ領域を指定する第２の値へと書き換え、
前記指定情報の書き換えにしたがって、前記第２のハイパーバイザのファームウェアの実行を開始し、
前記第２のハイパーバイザから、前記抑止命令を解除する解除命令を前記呼び出し元に発行する
ことを特徴とするハイパーバイザ置き換え方法。
（付記２）
前記第２のハイパーバイザのファームウェアの実行を開始するよりも前に、前記第１のメモリ領域に格納されており前記第１のハイパーバイザが使用する特定の情報を、前記第２のメモリ領域に格納するデータ展開処理を実行する
ことをさらに含むことを特徴とする付記１に記載のハイパーバイザ置き換え方法。
（付記３）
前記特定の情報の第１のフォーマットと、前記第２のハイパーバイザが使用する情報の第２のフォーマットが異なる場合に、前記データ展開処理は、前記特定の情報を前記第１のフォーマットから前記第２のフォーマットに変換するフォーマット変換処理を含む
ことを特徴とする付記２に記載のハイパーバイザ置き換え方法。
（付記４）
前記第２のハイパーバイザのバージョンは、前記第１のハイパーバイザのバージョンよりも新しく、
前記第２のハイパーバイザの前記ファームウェアは、前記第１のフォーマットから前記第２のフォーマットへの変換のための命令を含み、
前記情報処理装置は、前記第１のハイパーバイザから、前記第２のメモリ領域の中の前記命令を呼び出すことにより、前記フォーマット変換処理を実行する
ことを特徴とする付記３に記載のハイパーバイザ置き換え方法。
（付記５）
前記第１のハイパーバイザのバージョンは、前記第２のハイパーバイザのバージョンよりも新しく、
前記第１のハイパーバイザの前記ファームウェアは、前記フォーマット変換処理のための命令を含み、
前記情報処理装置は、前記命令にしたがって前記フォーマット変換処理を実行する
ことを特徴とする付記３に記載のハイパーバイザ置き換え方法。
（付記６）
前記第２のハイパーバイザから前記第１のハイパーバイザに復旧するよう指示する復旧指示を受け付け、
前記第２のハイパーバイザから、ハイパーバイザコールを抑止するよう前記呼び出し元に命令する新たな抑止命令を発行し、
前記指定情報を前記第２の値から前記第１の値へと書き換え、
前記指定情報の書き換えにしたがって、前記第１のハイパーバイザの前記ファームウェアの実行を開始し、
前記第１のハイパーバイザから、前記新たな抑止命令を解除する新たな解除命令を前記呼び出し元に発行する
ことをさらに含むことを特徴とする付記１から５のいずれか１項に記載のハイパーバイザ置き換え方法。
（付記７）
情報処理装置であって、
１つ以上のメモリモジュールと、
前記１つ以上のメモリモジュール内のいずれか１つのメモリ領域を指定する指定情報によって指定されるメモリ領域に格納されたハイパーバイザのファームウェアを実行する制御部を備え、
前記制御部は、
前記指定情報が、第１のハイパーバイザのファームウェアが格納されている第１のメモリ領域を指定しているときに、前記第１のメモリ領域とは異なる第２のメモリ領域に、第２のハイパーバイザのファームウェアを格納し、
ハイパーバイザコールを抑止するようハイパーバイザコールの呼び出し元に命令する抑止命令を発行し、
前記指定情報を、前記第１のメモリ領域を指定する第１の値から、前記第２のメモリ領域を指定する第２の値へと書き換え、
前記第２のハイパーバイザの前記ファームウェアの実行を開始し、
前記第２のハイパーバイザから、前記抑止命令を解除する解除命令を前記呼び出し元に発行する
ことを特徴とする情報処理装置。
（付記８）
前記制御部は、前記第２のハイパーバイザのファームウェアの実行を開始するよりも前に、さらに、前記第１のメモリ領域に格納されており前記第１のハイパーバイザが使用する特定の情報を、前記第２のメモリ領域に格納する
ことを特徴とする付記７に記載の情報処理装置。
（付記９）
前記特定の情報の第１のフォーマットと、前記第２のハイパーバイザが使用する情報の第２のフォーマットが異なる場合に、前記制御部は、前記特定の情報を前記第１のフォーマットから前記第２のフォーマットに変換してから、フォーマット変換後の前記特定の情報を前記第２のメモリ領域に格納する
ことを特徴とする付記８に記載の情報処理装置。
（付記１０）
予め前記第２のハイパーバイザの前記ファームウェアを格納するファームウェア格納部と、
前記第１のハイパーバイザから前記第２のハイパーバイザへの置き換えを指示する置き換え指示、または前記第２のハイパーバイザから前記第１のハイパーバイザへの復旧を指示する復旧指示を受け付け、前記制御部に、前記置き換え指示または前記復旧指示を受け付けたことを通知する管理部
をさらに備え、
前記指定情報が前記第１の値であり、かつ、前記管理部が前記置き換え指示を受け付けた場合、前記制御部は、
前記ファームウェア格納部から前記第２のハイパーバイザの前記ファームウェアを読み出し、
読み出した前記第２のハイパーバイザの前記ファームウェアを、前記第２のメモリ領域に格納し、
前記指定情報が前記第２の値であり、かつ、前記管理部が前記復旧指示を受け付けた場合、前記制御部は、
前記第２のハイパーバイザから、ハイパーバイザコールを抑止するよう前記呼び出し元に命令する新たな抑止命令を発行し、
前記指定情報を前記第２の値から前記第１の値へと書き換え、
前記指定情報の書き換えにしたがって、前記第１のハイパーバイザの前記ファームウェアの実行を開始し、
前記第１のハイパーバイザから、前記新たな抑止命令を解除する新たな解除命令を前記呼び出し元に発行する
ことを特徴とする付記７から９のいずれか１項に記載の情報処理装置。
（付記１１）
前記ファームウェア格納部は、
前記１つ以上のメモリモジュール内の第３のメモリ領域であるか、または、
前記１つ以上のメモリモジュールとは異なる他の記憶装置である
ことを特徴とする付記１０に記載の情報処理装置。
（付記１２）
前記１つ以上のメモリモジュールのいずれかが所定のアドレスに前記指定情報を記憶しているか、
前記１つ以上のメモリモジュールの数が１であり、論理アドレスを当該１つのメモリモジュールの物理アドレスに変換するアドレス変換回路を前記情報処理装置がさらに備え、前記アドレス変換回路が前記指定情報を記憶しているか、
前記１つ以上のメモリモジュールの数が複数であり、前記複数のメモリモジュール間の切り換えを制御するメモリモジュール切り換え制御回路を前記情報処理装置がさらに備え、前記メモリモジュール切り換え制御回路が前記指定情報を記憶しているか、または、
前記情報処理装置が所定のレジスタをさらに備え、前記所定のレジスタが前記指定情報を記憶している
ことを特徴とする付記７から１１のいずれか１項に記載の情報処理装置。
（付記１３）
第１のハイパーバイザのファームウェアであって、コンピュータに、
ハイパーバイザコールの抑止を解除するようハイパーバイザコールの呼び出し元に命令する解除命令を発行し、
前記第１のハイパーバイザから第２のハイパーバイザへの置き換えを指示する置き換え指示に応じて、
前記第１のハイパーバイザの前記ファームウェアが格納されている第１のメモリ領域とは異なる第２のメモリ領域に、前記第２のハイパーバイザのファームウェアを格納し、
ハイパーバイザコールを抑止するよう前記呼び出し元に命令する抑止命令を発行し、
前記コンピュータが実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報を、前記第１のメモリ領域を指定する第１の値から、前記第２のメモリ領域を指定する第２の値へと書き換え、
前記第２のメモリ領域に格納されている前記第２のハイパーバイザの前記ファームウェア内の命令を、前記コンピュータが次に実行する命令として指定することで、前記第１のハイパーバイザを前記第２のハイパーバイザに切り換える、
ことを含む処理を実行させることを特徴とするファームウェア。
（付記１４）
前記第１のハイパーバイザを前記第２のハイパーバイザに切り換えるよりも前に、前記第１のメモリ領域に格納されており前記第１のハイパーバイザが使用する特定の情報を、前記第２のメモリ領域に格納するデータ展開処理をさらに前記コンピュータに実行させる
ことを特徴とする付記１３に記載のファームウェア。
（付記１５）
前記データ展開処理は、
前記特定の情報の第１のフォーマットのバージョンと、前記第２のハイパーバイザが使用する情報の第２のフォーマットのバージョンを比較し、
前記第１のフォーマットの前記バージョンの方が前記第２のフォーマットの前記バージョンよりも新しい場合、前記第１のハイパーバイザの前記ファームウェアにしたがって、前記特定の情報を前記第１のフォーマットから前記第２のフォーマットへと変換し、
前記第２のフォーマットの前記バージョンの方が前記第１のフォーマットの前記バージョンよりも新しい場合、前記第２のメモリ領域に格納されている前記第２のハイパーバイザの前記ファームウェアに含まれる、前記第１のフォーマットから前記第２のフォーマットへの変換のための命令を呼び出すことにより、前記特定の情報を前記第１のフォーマットから前記第２のフォーマットへと変換する
ことを含むことを特徴とする付記１４に記載のファームウェア。
【符号の説明】
【０３６８】
１ａ〜１ｂ、３２０  ハイパーバイザ
２ａ〜２ｂ  ＯＳ
３  指定情報
１００  情報処理装置
１１０  管理部
１１１、１３０  格納部
１２０  制御部
１２１  前処理部
１２２  コード展開部
１２３  データ更新部
１２４  切り換え部
１４０、２２４、７１０、７２０  ＤＩＭＭ
１４１  現ハイパーバイザのファームウェア
１４２  対象ハイパーバイザのファームウェア
２１０  サービスプロセッサ
２１１、２２１  ＣＰＵ
２１２  ＮＯＲ型フラッシュメモリ
２１３  ＮＡＮＤ型フラッシュメモリ
２２０ａ〜２２０ｃ  システムボード
２２２  ＥＰＲＯＭ
２２３  ＳＲＡＭ
２３０  入力装置
２４０  出力装置
２５０  記憶装置
２６０  ネットワーク接続装置
２７０  駆動装置
２８０  バス
２９０  記憶媒体
３１０  ハードウェア
３１１  Ｉ／Ｏ
３３０、３３０ａ〜３３０ｃ  ドメイン
３３１ａ〜３３１ｃ  保留制御部
４００  ハイパーバイザ用の領域
４１０  共通領域
４１１、７０１、８０１  有効マップアドレス
４２０  上位領域
４２１、４３１、５００、７０３、７０５、７１１、７２１  データ領域
４２２、４３２、６００、７０４、７０６、７１２、７２２  コード領域
４３０  下位領域
５０１  アドレスマップ
５０２  ハイパーバイザのバージョン番号
５０３  データフォーマットのバージョン番号
５０４  動的な置き換え機能の有効／無効フラグ
５０５  領域使用中フラグ
５０６  ドメイン制御用データ
６０１  保留解除処理のコード
６０２  待ち受け処理のコード
６０３  前処理のコード
６０４  コード展開処理のコード
６０５  データ展開処理のコード
６０６  データ変換処理のコード
６０７  アクセス保留処理のコード
６０８  ファームウェア切り換え処理のコード
７００  アドレス空間
７０１  アクティブ領域
７０２  非アクティブ領域
【図１】
0005655677.tif 000002
【図２】
0005655677.tif 000003
【図３】
0005655677.tif 000004
【図４】
0005655677.tif 000005
【図５】
0005655677.tif 000006
【図６】
0005655677.tif 000007
【図７】
0005655677.tif 000008
【図８】
0005655677.tif 000009
【図９】
0005655677.tif 000010
【図１０】
0005655677.tif 000011
【図１１】
0005655677.tif 000012
【図１２】
0005655677.tif 000013
【図１３】
0005655677.tif 000014
【図１４】
0005655677.tif 000015
【図１５】
0005655677.tif 000016