以下、実施形態について、図面を参照しながら詳細に説明する。具体的には、図1を参照して第1実施形態について説明し、図2〜13を参照して第2実施形態について説明し、図14〜15を参照して第3実施形態について説明する。その後、その他の変形例についても説明する。
図1は、第1実施形態の情報処理装置の動作を説明する図である。図1には不図示の情報処理装置は、メモリとCPU(Central Processing Unit)を有する。
CPUは、メモリにプログラムをロードし、メモリをワーキングエリアとしても用いながらプログラムを実行する。CPUは、ハイパーバイザのファームウェア、ハイパーバイザ上で動作するOS(Operating System)のプログラム、OS上で動作するアプリケーションプログラムなどの様々なプログラムを実行する。
ハイパーバイザ上の仮想環境は、「ドメイン」、「論理ドメイン」、「パーティション」などと呼ばれる。本明細書では説明の便宜上「ドメイン」という用語を用いるが、具体的なハイパーバイザの種類を限定する趣旨ではない。
ハイパーバイザ上のドメインの数は1でもよいし複数でもよい。各ドメインは、1つのOSを含む。また、各ドメインは、1つ以上のデバイスドライバ、および1つ以上のアプリケーションをさらに含んでもよい。図1の例では、ハイパーバイザ上に2つのドメインがある。また、図1では、ドメイン内のOS2aと2bのみが図示されており、デバイスドライバとアプリケーションは省略されている。
具体的には、第1実施形態の情報処理装置は以下のように動作する。
ステップS1において情報処理装置(より詳細には、情報処理装置が備えるCPU)は、メモリ内の第1のメモリ領域に格納されているハイパーバイザ1aのファームウェアを実行中である。また、図1の例では、ステップS1においてOS2aと2bは、ハイパーバイザ1a上で動作している。
ステップS1のように情報処理装置がハイパーバイザ1aのファームウェアを実行中のとき、ハイパーバイザ1aをハイパーバイザ1bに置き換えるように指示する入力がユーザから情報処理装置に与えられることがある。例えば、ユーザはアップグレードまたはダウングレードのために、或るバージョンのハイパーバイザ1aを別のバージョンのハイパーバイザ1bに置き換えたいかもしれない。すると、ユーザは、不図示の入力装置(例えばボタンやキーボードなど)を介して、ハイパーバイザ1aをハイパーバイザ1bに置き換えるための置き換え指示を入力する。
置き換え指示が入力された後、ステップS2で情報処理装置は、ハイパーバイザ1aのファームウェアが格納された第1のメモリ領域とは異なる第2のメモリ領域に、ハイパーバイザ1bのファームウェアを格納する。
具体的には、ハイパーバイザ1aのファームウェアは、置き換え対象として指示されたハイパーバイザ1bのファームウェアを第2のメモリ領域に格納する処理を情報処理装置に行わせるためのコードを含む。よって、ハイパーバイザ1aを実行中の情報処理装置は、ハイパーバイザ1aのファームウェアにしたがって動作することで、ステップS2のように、ハイパーバイザ1bのファームウェアを第2のメモリ領域に格納する。
続いて、ステップS3において情報処理装置は、ハイパーバイザ1aから、ハイパーバイザコールを抑止するよう、ハイパーバイザコールの呼び出し元に命令する抑止命令を発行する。抑止命令は、ハイパーバイザコールの呼び出し元すべてに対して、それぞれ発行される。図1の例では、具体的には、ハイパーバイザ1aから、OS2aと2bのそれぞれに対して抑止命令が発行される。
ハイパーバイザコールは「ハイパーコール」とも呼ばれる。ハイパーバイザコールは、ドメイン内のOS2aと2bがハイパーバイザにアクセスするためのインタフェイスである。
抑止命令を受け取ったOS2aと2bは、ハイパーバイザコールを抑止する。その結果、OS2aと2bは、ハイパーバイザ1aへのアクセスを一時的に停止する。抑止命令は、ハイパーバイザ1aからハイパーバイザ1bへの切り換えの最中にOS2aまたは2bからハイパーバイザがアクセスされることを避けるために、発行される。
ところで、情報処理装置は、情報処理装置が実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報3を保持する。
指定情報3は、例えば、CPU内の所定のレジスタに記憶されていてもよい。情報処理装置のアーキテクチャに応じて、上記の「所定のレジスタ」は、例えば、アドレッシングにおけるオフセットを表すベースレジスタでもよいし、トラップ命令が検出されたときのジャンプ先を示すためのレジスタでもよい。
また、CPUがアドレスバスに出力した論理アドレスを物理アドレスに変換するアドレス変換回路を、情報処理装置が含んでもよい。その場合、指定情報3は、アドレス変換回路内のレジスタなどの記憶装置に記憶されていてもよい。
アドレス変換回路は、指定情報3に応じて、同じ論理アドレスを異なる物理アドレスにマッピングする。よって、アドレス変換回路を有する情報処理装置においては、CPUは、1つのメモリモジュール内の異なるメモリ領域へのアクセスを、同じ論理アドレスを使って行うことができる。
あるいは、指定情報3は、メモリ内の所定のアドレスに記憶されていてもよい。指定情報3が記憶される所定のアドレスは、例えば、ハイパーバイザのファームウェア用の所定の領域内の所定のアドレスであってもよい。または、アーキテクチャによっては、割り込みベクタがメモリ上の所定の領域に記憶され、トラップ命令が検出されたときのジャンプ先が割り込みベクタ内の特定の要素により表されてもよい。その場合、指定情報3が記憶される所定のアドレスは、割り込みベクタ中の特定の要素のアドレスであってもよい。
あるいは、情報処理装置は、物理的に異なる複数のメモリモジュールを有していてもよく、複数のメモリモジュールを切り換えて使ってもよい。その場合、指定情報3は、情報処理装置がメモリモジュールを切り換えて使うためのメモリモジュール切り換え制御回路内に記憶されていてもよい。指定情報3は、例えば、メモリモジュール切り換え制御回路内のレジスタまたはフリップフロップなどの記憶装置に記憶されていてもよいし、メモリモジュール切り換え制御回路内の特定のトランジスタがオンかオフかによって表されてもよい。
以上のように、「指定情報3が具体的には情報処理装置内のどこに記憶されるか」ということは、実施形態に応じて様々であってよい。また、指定情報3は、例えば「メモリと、CPU内のレジスタの双方」といったように、情報処理装置内の複数の装置に記憶されていてもよい。
指定情報3が具体的にはどこに記憶されるにしろ、上記のステップS1〜S3では、図1において矢印で示すように、指定情報3は、ハイパーバイザ1aのファームウェアが格納された第1のメモリ領域を指定している。そこで、ステップS4において情報処理装置は、指定情報3を、第1のメモリ領域を指定する第1の値から、第2のメモリ領域を指定する第2の値へと書き換える。そして、情報処理装置は、指定情報3の書き換えにしたがって、ハイパーバイザ1bのファームウェアの実行を開始する。
具体的には、ハイパーバイザ1aのファームウェアは、指定情報3の書き換えのためのコードと、ハイパーバイザ1aからハイパーバイザ1bへの切り換えのためのコードを含む。したがって、ステップS4で情報処理装置は、ハイパーバイザ1aのファームウェアにしたがって動作することで指定情報3を書き換え、ハイパーバイザ1aからハイパーバイザ1bへの切り換えを実行する。その結果として、ステップS4において情報処理装置は、ハイパーバイザ1bのファームウェアの実行を開始する。
なお、ステップS4の時点におけるOS2aと2bは、ステップS3での指示にしたがってハイパーバイザへのアクセスを一時的に停止したままである。
そして、ハイパーバイザ1aからハイパーバイザ1bへの切り換えは、OS2aにとっては透過的である。すなわち、OS2aがハイパーバイザ1aにアクセスするためのインタフェイスと、OS2aがハイパーバイザ1bにアクセスするためのインタフェイスは、同じハイパーバイザコールである。したがって、OS2aは、ハイパーバイザが切り換えられたことを認識しない。また、ハイパーバイザ1aからハイパーバイザ1bへの切り換えは、OS2bにとっても同様に透過的である。
そのため、図1では、ステップS1〜S3ではハイパーバイザ1aのブロックの上に描かれているOS2aと2bのブロックが、ステップS4以降ではハイパーバイザ1bのブロックの上に描かれている。換言すれば、ステップS4でのハイパーバイザの切り換えの結果、OS2aと2bは、ハイパーバイザ1b上で動作するようになる。
ここで、OS2aと2bにとっては、ステップS3での抑止命令が依然として有効である。よって、OS2aと2bは、ステップS4ではまだ、ハイパーバイザ1bへの実際のアクセスは行わない。
そして、次のステップS5で情報処理装置は、ハイパーバイザ1bから、抑止命令を解除する解除命令を発行する。解除命令は、ハイパーバイザコールの呼び出し元すべてにそれぞれ発行される。図1の例では、具体的には、ハイパーバイザ1bから、OS2aと2bのそれぞれに対して、解除命令が発行される。
上記のとおりハイパーバイザの切り換えはOS2aと2bにとって透過的に行われる。したがって、OS2aと2bにとっては、単に、「以前、抑止するように命令されたハイパーバイザコールが、今、解禁された」と認識される。
ステップS5で解除命令を受け取ったOS2aと2bは、以後、必要に応じてハイパーバイザコールを呼び出す。つまり、ハイパーバイザ1b上で動作するOS2aと2bは、ステップS5で解除命令を受け取ることにより、実際にハイパーバイザ1bにアクセスすることができるようになる。
なお、図1の第1実施形態では、ハイパーバイザへのアクセスがOSからのハイパーバイザコールを介して行われる。そのため、抑止命令と解除命令は、OS2aと2bに対して発行される。他方、デバイスドライバがハイパーバイザコールを呼び出すことのある実施形態においては、ハイパーバイザ1aは抑止命令をデバイスドライバに対しても発行し、ハイパーバイザ1bは解除命令をデバイスドライバに対しても発行する。「抑止命令と解除命令がOSに対してのみ発行されるか、それともOSとデバイスドライバの双方に対して発行されるか」という違いによらず、抑止命令はハイパーバイザへのアクセスを抑止し、解除命令はハイパーバイザへのアクセスを解禁する。
以上、図1に示したように情報処理装置が動作することにより、情報処理装置の再起動(具体的には、電源の遮断と再投入によるCPUの再起動)なしに、ハイパーバイザの置き換えが実現される。つまり、ハイパーバイザのファームウェアの置き換えは、情報処理装置が作動した状態のままで(より詳しくは、情報処理装置に電源が入っている状態のまま、かつ、OS2aと2bも動作中のままで)、行われる。このように、第1実施形態によれば、情報処理装置を停止させなくても、ハイパーバイザ1aのファームウェアをハイパーバイザ1bのファームウェアに置き換えて、情報処理装置にハイパーバイザ1bのファームウェアを実行させることができる。
以上のように、第1実施形態によるハイパーバイザの置き換えは、ドメイン上で実行されるユーザプログラム(すなわち、OS、デバイスドライバ、アプリケーションなど)の停止を引き起こさない。換言すれば、第1実施形態によるハイパーバイザの置き換えは、ユーザプログラムに対して透過的である。よって、第1実施形態によれば、停止することが好ましくないサービスを提供するために情報処理装置が使われている場合にも、ハイパーバイザの置き換えに起因するサービスの中断が生じない。
したがって、情報処理装置(例えばサーバ)の管理者は、サービスの提供スケジュールとは独立して、タイムリにハイパーバイザの置き換えを決断することができる。その結果、タイムリなハイパーバイザの置き換えが促進される。タイムリなハイパーバイザの置き換えは、例えば、脆弱性を修正するパッチが適用された新たなバージョンのハイパーバイザがリリースされたときには、セキュリティ向上の観点で好ましい。
また、場合によっては、置き換えられたハイパーバイザ1bに後から不具合が見つかって、ハイパーバイザ1bをハイパーバイザ1aに戻す必要が生じることもあり得る。そのような場合でも、上記と同様にして、CPUの停止をともなわずにハイパーバイザ1bからハイパーバイザ1aへの置き換えが可能である。つまり、仮にハイパーバイザ1bに不具合が見つかったとしても、CPUを停止させる必要がないし、ユーザプログラムを停止させる必要もない。
また、メモリ内に第1のメモリ領域と第2のメモリ領域があり、情報処理装置が指定情報3を保持していれば、第1実施形態によるハイパーバイザの置き換えは実現可能である。つまり、情報処理装置は、現用系と待機系を含む冗長化システムである必要はない。
もちろん、メモリが冗長化されていてもよい。つまり、第1のメモリ領域と第2のメモリ領域が物理的に異なるメモリモジュール上にあってもよい。
いずれにせよ、第1実施形態によれば、2世代のハイパーバイザ1aと1bのファームウェアを情報処理装置が2つのメモリ領域に同時に保持することにより、CPUのリセットを必要とせずに、ハイパーバイザの置き換えが可能となる。
続いて、図2〜13を参照して第2実施形態について説明する。なお、以下では説明の便宜上、現在動作中のハイパーバイザを「現ハイパーバイザ」という。また、現ハイパーバイザを別の或るハイパーバイザに置き換える場合に、置き換え対象の当該或るハイパーバイザを「対象ハイパーバイザ」という。
例えば、バージョン2のハイパーバイザが現在動作中であり、バージョン2からバージョン3へのアップグレードを行う場合、現ハイパーバイザはバージョン2のハイパーバイザであり、対象ハイパーバイザはバージョン3のハイパーバイザである。逆に、バージョン3のハイパーバイザが現在動作中であり、バージョン3からバージョン2へのダウングレードを行う場合、現ハイパーバイザはバージョン3のハイパーバイザであり、対象ハイパーバイザはバージョン2のハイパーバイザである。
図2は第2実施形態の情報処理装置のブロック構成図である。図2の情報処理装置100は管理部110と制御部120を有する。管理部110と制御部120は、協働して、ハイパーバイザのファームウェアの置き換えのための処理(以下「置き換え処理」ともいう)を行う。また、情報処理装置100は、管理部110と制御部120の双方からアクセス可能な格納部130と、少なくとも制御部120からアクセス可能なDIMM(Dual In-line Memory Module)140を有する。
管理部110は、対象ハイパーバイザのファームウェアを格納する格納部111を有する。格納部111に対象ハイパーバイザのファームウェアが格納されると、管理部110は、置き換え処理を開始する。具体的には、管理部110は、格納部111に格納された対象ハイパーバイザのファームウェアを格納部130にコピーし、コピーが完了すると、制御部120にコピーの完了を通知する。
制御部120は、前処理部121とコード展開部122とデータ更新部123と切り換え部124を有する。また、詳しくは後述するが、制御部120は、CPUがハイパーバイザのファームウェアを実行することにより実現される。すなわち、ハイパーバイザのファームウェアは、仮想環境をドメインに対して提供するためのコードだけでなく、前処理部121とコード展開部122とデータ更新部123と切り換え部124を実現するためのコードも含む。制御部120の動作の概要は以下のとおりである。
まず、前処理部121が上述の管理部110からの完了の通知を受け取る。通知の受け取りを契機として、前処理部121は、置き換え処理を続行するかそれとも終了するかを決定する。
そして、前処理部121は、置き換え処理の終了を決定した場合は、置き換え処理の終了を管理部110に通知する。逆に、前処理部121が置き換え処理の続行を決定した場合は、コード展開部122が、格納部130に格納された対象ハイパーバイザのファームウェアのうちのプログラムコードの部分を、DIMM140内の適宜の領域にコピーする。
以下では説明の便宜上、ハイパーバイザのファームウェアのうち、プログラムコードの部分を「コード領域」ともいう。また、ハイパーバイザのファームウェアのうちデータの部分を「データ領域」ともいう。
なお、DIMM140には、ハイパーバイザ用に使われる少なくとも2つの領域があり、一方の領域には現ハイパーバイザのファームウェア141が格納されている。コード展開部122は、現ハイパーバイザのファームウェア141が格納されていない方の領域に、格納部130から、対象ハイパーバイザのファームウェア142のコード領域をコピーする。
以下では説明の便宜上、現ハイパーバイザのファームウェア141が格納されている領域を「アクティブ領域」ともいう。また、現ハイパーバイザのファームウェア141が格納されていない方の領域を「非アクティブ領域」ともいう。
さらに、データ更新部123が、格納部130に格納された対象ハイパーバイザのファームウェアのデータ領域を、DIMM140の非アクティブ領域に展開する。また、データ更新部123は、現ハイパーバイザのファームウェア141のデータ領域に含まれる一部のデータを、必要に応じてフォーマット変換したうえで、DIMM140の非アクティブ領域に展開する。
そして、切り換え部124が現ハイパーバイザから対象ハイパーバイザへの切り換えを行う。切り換えにともなう処理の詳細は後述するが、概要は、図1のステップS3〜S5の処理と類似である。また、切り換え部124の一部の機能は、現ハイパーバイザのファームウェア141をCPUが実行することによって実現され、切り換え部124の他の機能は、対象ハイパーバイザのファームウェア142をCPUが実行することによって実現される。
なお、現ハイパーバイザから対象ハイパーバイザへの切り換えの完了後、切り換え部124は、置き換え処理の完了を管理部110に通知する。
以上のようにして管理部110と制御部120により行われる置き換え処理によれば、情報処理装置100を物理的に再起動しなくても、現ハイパーバイザが対象ハイパーバイザに置き換えられる。つまり、ハイパーバイザを置き換えるためには電源の遮断と再投入は不要であり、情報処理装置100が作動した状態のまま、ハイパーバイザが置き換えられる。よって、現ハイパーバイザから対象ハイパーバイザへの置き換えは、情報処理装置100が提供するサービスの停止を招くことなく、実行される。
したがって、現ハイパーバイザから対象ハイパーバイザへの置き換えのスケジュールを決めるのに、サービスを停止することが許容されるタイミングを考慮に入れる必要はない。つまり、第2実施形態によれば、任意のタイミングで現ハイパーバイザから対象ハイパーバイザへの置き換えを行うことが可能であり、タイムリな置き換えが実現される。
続いて、図2の情報処理装置100のハードウェア構成について、図3のハードウェア構成図を参照して説明する。
情報処理装置100は、具体的には、サービスプロセッサ210と、1枚以上のシステムボードを有する。図3には、3枚のシステムボード220a〜220cが図示されているが、システムボード220bと220cは省略可能である。あるいは逆に、情報処理装置100は4枚以上のシステムボードを有していてもよい。
また、情報処理装置100は、入力装置230と出力装置240と記憶装置250とネットワーク接続装置260と駆動装置270を有する。そして、サービスプロセッサ210とシステムボード220a〜220cと入力装置230と出力装置240と記憶装置250とネットワーク接続装置260と駆動装置270は、互いにバス280で接続されている。
駆動装置270には、コンピュータ読み取り可能な記憶媒体290がセットされてもよい。また、バス280の代わりにクロスバスイッチが使われてもよい。
また、サービスプロセッサ210は、CPU211とNOR型フラッシュメモリ212とNAND型フラッシュメモリ213を有する。CPU211はNOR型フラッシュメモリ212およびNAND型フラッシュメモリ213と接続されている。もちろん、サービスプロセッサ210が備えるメモリの種類は、図3の例には限定されず、実施形態に応じて適宜変更されてもよい。
そして、システムボード220aは、CPU221とEPROM(Erasable Programmable Read Only Memory)222とSRAM(Static Random Access Memory)223とDIMM224を有する。CPU221は、EPROM222およびDIMM224と接続されている。また、DIMM224には、EPROM222とSRAM223も接続されている。
もちろん、システムボード220aが備えるメモリの種類は、図3の例には限定されず、実施形態に応じて適宜変更されてもよい。また、システムボード220bと220cも、システムボード220aと同様に構成されている。
サービスプロセッサ210は、システムボード220a〜220cとは独立して動作する。サービスプロセッサ210は、例えば、不図示のセンサの出力に基づいて電圧や温度などを監視し、監視結果に応じた適宜の処理を実行してもよい。また、サービスプロセッサ210は、情報処理装置100を強制的に再起動する機能を提供してもよい。
具体的には、NOR型フラッシュメモリ212には、サービスプロセッサ210用のファームウェアが予め格納されている。サービスプロセッサ210のCPU211は、NOR型フラッシュメモリ212に格納されたファームウェアにしたがって、NOR型フラッシュメモリ212をワーキングエリアとしても用いながら、動作する。
また、NAND型フラッシュメモリ213は、サービスプロセッサ210とシステムボード220a〜220cとの間のデータ交換のために使われる。
例えば、システムボード220aのハイパーバイザのファームウェアを置き換えるには、対象ハイパーバイザのファームウェア142が、システムボード220aの外部からシステムボード220a上にコピーされる。本実施形態では、対象ハイパーバイザのファームウェア142は、一旦サービスプロセッサ210のNAND型フラッシュメモリ213に格納され、NAND型フラッシュメモリ213からシステムボード220a内のEPROM222へとコピーされる。その後、対象ハイパーバイザのファームウェア142は、システムボード220a内でEPROM222からDIMM224へとコピーされる。
NAND型フラッシュメモリ213は、例えば上記のようにして対象ハイパーバイザのファームウェア142をサービスプロセッサ210からシステムボード220aに受け渡すためのインタフェイスとして使われる。
なお、システムボード220a〜220c上でそれぞれ動作中のハイパーバイザは、種類またはバージョンが互いに異なっていてもよい。換言すれば、各システムボード上のハイパーバイザは互いに独立している。よって、ある1つのシステムボード上のハイパーバイザの置き換えは、他のシステムボードとは独立して実行することが可能である。以下では便宜上、システムボード220a上のハイパーバイザの置き換えを例に説明する。
図2の管理部110は、図3のサービスプロセッサ210により実現される。換言すれば、NOR型フラッシュメモリ212に格納されるサービスプロセッサ210用のファームウェアは、サービスプロセッサ210を管理部110として動作させるためのコードを含む。
そして、管理部110内で対象ハイパーバイザのファームウェアを格納する格納部111は、サービスプロセッサ210内のNAND型フラッシュメモリ213により実現されてもよい。もちろん、NAND型フラッシュメモリ213の代わりに、書き換え可能な他の種類のメモリが、格納部111として使われてもよい。
また、システムボード220a上のハイパーバイザが置き換えられる場合、対象ハイパーバイザのファームウェアがコピーされる図2の格納部130は、システムボード220a内のEPROM222により実現されてもよい。もちろん、EPROM222の代わりに、書き換え可能な他の種類のメモリが、格納部130として使われてもよい。
また、システムボード220a上のハイパーバイザが置き換えられる場合、図2のDIMM140は、システムボード220a内のDIMM224である。そして、図2の制御部120は、システムボード220aのCPU221がDIMM224上のハイパーバイザのファームウェアを実行することによって実現される。
なお、DIMM224には、ハイパーバイザのファームウェアだけでなく、OSやアプリケーションなどその他の様々なプログラムもロードされる。CPU221は、DIMM224をワーキングエリアとしても利用しながら、DIMM224にロードされた種々のプログラムを実行する。
ところで、サービスプロセッサ210は、管理部110として動作するだけでなく、上記のとおり電圧の監視など様々な処理を行う。そして、サービスプロセッサ210が行う処理の中には、サービスプロセッサ210とシステムボード220a〜220cとの間で制御データのようなサイズの小さなデータの入出力をともなう処理がある。例えば、システムボード220a上のSRAM223は、サービスプロセッサ210とシステムボード220aとの間での制御データの交換用のインタフェイスとして用いられてもよい。
また、上記のとおり、図2の管理部110は、格納部111から格納部130に対象ハイパーバイザのファームウェアをコピーし終わると、コピーの完了を制御部120の前処理部121に通知する。そして、切り換え部124は、ハイパーバイザの置き換えが完了すると、置き換えの完了を管理部110に通知する。
これらの完了の通知も、SRAM223を介して行われてもよい。例えば、サービスプロセッサ210のCPU211は、システムボード220aのSRAM223内の所定の領域のフラグをセットすることで、システムボード220aのCPU221にコピーの完了を通知してもよい。同様に、システムボード220aのCPU221は、SRAM223内の別の所定の領域のフラグをセットすることで、サービスプロセッサ210のCPU211に置き換えの完了を通知してもよい。
さて、入力装置230は、例えば、キーボード、ボタン、マウスやタッチスクリーンなどのポインティングデバイス、マイク、またはそれらの組み合わせである。出力装置240は、例えば、ディスプレイ、スピーカ、またはそれらの組み合わせである。ディスプレイはタッチスクリーンであってもよい。
そして、記憶装置250は、例えばハードディスク装置などの外部記憶装置である。例えばOSやアプリケーションなどの種々のプログラムは、記憶装置250に格納されており、記憶装置250からDIMM224へとロードされる。
また、ネットワーク接続装置260は、例えば、有線LAN(Local Area Network)、無線LAN、またはその双方のネットワークインタフェイスを提供する装置である。ネットワーク接続装置260は、例えば、NIC(Network Interface Card)でもよい。
駆動装置270は、コンピュータ読み取り可能な記憶媒体290の駆動装置である。記憶媒体290は、例えば、磁気ディスク、光磁気ディスク、CD(Compact Disc)やDVD(Digital Versatile Disk)などの光ディスク、USB(Universal Serial Bus)メモリカードなどの半導体メモリのいずれであってもよい。
なお、図3に例示したNOR型フラッシュメモリ212、NAND型フラッシュメモリ213、EPROM222、SRAM223、DIMM224、記憶装置250、および記憶媒体290は、いずれも、有形の(tangible)記憶媒体の例である。換言すれば、図3に例示した上記の有形の記憶媒体は、信号搬送波のような一時的な(transitory)媒体ではない。
ところで、図2および図3のように構成された情報処理装置100では、ハイパーバイザによる仮想化が実現される。図4は、ハイパーバイザによる仮想化を模式的に説明する図である。なお、上記のとおり各システムボード上のハイパーバイザは互いに独立しているので、図4にはシステムボード220aにおける仮想化を例示した。
情報処理装置100は様々なハードウェア310を含む。ハードウェア310の例は、システムボード220a上のCPU221およびDIMM224である。ハードウェア310の他の例は、システムボード220aの外部の入出力装置(以下「I/O」と略記)311である。I/O311の具体例は、例えば、入力装置230、出力装置240、および記憶装置250、駆動装置270などである。ハードウェア310は、ネットワーク接続装置260などのその他の装置をさらに含んでもよい。
そして、ハイパーバイザ320は、物理的なハードウェア310を隠蔽し、仮想環境を提供する。ハイパーバイザ320により提供される仮想環境は、上記のとおり「ドメイン」とも呼ばれる。
図4の例では、システムボード220a上に3つのドメイン330a〜330cがある。各ドメインでは、OS、デバイスドライバ、およびアプリケーションが動作する。
ところで、ドメイン330a〜330cからハイパーバイザ320へのアクセスは、ハイパーバイザコールを介して行われる。例えば、OSのみがハイパーバイザコールを呼び出す実施形態も可能だし、OSとデバイスドライバの双方がハイパーバイザコールを呼び出す実施形態も可能である。
そして、ドメイン330aにおけるハイパーバイザコールの呼び出し元(つまり、OS、デバイスドライバ、またはその双方)は、保留制御部331aを有する。ドメイン330bと330cも同様に、それぞれ保留制御部331bと331cを含む。
保留制御部331aは、ハイパーバイザコールの抑止をドメイン330aに命令する抑止命令をハイパーバイザ320から受け取ると、ハイパーバイザコールを抑止する。すなわち、保留制御部331aは、抑止命令を受け取ると、ハイパーバイザ320へのアクセスを保留する。その結果、ドメイン330aからハイパーバイザ320へのアクセスは一時的に停止される。
また、保留制御部331aは、抑止命令を解除する解除命令をハイパーバイザ320から受け取ると、ハイパーバイザコールの保留を解除する。その結果、ドメイン330aからハイパーバイザ320へのアクセスは再開される。
なお、保留制御部331aは、ハイパーバイザコールを記憶するための不図示のキューを有してもよい。保留制御部331aは、抑止命令を受けてから解除命令を受けるまでの期間中には、ハイパーバイザコールを実際に呼び出すことはせず、代わりに、呼び出そうとするハイパーバイザコールの内容を上記キューに記憶してもよい。
保留制御部331aは、例えば、ハイパーバイザコールが許可されているか否かを示す制御フラグを利用してもよい。保留制御部331aは、制御フラグの値に応じて、ハイパーバイザコールを呼び出すか、それともハイパーバイザコールの内容をキューに記憶するかを決定することができる。
例えば、保留制御部331aは、抑止命令を受けると、制御フラグを「ハイパーバイザコールが禁止されている」と示す値(例えば0)に設定してもよい。また、保留制御部331aは、解除命令を受けると、制御フラグを「ハイパーバイザコールが許可されている」と示す値(例えば1)に設定してもよい。
あるいは、ハイパーバイザ320からの抑止命令の発行は、ハイパーバイザ320が上記制御フラグの値を1から0に書き換えることにより実現されてもよい。そして、ハイパーバイザ320からの解除命令の発行は、ハイパーバイザ320が上記制御フラグの値を0から1に書き換えることにより実現されてもよい。
保留制御部331bと331cも保留制御部331aと同様に動作する。すなわち、OS、デバイスドライバ、またはその双方に含まれる保留制御部331a〜331cは、ハイパーバイザコールの保留と再開を制御する。
続いて、図5〜13を参照して第2実施形態についてさらに詳しく説明する。
図5は、ハイパーバイザのファームウェアに関する第2実施形態でのメモリ割り当てを説明する図である。具体的には、図5は、図3のDIMM224に相当する図2のDIMM140における、物理的なメモリ割り当てを説明する図である。
なお、図5に示す「A0」〜「A5」というアドレスは、DIMM140(つまりDIMM224)の物理アドレスである。また、ドメイン330a〜330cはDIMM140の物理アドレス(すなわち実マシンの物理アドレス)を認識しない。
図5に示すように、ハイパーバイザ用の領域400は、アドレスA0から始まる共通領域410を含む。また、ハイパーバイザ用の領域400は、2つのバージョンのハイパーバイザのファームウェアをそれぞれ格納するための2つの領域を含む。以下では説明の便宜上、2つの領域のうちアドレスA1から始まる領域を「上位領域420」といい、アドレスA3から始まる領域を「下位領域430」という。第2実施形態では、アドレスA0、A1、およびA3は、予め決められた固定的なアドレスである。
図2の現ハイパーバイザのファームウェア141は、状況によって、上位領域420に格納されていることもあるし、下位領域430に格納されていることもある。したがって、対象ハイパーバイザのファームウェア142がコピーされる領域も、状況によって、下位領域430かもしれないし、上位領域420かもしれない。
換言すれば、「上位領域420がアクティブ領域であり、下位領域430が非アクティブ領域である」という場合もあるし、「上位領域420が非アクティブ領域であり、下位領域430がアクティブ領域である」という場合もある。後述のフローチャートから明らかなように、上位領域420と下位領域430は、交互にアクティブ領域になる。
共通領域410には、具体的には有効マップアドレス411が記憶される。有効マップアドレス411は、上位領域420と下位領域430のどちらに現ハイパーバイザのファームウェア141が格納されているのかを示す。有効マップアドレス411は図1の指定情報3の具体例の一つである。
換言すれば、有効マップアドレス411は、現在有効なアドレスマップが格納されているアドレスを示す(アドレスマップについては図6とともに後述する)。より具体的には、有効マップアドレス411は、上位領域420の先頭アドレスA1または下位領域430の先頭アドレスA3を示す。
また、上位領域420には現ハイパーバイザのファームウェア141または対象ハイパーバイザのファームウェア142が格納される。いずれにしろ、ハイパーバイザのファームウェアは、データ領域421とコード領域422を含む。図5の例では、データ領域421はアドレスA1から始まり、コード領域422はアドレスA2から始まる。
そして、下位領域430には対象ハイパーバイザのファームウェア142または現ハイパーバイザのファームウェア141が格納される。いずれにしろ、ハイパーバイザのファームウェアは、データ領域431とコード領域432を含む。図5の例では、データ領域431はアドレスA3から始まり、コード領域432はアドレスA4から始まる。
なお、実施形態に応じて、アドレスA1からアドレス(A2−1)までのデータ領域421全体にデータがあってもよい。あるいは、j>1として、アドレスA1からアドレス(A2−j)までにのみデータがあり、データ領域421のうちの残りの領域(すなわちアドレス(A2−j+1)からアドレス(A2−1)までの領域)は使われなくてもよい。つまり、データ領域421はパディングを含んでいてもよい。コード領域422、データ領域431、およびコード領域432も同様に、使われない領域を末尾に含んでいてもよい。
ところで、データ領域421と431は、いずれも、図6のような各種のデータを含む。図6はデータ領域の例を示す図である。
図6のデータ領域500は、具体的には、図5のデータ領域421または431である。また、図6におけるアドレスB0〜B6は、ファームウェア内での相対アドレスである。
つまり、データ領域500がデータ領域421の場合、図6のアドレスは、図5のアドレスA1を基準とする相対アドレスである。また、データ領域500がデータ領域431の場合、図6のアドレスは、図5のアドレスA3を基準とする相対アドレスである。
データ領域500は、静的なデータと動的なデータを含む。ここで「静的なデータ」とは、ハイパーバイザのバージョンに応じて固定的に定まる定数データか、または、可変ではあるが初期値がハイパーバイザのバージョンに応じて静的に定まるデータである。また、「動的なデータ」とは、ハイパーバイザが動作中に動的に書き換えるデータである。より詳しくは、「動的なデータ」は、ハイパーバイザがインストールされたマシンのハードウェア構成や、ハイパーバイザが管理するドメインの数と状態などに依存するデータである。
静的なデータの例は、アドレスマップ501、ハイパーバイザのバージョン番号502、データフォーマットのバージョン番号503、動的な置き換え機能の有効/無効フラグ504、および領域使用中フラグ505である。また、動的なデータの例は、ドメイン制御用データ506である。データ領域500は、図6に例示した以外の、さらに他のデータを含んでもよい。また、図6に例示したデータの並び順は一例であり、データ領域500中の各種データの並び順は、実施形態に応じて適宜入れ替えられてよい。
アドレスB0から始まる領域に格納されたアドレスマップ501は、コード領域の詳細を示す。詳しくは図7とともに後述するが、コード領域には、ハイパーバイザが行う様々な処理のためのコードが含まれる。アドレスマップ501は、少なくとも、各処理(つまり各サブルーチン)の先頭アドレスを示すマップである。アドレスマップ501は、さらに、データ領域500内のどのアドレスに何の情報が格納されているかを示してもよい。
また、図6の例では、ハイパーバイザのバージョン番号502がアドレスB1に格納されている。例えば、データ領域500が図5のデータ領域421の場合、ハイパーバイザのバージョン番号502は、上位領域420にファームウェアが格納されたハイパーバイザのバージョン番号である。逆に、データ領域500が図5のデータ領域431の場合、ハイパーバイザのバージョン番号502は、下位領域430にファームウェアが格納されたハイパーバイザのバージョン番号である。
そして、図6の例では、ハイパーバイザが使用するデータフォーマットのバージョン番号503がアドレスB2に格納されている。第2実施形態では、ハイパーバイザ自体がバージョニングされるだけでなく、ハイパーバイザが使用するデータのフォーマットもバージョニングされる。より具体的には、データフォーマットのバージョン番号503は、ドメイン制御用データ506などの動的なデータのデータフォーマットのバージョンを示す。
例えば、バージョン1から3までのハイパーバイザでは、バージョン1のデータフォーマットが使われ、バージョン4から5までのハイパーバイザでは、バージョン2のデータフォーマットが使われるかもしれない。すると、例えば、ハイパーバイザをバージョン2からバージョン3へアップグレードする場合には、データフォーマットの変換は不要である。逆に、ハイパーバイザをバージョン3からバージョン4へアップグレードする場合には、データフォーマットの変換が行われる(詳しくは図12とともに後述する)。
例えば、データ領域500が図5のデータ領域421の場合、データフォーマットのバージョン番号503は、上位領域420にファームウェアが格納されたハイパーバイザが使用するデータフォーマットのバージョン番号である。逆に、データ領域500が図5のデータ領域431の場合、データフォーマットのバージョン番号503は、下位領域430にファームウェアが格納されたハイパーバイザが使用するデータフォーマットのバージョン番号である。なお、2つのハイパーバイザのデータフォーマットのバージョン番号503が異なるとき、データフォーマットのバージョン番号503が新しい方のハイパーバイザのバージョン番号502の方が新しい。
さらに、図6の例では、データ領域500内のアドレスB3に、動的な置き換え機能の有効/無効フラグ504が格納されている。有効/無効フラグ504の値は、固定されていてもよいし、ハイパーバイザの動作中に、例えば入力装置230からの入力に応じて、切り換えられてもよい。
なお、有効/無効フラグ504が切り換え可能な場合でも、有効/無効フラグ504の初期値は固定である。よって、有効/無効フラグ504は上記の「静的なデータ」の一つである。
例えば、データ領域500が図5のデータ領域421の場合、有効/無効フラグ504は、「上位領域420にファームウェアが格納されたハイパーバイザから、下位領域430にファームウェアが格納されたハイパーバイザへの動的な置き換えが有効か」を示す。なお、ここで「動的な置き換え」とは、CPU221の物理的な再起動(すなわち電源の遮断と再投入)をともなわない、ハイパーバイザの置き換えのことである。
つまり、データ領域500が図5のデータ領域421の場合、有効/無効フラグ504は、「上位領域420のハイパーバイザが動作中のときに、CPU221の再起動なしに、他のバージョンのハイパーバイザへの置き換えが可能か否か」を示す。同様に、データ領域500が図5のデータ領域431の場合、有効/無効フラグ504は、「下位領域430のハイパーバイザが動作中のときに、CPU221の再起動なしに、他のバージョンのハイパーバイザへの置き換えが可能か否か」を示す。
また、図6の例では、データ領域500内のアドレスB4に、領域使用中フラグ505が格納されている。領域使用中フラグ505の初期値は、「非使用中」を示す値(例えば0)である。領域使用中フラグ505は、置き換え処理にともなって書き換えられるが、初期値が固定なので、上記の「静的なデータ」の一つである。
すなわち、データ領域500が図5のデータ領域421の場合において、現ハイパーバイザが上位領域420のハイパーバイザであれば、領域使用中フラグ505の値は、「使用中」を示す値(例えば1)である。逆に、データ領域500が図5のデータ領域421の場合において、現ハイパーバイザが下位領域430のハイパーバイザであれば、領域使用中フラグ505の値は、「非使用中」を示す値(例えば0)である。
そして、データ領域500が図5のデータ領域431の場合において、現ハイパーバイザが上位領域420のハイパーバイザであれば、領域使用中フラグ505の値は、「非使用中」を示す値である。逆に、データ領域500が図5のデータ領域431の場合において、現ハイパーバイザが下位領域430のハイパーバイザであれば、領域使用中フラグ505の値は、「使用中」を示す値である。
換言すれば、あるバージョンのハイパーバイザが、置き換え処理の進行につれて対象ハイパーバイザから現ハイパーバイザに変化するときに、領域使用中フラグ505は、「非使用中」を示す値から「使用中」を示す値に書き換えられる。そして、今まで現ハイパーバイザであったハイパーバイザが、置き換え処理の進行につれて現ハイパーバイザではなくなるときに、領域使用中フラグ505は、「使用中」を示す値から「非使用中」を示す値に書き換えられる。
さらに、図6の例では、データ領域500内のアドレスB5から始まる領域に、ドメイン制御用データ506が格納される。ドメイン制御用データ506は、ハイパーバイザがドメイン330a〜330cを制御するために用いるデータであり、ハイパーバイザが動作中に動的に書き換えるデータである。
例えば、ドメイン330a内のOSが物理アドレス空間として認識するアドレス空間は、実際には仮想マシンのアドレス空間であって、実マシンの物理アドレス空間ではない。ドメイン330a内のOSが物理アドレスとして認識するアドレスを実マシンの物理アドレスに変換するためのデータ(例えばページテーブル)は、ドメイン制御用データ506の一例である。もちろん、アドレス変換のための同様のデータは、他のドメイン330bと330cについてもそれぞれ存在し、ドメイン制御用データ506に含まれる。
また、ハイパーバイザ320は、実CPU221の処理時間をドメイン330a〜330cに順に割り当てるなどのスケジューリングも行う。ドメイン制御用データ506は、スケジューリング用のパラメタを含んでもよい。
さて、図7は、コード領域の例を示す図である。図7のコード領域600は、具体的には図5のコード領域422または432である。また、図7におけるアドレスは、ファームウェア内での相対アドレスである。
つまり、コード領域600がコード領域422の場合、図7のアドレスは、図5のアドレスA1を基準とする相対アドレスである。また、コード領域600がコード領域432の場合、図7のアドレスは、図5のアドレスA3を基準とする相対アドレスである。
図6のアドレスマップ501に関して説明したように、コード領域600は、ハイパーバイザが行う様々な処理のためのコードを含む。図7に示したコードの並び順は一例である。実施形態に応じて、コードの並び順は図7とは異なっていてもよい。
図7の例では、アドレスC0から始まる領域に、保留解除処理のコード601が格納されている。保留解除処理は、保留制御部331a〜331cに対して解除命令を発行する処理である。保留解除処理は、ハイパーバイザの起動(すなわち、対象ハイパーバイザから現ハイパーバイザへの変化)の直後に実行される。
また、アドレスC1から始まる領域には、待ち受け処理のコード602が格納されている。待ち受け処理は、ドメイン330a〜330cからハイパーバイザコールを受け付けて、ハイパーバイザコールに応じた適宜の処理を呼び出す処理である。
さらに、アドレスC2から始まる領域には、前処理のコード603が格納されている。図2の前処理部121は、CPU221が前処理のコード603を実行することによって実現される。
また、アドレスC3から始まる領域には、コード展開処理のコード604が格納されている。図2のコード展開部122は、CPU221がコード展開処理のコード604を実行することによって実現される。
そして、アドレスC4から始まる領域には、データ展開処理のコード605が格納されており、アドレスC5から始まる領域には、データ変換処理のコード606が格納されている。図2のデータ更新部123は、CPU221がデータ展開処理のコード605とデータ変換処理のコード606を実行することによって実現される。
また、アドレスC6から始まる領域には、アクセス保留処理のコード607が格納されており、アドレスC7から始まる領域には、ファームウェア切り換え処理のコード608が格納されている。例えば、バージョン2からバージョン3へのアップグレードが行われるとき、切り換え部124は、以下の(a1)と(a2)のコードをCPU221が実行することによって実現される。
(a1)バージョン2のハイパーバイザのアクセス保留処理のコード607とファームウェア切り換え処理のコード608
(a2)バージョン3のハイパーバイザの保留解除処理のコード601
なお、図7では省略されているが、コード領域600は、さらに、ハイパーバイザが行う他の様々な処理のためのコードも、アドレスC8以降の領域に含む。例えば、コード領域600は、ハイパーバイザが待ち受け処理で受け付けたハイパーバイザコールの種類に応じた適宜の処理のためのコードを含む。また、コード領域600は、OSが認識するアドレス(すなわち仮想マシンのアドレス)と実マシンの物理アドレスの間の変換のためのコードや、ドメイン330a〜330c間のスケジューリングのためのコードも含む。
また、図6のアドレスマップ501は、以下の(b1)〜(b8)を示す情報を少なくとも含む。
(b1)保留解除処理のコード601の先頭アドレスがC0であること
(b2)待ち受け処理のコード602の先頭アドレスがC1であること
(b3)前処理のコード603の先頭アドレスがC2であること
(b4)コード展開処理のコード604の先頭アドレスがC3であること
(b5)データ展開処理のコード605の先頭アドレスがC4であること
(b6)データ変換処理のコード606の先頭アドレスがC5であること
(b7)アクセス保留処理のコード607の先頭アドレスがC6であること
(b8)ファームウェア切り換え処理のコード608の先頭アドレスがC7であること
続いて、置き換え処理の詳細について図8〜13を参照して説明する。図8は、ハイパーバイザの置き換えの一例を示すシーケンス図である。
また、図8の動作シーケンスの開始時点におけるアクティブ領域は、図5の上位領域420である。つまり、図8の動作シーケンスの開始時点において、図5の有効マップアドレス411は、上位領域420の先頭アドレスA1を示している。なお、図8のドメイン330は、図4のドメイン330a〜330cのいずれであってもよい。
管理部110としてのサービスプロセッサ210において、CPU211は、サービスプロセッサ210のNOR型フラッシュメモリ212に格納されたファームウェアにしたがって動作する。また、図8の動作シーケンスの開始時点においてサービスプロセッサ210のNAND型フラッシュメモリ213(つまり図2の格納部111)には、既に対象ハイパーバイザのファームウェアが格納されているものとする。
すると、ステップS101で管理部110は、NAND型フラッシュメモリ213に格納されている対象ハイパーバイザのファームウェアを、システムボード220aのEPROM222(つまり図2の格納部130)に書き込む。
他方、ドメイン330は、管理部110が置き換え処理を開始したことを認識しない。よって、例えば図8のステップS102に示すタイミングで、ドメイン330がハイパーバイザコールを呼び出すこともあり得る。
すると、現ハイパーバイザは、上位領域420のコード領域422中の、待ち受け処理のコード602と、必要に応じた不図示の他のコードにしたがって動作する。そして、現ハイパーバイザは、ステップS103でハイパーバイザコールに対する応答をドメイン330に返す。
また、ステップS101での書き込みが成功裡に完了すると、ステップS104において管理部110は、制御部120内の前処理部121に完了を通知する。図8の例では、前処理部121は、具体的には、上位領域420のコード領域422に格納されている現ハイパーバイザのファームウェアのうち前処理のコード603をCPU221が実行することで実現される。
前処理部121が完了の通知を受け取ると、続くステップS105でコード展開部122が、EPROM222(つまり図2の格納部130)にコピーされた対象ハイパーバイザのファームウェアをメモリ上に展開する。具体的には、ステップS105でコード展開部122は、EPROM222上の対象ハイパーバイザのファームウェアのうちのコード領域を、非アクティブ領域である下位領域430のコード領域432に展開する。
さらに、ステップS106でデータ更新部123は、EPROM222上の対象ハイパーバイザのファームウェアのうちのデータ領域に含まれる静的なデータを、非アクティブ領域である下位領域430のデータ領域431にコピーする。
データ更新部123は、ステップS106でさらに、アクティブ領域である上位領域420のデータ領域421内の動的なデータも、データ領域431にコピーする。なお、現ハイパーバイザと対象ハイパーバイザそれぞれのデータフォーマットのバージョン番号503に応じて、ステップS106でデータ更新部123は、単純に動的なデータをコピーする場合もあるし、データフォーマットの変換をさらに行う場合もある。
他方、ドメイン330は、置き換え処理が進行中であることを認識しない。よって、例えば図8のステップS107に示すように、ステップS106に非常に近いタイミングで、ドメイン330がハイパーバイザコールを呼び出すこともあり得る。
すると、現ハイパーバイザは、上位領域420のコード領域422中の待ち受け処理のコード602にしたがって、ハイパーバイザコールを受け付ける。一方で、ステップS106の処理の終了後、ステップS108において、切り換え部124は、抑止命令をドメイン330に対して発行する。具体的には、ステップS108の処理は、現ハイパーバイザのファームウェアにおけるアクセス保留処理のコード607にしたがって行われる。
抑止命令を受け取ったドメイン330は、抑止命令の解除を命令するための解除命令を受け取るまで、ハイパーバイザコールの呼び出しを抑止する。図8の例では、ステップS108から後述のステップS111までの「保留期間」と示した期間の間、ドメイン330はハイパーバイザコールを保留する。
すなわち、保留期間においてドメイン330は、ハイパーバイザにアクセスしない。その代わり、保留期間においてドメイン330は、呼び出そうとするハイパーバイザコールをキューに記憶してもよい。
また、ステップS108での抑止命令の発行に続いて、ステップS109で切り換え部124は、抑止命令の発行前に受け付け済みで、かつ、まだ応答を返していないハイパーバイザコールに対して、適宜の処理を行い、ドメイン330に応答を返す。図8の例では、ステップS107のハイパーバイザコールに対する応答がステップS109で返される。ステップS109の処理も、現ハイパーバイザのファームウェアにおけるアクセス保留処理のコード607にしたがって行われる。
そして、次のステップS110で切り換え部124は、有効マップアドレス411を、対象ハイパーバイザのファームウェアが格納されている下位領域430の先頭アドレスA3へと書き換える。ステップS110の処理は、現ハイパーバイザのファームウェアにおけるファームウェア切り換え処理のコード608にしたがって行われる。
ステップS110の結果、上位領域420にファームウェアが格納されているハイパーバイザは現ハイパーバイザではなくなり、上位領域420はアクティブ領域から非アクティブ領域になる。代わりに、下位領域430にファームウェアが格納されているハイパーバイザが対象ハイパーバイザから現ハイパーバイザになり、下位領域430は非アクティブ領域からアクティブ領域になる。
そして、次のステップS111で切り換え部124は、解除命令を発行する。切り換え部124はさらに、ステップS112で、管理部110としてのサービスプロセッサ210に、ハイパーバイザの置き換えが完了したことを通知する。なお、ステップS111とS112の処理は、下位領域430のコード領域432における保留解除処理のコード601にしたがって行われる。
また、解除命令を受け取ったドメイン330は、ハイパーバイザコールの呼び出しを再開する。具体的には、もしキューが空でなければ、ドメイン330はキューに蓄積されたハイパーバイザコールを順次呼び出す。また、キューが空になった後も、ドメイン330は、必要に応じてハイパーバイザコールを呼び出す。
例えば、ドメイン330は、ステップS113でハイパーバイザコールを呼び出す。すると、下位領域430にファームウェアが格納されている現ハイパーバイザが、ハイパーバイザコールに応じた適宜の処理を行い、ステップS114で応答を返す。このように、ドメイン330にとってはハイパーバイザの置き換えは透過的である。つまり、ドメイン330は、単に一時的にハイパーバイザからハイパーバイザコールの抑止を要求されるだけであるかのように認識する。
なお、図8は、ハイパーバイザの置き換えにともなって、アクティブ領域が上位領域420から下位領域430に切り換わる例である。しかし、もちろん、ハイパーバイザの置き換えにともなって、アクティブ領域が下位領域430から上位領域420に切り換わる場合もある。
図9は、ハイパーバイザを置き換えるための置き換え処理のフローチャートである。今までの説明からも理解されるとおり、置き換え処理自体がハイパーバイザにより実行される。また、図9の置き換え処理は、下記(c1)および(c2)の条件が成立すると、開始される。
(c1)管理部110の格納部111(具体的には、例えばNAND型フラッシュメモリ213)に、対象ハイパーバイザのファームウェアが格納された。
(c2)置き換え処理の開始が明示的または暗黙的に指示された。
なお、情報処理装置100の外部から格納部111への対象ハイパーバイザのファームウェアの読み込みは、様々な方法により実現可能である。例えば、対象ハイパーバイザのファームウェアは、ネットワーク接続装置260を介してネットワークからダウンロードされて、NAND型フラッシュメモリ213に格納されてもよい。
あるいは、対象ハイパーバイザのファームウェアは、記憶媒体290に予め格納されていてもよい。そして、駆動装置270にセットされた記憶媒体290から、対象ハイパーバイザのファームウェアが読み取られ、NAND型フラッシュメモリ213にコピーされてもよい。
いずれにしろ、対象ハイパーバイザのファームウェアが格納部111に読み込まれると、条件(c1)が成立する。また、条件(c2)における明示的な指示の例は、ユーザ(例えば情報処理装置100のアドミニストレータ)からの入力装置230を介した入力である。そして、条件(c2)における暗黙的な指示の例は、「対象ハイパーバイザのファームウェアの格納部111への格納が完了した」というイベントである。
さて、以上の条件(c1)と(c2)の成立を契機として図9の置き換え処理が開始されると、まず、ステップS201において、管理部110と前処理部121により図10の前処理が行われる。詳しくは図10とともに後述するが、前処理では、格納部111から格納部130へのコピー(つまりNAND型フラッシュメモリ213からEPROM222へのコピー)が行われ、フロー制御用に「処理タイプ」が設定される。処理タイプの値は(d1)〜(d3)のいずれかである。
(d1)「制御部120が置き換え処理を続行することができないか、または、置き換え処理は続行する必要がない」ということを表す値。以下では説明の便宜上、この値が0であるものとする。
(d2)「制御部120が置き換え処理を続行する場合であり、かつ、対象ハイパーバイザのファームウェア142はDIMM140の非アクティブ領域に残っている」ということを表す値。以下では説明の便宜上、この値が1であるものとする。
(d3)「制御部120が置き換え処理を続行する場合であり、かつ、対象ハイパーバイザのファームウェア142はDIMM140の非アクティブ領域には格納されていない」ということを表す値。以下では説明の便宜上、この値が2であるものとする。
例えば、現ハイパーバイザまたは対象ハイパーバイザが動的な置き換え機能に非対応の場合、制御部120は置き換え処理を続行することができない。よって、この場合、処理タイプの値は0である。また、対象ハイパーバイザとして現ハイパーバイザと同じハイパーバイザが指定された場合、制御部120は置き換え処理を続行する必要がない。よって、この場合も、処理タイプの値は0である。
逆に、制御部120が置き換え処理を続行する場合とは、置き換え処理の続行が可能であり、かつ、現ハイパーバイザと対象ハイパーバイザが異なる場合である。そして、制御部120が置き換え処理を続行する場合、処理タイプの値は1または2である。
例えば、対象ハイパーバイザが、現ハイパーバイザの直前に情報処理装置100上で動作していたハイパーバイザである場合、対象ハイパーバイザのファームウェアは非アクティブ領域に残っている。よって、この場合、処理タイプの値は1である。
より具体的には、例えば、バージョン2からバージョン3へのハイパーバイザのアップグレードの後、何らかの不具合が見つかることがある。その結果、バージョン3からバージョン2へのダウングレードが行われるかもしれない。
このようにダウングレードのために図9の置き換え処理が行われる場合、現在の非アクティブ領域は、かつてバージョン2のハイパーバイザが動作していたときにはアクティブ領域だった領域である。つまり、現在の非アクティブ領域には、現在の対象ハイパーバイザであるバージョン2のハイパーバイザのファームウェアが格納されている。よって、処理タイプの値は1である。
また、例えばバージョン5のハイパーバイザが新たにリリースされ、バージョン4からバージョン5へのアップグレードのために図9の置き換え処理が行われる場合などは、対象ハイパーバイザのファームウェアはDIMM140上には存在しない。したがって、処理タイプの値は2である。
あるいは、ハイパーバイザがバージョン1からバージョン2へアップグレードされ、バージョン2からバージョン3へとさらにアップグレードされた後、何らかの事情でバージョン1にダウングレードされることもあるかもしれない。この場合も、バージョン3からバージョン1へのダウングレードにおける対象ハイパーバイザ(すなわちバージョン1のハイパーバイザ)のファームウェアは、既にDIMM140上には存在しない。よって、処理タイプの値は2である。
さて、ステップS201の前処理において以上説明した処理タイプが設定されると、次のステップS202で前処理部121は、処理タイプの値が0、1、2のいずれであるかを判断する。
処理タイプの値が0のとき、ステップS203以下の処理は不要であるから、図9の置き換え処理自体も終了する。また、処理タイプの値が1のとき、処理はステップS204に移行する。そして、処理タイプの値が2のとき、処理はステップS203に移行する。
ステップS203でコード展開部122は、図11のコード展開処理を行う。また、ステップS204でデータ更新部123は、図12のデータ展開処理を行う。そして、最後のステップS205で切り換え部124が図13の切り換え処理を行い、図9の置き換え処理が終了する。
なお、図8のステップS101とS104は、図9のステップS201の前処理の一部である。また、図8の例では処理タイプの値が2である。そして、図8のステップS105は図9のステップS203に対応し、図8のステップS106は図9のステップS204に対応する。また、図8のステップS108〜S112は図9のステップS205の一部である。なお、図8のステップS102〜S103、S107、S113〜S114は、図9の置き換え処理とは独立である。
続いて、図9のステップS201に示した前処理の詳細について、図10のフローチャートを参照して説明する。
ステップS301で管理部110は、図2の格納部130(つまり図3のEPROM222)に、管理部110内の格納部111(つまり図3のNAND型フラッシュメモリ213)に格納されている対象ハイパーバイザのファームウェアを格納する。
そして、ステップS301での格納が完了すると、次のステップS302で管理部110は、制御部120内の前処理部121に、ファームウェアの格納が完了したことを通知する。
すると、ステップS303で前処理部121は、DIMM140内のアクティブ領域に格納されている現ハイパーバイザのファームウェアのデータ領域500における、動的な置き換え機能の有効/無効フラグ504を参照する。なお、前処理部121は、共通領域410の有効マップアドレス411を参照することで、上位領域420と下位領域430のいずれがアクティブ領域なのかを認識することができる。
また、前処理部121は、格納部130に格納された対象ハイパーバイザのファームウェアのデータ領域500における、動的な置き換え機能の有効/無効フラグ504を参照する。そして、前処理部121は、2つの有効/無効フラグ504の値に基づいて、動的な置き換え機能が有効か否かを判断する。
現ハイパーバイザと対象ハイパーバイザの双方のファームウェア中の有効/無効フラグ504が「有効」を示す値(例えば1)の場合、処理はステップS304に移行する。逆に、現ハイパーバイザと対象ハイパーバイザのうち少なくとも一方のファームウェア中の有効/無効フラグ504が「無効」を示す値(例えば0)の場合、処理はステップS305に移行する。
ステップS304で前処理部121は、EPROM222に格納された対象ハイパーバイザのファームウェアが、現在動作中の現ハイパーバイザのファームウェアと同じか否かを判断する。
具体的には、前処理部121は、まず、ハイパーバイザ用の領域400の共通領域410の有効マップアドレス411を参照することで、上位領域420と下位領域430のいずれがアクティブ領域なのかを判断する。あるいは、前処理部121は、ステップS303で有効マップアドレス411を参照した結果を記憶していてもよい。
もし、有効マップアドレス411に上位領域420の先頭アドレスA1が記憶されていれば、現ハイパーバイザのバージョン番号は、データ領域421内のバージョン番号502である。逆に、有効マップアドレス411に下位領域430の先頭アドレスA3が記憶されていれば、現ハイパーバイザのバージョン番号は、データ領域431内のバージョン番号502である。以上のようにして、前処理部121は、現ハイパーバイザのバージョン番号を認識する。
また、前処理部121は、EPROM222に格納された対象ハイパーバイザのファームウェアのデータ領域500におけるバージョン番号502を参照する。そして、前処理部121は現ハイパーバイザと対象ハイパーバイザのバージョン番号502を比較する。
もし、2つのバージョン番号502が等しければ、対象ハイパーバイザと現ハイパーバイザは同じなので置き換えの必要がない。そこで、処理はステップS305に移行する。逆に、2つのバージョン番号502が異なれば、処理はステップS306に移行する。
ステップS305で前処理部121は、処理タイプの値を0に設定する。そして、図10の前処理は終了する。
また、ステップS306で前処理部121は、EPROM222に格納されたハイパーバイザのファームウェアが、非アクティブ領域に展開済みのハイパーバイザのファームウェアと同じか否かを判断する。
具体的には、前処理部121は、まず、ハイパーバイザ用の領域400の共通領域410の有効マップアドレス411を参照することで、上位領域420と下位領域430のいずれが非アクティブ領域なのかを判断する。あるいは、前処理部121は、既に有効マップアドレス411を参照しているので、参照結果を記憶している場合は、ステップS306で再度有効マップアドレス411を参照しなくてもよい。前処理部121は、以前有効マップアドレス411を参照した結果にしたがって、上位領域420と下位領域430のいずれが非アクティブ領域なのかをステップS306で判断してもよい。
もし、有効マップアドレス411に上位領域420の先頭アドレスA1が記憶されていれば、非アクティブ領域にファームウェアが格納されているハイパーバイザのバージョン番号は、下位領域430のデータ領域431内のバージョン番号502である。逆に、有効マップアドレス411に下位領域430の先頭アドレスA3が記憶されていれば、非アクティブ領域にファームウェアが格納されているハイパーバイザのバージョン番号は、上位領域420のデータ領域421内のバージョン番号502である。以上のようにして、前処理部121は、非アクティブ領域に展開済みのハイパーバイザのファームウェアのバージョン番号を認識する。
また、前処理部121は、EPROM222に格納された対象ハイパーバイザのファームウェアのデータ領域500におけるバージョン番号502を参照する。そして、前処理部121は、対象ハイパーバイザと、非アクティブ領域に展開済みのハイパーバイザのハイパーバイザのバージョン番号502を比較する。
もし、2つのバージョン番号502が等しければ、対象ハイパーバイザのファームウェアを、EPROM222から現在の非アクティブ領域にコピーする必要はない。そこで、処理はステップS307に移行する。逆に、2つのバージョン番号502が異なれば、処理はステップS308に移行する。
ステップS307で前処理部121は、処理タイプの値を1に設定する。そして、図10の前処理は終了する。
また、ステップS308で前処理部121は、処理タイプの値を2に設定する。そして、図10の前処理は終了する。
続いて、図9のステップS203に示したコード展開処理の詳細について、図11のフローチャートを参照して説明する。
ステップS401でコード展開部122は、ハイパーバイザ動作用の2つのメモリ領域のうち、非アクティブ領域のコード領域に、EPROM222に格納された対象ハイパーバイザのファームウェアのコードを展開する。
具体的には、コード展開部122は、まず、図5の有効マップアドレス411を参照することで、上位領域420と下位領域430のいずれが非アクティブ領域であるかを認識する。
有効マップアドレス411がアドレスA1を示す場合は、下位領域430が非アクティブ領域である。よって、コード展開部122は、EPROM222に格納された対象ハイパーバイザのファームウェアのコードを、下位領域430内のコード領域432にコピーする。
逆に、有効マップアドレス411がアドレスA3を示す場合は、上位領域420が非アクティブ領域である。よって、コード展開部122は、EPROM222に格納された対象ハイパーバイザのファームウェアのコードを、上位領域420内のコード領域422にコピーする。
続いて、図9のステップS204に示したデータ展開処理の詳細について、図12のフローチャートを参照して説明する。
ステップS501でデータ更新部123は、前処理で設定された処理タイプの値を参照する。そして、処理タイプの値が上記(d2)の値(具体的には1)である場合、処理はステップS503に移行する。逆に、処理タイプの値が上記(d3)の値(具体的には2)である場合、処理はステップS502に移行する。
なお、処理タイプの値が1の場合、対象ハイパーバイザのファームウェアはDIMM140の非アクティブ領域に残っている。よって、データ領域500に含まれる静的なデータを、EPROM222からDIMM224上の非アクティブ領域にコピーする必要がない。そのため、処理タイプが1の場合、ステップS502は省略される。
逆に、処理タイプの値が2の場合、対象ハイパーバイザのファームウェアはDIMM140の非アクティブ領域に存在しない。したがって、ステップS502でデータ更新部123は、EPROM222に格納されている対象ハイパーバイザのデータ領域500の静的なデータを、DIMM224上の非アクティブ領域のデータ領域500にコピーする。
具体的には、データ更新部123は、図6のアドレスマップ501、ハイパーバイザのバージョン番号502、データフォーマットのバージョン番号503、動的な置き換え機能の有効/無効フラグ504、および領域使用中フラグ505をコピーする。ステップS502のコピーが完了すると、処理はステップS503に移行する。
なお、データ更新部123は、有効マップアドレス411を参照することで、非アクティブ領域の先頭アドレス(すなわちコピー先のアドレス)を認識することができる。
有効マップアドレス411がアドレスA1を示す場合、非アクティブ領域は下位領域430なので、データ更新部123は、下位領域430の先頭アドレスA3を非アクティブ領域の先頭アドレスとして認識する。逆に、有効マップアドレス411がアドレスA3を示す場合、非アクティブ領域は上位領域420なので、データ更新部123は、上位領域420の先頭アドレスA1を非アクティブ領域の先頭アドレスとして認識する。
ステップS503でデータ更新部123は、現ハイパーバイザと対象ハイパーバイザの間でデータフォーマットに変更があるか否かを判断する。すなわち、データ更新部123は、データ領域421とデータ領域431それぞれのデータフォーマットのバージョン番号503が互いに等しいか否かを判断する。
そして、2つのバージョン番号503が等しいとき、データフォーマットの変更はないので、処理はステップS504に移行する。逆に、2つのバージョン番号503が異なるとき、処理はステップS505に移行する。
ステップS504でデータ更新部123は、アクティブ領域内のドメイン制御用データ506を、非アクティブ領域内にコピーする。より具体的には、コピー先は、非アクティブ領域内のデータ領域500におけるドメイン制御用データ506の格納用の領域である。
データ領域500に含まれる静的なデータの合計長が固定の場合、データ更新部123は、アクティブ領域の先頭アドレスに固定の長さを足すことで、コピー対象であるドメイン制御用データ506の先頭アドレスを認識することができる。同様に、データ更新部123は、非アクティブ領域の先頭アドレスに固定の長さを足すことで、ドメイン制御用データ506のコピー先アドレスを認識することができる。
あるいは、ドメイン制御用データ506の先頭アドレスを示す情報をアドレスマップ501が含む場合、データ更新部123は、アクティブ領域上の現ハイパーバイザのアドレスマップ501を参照することで、コピー対象の先頭アドレスを認識することができる。同様に、データ更新部123は、非アクティブ領域上の対象ハイパーバイザのアドレスマップ501を参照することで、コピー先アドレスを認識することができる。
ステップS504でのコピーが完了すると、図12のデータ展開処理は終了する。
他方、ステップS505でデータ更新部123は、対象ハイパーバイザの方が現ハイパーバイザよりもデータフォーマットのバージョンが新しいか否かを判断する。なお、ステップS505が実行されるのは、現ハイパーバイザと対象ハイパーバイザの間でデータフォーマットのバージョンが異なる場合のみである。
アップグレードのためにハイパーバイザの置き換えが行われる場合、現ハイパーバイザのデータフォーマットのバージョン番号よりも、対象ハイパーバイザのデータフォーマットのバージョン番号の方が新しい。よって、処理はステップS505からステップS506に移行する。
逆に、ダウングレードのためにハイパーバイザの置き換えが行われる場合、対象ハイパーバイザのデータフォーマットのバージョン番号よりも、現ハイパーバイザのデータフォーマットのバージョン番号の方が新しい。よって、処理はステップS505からステップS507に移行する。
ステップS506でデータ更新部123は、非アクティブ領域のコード領域におけるデータ変換処理のコード606のアドレスをジャンプ先アドレスに設定する。つまり、データ更新部123は、対象ハイパーバイザのファームウェア中のデータ変換処理のコード606を後述のステップS512において呼び出すことを決定する。ステップS506の具体的な処理は以下のとおりである。
有効マップアドレス411がアドレスA1を示すとき、下位領域430が非アクティブ領域である。よって、データ更新部123は、ステップS506において、下位領域430のデータ領域431内のアドレスマップ501を参照し、データ変換処理のコード606の対象ファームウェア内での相対アドレスを認識する。そして、データ更新部123は、認識した相対アドレスと、非アクティブ領域である下位領域430の先頭アドレスA3とを足して、ジャンプ先アドレスを得る。
逆に、有効マップアドレス411がアドレスA3を示すとき、上位領域420が非アクティブ領域である。よって、データ更新部123は、ステップS506において、上位領域420のデータ領域421内のアドレスマップ501を参照し、データ変換処理のコード606の対象ファームウェア内での相対アドレスを認識する。そして、データ更新部123は、認識した相対アドレスと、非アクティブ領域である上位領域420の先頭アドレスA1とを足して、ジャンプ先アドレスを得る。
そして、ジャンプ先アドレスが設定されると、処理はステップS508に移行する。
また、ステップS507でデータ更新部123は、アクティブ領域のコード領域におけるデータ変換処理のコード606のアドレスをジャンプ先アドレスに設定する。つまり、データ更新部123は、現ハイパーバイザのファームウェア中のデータ変換処理のコード606を後述のステップS512において呼び出すことを決定する。ステップS507の具体的な処理は以下のとおりである。
有効マップアドレス411がアドレスA1を示すとき、上位領域420がアクティブ領域である。よって、データ更新部123は、ステップS507において、上位領域420のデータ領域421内のアドレスマップ501を参照し、データ変換処理のコード606の現ファームウェア内での相対アドレスを認識する。そして、データ更新部123は、認識した相対アドレスと、アクティブ領域である上位領域420の先頭アドレスA1とを足して、ジャンプ先アドレスを得る。
逆に、有効マップアドレス411がアドレスA3を示すとき、下位領域430がアクティブ領域である。よって、データ更新部123は、ステップS507において、下位領域430のデータ領域431内のアドレスマップ501を参照し、データ変換処理のコード606の現ファームウェア内での相対アドレスを認識する。そして、データ更新部123は、認識した相対アドレスと、アクティブ領域である下位領域430の先頭アドレスA3とを足して、ジャンプ先アドレスを得る。
そして、ジャンプ先アドレスが設定されると、処理はステップS508に移行する。
以上のステップS506またはS507により、データフォーマットのバージョン番号503が新しい方のハイパーバイザのファームウェアが格納された領域におけるデータ変換処理のコード606の絶対アドレスが、ジャンプ先アドレスとして設定される。そして、本実施形態では、データ変換処理のコード606は、任意の下位のデータフォーマットからの変換および任意の下位のデータフォーマットへの変換をサポートするためのコードを含む。
例えば、データフォーマットのバージョン番号503が2のハイパーバイザのファームウェアにおけるデータ変換処理のコード606は、下記(e1)と(e2)のコードを含む。
(e1)バージョン1のデータフォーマットからバージョン2のデータフォーマットへの変換のためのコード
(e2)バージョン2のデータフォーマットからバージョン1のデータフォーマットへの変換のためのコード
また、データフォーマットのバージョン番号503が3のハイパーバイザのファームウェアにおけるデータ変換処理のコード606は、下記(f1)〜(f4)のコードを含む。
(f1)バージョン1のデータフォーマットからバージョン3のデータフォーマットへの変換のためのコード
(f2)バージョン3のデータフォーマットからバージョン1のデータフォーマットへの変換のためのコード
(f3)バージョン2のデータフォーマットからバージョン3のデータフォーマットへの変換のためのコード
(f4)バージョン3のデータフォーマットからバージョン2のデータフォーマットへの変換のためのコード
したがって、ステップS506またはS507により設定されたジャンプ先アドレスから始まるデータ変換処理のコード606の中には、現ハイパーバイザのデータフォーマットから対象ハイパーバイザのデータフォーマットへの変換のためのコードが含まれる。
さて、ステップS506またはS507の実行後、ステップS508〜S512の一連の処理が行われる。なお、ステップS508〜S511の順序は、実施形態に応じて入れ替えられてもよい。
ステップS508においてデータ更新部123は、アクティブ領域内のドメイン制御用データ506の先頭アドレスを入力アドレスとして設定する。ここで「入力アドレス」とは、変換対象のデータの先頭アドレスであり、換言すれば、データ変換処理への入力を指定するアドレスである。
なお、データ更新部123は、ステップS504と同様にして、アクティブ領域内のドメイン制御用データ506の先頭の絶対アドレスを取得することができる。よって、データ更新部123は、取得したアドレスを入力アドレスとして設定する。
そして、次のステップS509でデータ更新部123は、非アクティブ領域内のドメイン制御用データ506の先頭アドレスを出力アドレスとして設定する。ここで「出力アドレス」とは、変換されたデータの出力先の先頭アドレスである。
なお、データ更新部123は、ステップS504と同様にして、非アクティブ領域内のドメイン制御用データ506の先頭の絶対アドレスを取得することができる。よって、データ更新部123は、取得したアドレスを出力アドレスとして設定する。
また、次のステップS510でデータ更新部123は、現ハイパーバイザのデータフォーマットのバージョン番号503を入力バージョン番号として設定する。ステップS510の具体的な処理は以下のとおりである。
有効マップアドレス411がアドレスA1を示す場合、現ハイパーバイザのファームウェアは上位領域420に格納されている。よって、データ更新部123は、ステップS510において、上位領域420のデータ領域421中のデータフォーマットのバージョン番号503を入力バージョン番号として設定する。
逆に、有効マップアドレス411がアドレスA3を示す場合、現ハイパーバイザのファームウェアは下位領域430に格納されている。よって、データ更新部123は、ステップS510において、下位領域430のデータ領域431中のデータフォーマットのバージョン番号503を入力バージョン番号として設定する。
さらに、次のステップS511でデータ更新部123は、対象ハイパーバイザのデータフォーマットのバージョン番号503を出力バージョン番号として設定する。ステップS511の具体的な処理は以下のとおりである。
有効マップアドレス411がアドレスA1を示す場合、対象ハイパーバイザのファームウェアは下位領域430に格納されている。よって、データ更新部123は、ステップS511において、下位領域430のデータ領域431中のデータフォーマットのバージョン番号503を出力バージョン番号として設定する。
逆に、有効マップアドレス411がアドレスA3を示す場合、対象ハイパーバイザのファームウェアは上位領域420に格納されている。よって、データ更新部123は、ステップS511において、上位領域420のデータ領域421中のデータフォーマットのバージョン番号503を出力バージョン番号として設定する。
そして、ステップS512でデータ更新部123は、入力アドレス、出力アドレス、入力バージョン番号、および出力バージョン番号を引数として、ジャンプ先アドレスの処理を呼び出して実行する。つまり、ステップS512の処理は、データ変換処理に対するサブルーチンコールと、データ変換処理の実行を含む。なお、引数の受け渡しは、情報処理装置100のアーキテクチャに応じて、コールスタックを介して行われてもよいし、レジスタウィンドウを介して行われてもよい。
ジャンプ先アドレスから始まるデータ変換処理のコード606をCPU221が実行し終わり、リターン命令によりデータ変換処理のサブルーチンから制御が戻ると、ステップS512の処理が終了する。すると、図9のステップS204に相当する図12のデータ展開処理も終了し、続いてステップS205の切り換え処理が行われる。
例えば、データ展開処理のコード605は、データ変換処理のサブルーチンコールを行うためのコール命令の直後に、アクセス保留処理のコード607の先頭への無条件ジャンプ命令を含んでもよい。つまり、ステップS512のサブルーチンコールのリターンアドレスには、当該無条件ジャンプ命令があってもよい。
すると、ステップS506またはS507で設定されたジャンプ先アドレスから始まるデータ変換処理のコード606をCPU221が実行し終わると、CPU221のプログラムカウンタは、リターンアドレスの値に更新される。その結果、CPU221は、上記の無条件ジャンプ命令を実行し、続いて、現ハイパーバイザのファームウェア中のアクセス保留処理のコード607の実行を開始する。例えば以上のようにして、データ更新部123から切り換え部124へと制御が移り、図9のステップS204からステップS205へと処理が進む。
続いて、図9のステップS205に示した切り換え処理の詳細について、図13のフローチャートを参照して説明する。
ステップS601で切り換え部124は、現ハイパーバイザからドメイン330a〜330cに対して、ハイパーバイザへのアクセスを一時保留するように指示する。つまり、切り換え部124は、保留制御部331a〜331cに対して、それぞれ抑止命令を発行する。なお、ステップS601の実行時における切り換え部124は、アクティブ領域に格納された現ハイパーバイザのファームウェアのアクセス保留処理のコード607をCPU221が実行することにより、実現される。
また、上記のとおり、OSのみがハイパーバイザコールを呼び出す実施形態では、保留制御部はOSに含まれる。あるいは、OSとデバイスドライバの双方がハイパーバイザコールを呼び出す実施形態では、OSとデバイスドライバにそれぞれ保留制御部が含まれる。いずれにしろ、ステップS601での抑止命令の発行の結果、ドメイン330a〜330cから現ハイパーバイザへのアクセスは一時的に停止される。
そして、次のステップS602で切り換え部124は、ドメイン330a〜330cから受け付け済みの処理がもしあれば、受け付け済みの当該処理を実行して完了する。例えば、図8のように、ステップS108での抑止命令の発行の直前に、現ハイパーバイザがステップS107のハイパーバイザコールを受け付けている場合、切り換え部124は、受け付け済みのハイパーバイザコールに対する処理を実行し、完了する。
例えば、現ハイパーバイザが図7の待ち受け処理のコード602にしたがってドメイン330a〜330cから受け付けたハイパーバイザコールは、現ハイパーバイザが使用するキューに一時的に格納されてもよい。受け付け済みの1つまたは複数のハイパーバイザコールがもしあれば、切り換え部124は、ステップS602において、ハイパーバイザコールをキューから順に取り出し、取り出した各ハイパーバイザコールの内容に応じて、適宜のサブルーチンを呼び出す。
つまり、ステップS602の実行時における切り換え部124は、アクティブ領域に格納された現ハイパーバイザのファームウェアにおける、下記(g1)〜(g2)のコードをCPU221が実行することにより、実現される。
(g1)ファームウェア切り換え処理のコード608
(g2)ファームウェア切り換え処理のコード608から呼び出される、上記サブルーチンのコード(つまり、図7には不図示の、コード領域600内のコード)
なお、ステップS602において、キューは偶然空のこともあるし、キューに1つまたは複数のハイパーバイザコールが格納されていることもある。キューが空になると、処理はステップS603に移行する。
そして、ステップS603で切り換え部124は、共通領域410における有効マップアドレス411に、現在の非アクティブ領域の先頭アドレスを設定する。つまり、現在の有効マップアドレス411が上位領域420の先頭アドレスA1であれば、切り換え部124は、有効マップアドレス411を下位領域430の先頭アドレスA3に書き換える。逆に、現在の有効マップアドレス411が下位領域430の先頭アドレスA3であれば、切り換え部124は、有効マップアドレス411を上位領域420の先頭アドレスA1に書き換える。
続いて、ステップS604で切り換え部124は、トラップ命令の制御用のレジスタに、現在の非アクティブ領域の先頭アドレスを設定する。
CPU221のアーキテクチャに応じて詳細は様々に異なるが、CPU221の命令セットは、非特権モードから特権モードに遷移するためのトラップ命令を含む。そして、ハイパーバイザコールは、トラップ命令を用いて実装される。トラップ命令の引数には、ハイパーバイザコールの種類を示す番号が含まれていてもよい。
本実施形態のCPU221は、トラップ命令を検出すると、実行モードを非特権モードから特権モードに切り換える。また、CPU221は、トラップ命令を検出すると、トラップ命令の制御用の上記の特殊なレジスタを参照する。そして、CPU221は、当該レジスタに設定されているアドレスへのジャンプを実行する。なお、実施形態によっては、CPU221は、当該レジスタに設定されているアドレスに、トラップ命令の引数に応じたオフセットを足したアドレスへのジャンプを実行してもよい。
すると、ジャンプ先のアドレスから始まる、特権モードの処理のための一連のコードが実行される。そして、一連のコード中に含まれるリターン命令をCPU221が検出すると、CPU221は実行モードを特権モードから非特権モードに切り換え、トラップ命令のアドレスの直後のアドレスに制御が戻る。
ハイパーバイザコールは、例えば上記のようなトラップ命令を使って実装される。そこで、ステップS604で切り換え部124は、トラップ命令の制御用の上記レジスタに現在の非アクティブ領域の先頭アドレスを設定することで、CPU221が非特権モードに戻った後で次にトラップ命令を検出したときのジャンプ先を切り換える。つまり、ステップS604で切り換え部124は、ハイパーバイザが切り換わった後のハイパーバイザコールでのジャンプ先を設定する。なお、ハイパーバイザに含まれる切り換え部124は、特権モードで動作するので、特権モードで保護された上記のような特殊なレジスタの値の書き換えを行うことができる。
そして、次のステップS605で切り換え部124は、有効マップアドレス411が示す領域ではない方の領域内の領域使用中フラグ505の値を、「非使用中」を示す値(例えば、図13の例では0)に設定する。つまり、切り換え部124は、アクティブ領域から非アクティブ領域に変化した領域における領域使用中フラグ505の値を、当該変化に合わせて書き換える。
例えば、切り換え部124は、ステップS603で有効マップアドレス411の値をアドレスA1からアドレスA3に書き換えた場合、アドレスA1から始まる上位領域420のデータ領域421における領域使用中フラグ505の値を0に設定する。あるいは、切り換え部124は、ステップS603で有効マップアドレス411の値をアドレスA3からアドレスA1に書き換えた場合、アドレスA3から始まる下位領域430のデータ領域431における領域使用中フラグ505の値を0に設定する。
さらに、ステップS606で切り換え部124は、有効マップアドレス411が示す領域内の領域使用中フラグ505の値を、「使用中」を示す値(例えば、図13の例では1)に設定する。つまり、切り換え部124は、非アクティブ領域からアクティブ領域に変化した領域における領域使用中フラグ505の値を、当該変化に合わせて書き換える。
例えば、切り換え部124は、ステップS603で有効マップアドレス411の値をアドレスA1からアドレスA3に書き換えた場合、アドレスA3から始まる下位領域430のデータ領域431における領域使用中フラグ505の値を1に設定する。あるいは、切り換え部124は、ステップS603で有効マップアドレス411の値をアドレスA3からアドレスA1に書き換えた場合、アドレスA1から始まる上位領域420のデータ領域421における領域使用中フラグ505の値を1に設定する。
続いて、ステップS607で切り換え部124は、CPU221内のプログラムカウンタの値を書き換える。ステップS607の処理は、新たなアクティブ領域に格納されているハイパーバイザのファームウェア内の命令を、CPU221が次に実行する命令として指定することで、ハイパーバイザを切り換える処理である。
具体的には、切り換え部124は、有効マップアドレス411と、有効マップアドレス411が示す領域内のアドレスマップ501により示される保留解除処理のコード601のアドレスの和を、プログラムカウンタに設定する。
例えば、ステップS603で有効マップアドレス411がアドレスA1からアドレスA3に書き換えられた場合、プログラムカウンタには、下記(h1)と(h2)の和(A3+C0)が設定される。
(h1)新たにアクティブ領域となった下位領域430の先頭アドレスA3
(h2)下位領域430のデータ領域431内のアドレスマップ501により示される、下位領域430内での保留解除処理のコード601の相対アドレスC0
逆に、ステップS603で有効マップアドレス411がアドレスA3からアドレスA1に書き換えられた場合、プログラムカウンタには、下記(i1)と(i2)の和(A1+C0)が設定される。
(i1)新たにアクティブ領域となった上位領域420の先頭アドレスA1
(i2)上位領域420のデータ領域421内のアドレスマップ501により示される、上位領域420内での保留解除処理のコード601の相対アドレスC0
なお、図7にしたがって(h2)と(i2)では同じ「C0」という符号を使っているが、(h2)の相対アドレスC0と(i2)の相対アドレスC0の具体的な値は同じとは限らない。また、ステップS604〜S606の順序は任意に入れ替えられてもよい。また、ステップS603〜S607の実行時における切り換え部124は、ステップS602の実行時まで有効マップアドレス411が示していた方の領域中の、ファームウェア切り換え処理のコード608をCPU221が実行することで、実現される。
また、ステップS607の実行後、次にCPU221が実行する命令は、ステップS607でプログラムカウンタに設定されたアドレスにある命令である。つまり、CPU221は、次に、新たに現ハイパーバイザとなったハイパーバイザのファームウェアにおける、保留解除処理のコード601の実行を開始する。
その結果、ステップS608で切り換え部124は、新たに現ハイパーバイザとなったハイパーバイザから、ドメイン330a〜330cに対して、ハイパーバイザへのアクセスの保留を解除するように指示する。つまり、切り換え部124は、保留制御部331a〜331cに対して、それぞれ解除命令を発行する。ステップS608での解除命令の発行の結果、ドメイン330a〜330cは、必要に応じてハイパーバイザコールを呼び出すようになる。
また、次のステップS609で切り換え部124は、ハイパーバイザのファームウェアの置き換えが完了したことを管理部110に通知する。ステップS609での通知は、例えば、SRAM223を介して行われてもよい。
なお、ステップS608〜S609の実行時における切り換え部124は、ステップS603で書き換えられた有効マップアドレス411が示す新たなアクティブ領域内の保留解除処理のコード601をCPU221が実行することで、実現される。
また、本実施形態では、図7に示すよう保留解除処理のコード601の直後に待ち受け処理のコード602がある。したがって、次のステップS610では、通常のプログラムカウンタのインクリメントにより、CPU221は待ち受け処理のコード602の実行を開始する。すなわち、ハイパーバイザのファームウェアの置き換えが終了すると、新たに現ハイパーバイザとなったハイパーバイザは、自動的に待ち受け処理を開始する。
以上説明した第2実施形態によれば、CPU221の物理的な再起動をともなわずに、ドメイン330a〜330cに対して透過的に、ハイパーバイザを置き換えることが可能である。つまり、第2実施形態によるハイパーバイザの置き換えは、CPU221の再起動を必要としないので、情報処理装置100が提供するサービスを停止させることがない。したがって、停止することが好ましくないサービスを提供するために情報処理装置100が使われている場合であっても、サービスの運用スケジュールに左右されずに、タイムリにハイパーバイザを置き換えることができる。
CPU221の再起動が不要なことは、情報処理装置100の可用性を向上させる効果がある。また、例えば現ハイパーバイザにセキュリティホールが見つかった場合などは、ハイパーバイザのタイムリなアップグレードは、セキュリティ向上のために有益である。したがって、情報処理装置100の用途によらずにハイパーバイザのタイムリな置き換えが可能になることは、セキュリティの観点からも望ましい。
また、図3には複数のシステムボード220a〜220cが図示されているが、情報処理装置100は1枚のシステムボード220aのみを含んでいてもよい。さらに、情報処理装置100が複数のシステムボード220a〜220cを含む場合であっても、各システムボードにおけるハイパーバイザの置き換えは独立して実行可能である。
すなわち、第2実施形態によれば、冗長化されていない構成の情報処理装置100においても、CPU221の再起動をともなわずにハイパーバイザを置き換えることが可能である。換言すれば、第2実施形態では、DIMM140(具体的には例えばDIMM224)内に2つの領域(つまり図5の上位領域420と下位領域430)があれば、CPU221の物理的な再起動をともなわないハイパーバイザの置き換えが可能である。
また、新しいバージョンのハイパーバイザがリリースされた後に、不具合が見つかることもあり得る。つまり、実際にハイパーバイザがアップグレードされた後の情報処理装置100の運用中に、新しいバージョンのハイパーバイザの不具合が初めて見つかることがあり得る。
例えば、バージョン3のハイパーバイザが新たにリリースされ、情報処理装置100において上記の第2実施形態にしたがってバージョン2からバージョン3へのアップグレードが行われたとする。その後、情報処理装置100においては、バージョン3のハイパーバイザが動作する。
ところが、バージョン3のハイパーバイザに何らかの不具合があると、例えばドメイン330a〜330cにおいて予期せぬエラーが発生するかもしれない。すると、情報処理装置100のアドミニストレータは、ハイパーバイザをバージョン3からバージョン2に一時的にダウングレードすることに決めるかもしれない。
第2実施形態によれば、ダウングレードのための置き換えも、アップグレードのための置き換えと同様に、図9〜13のフローチャートにしたがって行われる。つまり、第2実施形態によれば、不具合が発覚した後の復旧作業としてのダウングレードも、CPU221の再起動をともなわずに実行可能である。換言すれば、たとえ復旧作業が必要になったとしても、情報処理装置100が提供するサービスを復旧作業のために停止させる必要がない。
したがって、第2実施形態によれば、たとえ新たにリリースされたバージョンのハイパーバイザに不具合があったとしても、情報処理装置100の可用性への悪影響を低レベルに抑えることができる。
また、第2実施形態によるハイパーバイザの置き換えは、ドメイン330a〜330c内で実行中のプログラム(例えばOSやユーザアプリケーションプログラム)の動作を大きく遅延させるものではない。むしろ、ハイパーバイザの置き換え自体にともなう遅延は非常にわずかである。
具体的には、第2実施形態においてハイパーバイザコールが一時停止させられる期間は、図13のステップS601での抑止命令の発行からステップS608での解除命令の発行までの期間である。そして、抑止命令の発行から解除命令の発行までの期間までのうち、ハイパーバイザの置き換え自体にともなう遅延をもたらすのは、ステップS603〜S607の処理である。
ここで、ステップS603、S605、S606の処理は、多くても数バイト程度のデータをDIMM224に書き込む処理である。また、ステップS604とS607の処理は、CPU221内のレジスタの値を更新する処理である。したがって、ステップS603〜S607の処理にかかる時間は、非常に短い。つまり、ハイパーバイザの置き換え自体にともなう遅延は非常にわずかである。
なお、ステップS602の処理による遅延は、ハイパーバイザの置き換えが行われるか否かに関わらず発生する遅延であるから、ハイパーバイザの置き換え自体にともなう遅延ではない。つまり、「ハイパーバイザのキューに1つまたは複数のハイパーバイザコールが既に存在するために、新たにハイパーバイザコールが呼び出されてから応答までに時間がかかる」といった事態は、ハイパーバイザの置き換えが行われるか否かに関わらず生じ得る。したがって、ステップS602の処理による遅延は、ハイパーバイザの置き換え自体にともなう遅延ではない。
なお、以上説明したように非常に短い遅延のみでハイパーバイザの置き換えが可能なもう一つの理由は、抑止命令の発行の前に図9のステップS201〜S204の処理が行われるからである。
例えば、ステップS203のコード展開処理と、ステップS204のデータ展開処理は、ハイパーバイザのファームウェアのサイズに応じたメモリアクセスをともなう。よって、ステップS203とS204の処理の実行には、多少時間がかかる場合がある。
しかし、ステップS203とS204の処理が実行される時点では、まだ抑止命令は発行されていないので、ドメイン330a〜330cはハイパーバイザコールを呼び出すことができる。また、現ハイパーバイザは、マルチスレッドで動作してもよい。つまり、現ハイパーバイザは、ステップS203とS204の処理の実行と並行して、ハイパーバイザコールを受け付け、受け付けたハイパーバイザコールを処理することもできる。
よって、ドメイン330a〜330cは、現ハイパーバイザがステップS203とS204の処理を実行している間ずっとハイパーバイザコールへの応答を待たされるわけではなく、単にキューの状態に応じた待ち時間が生じるだけである。このように、第2実施形態においては、多少時間がかかるおそれのあるステップS203とS204の処理を抑止命令の発行よりも前に現ハイパーバイザが実行することで、ハイパーバイザの置き換えにともなって生じる遅延時間の短縮が図られる。
また、図9〜13に示した処理の順序は一例である。例えば、図9のステップS204のデータ展開処理は、切り換えによって新たに「現ハイパーバイザ」となるハイパーバイザの実行が開始される前に行われればよい。つまり、ステップS204のデータ展開処理は、必ずしも図9のようにステップS202〜S203の後に実行されるのでなくてもよく、ステップS202〜S203の前に実行されてもよい。
なお、図1に示す第1実施形態と第2実施形態とを比較すれば以下のとおりである。
図1において、ステップS1〜S3まではハイパーバイザ1aが現ハイパーバイザである。また、図1のステップS1からステップS2への遷移の契機である置き換え指示の入力は、例えば、上記(c2)における、図9の置き換え処理を開始するための明示的な指示に対応する。
そして、図1のステップS2は図11のコード展開処理に対応し、図1のステップS3は図13のステップS601に対応する。
そして、図1の指定情報3は、第2実施形態での有効マップアドレス411に相当する。つまり、図1のステップS4における指定情報3の書き換えは、図13のステップS603での有効マップアドレス411の書き換えに相当する。
また、図1のステップS4において、情報処理装置は指定情報3の書き換えに応じてハイパーバイザ1bのファームウェアの実行を開始する。ステップS4におけるハイパーバイザ1aからハイパーバイザ1bへの切り換えは、より詳しくは、例えば図13のステップS604〜S607のような処理によって実現されてもよい。
また、図1のステップS5での解除命令の発行は、図13のステップS608に相当する。
続いて、第3実施形態について図14〜15を参照して説明する。なお、第2実施形態との共通点については説明を省略する。
第3実施形態が第2実施形態と違う点は、図3のような物理的に1つのDIMM224の代わりに、物理的に異なる2つののメモリモジュールが使われる点である。例えば、第3実施形態では、図3のシステムボード220aは、単独のDIMM224の代わりに、2つのメモリモジュールと、メモリモジュール切り換え制御回路とを有するように変形される。換言すれば、第3実施形態では、図2においてDIMM140の代わりに2つのメモリモジュールが使われ、現ハイパーバイザのファームウェア141と対象ハイパーバイザのファームウェア142が、物理的に異なる2つのメモリモジュールに格納される。
図14は、ハイパーバイザのファームウェアに関する第3実施形態のメモリ割り当てを説明する図である。図14には、図2の制御部120として動作する図3のCPU221が認識するアドレス空間700と、2つのDIMM710および720が例示されている。
CPU221が認識するアドレス空間700は、アクティブ領域701と非アクティブ領域702を含む。また、メモリモジュール切り換え制御回路により、DIMM710と720のうち一方の物理メモリ空間がアクティブ領域701にマッピングされ、他方の物理メモリ空間が非アクティブ領域702にマッピングされる。
アクティブ領域701は、アドレスD0から始まる領域であり、より具体的には、アドレスD0から始まるデータ領域703と、アドレスD1から始まるコード領域704を含む。また、非アクティブ領域702は、アドレスD2から始まる領域であり、より具体的には、アドレスD2から始まるデータ領域705と、アドレスD3から始まるコード領域706を含む。なお、図14に示すアドレスD0〜D4は、CPU221が認識するアドレス空間700における固定アドレスである。
また、DIMM710は、アドレスE0から始まるデータ領域711と、アドレスE1から始まるコード領域712を含む。そして、DIMM720は、アドレスE0から始まるデータ領域721と、アドレスE1から始まるコード領域722を含む。なお、図14に示すアドレスE0〜E2は、DIMM内の固定的な物理アドレスである。
不図示のメモリモジュール切り換え制御回路は、アクティブ領域701にマッピングするDIMMを切り換える。
以下では説明の便宜上、メモリモジュール切り換え制御回路がDIMM710をアクティブ領域701にマッピングし、DIMM720を非アクティブ領域702にマッピングしている状態を、「第1状態」という。すなわち、第1状態では、CPU221が認識するアドレス空間700におけるデータ領域703とコード領域704の物理的な実体は、DIMM710上のデータ領域711とコード領域712である。そして、第1状態では、CPU221が認識するアドレス空間700におけるデータ領域705とコード領域706の物理的な実体は、DIMM720上のデータ領域721とコード領域722である。
また、以下では説明の便宜上、メモリモジュール切り換え制御回路がDIMM720をアクティブ領域701にマッピングし、DIMM710を非アクティブ領域702にマッピングしている状態を、「第2状態」という。すなわち、第2状態では、CPU221が認識するアドレス空間700におけるデータ領域703とコード領域704の物理的な実体は、DIMM720上のデータ領域721とコード領域722である。そして、第2状態では、CPU221が認識するアドレス空間700におけるデータ領域705とコード領域706の物理的な実体は、DIMM710上のデータ領域711とコード領域712である。
以上の説明から理解されるように、第3実施形態においては、図14に示すデータ領域のサイズは一定であり、図14に示すコード領域のサイズも一定である。つまり、下記の等式(1)と(2)が成り立つ。
D1−D0=D3−D2=E1−E0 (1)
D2−D1=D4−D3=E2−E1 (2)
また、図14に示す各データ領域の詳細は、図6と同様である。そして、図14に示す各コード領域の詳細は、図7と類似だが、多少異なる点がある。相違点については図15とあわせて後述する。
ところで、不図示のメモリモジュール切り換え制御回路は、切り換え制御信号がアサートされるたびに、第1状態と第2状態を切り換える。
第1状態から第2状態への切り換えにより、物理的にはDIMM710にファームウェアが格納されているハイパーバイザが、「現ハイパーバイザ」から「直近の過去に使用されていたハイパーバイザ」に変化する。また、第1状態から第2状態への切り換えにより、物理的にはDIMM720にファームウェアが格納されているハイパーバイザが、「対象ハイパーバイザ」から「現ハイパーバイザ」に変化する。
逆に、第2状態から第1状態への切り換えにより、物理的にはDIMM710にファームウェアが格納されているハイパーバイザが、「対象ハイパーバイザ」から「現ハイパーバイザ」に変化する。また、第2状態から第1状態への切り換えにより、物理的にはDIMM720にファームウェアが格納されているハイパーバイザが、「現ハイパーバイザ」から「直近の過去に使用されていたハイパーバイザ」に変化する。
ところで、CPU221は、第1状態と第2状態のどちらにおいても、アクティブ領域701にファームウェアが格納されている方のハイパーバイザを「現ハイパーバイザ」と認識する。
また、CPU221は、DIMM710と720のどちらがアクティブ領域701にマッピングされているかを意識せずに、アドレス空間700内のアドレスを指定してメモリアクセス(具体的にはロード命令やストア命令など)を実行する。つまり、CPU221がアドレスバスに出力するアドレスは、アドレス空間700におけるアドレスである。メモリモジュール切り換え制御回路は、現在の状態が第1状態であるか第2状態であるかに応じて、CPU221から出力されたアドレスをDIMM710または720のアドレスに変換し、DIMM710または720へのメモリアクセスを実現する。
また、別の観点からアクティブ領域701と現ハイパーバイザについて説明すれば、次のとおりである。ハイパーバイザのための命令フェッチアドレスは、アドレス空間700におけるアクティブ領域701のコード領域704内のアドレスに限られる。つまり、非アクティブ領域702のコード領域706内のアドレスは、ファームウェアのコードをコピーするためのストア命令の引数アドレスとして指定されることはあっても、命令フェッチアドレスとして指定されることはない。
ところで、CPU221は、上記のごとく、メモリアクセスの際には、現在の状態が第1状態であるか第2状態であるかを意識する必要がなく、単にアドレス空間700におけるアドレスを指定すればよい。一方で、CPU221は、第1状態と第2状態の間の切り換えをメモリモジュール切り換え制御回路に指示することもできる。
具体的には、CPU221は、切り換え制御信号をメモリモジュール切り換え制御回路に出力することにより、メモリモジュール切り換え制御回路に状態の切り換えを命令する。メモリモジュール切り換え制御回路は、切り換え制御信号を受け取ると、もし現在の状態が第1状態であれば、第1状態から第2状態への切り換えを実行し、もし現在の状態が第2状態であれば、第2状態から第1状態への切り換えを実行する。
以上の説明から明らかなとおり、第3実施形態において図1の指定情報3に対応する情報は、メモリモジュール切り換え制御回路において管理される「現在の状態は第1状態か第2状態か」を示す情報である。メモリモジュール切り換え制御回路の回路構成にもよるが、指定情報3は、具体的にはメモリモジュール切り換え制御回路内の、レジスタまたはフリップフロップなどの記憶装置に記憶されていてもよい。あるいは、「メモリモジュール切り換え制御回路内の特定のトランジスタがオンかオフか」といった回路状態により、指定情報3が表されてもよい。
続いて、第3実施形態における置き換え処理の詳細について説明する。第3実施形態における置き換え処理は、第2実施形態における図9の置き換え処理と類似なので、以下では相違点を中心に説明する。
第2実施形態では、制御部120を実現するCPU221により認識されるアクティブ領域の先頭アドレスは、可変であり、具体的には図5のアドレスA1とA3の間で切り換わる。しかし、第3実施形態では、CPU221が認識するアクティブ領域701の先頭アドレスは、アドレスD0に固定されている。
したがって、第3実施形態では、図5のような有効マップアドレス411は省略可能である。有効マップアドレス411がなくても、CPU221がハイパーバイザのファームウェアを実行することで実現される制御部120内の各部は、アクティブ領域701と非アクティブ領域702それぞれの固定的な先頭アドレスD0とD2を認識することができる。
そのため、第3実施形態では、有効マップアドレス411の参照が省略され、有効マップアドレス411の書き換えも省略される。しかし、その他の点では、図9〜12の処理は第3実施形態においても同様である。
ただし、図9のステップS205に相当する図13の切り換え処理は、第3実施形態では図15のように変形される。以下、図15のフローチャートを参照して、第3実施形態における切り換え処理について説明する。
ステップS701〜S702は、図13のステップS601〜S602と類似である。
具体的には、ステップS701で切り換え部124は、現ハイパーバイザからドメイン330a〜330cに対して、ハイパーバイザへのアクセスを一時保留するように指示する。なお、ステップS701の実行時における切り換え部124は、アクティブ領域701内のコード領域704中のアクセス保留処理のコード607をCPU221が実行することにより、実現される。
そして、ステップS702で切り換え部124は、ドメイン330a〜330cから受け付け済みの処理がもしあれば、受け付け済みの当該処理を実行して完了する。なお、ステップS702の実行時における切り換え部124は、アクティブ領域701内のコード領域704中の上記(g1)と(g2)のコードをCPU221が実行することにより、実現される。
ところで、上述のとおり第3実施形態では、アクティブ領域701の先頭アドレスD0は固定的である。したがって、第3実施形態においては、ハイパーバイザの切り換えが生じるときにも、図13のステップS603〜S604のような処理は不要である。よって、ステップS701〜S702の後、処理はステップS703に移行する。
そして、ステップS703において切り換え部124は、アクティブ領域701内のデータ領域703中の領域使用中フラグ505の値を、「非使用中」を示す値(例えば、図15の例では0)に設定する。つまり、切り換え部124は、アクティブ領域701にマッピングされた状態から非アクティブ領域702にマッピングされた状態へと切り換える対象のDIMMにおける領域使用中フラグ505の値を、切り換えに合わせて書き換える。
なお、ステップS703での書き換えは、具体的には、アドレス空間700におけるアドレス(D0+B4)を指定したストア命令を、切り換え部124が実行することで、実現される。指定されたアドレス(D0+B4)は、メモリモジュール切り換え制御回路により、第1状態ならばDIMM710の物理アドレス(E0+B4)に変換され、第2状態ならばDIMM720の物理アドレス(E0+B4)に変換される。
また、ステップS703の実行時における切り換え部124は、アクティブ領域701内のコード領域704中のファームウェア切り換え処理のコード608をCPU221が実行することにより、実現される。
そして、次のステップS704で切り換え部124は、非アクティブ領域702内のデータ領域705中の領域使用中フラグ505の値を、「使用中」を示す値(例えば、図15の例では1)に設定する。つまり、切り換え部124は、非アクティブ領域702にマッピングされた状態からアクティブ領域701にマッピングされた状態へと切り換える対象のDIMMにおける領域使用中フラグ505の値を、切り換えに合わせて書き換える。
なお、ステップS704における書き換えは、具体的には、アドレス空間700におけるアドレス(D2+B4)を指定したストア命令を、切り換え部124が実行することで、実現される。指定されたアドレス(D2+B4)は、メモリモジュール切り換え制御回路により、第1状態ならばDIMM720の物理アドレス(E0+B4)に変換され、第2状態ならばDIMM710の物理アドレス(E0+B4)に変換される。
また、ステップS704の実行時における切り換え部124も、アクティブ領域701内のコード領域704中のファームウェア切り換え処理のコード608をCPU221が実行することにより、実現される。
そして、次のステップS705で切り換え部124は、切り換え制御信号を出力することにより、DIMMの切り換えをメモリモジュール切り換え制御回路に指示する。このステップS705と次のステップS706に関連して、第3実施形態では、コード領域の詳細が図7と相違していてもよい。以下に、第3実施形態におけるコード領域の詳細について例示する。
現ハイパーバイザのファームウェアをCPU221が実行するときの命令フェッチアドレスは、上記のとおり、アドレス空間700におけるアクティブ領域701のコード領域704中のアドレスである。
そして、現在の状態が第1状態であれば、命令は、物理的にはDIMM710のコード領域712からフェッチされる。逆に、現在の状態が第2状態であれば、命令は、物理的にはDIMM720のコード領域722からフェッチされる。なお、アドレス空間700内のアドレスをDIMM710または720の物理アドレスに変換する処理は、メモリモジュール切り換え制御回路により行われる。
一方で、メモリモジュール切り換え制御回路が第1状態と第2状態の間の切り換えを実行すると、アクティブ領域701のコード領域704にマッピングされる物理的なメモリ領域が、コード領域712からコード領域722へ、またはその逆に、切り換わる。したがって、アドレス空間700内のアドレスにより指定された命令フェッチアドレスに対応する物理アドレスも、別のDIMMの物理アドレスに切り換わる。
そこで、第3実施形態では、コード領域の詳細が例えば以下のように変形されてもよい。図7では、コード領域600の先頭に保留解除処理のコード601があり、ファームウェア切り換え処理のコード608は相対アドレスC7から始まっている。しかし、第3実施形態では、ファームウェア切り換え処理のコード608のうちの一部(具体的にはステップS705とS706に関する命令)が、コード領域の先頭にあってもよい。
なおここで、「コード領域の先頭」は、コード領域内での固定的な相対アドレスの具体例の一つである。ステップS705とS706に関する命令は、コード領域内での所定の位置にあればよく、必ずしも先頭になくてもよい。
例えば、ファームウェア切り換え処理のコード608の一部は、図7と同様に、コード領域の先頭以外の箇所にあってもよいが、ステップS704のためのストア命令の直後に、コード領域の先頭への無条件ジャンプ命令があってもよい。ここで、現ハイパーバイザのファームウェアのコード領域の先頭アドレスは、図14の固定アドレスD1であるから、ジャンプ先は固定アドレスD1である。
そして、コード領域の先頭に、ステップS705とS706に関する命令があってもよい。つまり、メモリモジュール切り換え制御回路に切り換え制御信号を出力するための命令と、次のステップS706のための命令が、コード領域の先頭にあってもよく、それらの命令に図7の保留解除処理のコード601が続いていてもよい。
以上説明したような命令の並び順によれば、固定アドレスD1を利用して、現ハイパーバイザのファームウェアと対象ハイパーバイザのファームウェアの間で、命令フェッチアドレスが、位置合わせされる。したがって、以下のようにしてハイパーバイザの切り換えが実現されて、処理はステップS705からステップS706へと移行する。
ここで、説明の便宜上、ステップS705で第1状態から第2状態への切り換えが生じるとする。つまり、ステップS705での切り換え部124からの指示に応じて、メモリモジュール切り換え制御回路が、アクティブ領域701にマッピングするDIMMをDIMM710からDIMM720に切り換えるとする。
また、ステップS705の実行後、CPU221内のプログラムカウンタは通常どおりインクリメントされる。よって、次の命令フェッチアドレスは、ステップS705のための命令の直後の、ステップS706のための命令のアドレスである。ただし、命令フェッチアドレスに対応する物理アドレスは、今までDIMM710のコード領域712内のアドレスだったのが、ステップS705での切り換えを境にして、DIMM720のコード領域722内のアドレスに変わる。
ここで、どのバージョンのハイパーバイザのファームウェアにおいても、上記のような順で命令が並んでいる(すなわち、コード領域の先頭にステップS705とS706のための命令がある)とする。つまり、どのバージョンのハイパーバイザのファームウェアにおいても、ある固定アドレスにステップS705とS706のための命令があるとする。
すると、ステップS705の実行直後にプログラムカウンタが指すアドレスに対応する物理アドレスは、DIMM720のコード領域722内の、ステップS706のための命令のアドレスである。
つまり、ステップS705の直後には、新たに「現ハイパーバイザ」となったハイパーバイザのファームウェア中の、ステップS706のための命令が、フェッチされる。その結果、ステップS706では、新たにアクティブ領域701にマッピングされるようになったDIMM720に格納されたファームウェア中の、ステップS706のための命令をCPU221が実行することで、切り換え部124が実現される。換言すれば、ステップS706の実行時における切り換え部124は、新たに「現ハイパーバイザ」となったハイパーバイザにより実現される。
なお、上記では説明の便宜上、ステップS705で第1状態から第2状態への切り換えが生じる場合を例示したが、もちろん、第2状態から第1状態への切り換えが生じる場合も同様に、処理は適切にステップS706へと移行する。
そして、ステップS706で切り換え部124は、CPU221内のプログラムカウンタの値を書き換える。具体的には、ステップS706で切り換え部124は、下記(j1)と(j2)の和をプログラムカウンタに設定する。
(j1)アクティブ領域701の先頭アドレスD0
(j2)アクティブ領域701のコード領域704中の保留解除処理のコード601の先頭の、アドレスD0を基準にした相対アドレス(すなわち、アクティブ領域701のデータ領域703中のアドレスマップ501により示される、保留解除処理のコード601の相対アドレス)
ステップS706の処理は、より具体的には、ジャンプ命令の実行を含む。よって、ステップS706で設定されたプログラムカウンタにしたがって、CPU221は、ジャンプ先の保留解除処理のコード601を次に実行する。換言すれば、ステップS706の次のステップS707において、CPU221は、ステップS705の切り換えにより新たに「現ハイパーバイザ」となったハイパーバイザのファームウェアにおける、保留解除処理のコード601の実行を開始する。
その結果、ステップS707で切り換え部124は、新たに現ハイパーバイザとなったハイパーバイザから、ドメイン330a〜330cに対して、ハイパーバイザへのアクセスの保留を解除するように指示する。
また、次のステップS708で切り換え部124は、ハイパーバイザのファームウェアの置き換えが完了したことを管理部110に通知する。
なお、ステップS707〜S708の実行時の切り換え部124は、ステップS705の切り換えで新たにアクティブ領域701にマッピングされるようになったDIMMに格納されている保留解除処理のコード601をCPU221が実行することで、実現される。
また、第3実施形態においても、図7と同様に、保留解除処理のコード601の直後に待ち受け処理のコード602がある。したがって、次のステップS709では、通常のプログラムカウンタのインクリメントにより、CPU221は待ち受け処理のコード602の実行を開始することになる。すなわち、ハイパーバイザのファームウェアの置き換えが終了すると、新たに現ハイパーバイザとなったハイパーバイザは、自動的に待ち受け処理を開始する。
なお、以上のステップS707〜S709の詳細は、図13のステップS608〜S610と類似である。
以上説明した第3実施形態には、例えば、第2実施形態と同様の次のような効果がある。
第1に、CPU221の物理的な再起動をともなわずに、かつ、ドメイン330a〜330cに対して透過的に、ハイパーバイザを置き換えることが可能である。したがって、情報処理装置100が提供するサービスを停止させずに、タイムリにハイパーバイザを置き換えることが可能である。
第2に、ハイパーバイザの置き換え自体に起因する遅延はごくわずかである。
第3に、ダウングレードのための置き換えも、アップグレードのための置き換えと同様に行うことが可能である。したがって、仮に何らかの不具合に起因して復旧作業のためのダウングレードが行われるとしても、情報処理装置100が提供するサービスを復旧作業のために停止させる必要もなく、かつ、速やかな復旧が可能である。
ところで、本発明は上記実施形態に限られるものではない。上記の説明においてもいくつかの変形について説明したが、上記実施形態は、さらに例えば下記の観点から様々に変形することもできる。上記の各実施形態および下記の各種変形は、相互に矛盾しない限り、任意に組み合わせることが可能である。
以前使われていたバージョンのハイパーバイザへ戻すために図9の置き換え処理が行われる場合、実施形態によっては、一部のステップが省略されてもよい。以下ではそのような省略の具体例について説明する。
なお、以前使われていたバージョンのハイパーバイザへ戻す処理は、例えば下記(k1)と(k2)のように、ダウングレードの場合もあるし、アップグレードの場合もある。
(k1)ハイパーバイザをバージョン1からバージョン2へアップグレードした後で、バージョン2からバージョン1に戻す処理(すなわちダウングレード)
(k2)ハイパーバイザをバージョン3からバージョン2へダウングレードした後で、バージョン2からバージョン3に戻す処理(すなわちアップグレード)
上記のとおり、置き換え処理の開始の指示は、入力装置230からの入力であってもよい。以下では説明の便宜上、図9の置き換え処理または一部のステップが省略された置き換え処理の開始の指示を、「開始指示」という。
開始指示は、図9の置き換え処理の開始の指示(以下では便宜上「置き換え指示」という)の1種類のみでもよい。あるいは、開始指示には、置き換え指示と、一部のステップが省略された置き換え処理の開始の指示(以下では便宜上「復旧指示」という)の2種類があってもよい。
開始指示には置き換え指示しかない場合、置き換え指示の入力は、例えば、特定の1つのボタンの押下、または特定の1つのコマンドの入力などである。そして、管理部110と制御部120は、置き換え指示の入力を契機として、図9の置き換え処理を上述のとおり実行する。図9の置き換え処理は、現ハイパーバイザおよび対象ハイパーバイザのバージョンによらずに適用可能な汎用的な処理であるから、開始指示は置き換え指示の1種類のみであってもよい。
しかし、開始指示には、置き換え指示と復旧指示の2種類があってもよい。この場合、入力装置230からの入力がいずれの種類であるかに応じて、管理部110と制御部120は、図9の置き換え処理、または、一部のステップが省略された置き換え処理を実行する。
復旧指示は、具体的には、以前使われていたバージョンのハイパーバイザへ戻すために、一部のステップが省略された置き換え処理を実行するよう情報処理装置100に指示するものである。換言すれば、復旧指示は、現ハイパーバイザから、DIMM224内またはアドレス空間700内の非アクティブ領域にファームウェアが残っているハイパーバイザへの、置き換えの指示である。
管理部110は、例えば下記の(l1)、(l2)、または(l3)に応じて、開始指示の種類を判別してもよい。
(l1)特定の2つのボタンのうちどちらが押下されたか
(l2)特定の2つのコマンドのうちどちらが入力されたか
(l3)1つの特定のコマンドでどのように引数が指定されたか
そして、入力された開始指示が置き換え指示であれば、管理部110は図9の置き換え処理を開始する。逆に、入力された開始指示が復旧指示であれば、管理部110は復旧指示が入力されたことを制御部120内の前処理部121に通知する。
復旧指示が入力された場合の対象ハイパーバイザは、DIMM224内またはアドレス空間700内の非アクティブ領域にファームウェアが格納されているハイパーバイザのことである。よって、復旧指示が入力されたという通知を受け取った場合、前処理部121は、図10の前処理におけるステップS301〜S302、S304、S306、S308を省略する。
すなわち、前処理部121は、復旧指示が入力されたという通知を管理部110から受け取ると、ステップS303の判断を実行する。そして、動的ファームウェア置き換え機能が無効であれば、前処理部121は、ステップS305で処理タイプを0に設定し、前処理を終了する。逆に、動的ファームウェア置き換え機能が有効であれば、前処理部121は、ステップS307で処理タイプを1に設定し、前処理を終了する。
以上のように、復旧指示が入力された場合は、処理タイプは0または1なので、図9のステップS203(すなわち図11のコード展開処理)は実行されない。また、処理タイプが1ならばステップS204に相当する図12のデータ展開処理と、ステップS205に相当する図13または図15の切り換え処理が実行されるが、データ展開処理におけるステップS501〜S502は省略される。
以上のように、非アクティブ領域にファームウェアが残っているハイパーバイザへ戻す処理では、いくつかのステップが省略可能である。そこで、省略可能なステップがあることを制御部120に明示的に通知するために、上記のように復旧指示が使われてもよい。
なお、非アクティブ領域にファームウェアが残っているハイパーバイザへ戻す処理は、以上例示したような明示的な復旧指示と、一部のステップが省略された置き換え処理により実現されてもよいが、図9の置き換え処理によっても同等に実現することができる。つまり、図2の格納部130に格納された対象ハイパーバイザのファームウェアが、非アクティブ領域に残っているハイパーバイザのファームウェアと同じ場合、置き換え指示は、暗黙的な復旧指示であるとも見なせる。
また、以上説明したような明示的または暗黙的な復旧指示は、図1の第1実施形態にももちろん適用可能である。例えば、図1のステップS1〜S5の実行後に、図1に関して説明した情報処理装置に対して、明示的または暗黙的な復旧指示が入力されてもよい。つまり、当該復旧指示は、ハイパーバイザ1bからハイパーバイザ1aへの復旧の指示である。
すると、復旧指示の入力を契機として、情報処理装置は、今度はハイパーバイザ1bから、ハイパーバイザコールの呼び出し元であるOS2aと2bに新たな抑止命令を発行する。そして、情報処理装置は、指定情報3を、ハイパーバイザ1bのファームウェアが格納されているメモリ領域を指定する値から、ハイパーバイザ1aのファームウェアが格納されているメモリ領域を指定する値へと書き換える。
さらに、情報処理装置は、指定情報3の書き換えにしたがって、再度ハイパーバイザ1aの実行を開始する。また、情報処理装置は、ハイパーバイザ1aから、上記の新たな抑止命令を解除する新たな解除命令をOS2aと2bに発行する。
以上のようにして、情報処理装置は、復旧指示の入力を契機として、ステップS3〜S5とはハイパーバイザ1aと1bが逆になった処理を行うことで、ハイパーバイザ1bからハイパーバイザ1aへの復旧を行うことができる。
また、図1に関して説明した情報処理装置は、上記のとおりアドレス変換回路を有してもよく、指定情報3がアドレス変換回路に記憶されてもよい。同様に、第2実施形態の情報処理装置100も、アドレス変換回路を有するように変形されてもよい。
例えば、情報処理装置100は、CPU221とDIMM224の間にアドレス変換回路を有してもよい。アドレス変換回路は、CPU221がアドレスバスに出力した同じアドレスを、場合に応じて異なる物理アドレスに変換する。具体的には、例えば次のようなアドレス変換が行われてもよい。
例えば、CPU221は図14と同様にアドレス空間700を認識してもよい。そして、図14における2つのDIMM710と720の代わりに、1つのDIMM224内の2つの物理メモリ領域が使われてもよい。つまり、アドレス変換回路は、DIMM224内の2つの物理メモリ領域の一方をアクティブ領域701にマッピングし、他方を非アクティブ領域702にマッピングしてもよい。
つまり、アドレス変換回路は、ハイパーバイザの切り換えにともなって、DIMM224内の2つの物理メモリ領域のそれぞれに対応する、アドレス変換のためのオフセット値を変更する。アドレス変換回路は、オフセット値を保持するレジスタを有してもよい。オフセット値は指定情報3の具体例である。
以上のようなアドレス変換回路が使われる実施形態における置き換え処理では、第3実施形態におけるメモリモジュール切り換え制御回路によるDIMMの切り換えが、アドレス変換回路による2つのオフセット値の書き換えに変更される。
なお、ハイパーバイザのファームウェアは、DIMM224に格納されるまでに一時的に他の記憶装置に格納されてもよいし、ネットワーク上を送信されてもよい。
例えば、ハイパーバイザのファームウェアは、上記のように、サービスプロセッサ210のNAND型フラッシュメモリ213からEPROM222へコピーされ、EPROM222からDIMM224の非アクティブ領域へとコピーされてもよい。
あるいは、DIMM224が上位領域420と下位領域430のほかに、一時的にハイパーバイザのファームウェアを格納するための所定の領域(便宜上「一時格納領域」という)をさらに含んでいてもよい。そして、EPROM222の代わりに一時格納領域が使われてもよい。
あるいは、ハイパーバイザのファームウェアは、記憶媒体290に格納されて提供され、駆動装置270により記憶媒体290から読み取られ、DIMM224にコピーされてもよい。また、ハイパーバイザのファームウェアは、ネットワーク接続装置260を介してネットワークからダウンロードされ、DIMM224にコピーされてもよい。
なお、情報処理装置100がハイパーバイザのファームウェアを記憶媒体290またはネットワークから取得する場合、ハイパーバイザのファームウェアは、一旦記憶装置250にコピーされて記憶装置250からDIMM224にコピーされてもよい。
また、図2の管理部110は、図3のサービスプロセッサ210のCPU211の代わりにシステムボード220a上のCPU221によって実現されてもよい。
また、図5と図14ではデータ領域がコード領域よりも前にあるが、データ領域とコード領域の並び順は逆でもよい。実施形態によっては、データ領域とコード領域が連続していなくてもよい。また、データ領域が、静的なデータ用の第1の領域と動的なデータ用の第2の領域に分かれていてもよく、第1の領域と第2の領域は連続していなくてもよい。
さらに、データ領域とコード領域は、パディングを含み得る固定長の領域であってもよいし、可変長の領域であってもよい。データ領域とコード領域の一方または双方が可変長の場合、例えば、データ領域内のアドレスマップ501が、データ領域とコード領域の長さを示す情報を含んでいてもよい。
最後に、上記の種々の実施形態に関して、さらに下記の付記を開示する。
(付記1)
情報処理装置が実行するハイパーバイザ置き換え方法であって、
第1のメモリ領域に格納されている第1のハイパーバイザのファームウェアを前記情報処理装置が実行中のとき、前記第1のメモリ領域とは異なる第2のメモリ領域に、第2のハイパーバイザのファームウェアを格納し、
前記第1のハイパーバイザから、ハイパーバイザコールを抑止するようハイパーバイザコールの呼び出し元に命令する抑止命令を発行し、
前記情報処理装置が実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報を、前記第1のメモリ領域を指定する第1の値から、前記第2のメモリ領域を指定する第2の値へと書き換え、
前記指定情報の書き換えにしたがって、前記第2のハイパーバイザのファームウェアの実行を開始し、
前記第2のハイパーバイザから、前記抑止命令を解除する解除命令を前記呼び出し元に発行する
ことを特徴とするハイパーバイザ置き換え方法。
(付記2)
前記第2のハイパーバイザのファームウェアの実行を開始するよりも前に、前記第1のメモリ領域に格納されており前記第1のハイパーバイザが使用する特定の情報を、前記第2のメモリ領域に格納するデータ展開処理を実行する
ことをさらに含むことを特徴とする付記1に記載のハイパーバイザ置き換え方法。
(付記3)
前記特定の情報の第1のフォーマットと、前記第2のハイパーバイザが使用する情報の第2のフォーマットが異なる場合に、前記データ展開処理は、前記特定の情報を前記第1のフォーマットから前記第2のフォーマットに変換するフォーマット変換処理を含む
ことを特徴とする付記2に記載のハイパーバイザ置き換え方法。
(付記4)
前記第2のハイパーバイザのバージョンは、前記第1のハイパーバイザのバージョンよりも新しく、
前記第2のハイパーバイザの前記ファームウェアは、前記第1のフォーマットから前記第2のフォーマットへの変換のための命令を含み、
前記情報処理装置は、前記第1のハイパーバイザから、前記第2のメモリ領域の中の前記命令を呼び出すことにより、前記フォーマット変換処理を実行する
ことを特徴とする付記3に記載のハイパーバイザ置き換え方法。
(付記5)
前記第1のハイパーバイザのバージョンは、前記第2のハイパーバイザのバージョンよりも新しく、
前記第1のハイパーバイザの前記ファームウェアは、前記フォーマット変換処理のための命令を含み、
前記情報処理装置は、前記命令にしたがって前記フォーマット変換処理を実行する
ことを特徴とする付記3に記載のハイパーバイザ置き換え方法。
(付記6)
前記第2のハイパーバイザから前記第1のハイパーバイザに復旧するよう指示する復旧指示を受け付け、
前記第2のハイパーバイザから、ハイパーバイザコールを抑止するよう前記呼び出し元に命令する新たな抑止命令を発行し、
前記指定情報を前記第2の値から前記第1の値へと書き換え、
前記指定情報の書き換えにしたがって、前記第1のハイパーバイザの前記ファームウェアの実行を開始し、
前記第1のハイパーバイザから、前記新たな抑止命令を解除する新たな解除命令を前記呼び出し元に発行する
ことをさらに含むことを特徴とする付記1から5のいずれか1項に記載のハイパーバイザ置き換え方法。
(付記7)
情報処理装置であって、
1つ以上のメモリモジュールと、
前記1つ以上のメモリモジュール内のいずれか1つのメモリ領域を指定する指定情報によって指定されるメモリ領域に格納されたハイパーバイザのファームウェアを実行する制御部を備え、
前記制御部は、
前記指定情報が、第1のハイパーバイザのファームウェアが格納されている第1のメモリ領域を指定しているときに、前記第1のメモリ領域とは異なる第2のメモリ領域に、第2のハイパーバイザのファームウェアを格納し、
ハイパーバイザコールを抑止するようハイパーバイザコールの呼び出し元に命令する抑止命令を発行し、
前記指定情報を、前記第1のメモリ領域を指定する第1の値から、前記第2のメモリ領域を指定する第2の値へと書き換え、
前記第2のハイパーバイザの前記ファームウェアの実行を開始し、
前記第2のハイパーバイザから、前記抑止命令を解除する解除命令を前記呼び出し元に発行する
ことを特徴とする情報処理装置。
(付記8)
前記制御部は、前記第2のハイパーバイザのファームウェアの実行を開始するよりも前に、さらに、前記第1のメモリ領域に格納されており前記第1のハイパーバイザが使用する特定の情報を、前記第2のメモリ領域に格納する
ことを特徴とする付記7に記載の情報処理装置。
(付記9)
前記特定の情報の第1のフォーマットと、前記第2のハイパーバイザが使用する情報の第2のフォーマットが異なる場合に、前記制御部は、前記特定の情報を前記第1のフォーマットから前記第2のフォーマットに変換してから、フォーマット変換後の前記特定の情報を前記第2のメモリ領域に格納する
ことを特徴とする付記8に記載の情報処理装置。
(付記10)
予め前記第2のハイパーバイザの前記ファームウェアを格納するファームウェア格納部と、
前記第1のハイパーバイザから前記第2のハイパーバイザへの置き換えを指示する置き換え指示、または前記第2のハイパーバイザから前記第1のハイパーバイザへの復旧を指示する復旧指示を受け付け、前記制御部に、前記置き換え指示または前記復旧指示を受け付けたことを通知する管理部
をさらに備え、
前記指定情報が前記第1の値であり、かつ、前記管理部が前記置き換え指示を受け付けた場合、前記制御部は、
前記ファームウェア格納部から前記第2のハイパーバイザの前記ファームウェアを読み出し、
読み出した前記第2のハイパーバイザの前記ファームウェアを、前記第2のメモリ領域に格納し、
前記指定情報が前記第2の値であり、かつ、前記管理部が前記復旧指示を受け付けた場合、前記制御部は、
前記第2のハイパーバイザから、ハイパーバイザコールを抑止するよう前記呼び出し元に命令する新たな抑止命令を発行し、
前記指定情報を前記第2の値から前記第1の値へと書き換え、
前記指定情報の書き換えにしたがって、前記第1のハイパーバイザの前記ファームウェアの実行を開始し、
前記第1のハイパーバイザから、前記新たな抑止命令を解除する新たな解除命令を前記呼び出し元に発行する
ことを特徴とする付記7から9のいずれか1項に記載の情報処理装置。
(付記11)
前記ファームウェア格納部は、
前記1つ以上のメモリモジュール内の第3のメモリ領域であるか、または、
前記1つ以上のメモリモジュールとは異なる他の記憶装置である
ことを特徴とする付記10に記載の情報処理装置。
(付記12)
前記1つ以上のメモリモジュールのいずれかが所定のアドレスに前記指定情報を記憶しているか、
前記1つ以上のメモリモジュールの数が1であり、論理アドレスを当該1つのメモリモジュールの物理アドレスに変換するアドレス変換回路を前記情報処理装置がさらに備え、前記アドレス変換回路が前記指定情報を記憶しているか、
前記1つ以上のメモリモジュールの数が複数であり、前記複数のメモリモジュール間の切り換えを制御するメモリモジュール切り換え制御回路を前記情報処理装置がさらに備え、前記メモリモジュール切り換え制御回路が前記指定情報を記憶しているか、または、
前記情報処理装置が所定のレジスタをさらに備え、前記所定のレジスタが前記指定情報を記憶している
ことを特徴とする付記7から11のいずれか1項に記載の情報処理装置。
(付記13)
第1のハイパーバイザのファームウェアであって、コンピュータに、
ハイパーバイザコールの抑止を解除するようハイパーバイザコールの呼び出し元に命令する解除命令を発行し、
前記第1のハイパーバイザから第2のハイパーバイザへの置き換えを指示する置き換え指示に応じて、
前記第1のハイパーバイザの前記ファームウェアが格納されている第1のメモリ領域とは異なる第2のメモリ領域に、前記第2のハイパーバイザのファームウェアを格納し、
ハイパーバイザコールを抑止するよう前記呼び出し元に命令する抑止命令を発行し、
前記コンピュータが実行するハイパーバイザのファームウェアが格納されているメモリ領域を指定する指定情報を、前記第1のメモリ領域を指定する第1の値から、前記第2のメモリ領域を指定する第2の値へと書き換え、
前記第2のメモリ領域に格納されている前記第2のハイパーバイザの前記ファームウェア内の命令を、前記コンピュータが次に実行する命令として指定することで、前記第1のハイパーバイザを前記第2のハイパーバイザに切り換える、
ことを含む処理を実行させることを特徴とするファームウェア。
(付記14)
前記第1のハイパーバイザを前記第2のハイパーバイザに切り換えるよりも前に、前記第1のメモリ領域に格納されており前記第1のハイパーバイザが使用する特定の情報を、前記第2のメモリ領域に格納するデータ展開処理をさらに前記コンピュータに実行させる
ことを特徴とする付記13に記載のファームウェア。
(付記15)
前記データ展開処理は、
前記特定の情報の第1のフォーマットのバージョンと、前記第2のハイパーバイザが使用する情報の第2のフォーマットのバージョンを比較し、
前記第1のフォーマットの前記バージョンの方が前記第2のフォーマットの前記バージョンよりも新しい場合、前記第1のハイパーバイザの前記ファームウェアにしたがって、前記特定の情報を前記第1のフォーマットから前記第2のフォーマットへと変換し、
前記第2のフォーマットの前記バージョンの方が前記第1のフォーマットの前記バージョンよりも新しい場合、前記第2のメモリ領域に格納されている前記第2のハイパーバイザの前記ファームウェアに含まれる、前記第1のフォーマットから前記第2のフォーマットへの変換のための命令を呼び出すことにより、前記特定の情報を前記第1のフォーマットから前記第2のフォーマットへと変換する
ことを含むことを特徴とする付記14に記載のファームウェア。