(57)【特許請求の範囲】
【請求項１】
ホストＯＳと、
前記ホストＯＳ上で動作するゲストＯＳと
を具備し、
前記ゲストＯＳをホストに、前記ホストＯＳをゲストにそれぞれ切り替えるとき、
前記ゲストＯＳが、前記ゲストＯＳのゲストメモリ管理情報と前記ホストＯＳのホストメモリ管理情報とに基づいて、前記ホストＯＳを切り替えた後の新規ゲストＯＳのメモリ管理情報となる新規ゲストメモリ管理情報と、前記ゲストＯＳを切り替えた後の新規ホストＯＳのメモリ管理情報となる新規ホストメモリ管理情報とを生成し、
前記ゲストＯＳが、前記ゲストメモリ管理情報を前記新規ホストメモリ管理情報に置き換え、
前記ホストＯＳが、前記ホストメモリ管理情報を前記新規ゲストメモリ管理情報に置き換え、
前記ホストＯＳ及び前記ゲストＯＳが、実行命令を切り替え、
前記ゲストＯＳが前記新規ゲストメモリ管理情報と前記新規ホストメモリ管理情報とを生成するとき、
前記ホストＯＳが、前記ホストメモリ管理情報をメモリの退避領域に退避し、
前記ゲストＯＳが、前記ゲストメモリ管理情報と前記退避領域の前記ホストメモリ管理情報とに基づいて、前記新規ゲストメモリ管理情報を生成して前記退避領域に格納し、前記新規ホストメモリ管理情報を生成し、
前記ホストＯＳが前記ホストメモリ管理情報を前記新規ゲストメモリ管理情報に置き換えるとき、
前記ホストＯＳが、前記ホストメモリ管理情報を前記退避領域の前記新規ゲストメモリ管理情報に置き換え、
その後に、前記ホストＯＳ及び前記ゲストＯＳが、実行命令を切り替える
ＯＳ切り替えシステム。
【請求項２】
請求項１に記載のＯＳ切り替えシステムにおいて、
前記ゲストＯＳが、前記ゲストＯＳのゲストデバイス管理情報と前記ホストＯＳのホストデバイス管理情報とに基づいて、前記新規ゲストＯＳのデバイス管理情報となる新規ゲストデバイス管理情報と、前記新規ホストＯＳのデバイス管理情報となる新規ホストデバイス管理情報を生成し、
前記ゲストＯＳが、前記ゲストデバイス管理情報を前記新規ホストデバイス管理情報に置き換え、
前記ホストＯＳが、前記ホストデバイス管理情報を前記新規ゲストデバイス管理情報に置き換える
ＯＳ切り替えシステム。
【請求項３】
請求項１に記載のＯＳ切り替えシステムにおいて、
前記ゲストＯＳは、
前記ホストメモリ管理情報に含まれるホストページ情報テーブルとホスト論理アドレステーブルとに基づいて、前記新規ゲストメモリ管理情報に含まれる新規ゲストページ情報テーブル、新規ゲスト物理アドレス変換表及び新規ゲスト論理アドレステーブルを生成するメモリ情報変換部を備え、
前記ホストページ情報テーブルは、物理アドレスと当該物理アドレスの使用状況との対応を示し、
前記ホスト論理アドレステーブルは、論理アドレスと前記物理アドレスとの対応を示し、
前記新規ゲストページ情報テーブルは、前記ホストページ情報テーブルにおける前記ホストＯＳの使用可能な前記物理アドレスと当該物理アドレスの使用状況との対応を示し、
前記新規ゲスト物理アドレス変換表は、前記新規ゲストページ情報テーブルにおける前記物理アドレスと仮想物理アドレスとの対応を示し、
前記新規ゲスト論理アドレステーブルは、前記ホスト論理アドレステーブルにおける前記論理アドレスと前記新規ゲスト物理アドレス変換表における前記仮想物理アドレスとの対応を示す
ＯＳ切り替えシステム。
【請求項４】
請求項３に記載のＯＳ切り替えシステムにおいて、
前記メモリ情報変換部は、更に、前記ホストページ情報テーブルと、前記ゲストメモリ管理情報に含まれるゲスト論理アドレステーブル及びゲスト物理アドレス変換表とに基づいて、前記新規ホストメモリ管理情報に含まれる新規ホスト論理アドレステーブル及び新規ホストページ情報テーブルを生成し、
前記ゲスト論理アドレステーブルは、前記ゲストＯＳにおける論理アドレスと仮想物理アドレスとの対応を示し、
前記ゲスト物理アドレス変換表は、前記ゲストＯＳにおける前記仮想物理アドレスと物理アドレスとの対応を示し、
前記新規ホスト論理アドレステーブルは、前記ゲスト論理アドレステーブルにおける前記論理アドレスと前記ゲスト物理アドレス変換表における前記物理アドレスとの対応を示し、
前記新規ホストページ情報テーブルは、前記ホストページ情報テーブルを前記ゲストＯＳ用に変更したものである
ＯＳ切り替えシステム。
【請求項５】
請求項２に記載のＯＳ切り替えシステムにおいて、
前記ゲストＯＳは、更に、
前記ゲストデバイス管理情報に含まれるゲストデバイス対応テーブル及びゲストデバイス一覧と、前記ホストデバイス管理情報に含まれるホストデバイス一覧とに基づいて、前記新規ゲストデバイス管理情報に含まれる新規ゲストデバイス対応テーブル及び新規ゲストデバイス一覧を生成するデバイス情報変換部を備え、
前記ゲストデバイス対応テーブルは、前記ゲストＯＳの認識するデバイスと前記ホストＯＳの認識するデバイスとの対応を示し、
前記ゲストデバイス一覧は、前記ゲストＯＳの使用可能なデバイスに関する情報を示し、
前記ホストデバイス一覧は、前記ホストＯＳの使用可能なデバイスに関する情報を示し、
前記新規ゲストデバイス一覧は、前記ホストデバイス一覧のデバイスのうち前記ゲストデバイス対応テーブルにあるものについて、当該デバイスの前記デバイスに関する情報で、前記ゲストデバイス一覧を更新し、前記ホストデバイス一覧の残りのデバイスの前記デバイスに関する情報を追加したものであり、
前記新規ゲストデバイス対応テーブルは、前記ゲストデバイス対応テーブルにおける前記ゲストＯＳの認識するデバイスと前記ホストＯＳの認識するデバイスとを入れ替えたものである
ＯＳ切り替えシステム。
【請求項６】
請求項１に記載のＯＳ切り替えシステムにおいて、
前記ゲストＯＳは、前記ゲストＯＳの第１プロセスのプロセス情報を前記ホストＯＳの第２プロセスのプロセス情報とし、前記第２プロセスのメモリ情報を新規ゲストメモリ管理情報に基づいて書き換え、前記第２プロセスのレジスタ情報を前記ホストＯＳのレジスタ情報に書き換え、スケジューリングキューに前記第２プロセスを登録するホストプロセス生成部を備える
ＯＳ切り替えシステム。
【請求項７】
請求項１乃至６のいずれか一項に記載のＯＳ切り替えシステムと、
前記ＯＳ切り替えシステムに使用されるハードウェアと
を具備する
仮想計算機システム。
【請求項８】
（ａ）ゲストＯＳをホストに、ホストＯＳをゲストにそれぞれ切り替えるとき、前記ゲストＯＳが、前記ゲストＯＳのゲストメモリ管理情報及び前記ホストＯＳのホストメモリ管理情報に基づいて、前記ホストＯＳを切り替えた後の新規ゲストＯＳのメモリ管理情報となる新規ゲストメモリ管理情報と、前記ゲストＯＳを切り替えた後の新規ホストＯＳのメモリ管理情報となる新規ホストメモリ管理情報とを生成するステップと、
（ｂ）前記ゲストＯＳが、前記ゲストメモリ管理情報を前記新規ホストメモリ管理情報に置き換えるステップと、
（ｃ）前記ホストＯＳが、前記ホストメモリ管理情報を前記新規ゲストメモリ管理情報に置き換えるステップと、
（ｄ）前記ホストＯＳ及び前記ゲストＯＳが、実行命令を切り替えるステップと
を具備し、
前記（ａ）ステップは、
前記ゲストＯＳをホストに、前記ホストＯＳをゲストにそれぞれ切り替えるとき、前記ホストＯＳが、前記ホストメモリ管理情報をメモリの退避領域に退避するステップと、
前記ゲストＯＳが、前記ゲストメモリ管理情報及び前記退避領域の前記ホストメモリ管理情報に基づいて、前記新規ゲストメモリ管理情報を生成して前記退避領域に格納し、前記新規ホストメモリ管理情報を生成するステップと
を備え、
前記（ｃ）ステップは、
（ｃ１）前記ホストＯＳが、前記ホストメモリ管理情報を前記退避領域の前記新規ゲストメモリ管理情報に置き換えるステップを備える
ＯＳ切り替え方法。
【請求項９】
請求項８に記載のＯＳ切り替え方法において、
（ｅ）前記ゲストＯＳが、前記ゲストＯＳのゲストデバイス管理情報と前記ホストＯＳのホストデバイス管理情報とに基づいて、前記新規ゲストＯＳのデバイス管理情報となる新規ゲストデバイス管理情報と、前記新規ホストＯＳのデバイス管理情報となる新規ホストデバイス管理情報を生成するステップと、
（ｆ）前記ゲストＯＳが、前記ゲストデバイス管理情報を前記新規ホストデバイス管理情報に置き換えるステップと、
（ｇ）前記ホストＯＳが、前記ホストデバイス管理情報を前記新規ゲストデバイス管理情報に置き換えるステップと
を更に具備する
ＯＳ切り替え方法。
【請求項１０】
請求項８に記載のＯＳ切り替え方法において、
前記（ａ）ステップは、
（ａ１）前記ホストメモリ管理情報に含まれるホストページ情報テーブルとホスト論理アドレステーブルとに基づいて、前記新規ゲストメモリ管理情報に含まれる新規ゲストページ情報テーブル、新規ゲスト物理アドレス変換表及び新規ゲスト論理アドレステーブルを生成するステップを備え、
前記ホスト論理アドレステーブルは、論理アドレスと前記物理アドレスとの対応を示し、
前記新規ゲストページ情報テーブルは、前記ホストページ情報テーブルにおける前記ホストＯＳの使用可能な前記物理アドレスと当該物理アドレスの使用状況との対応を示し、
前記新規ゲスト物理アドレス変換表は、前記新規ゲストページ情報テーブルにおける前記物理アドレスと仮想物理アドレスとの対応を示し、
前記新規ゲスト論理アドレステーブルは、前記ホスト論理アドレステーブルにおける前記論理アドレスと前記新規ゲスト物理アドレス変換表における前記仮想物理アドレスとの対応を示す
ＯＳ切り替え方法。
【請求項１１】
請求項１０に記載のＯＳ切り替え方法において、
前記（ａ）ステップは、
（ａ２）前記ホストページ情報テーブルと、前記ゲストメモリ管理情報に含まれるゲスト論理アドレステーブル及びゲスト物理アドレス変換表とに基づいて、前記新規ホストメモリ管理情報に含まれる新規ホスト論理アドレステーブル及び新規ホストページ情報テーブルを生成するステップを更に備え、
前記ゲスト論理アドレステーブルは、前記ゲストＯＳにおける論理アドレスと仮想物理アドレスとの対応を示し、
前記ゲスト物理アドレス変換表は、前記ゲストＯＳにおける前記仮想物理アドレスと物理アドレスとの対応を示し、
前記新規ホスト論理アドレステーブルは、前記ゲスト論理アドレステーブルにおける前記論理アドレスと前記ゲスト物理アドレス変換表における前記物理アドレスとの対応を示し、
前記新規ホストページ情報テーブルは、前記ホストページ情報テーブルを前記ゲストＯＳ用に変更したものである
ＯＳ切り替え方法。
【請求項１２】
請求項９に記載のＯＳ切り替え方法において、
前記（ｅ）ステップは、
（ｅ１）前記ゲストデバイス管理情報に含まれるゲストデバイス対応テーブル及びゲストデバイス一覧と、前記ホストデバイス管理情報に含まれるホストデバイス一覧とに基づいて、前記新規ゲストデバイス管理情報に含まれる新規ゲストデバイス対応テーブル及び新規ゲストデバイス一覧を生成するステップを備え、
前記ゲストデバイス対応テーブルは、前記ゲストＯＳの認識するデバイスと前記ホストＯＳの認識するデバイスとの対応を示し、
前記ゲストデバイス一覧は、前記ゲストＯＳの使用可能なデバイスに関する情報を示し、
前記ホストデバイス一覧は、前記ホストＯＳの使用可能なデバイスに関する情報を示し、
前記新規ゲストデバイス一覧は、前記ホストデバイス一覧のデバイスのうち前記ゲストデバイス対応テーブルにあるものについて、当該デバイスの前記デバイスに関する情報で、前記ゲストデバイス一覧を更新し、前記ホストデバイス一覧の残りのデバイスの前記デバイスに関する情報を追加したものであり、
前記新規ゲストデバイス対応テーブルは、前記ゲストデバイス対応テーブルにおける前記ゲストＯＳの認識するデバイスと前記ホストＯＳの認識するデバイスとを入れ替えたものである
ＯＳ切り替え方法。
【請求項１３】
請求項８に記載のＯＳ切り替え方法において、
前記（ｄ）ステップは、
（ｄ１）前記ゲストＯＳの第１プロセスのプロセス情報を、前記ホストＯＳの第２プロセスのプロセス情報とするステップと、
（ｄ２）前記第２プロセスのメモリ情報を新規ゲストメモリ管理情報に基づいて書き換えるステップと、
（ｄ３）前記第２プロセスのレジスタ情報を前記ホストＯＳのレジスタ情報に書き換えるステップと、
（ｄ４）スケジューリングキューに前記第２プロセスを登録するステップと
を備える
ＯＳ切り替え方法。
【請求項１４】
（ａ）ゲストＯＳをホストに、ホストＯＳをゲストにそれぞれ切り替えるとき、前記ゲストＯＳが、前記ゲストＯＳのゲストメモリ管理情報及び前記ホストＯＳのホストメモリ管理情報に基づいて、前記ホストＯＳを切り替えた後の新規ゲストＯＳのメモリ管理情報となる新規ゲストメモリ管理情報と、前記ゲストＯＳを切り替えた後の新規ホストＯＳのメモリ管理情報となる新規ホストメモリ管理情報とを生成するステップと、
（ｂ）前記ゲストＯＳが、前記ゲストメモリ管理情報を前記新規ホストメモリ管理情報に置き換えるステップと、
（ｃ）前記ホストＯＳが、前記ホストメモリ管理情報を前記新規ゲストメモリ管理情報に置き換えるステップと、
（ｄ）前記ホストＯＳ及び前記ゲストＯＳが、実行命令を切り替えるステップと
を具備し、
前記（ａ）ステップは、
前記ゲストＯＳをホストに、前記ホストＯＳをゲストにそれぞれ切り替えるとき、前記ホストＯＳが、前記ホストメモリ管理情報をメモリの退避領域に退避するステップと、
前記ゲストＯＳが、前記ゲストメモリ管理情報及び前記退避領域の前記ホストメモリ管理情報に基づいて、前記新規ゲストメモリ管理情報を生成して前記退避領域に格納し、前記新規ホストメモリ管理情報を生成するステップと
を備え、
前記（ｃ）ステップは、
（ｃ１）前記ホストＯＳが、前記ホストメモリ管理情報を前記退避領域の前記新規ゲストメモリ管理情報に置き換えるステップを備える
ＯＳ切り替え方法をコンピュータに実行させるプログラム。
【請求項１５】
請求項１４に記載のプログラムにおいて、
（ｅ）前記ゲストＯＳが、前記ゲストＯＳのゲストデバイス管理情報と前記ホストＯＳのホストデバイス管理情報とに基づいて、前記新規ゲストＯＳのデバイス管理情報となる新規ゲストデバイス管理情報と、前記新規ホストＯＳのデバイス管理情報となる新規ホストデバイス管理情報を生成するステップと、
（ｆ）前記ゲストＯＳが、前記ゲストデバイス管理情報を前記新規ホストデバイス管理情報に置き換えるステップと、
（ｇ）前記ホストＯＳが、前記ホストデバイス管理情報を前記新規ゲストデバイス管理情報に置き換えるステップと
を更に具備する
プログラム。
【請求項１６】
請求項１４に記載のプログラムにおいて、
前記（ａ）ステップは、
（ａ１）前記ホストメモリ管理情報に含まれるホストページ情報テーブルとホスト論理アドレステーブルとに基づいて、前記新規ゲストメモリ管理情報に含まれる新規ゲストページ情報テーブル、新規ゲスト物理アドレス変換表及び新規ゲスト論理アドレステーブルを生成するステップを備え、
前記ホスト論理アドレステーブルは、論理アドレスと前記物理アドレスとの対応を示し、
前記新規ゲストページ情報テーブルは、前記ホストページ情報テーブルにおける前記ホストＯＳの使用可能な前記物理アドレスと当該物理アドレスの使用状況との対応を示し、
前記新規ゲスト物理アドレス変換表は、前記新規ゲストページ情報テーブルにおける前記物理アドレスと仮想物理アドレスとの対応を示し、
前記新規ゲスト論理アドレステーブルは、前記ホスト論理アドレステーブルにおける前記論理アドレスと前記新規ゲスト物理アドレス変換表における前記仮想物理アドレスとの対応を示す
プログラム。
【請求項１７】
請求項１６に記載のプログラムにおいて、
前記（ａ）ステップは、
（ａ２）前記ホストページ情報テーブルと、前記ゲストメモリ管理情報に含まれるゲスト論理アドレステーブル及びゲスト物理アドレス変換表とに基づいて、前記新規ホストメモリ管理情報に含まれる新規ホスト論理アドレステーブル及び新規ホストページ情報テーブルを生成するステップを更に備え、
前記ゲスト論理アドレステーブルは、前記ゲストＯＳにおける論理アドレスと仮想物理アドレスとの対応を示し、
前記ゲスト物理アドレス変換表は、前記ゲストＯＳにおける前記仮想物理アドレスと物理アドレスとの対応を示し、
前記新規ホスト論理アドレステーブルは、前記ゲスト論理アドレステーブルにおける前記論理アドレスと前記ゲスト物理アドレス変換表における前記物理アドレスとの対応を示し、
前記新規ホストページ情報テーブルは、前記ホストページ情報テーブルを前記ゲストＯＳ用に変更したものである
プログラム。
【請求項１８】
請求項１５に記載のプログラムにおいて、
前記（ｅ）ステップは、
（ｅ１）前記ゲストデバイス管理情報に含まれるゲストデバイス対応テーブル及びゲストデバイス一覧と、前記ホストデバイス管理情報に含まれるホストデバイス一覧とに基づいて、前記新規ゲストデバイス管理情報に含まれる新規ゲストデバイス対応テーブル及び新規ゲストデバイス一覧を生成するステップを備え、
前記ゲストデバイス対応テーブルは、前記ゲストＯＳの認識するデバイスと前記ホストＯＳの認識するデバイスとの対応を示し、
前記ゲストデバイス一覧は、前記ゲストＯＳの使用可能なデバイスに関する情報を示し、
前記ホストデバイス一覧は、前記ホストＯＳの使用可能なデバイスに関する情報を示し、
前記新規ゲストデバイス一覧は、前記ホストデバイス一覧のデバイスのうち前記ゲストデバイス対応テーブルにあるものについて、当該デバイスの前記デバイスに関する情報で、前記ゲストデバイス一覧を更新し、前記ホストデバイス一覧の残りのデバイスの前記デバイスに関する情報を追加したものであり、
前記新規ゲストデバイス対応テーブルは、前記ゲストデバイス対応テーブルにおける前記ゲストＯＳの認識するデバイスと前記ホストＯＳの認識するデバイスとを入れ替えたものである
プログラム。
【請求項１９】
請求項１４に記載のプログラムにおいて、
前記（ｄ）ステップは、
（ｄ１）前記ゲストＯＳの第１プロセスのプロセス情報を、前記ホストＯＳの第２プロセスのプロセス情報とするステップと、
（ｄ２）前記第２プロセスのメモリ情報を新規ゲストメモリ管理情報に基づいて書き換えるステップと、
（ｄ３）前記第２プロセスのレジスタ情報を前記ホストＯＳのレジスタ情報に書き換えるステップと、
（ｄ４）スケジューリングキューに前記第２プロセスを登録するステップと
を備える
プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＯＳ切り替えシステム、仮想計算機システム、ＯＳ切り替え方法及びＯＳ切り替え用プログラムに関する。
【背景技術】
【０００２】
仮想計算機システムとは、物理的に１台の計算機を複数台の計算機に見せる技術である。言い換えると、仮想計算機システムは、物理的に１台の計算機上で、複数のＯＳ（例示：Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標））を同時に実行させることにより、ユーザに複数台の計算機が存在しているように見せる技術である。
【０００３】
図１は、仮想計算機システムの概要を示す構成図である。仮想計算機システム１０ａは、ホストＯＳ２００ａ、ゲストＯＳ３００ａ及びハードウェア１００ａを備える。ホストＯＳ２００ａは、ハードウェア１００ａを制御するプログラムである。ホストＯＳ２００ａ上では、ホストＯＳ２００ａのアプリケーションであるホストＯＳアプリケーション２０１−１〜２０１−ｍ（ｍは自然数）が動作する。ゲストＯＳ３００ａ上では、ゲストＯＳのアプリケーションであるゲストＯＳアプリケーション３０１−１〜３０１−ｎ（ｎは自然数）が動作する。ゲストＯＳ３００ａは、ホストＯＳ２００ａのアプリケーションの一種である。これらは、ＣＰＵ（図示されず）により制御される。ホストＯＳ２００ａは、時分割でＣＰＵ資源をホストＯＳアプリケーション２０１−１〜２０１−ｍ及びゲストＯＳ３００ａに割り当てる。ホストＯＳアプリケーション２０１−１〜２０１−ｍ及びゲストＯＳ３００ａは、割り当てられたＣＰＵ時間を使って、自身の処理を進める。ゲストＯＳ３００ａはゲストＯＳ３００ａ自身が管理するゲストＯＳアプリケーション３０１−１〜３０１−ｎを所有している。そして、ホストＯＳ３００ａから割り当てられたＣＰＵ時間をさらに細かく分割してゲストＯＳアプリケーション３０１−１〜３０１−ｎに割り当てる。以上のように、時分割でＣＰＵ資源を各アプリケーションに割り当てることによって、ホストＯＳアプリケーション２０１−１〜２０１−ｍ、ゲストＯＳ３００ａ、ゲストＯＳアプリケーション３０１−１〜３０１−ｎを実行することができる。
【０００４】
以下、最初にゲストＯＳ３００ａとホストＯＳ２００ａとが切り替わる仕組みを説明し、次にゲストＯＳ３００ａとホストＯＳ２００ａの入出力の仕組みを説明する。
【０００５】
最初にゲストＯＳ３００ａとホストＯＳ２００ａが切り替わる仕組みを説明する。ゲストＯＳ３００ａは、ホストＯＳ２００ａ上で動作する。言い換えると、ゲストＯＳ３００ａはホストＯＳアプリケーションの一つと考えることができる。時分割でハードウェア資源をアプリケーションに割り当てるには、ハードウェア資源を占有しているプログラムを入れ替える、つまり、アプリケーションの切り替えが必要となる。ホストＯＳアプリケーション２０１−１〜２０１−ｍならびにゲストＯＳ３００ａは、ホストＯＳ２００ａのコンテキストスイッチという仕組みを使って切り替えられる。
【０００６】
図２は、ホストＯＳのコンテキストスイッチのを示す図である。ある瞬間にＣＰＵ上で実行できるプログラムは一つだけである。よって、複数のプログラムを並行に実行するために、時分割でそれぞれのプログラムにＣＰＵを与える。ＣＰＵ上で実行しているプログラムを変更する契機を与えるのがタイマー割り込みなどの各種割り込み信号である。割り込み信号を受け取ったＣＰＵは、ホストＯＳによって登録されている割り込み信号ハンドラを呼び出して実行する。図の例では、初めにタイマーがセットされる。そしてホストＯＳアプリケーション２０１−１が実行される。タイマーによってセットされた時間が経過すると、タイマーはタイマー割り込み信号をＣＰＵに送信する。割り込み信号を受け取ったＣＰＵは予め登録されている割り込み信号ハンドラを呼び出して実行する。割り込み信号ハンドラは、ホストＯＳアプリケーション２０１−１のレジスタ情報やプログラムカウンタのような、プログラムを中断したときの状態情報を所定のメモリに保存する。そして、ゲストＯＳ３００ａの状態情報（例示：レジスタ情報、プログラムカウンタ）を所定のメモリから読み出してセットする。それにより、ゲストＯＳ３００ａが実行される。このようにホストＯＳ２００ａはコンテキストスイッチを繰り返すことによって、複数のプログラムを並行に動作させることができる。
【０００７】
通常のコンテキストスイッチはタイマー割り込み信号を利用する。しかし、ゲストＯＳ３００ａからホストＯＳ２００ａへのコンテキストスイッチはホストＯＳ２００ａへの入出力割込み信号を利用する。図３は、ゲストＯＳ３００ａからホストＯＳ２００ａへのコンテキストスイッチの仕組みを説明する図である。ホストＯＳ２００ａと同様に、ゲストＯＳ３００ａでも複数のアプリケーションを並行に実行するために、タイマー割り込みによるコンテキストスイッチを行う。一つの割り込み信号に登録することのできる割り込み信号ハンドラは一つである。ゲストＯＳ３００ａはタイマー割り込みを利用して、ゲストＯＳアプリケーション３０１−１〜３０１−ｎのコンテキストスイッチをしている。そのため、ホストＯＳ２００ａへ戻るには、タイマー割り込み以外の割り込み信号を実行する必要がある。言い換えると、タイマー割り込み以外の割り込み信号ハンドラにホストＯＳ２００ａへの切り替え命令を記述しておいて、それを実行する必要がある。それがホストＯＳ２００ａへの入出力割込みである。入出力割込みとは、デバイスからの処理完了の通知である。例としてハードディスクを上げる。ＣＰＵは、ハードディスクに対して、ある領域からある領域までの書き込みを要求するが、メモリ上に存在するデータを逐次ディスクに対して渡しているわけではない。領域だけが指定されると、補助演算装置がＣＰＵの代わりにメモリ上のデータをディスクへ渡して書き込みを行う。補助演算装置が書き込みを行っている間、ＣＰＵは別の処理を行う。そして、ディスクへの書き込みが終了した時点で、補助演算装置は入出力割り込み信号を送信し、入出力割込み信号を受けとったＣＰＵはディスクへの書き込みが完了したことをアプリケーションに通知する。ゲストＯＳ３００ａは、予めホストＯＳ２００ａによって出された入出力要求が完了したときに発行される入出力割込み信号か、キーボードやマウスなどを操作したときに発生する入出力割込み信号を受け取ったときに、それらの入出力割込み信号ハンドラを実行してホストＯＳ２００ａに切り替わる。
【０００８】
次に、ゲストＯＳ３００ａとホストＯＳ２００ａの入出力の仕組みを説明する。ホストＯＳ２００ａは、ホストＯＳアプリケーション２０１からの入出力要求を受け取って、ハードウェア１００ａに処理をさせる。ホストＯＳアプリケーション２０１がハードウェア１００ａでの処理にホストＯＳ２００ａを仲介させる理由は、ホストＯＳアプリケーション２０１同士の競合を避けるためである。ホストＯＳ２００ａは複数のホストＯＳアプリケーション２０１からの要求を整理し、順番にハードウェア１００ａに処理をさせる。ゲストＯＳ３００ａ上にはゲストＯＳアプリケーション３０１が動作している。ゲストＯＳ３００ａは、ゲストＯＳアプリケーション３０１からの入出力要求を受け取って、その入出力要求をホストＯＳ２００ａに転送する。ゲストＯＳ３００ａはホストＯＳアプリケーションの一種である。よって、ゲストＯＳ３００ａを複数実行し、入出力要求をホストＯＳ２００ａで処理させることで、仮想計算機システム１０では、物理的に１台の計算機上で、複数のＯＳ（例示：Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標））を同時に実行させることができる。このような仮想計算機の例としては、非特許文献１や非特許文献２があげられる。
【０００９】
以上の説明の通り、ゲストＯＳ３００ａのハードウェア１００ａでの処理はホストＯＳ２００ａに依存する。ホストＯＳ２００ａが行うハードウェア１００ａの管理は、メモリ管理とデバイス管理に大きく分けられる。ゲストＯＳ３００ａはメモリ管理とデバイス管理について、ホストＯＳ２００ａに依存している。以下、図４〜図６を用いて仮想計算機システムのメモリ管理について説明し、図７〜図１０を用いて仮想計算機システムのデバイス管理について説明する。
【００１０】
まず、仮想計算機システムのメモリ管理について説明する。図４は、仮想計算機システムにおけるメモリ管理を説明する図である。ハードウェア１００ａは、物理メモリ１０１を備え、物理メモリ１０１は、ゲストＯＳ領域１０２を含む。ゲストＯＳ領域１０２は、ゲストＯＳ３００ａ起動時にホストＯＳ２００ａによって割り当てられた物理メモリ領域であり、ゲストＯＳ３００ａからはこの領域しか見ることができない。
【００１１】
まず、ホストＯＳ２００ａ側のメモリ管理について説明する。ホストＯＳ２００ａは、メモリ管理用に、メモリ取得部２０６、空き領域管理部２０７、空き領域リスト２０８、論理アドレステーブル２０３、ページ情報テーブル２０４、アドレス変換部２０５を備える。
【００１２】
論理アドレステーブル２０３は、論理アドレスと物理アドレスの組を格納するテーブルである。論理アドレステーブルは、ホスト（ゲスト）ＯＳアプリケーション毎に作成される。論理アドレス一つにつき、物理アドレス一つが、ホストＯＳ２００ａによって割り当てられ、ホストＯＳアプリケーション２０１がメモリの読み書きを行う際は、論理アドレスを使用する。例えば、論理アドレスＡと物理アドレスＡが関連づけられている状態を考える。ホストＯＳアプリケーション２０１は、論理アドレスＡへのデータ書き込み命令を実行する。この書き込み命令は、ホストＯＳ２００ａが受け取る。ホストＯＳ２００ａは論理アドレステーブル２０３を参照し、論理アドレスＡを物理アドレスＡに変換し、物理アドレスＡへデータを書き込む。ページ情報テーブル２０４は物理メモリの使用状況を管理するテーブルである。物理メモリはページという単位で管理される（例示：通常、Ｌｉｎｕｘ（登録商標）では１ページ４キロバイト）。ページ情報テーブル２０４は、ページ番号と使用中フラグとを対とするエントリによって構成される。あるページが使用される場合は、使用中フラグを立て、使用されなくなった場合は、使用中フラグをおろす。
【００１３】
アドレス変換部２０５は、論理アドレステーブル２０３を参照し、論理アドレスを物理アドレスに変換する。空き領域管理部２０７は、ページ情報テーブル２０４を参照し、空いている物理メモリを空き領域リストとして持つ。メモリ取得部２０６は、ホスト（ゲスト）ＯＳアプリケーションが新たなメモリを必要としたときに空き領域管理部２０７から空き領域を取得し、ユーザへ空き領域情報を返す。
【００１４】
これらの部、テーブルは以下のように動作する。ホストＯＳアプリケーション２０１が論理アドレスをアクセスすると、ホストＯＳ２００ａは、アドレス変換部２０５を使って、論理アドレスを物理アドレスに変換する。よって、ホストＯＳ２００ａから物理アドレスは直接参照されることはない。複数の論理アドレスを一つの物理アドレスに関連付けることによって、すべてのホストＯＳアプリケーションは同じ量の物理メモリを利用することができる。
【００１５】
例として、ホストＯＳアプリケーション２０１−１の論理アドレス１とホストＯＳアプリケーション２０１−２の論理アドレス１が物理アドレス１に関連付けられている場合を考える。物理アドレス１には、ホストＯＳアプリケーション２０１−１のデータが格納されており、ホストＯＳアプリケーション２０１−２のデータはその他の場所（例示：ディスク）に退避されている。このような場合に、ホストＯＳアプリケーション２０１−２からのアクセスがあれば、物理アドレス１に格納されているホストＯＳアプリケーション２０１−１のデータをその他の場所（例示：ディスク）に退避させて、ホストＯＳアプリケーション２０１−２のデータをその他の場所（例示：ディスク）から物理アドレス１にコピーし、コピーが完了後にホストＯＳアプリケーション２０１−２に物理アドレス１をアクセスさせる。図５は、ホストＯＳにおける論理アドレステーブルと、物理メモリ、及びページ情報テーブルの関係を表す図である。ページ情報テーブル２０４の使用中フラグは、当該ページ１０７が使用中か否かを表すフラグである。
【００１６】
次に、ゲストＯＳ３００ａ側のメモリ管理について説明する。図４を参照して、ゲストＯＳ３００ａは、メモリ管理用に、メモリ取得部３０８、空き領域管理部３０９、空き領域リスト３１０、論理アドレステーブル３０３、ページ情報テーブル３０４、及びアドレス変換部３０５を備える。これらは、それぞれメモリ取得部２０６、空き領域管理部２０７、空き領域リスト２０８、論理アドレステーブル２０３、ページ情報テーブル２０４、及びアドレス変換部２０５に対応する。ゲストＯＳ３００ａは、更に、メモリ管理用に、物理アドレス変換表３０６及び物理アドレス変換部３０７を新たに備える。
【００１７】
ここで、ゲストＯＳ３００ａのメモリ管理を説明する前に、ゲストＯＳ３００ａがホストＯＳ２００ａからメモリをどのように割り当てられるかを説明する。ホストＯＳアプリケーション２０１は、メモリ取得部２０６を用いて、ホストＯＳ２００ａに新規メモリの割り当てを要求する。要求を受け取ったホストＯＳ２００ａは、空き領域リスト２０８を参照し、まだ割り当てられていないページを、要求を出したホストＯＳアプリケーション２０１に割り当てる。ホストＯＳ２００ａは、割り当てた領域の先頭の論理アドレスをホストＯＳアプリケーション２０１に回答する。通常はこのようにメモリが割り当てられる。しかし、ゲストＯＳ３００ａは、上記の割り当て方法とは違った方法を用いて、物理メモリを、直接、ホストＯＳ２００ａから割り当ててもらう。ゲストＯＳ３００ａがホストＯＳ２００ａにメモリ割り当てを要求すると、ホストＯＳ２００ａの空き領域リスト２０８を参照し、割り当てられていないページをゲストＯＳ３００ａに割り当てる。この後、通常のホストＯＳアプリケーション２０１なら、割り当てた領域の先頭の論理アドレスが回答されるが、要求がゲストＯＳ３００ａの場合は、割り当てた領域の先頭の「物理アドレス」が回答される。また、割り当てられた領域（以下、ゲストＯＳ領域１０２）は、常に物理メモリ１０１上に存在する。ホストＯＳ２００ａのメモリ管理でも説明したとおり、論理アドレスと物理アドレスの変換は、物理メモリだけではなく、ディスクなど、物理メモリ以外の領域もメモリとして使用している場合に、必要な仕組みである。割り当てられた領域が常に物理メモリ１０１上に存在する場合には、論理アドレスと物理アドレスの変換は必要ない。よって、ホストＯＳ２００ａ上に存在するゲストＯＳ３００ａのための論理アドレステーブル２０３は使用されず、ホストＯＳ２００ａのページ情報テーブル２０４にのみ、使用中を示す使用中フラグが立てられる。
【００１８】
物理アドレス変換表３０６は、仮想物理アドレスを物理アドレスに変換するために使用される表である。ゲストＯＳ３００ａにおける論理アドレステーブル３０３には物理アドレスの代わりに仮想物理アドレスが格納されている。仮想物理アドレスとは、ゲストＯＳ３００ａ用の物理アドレスである。ＯＳではメモリ管理のいたるところで、メモリアドレスが０番地から始まり、連番であることが暗黙の了解事項となっていることが多い。ホストＯＳ２００ａによって割り当てられた物理メモリアドレスは必ずしも連番になっているとは限らず、また０番地から始まらない。よって、仮想物理アドレスという０番地から始まる連番の整数をゲストＯＳの物理アドレスとして使用することによって、上記暗黙の了解事項を踏襲している。仮想物理アドレスと物理アドレスは一対一に対応付けられている。物理アドレス変換部３０７は、物理アドレス変換表３０６を参照して、仮想物理アドレスを物理アドレスに変換する。
【００１９】
これらの表、部は以下のように動作する。ゲストＯＳ３００ａにおける論理アドレスと仮想物理アドレスの変換は、ホストＯＳ２００ａの論理アドレスと物理アドレスの変換と同じである。ゲストＯＳ３００ａでは、仮想物理アドレスにアクセスするとき、物理アドレス変換部３０７が物理アドレス変換表３０６を元に仮想物理アドレスを物理アドレスに変換する。この変換によって、ゲストＯＳアプリケーション３０１は、ホストＯＳ２００ａの管理するゲストＯＳ領域１０２にアクセスすることができる。図６は、ゲストＯＳにおける論理アドレステーブル、ページ情報テーブル、物理アドレス変換表、及びゲストＯＳ領域の関係を表す図である。
【００２０】
次に、仮想計算機システムのデバイス管理について説明する。図７は仮想計算機システムにおけるデバイス管理を説明する図である。ハードウェア１００ａは、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）１０６、デバイスインターフェイス１０３、デバイスコントローラ１０４、デバイス１〜Ｎ＿１０５が配置されている。
【００２１】
まず、ホストＯＳ２００ａ側のデバイス管理について説明する。ホストＯＳ２００ａは、デバイス管理用に、デバイス一覧２０９、デバイス情報テーブル２１０、デバイス入出力受信部２１１、デバイス抽象化部２１２、デバイスドライバ１〜Ｎ＿２１３、リソース構造体２１５、リソース管理部２１６、Ｉ／Ｏポート２１４を備える。
【００２２】
デバイス一覧２０９は、ホストＯＳ２００ａによって認識されているデバイス１０５の一覧である。図８は、デバイス一覧を示す表である。デバイス一覧２０９はテーブルであり、デバイス番号２２１、デバイス名２２３、デバイス操作関数２２２をエントリとして含む。図７を参照して、デバイス情報テーブル２１０は、利用されているデバイス１０５の情報を格納したテーブルである。図９は、デバイス情報テーブルを示す表である。デバイス情報テーブル２１０は、デバイス番号２２１、利用カウンタ２２５、デバイス状態２１０、使用者情報２２４をエントリとして含む。デバイス情報テーブル２１０内のエントリは、デバイス１０５が使用される度に作成され、常に存在するものではない。ホスト（ゲスト）ＯＳアプリケーションがデバイス１０５を使用するときにエントリが作成され、利用カウンタ２２５がインクリメントされる。当該デバイス１０５の利用者が０になったとき、当該デバイス１０５に対応するエントリは削除される。
【００２３】
図７を参照して、デバイス入出力受信部２１１は、ゲストＯＳ３００ａからのデバイス入出力要求を受け取り、ホストＯＳ２００ａへデバイス入出力を転送する。デバイス抽象化部２１２は、各デバイス１０５へのアクセス方法を抽象化する。各デバイス１０５は、用途により操作方法が異なる。デバイス抽象化部２１２は、各デバイス１０５の操作関数を「ｒｅａｄ」、「ｗｒｉｔｅ」のようなインターフェイスと関連付けることによって、各デバイス１０５へのアクセス方法を抽象化している。例として、デバイス１への書き込み関数が「ｄｅｖ１＿ｗｒｉｔｅ」である場合を考える。「ｄｅｖ１＿ｗｒｉｔｅ」のようなデバイス操作関数は、後述のデバイスドライバ１＿２１３に記述されており、デバイスドライバ１＿２１３の登録により、「ｄｅｖ１＿ｗｒｉｔｅ」がデバイス抽象化部のもつ「ｗｒｉｔｅ」関数に関連付けられる。ユーザは、デバイス１に書き込みを行う場合は、「デバイス１へｗｒｉｔｅ」とホストＯＳ２００ａに命令することによって、デバイスドライバ登録時に関連付けられた「ｄｅｖ１＿ｗｒｉｔｅ」が実行されることになる。デバイスドライバ１〜Ｎ＿２１３は、デバイス１〜Ｎ＿１０５を操作するデバイス操作関数が記述されたプログラムである。ユーザからの入出力要求を受け取ったデバイスドライバ１〜Ｎ＿２１３は、Ｉ／Ｏポート２１４を通して、デバイス１〜Ｎ＿１０５に処理を実行させる。リソース構造体２１５は、後述するＩ／Ｏポート２１４を管理するための構造体である。リソース構造体２１５は、デバイス名とＩ／Ｏポートの組をエントリとして含む。リソース管理部２１６は、Ｉ／Ｏポート２１４を各デバイスに割り当てる。Ｉ／Ｏポート２１４は、各デバイス１〜Ｎ＿１０５へ割り当てられてアドレスである。
【００２４】
ＤＭＡＣ１０６は、ハードウェアであり、ＣＰＵからの要求を受けて、ＣＰＵの代わりにデバイス１〜Ｎ＿１０５での処理結果を受け取り、結果を適切な物理メモリ１０１上に保存する。デバイスインターフェイス１０３は、デバイスドライバから受け取った入出力要求を、より詳細に分割するハードウェア回路である。具体例としてディスクアクセスがある。デバイスドライバ２１３は、入出力命令を「セクタへの書き込み」という粒度で要求する。デバイスインターフェイス１０３は、「セクタへの書き込み」のようなデバイスドライバからの命令を、「適切な位置までディスクアームを移動させ」や「データをその位置へ書き込む」というようなより具体的な命令に翻訳する。デバイスコントローラ１０４は、上記デバイスインターフェイス１０３によって翻訳された命令列を実行するハードウェア回路である。デバイス１〜Ｎ＿１０５は、デバイスコントローラ１０４によって制御されるデバイスとしての主体である。上記デバイスインターフェイス１０３の説明におけるディスクアクセスの例では、ディスクアームであり、データを書き込むディスクそのものである。
【００２５】
これらの部、テーブルは以下のように動作する。最初にデバイスドライバ１〜Ｎ＿１０５がホストＯＳ２００ａに登録される動作について説明する。登録は、デバイス一覧２０９へのエントリ追加とリソース管理部２１６によるＩ／Ｏポート２１４の割り当てを指す。これにより、ユーザはデバイス抽象化部２１２を通して、デバイス１〜Ｎ＿１０５にアクセスすることが可能となる。次にユーザからデバイス（１〜Ｎ＿）１０５への入出力要求がデバイス１０５で処理されるまでを説明する。デバイス入出力要求を受け取ったデバイス抽象化部２１２は、デバイス情報テーブル２１０を確認し、すでにデバイス１０５へのアクセスがあり、デバイス情報テーブル２１０に当該デバイス１０５のエントリがあるかどうかを確認する。エントリがある場合は、入出力要求を出したユーザをデバイス情報テーブル２１０の使用者情報に追加する。エントリが無い場合は、新たに当該デバイス１０５に対するエントリをデバイス情報テーブル２１０に登録する。使用者情報追加、またはエントリ追加後、デバイス一覧２０９のデバイス操作関数を使ってデバイス１０５にアクセスする。
【００２６】
次にゲストＯＳ３００ａ側のデバイス管理について説明する。ゲストＯＳ３００ａは、デバイス管理用に、デバイス一覧３１１、デバイス情報テーブル３１２、デバイス対応テーブル３１３、デバイス抽象化部３１４、デバイスドライバ１〜Ｍ＿３１５、デバイス入出力送信部３１６を備える。デバイス一覧３１１、デバイス情報テーブル３１２、デバイス抽象化部３１４は、ホストＯＳ２００ａのデバイス一覧２０９、デバイス情報テーブル２１０、デバイス抽象化部２１２と同一である。デバイス対応テーブル３１３は、ゲストＯＳ３００ａのデバイスとホストＯＳ２００ａのデバイスとの対応を表すテーブルである。図１０は、ゲストＯＳのデバイス対応テーブルを示す表である。ホストＯＳデバイス名３２２とゲストＯＳデバイス名３２３とが対応付けられている。図７を参照して、デバイスドライバ１〜Ｍ＿３１５には、ホストＯＳのデバイスドライバ１〜Ｎ＿２１３と同様にデバイス操作関数が記述されている。ただし、ゲストＯＳ３００ａのデバイスドライバ１〜Ｍ＿３１５のデバイス操作関数は、デバイスに対して処理を要求せず、デバイス入出力送信部３１６に入出力要求を転送する処理が記述されている。デバイス入出力送信部３１６は、ホストＯＳ２００ａのデバイス入出力受信部２１１へデバイス入出力要求を転送する。
【００２７】
これらの部、テーブルは以下のように動作する。最初にデバイスドライバ１〜Ｍ＿３１５がホストＯＳ２００ａに登録される動作について説明する。ゲストＯＳ３００ａにおけるデバイス登録はデバイス一覧３１１へのエントリ追加のみであり、リソース管理部２１６によるＩ／Ｏポート２１４の割り当ては行われない。次にユーザからデバイス１〜Ｍ＿１０５（Ｍ≦Ｎ）への入出力要求がデバイスで処理されるまでを説明する。デバイス入出力要求を受け取ったデバイス抽象化部３１４は、デバイス情報テーブル３１２を確認し、すでにデバイス１０５へのアクセスがあり、デバイス情報テーブル３１２に当該デバイス１０５のエントリがあるかどうかを確認する。エントリがある場合は、入出力要求を出したユーザをデバイス情報テーブル３１２の使用者情報に追加する。エントリが無い場合は、新たに当該デバイス１０５に対するエントリをデバイス情報テーブル３１２に登録する。使用者情報追加、またはエントリ追加後、デバイス入出力要求は、ホストＯＳ２００ａのデバイス１０５へデバイス入出力送信部３１６を経由して転送される。ホストＯＳ２００ａへデバイス入出力要求を転送する際は、「ホストＯＳ２００ａのどのデバイス１０５への要求か」を明確にするため、デバイス対応テーブル３１３を参照し、当該デバイス１０５のデバイス名に対応する「ホストＯＳのデバイス名」がデバイス入出力要求に付加される。
【００２８】
以上が仮想計算機システム１０におけるメモリ管理およびデバイス管理の概要である。
【００２９】
関連する技術として、特開平２−２９７６３６号公報にＯＳ制御方式が開示されている。このＯＳ制御方式は、実計算機上で動作する親ＯＳ、この親ＯＳ上で動作するＶＭモニタ及び前記親ＯＳ上で前記ＶＭモニタを介して動作する子ＯＳを備えたビギーバック方式の仮想計算機システムにおいて、前記親ＯＳが何らかの原因で停止する場合に、前記親ＯＳから制御を受けて実計算機上で動作し前記子ＯＳの一つが前記実計算機上で動作可能なように環境を整えて当該子ＯＳに制御を移す親・子ＯＳ切換手段を有することを特徴とする。
【００３０】
【非特許文献１】Ｄａｎ  Ａｌｏｎｉ，“Ｃｏｏｐｅｒａｔｉｖｅ  Ｌｉｎｕｘ”，Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｈｅ  Ｌｉｎｕｘ  Ｓｙｍｐｏｓｉｕｍ，ｐｐ２３−３２，Ｏｔｔａｗａ  Ｏｎｔａｒｉｏ  Ｃａｎａｄａ，Ｊｕｌｙ２１ｔｈ−２４ｔｈ，２００４
【非特許文献２】Ｊｅｆｆ  Ｄｉｋｅ，“Ａ  ｕｓｅｒ−ｍｏｄｅ  ｐｏｒｔ  ｏｆ  ｔｈｅ  Ｌｉｎｕｘ  ｋｅｒｎｅｌ１”，ｈｔｔｐ：／／ｕｓｅｒ−ｍｏｄｅ−ｌｉｎｕｘ．ｓｏｕｒｃｅｆｏｒｇｅ．ｎｅｔ／ａｌｓ２０００／ｉｎｄｅｘ．ｈｔｍｌ
【非特許文献３】Ｄａｎｉｅｌ  Ｐ．Ｂｏｖｅｔ，Ｍａｒｃｏ  Ｃｅｓａｔｉ．“詳解Ｌｉｎｕｘ  カーネル”Ｏ’ＲＥＩＬＬＹ  ＪＡＰＡＮ，  Ｆｅｂ，２００４
【特許文献１】特開平２−２９７６３６号公報
【発明の開示】
【発明が解決しようとする課題】
【００３１】
仮想計算機システムが持つ問題点は、ホストＯＳを停止すると、ゲストＯＳも停止しなければならないということである。その理由は、ハードウェアアクセスについて、ゲストＯＳがホストＯＳに依存しているためである。上述のように、ゲストＯＳのメモリへのアクセスならびに、デバイスへのアクセスは、ホストＯＳを通して行われる。よって、ホストＯＳが停止した場合、ゲストＯＳはメモリならびにデバイスにアクセス出来なくなる。
【００３２】
特開平２−２９７６３６号公報には、親ＯＳと子ＯＳとの間の関係を切り替えるＯＳ制御方式が記載されているが、その具体的手法は明示されておらず、具体的にどのようにすれば子ＯＳが実計算機上で動作可能なように環境を整えられるのかが不明である。例えば、ホストＯＳ及びゲストＯＳのメモリ管理情報及びデバイス管理情報を単に入れ替えただけでは、ホストＯＳで使用しているアプリケーションとゲストＯＳデ使用しているアプリケーションが異なるため、エラーとなり正確な動作を行うことが不可能である。
【００３３】
従って、本発明の目的は、ホストＯＳに障害が発生しても、ゲストＯＳを操作可能とするＯＳ切り替えシステム、仮想計算機システム、ＯＳ切り替え方法及びＯＳ切り替え用プログラムを提供することにある。
【００３４】
本発明の他の目的は、ゲストＯＳを再起動しないで、ハードウェアアクセスについて、ゲストＯＳとホストＯＳの依存関係を切り替えることのできるＯＳ切り替えシステム、仮想計算機システム、ＯＳ切り替え方法及びＯＳ切り替え用プログラムを提供することにある。
【課題を解決するための手段】
【００３５】
以下に、発明を実施するための最良の形態で使用される番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、特許請求の範囲の記載と発明を実施するための最良の形態との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
【００３６】
上記課題を解決するために、本発明のＯＳ切り替えシステムは、ホストＯＳ（２００）と、ホストＯＳ（２００）上で動作するゲストＯＳ（３００）とを具備する。ゲストＯＳ（３００）をホストに、ホストＯＳ（２００）をゲストにそれぞれ切り替えるとき、ゲストＯＳ（３００）が、ゲストＯＳ（３００）のゲストメモリ管理情報（３０３、３０４、３０６）とホストＯＳ（２００）のホストメモリ管理情報（２０３、２０４）とに基づいて、切り替え後のホストＯＳ（２００）のメモリ管理情報となる新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）と、切り替え後のゲストＯＳ（３００）のメモリ管理情報となる新規ホストメモリ管理情報（３０３ａ、３０４ａ）とを生成する。ゲストＯＳ（３００）が、ゲストメモリ管理情報（３０３、３０４、３０６）を新規ホストメモリ管理情報（３０３ａ、３０４ａ）に置き換える。ホストＯＳ（２００）が、ホストメモリ管理情報（２０３、２０４）を新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に置き換える。ホストＯＳ（２００）及びゲストＯＳ（３００）が、実行命令を切り替える。
【００３７】
上記のＯＳ切り替えシステムにおいて、ゲストＯＳ（３００）が、ゲストＯＳ（３００）のゲストデバイス管理情報（３１１、３１３）とホストＯＳ（２００）のホストデバイス管理情報（２０９）とに基づいて、切り替え後のホストＯＳ（２００）のデバイス管理情報となる新規ゲストデバイス管理情報（６１３、６１４）と、切り替え後のゲストＯＳ（３００）のデバイス管理情報となる新規ホストデバイス管理情報（３１１ａ）を生成する。ゲストＯＳ（３００）が、ゲストデバイス管理情報（３１１、３１３）を新規ゲストデバイス管理情報（６１３、６１４）に置き換える。ホストＯＳ（２００）が、ホストデバイス管理情報（２０９）を新規ホストデバイス管理情報（３１１ａ）に置き換える。
【００３８】
上記のＯＳ切り替えシステムにおいて、ゲストＯＳ（３００）は、ホストメモリ管理情報（２０３、２０４）に含まれるホストページ情報テーブル（２０４）とホスト論理アドレステーブル（２０３）とに基づいて、新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に含まれる新規ゲストページ情報テーブル（６１２）、新規ゲスト物理アドレス変換表（６１１）及び新規ゲスト論理アドレステーブル（２０３ａ）を生成するメモリ情報変換部５４０を備える。ホストページ情報テーブル（２０４）は、物理アドレスと当該物理アドレスの使用状況との対応を示す。ホスト論理アドレステーブル（２０３）は、論理アドレスと物理アドレスとの対応を示す。新規ゲストページ情報テーブル（６１２）は、ホストページ情報テーブル（２０４）におけるホストＯＳ（２００）の使用可能な物理アドレスと当該物理アドレスの使用状況との対応を示す。新規ゲスト物理アドレス変換表（６１１）は、新規ゲストページ情報テーブル（６１２）における物理アドレスと仮想物理アドレスとの対応を示す。
新規ゲスト論理アドレステーブル（２０３ａ）は、ホスト論理アドレステーブル（２０３）における論理アドレスと新規ゲスト物理アドレス変換表（６１１）における仮想物理アドレスとの対応を示す。
【００３９】
上記のＯＳ切り替えシステムにおいて、メモリ情報変換部５４０は、更に、ホストページ情報テーブル（２０４）と、ゲストメモリ管理情報（３０３、３０４、３０６）に含まれるゲスト論理アドレステーブル（３０３）及びゲスト物理アドレス変換表（３０６）とに基づいて、新規ホストメモリ管理情報（３０３ａ、３０４ａ）に含まれる新規ホスト論理アドレステーブル（３０３ａ）及び新規ホストページ情報テーブル（３０４ａ）を生成する。ゲスト論理アドレステーブル（３０３）は、ゲストＯＳ（３００）における論理アドレスと仮想物理アドレスとの対応を示す。ゲスト物理アドレス変換表（３０６）は、ゲストＯＳ（３００）における仮想物理アドレスと物理アドレスとの対応を示す。新規ホスト論理アドレステーブル（３０３ａ）は、ゲスト論理アドレステーブル（３０３）における論理アドレスとゲスト物理アドレス変換表（３０６）における物理アドレスとの対応を示す。新規ホストページ情報テーブル（３０４ａ）は、ホストページ情報テーブル（２０４）をゲストＯＳ（３００）用に変更したものである。
【００４０】
上記のＯＳ切り替えシステムにおいて、ゲストＯＳ（３００）は、更に、ゲストデバイス管理情報（３１１、３１３）に含まれるゲストデバイス対応テーブル（３１３）及びゲストデバイス一覧（３１１）と、ホストデバイス管理情報（２０９、２１０）に含まれるホストデバイス一覧（２０９）とに基づいて、新規ゲストデバイス管理情報（６１３、６１４）に含まれる新規ゲストデバイス対応テーブル（６１３）及び新規ゲストデバイス一覧（６１４）を生成するデバイス情報変換部５５０を備える。ゲストデバイス対応テーブル（３１３）は、ゲストＯＳ（３００）の認識するデバイスとホストＯＳ（２００）の認識するデバイスとの対応を示す。ゲストデバイス一覧（３１１）は、ゲストＯＳ（３００）の使用可能なデバイスに関する情報を示す。ホストデバイス一覧（２０９）は、ホストＯＳ（２００）の使用可能なデバイスに関する情報を示す。新規ゲストデバイス一覧（６１４）は、ホストデバイス一覧（２０９）のデバイスのうち、ゲストデバイス対応テーブル（３１３）にあるものについて、当該デバイスのデバイスに関する情報（デバイス名２２３、デバイス操作関数２２２）で、ゲストデバイス一覧（３１１）を更新し、更新されたゲストデバイス一覧（３１１）に、ホストデバイス一覧（２０９）の残りのデバイスのデバイスに関する情報を追加したものである。新規ゲストデバイス対応テーブル（６１３）は、ゲストデバイス対応テーブル（３１３）におけるゲストＯＳ（３００）の認識するデバイスとホストＯＳ（２００）の認識するデバイスとを入れ替えたものである。
【００４１】
上記のＯＳ切り替えシステムにおいて、ゲストＯＳ（３００）は、ゲストＯＳ（３００）のプロセスのプロセス情報をホストＯＳ（２００）のプロセスのプロセス情報とし、ホストＯＳ（２００）のプロセスのメモリ情報を新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に基づいて書き換え、ホストＯＳ（２００）のプロセスのレジスタ情報をホストＯＳ（２００）のレジスタ情報に書き換え、スケジューリングキューにホストＯＳ（２００）のプロセスを登録するホストプロセス生成部（５７０）を備える。
【００４２】
上記のＯＳ切り替えシステム（２０）と、ＯＳ切り替えシステム（２０）に使用されるハードウェア（１００）とを具備する仮想計算機システム。
【００４３】
上記課題を解決するために本発明のＯＳ切り替え方法は、（ａ）ゲストＯＳ（３００）をホストに、ホストＯＳ（２００）をゲストにそれぞれ切り替えるとき、ゲストＯＳ（３００）が、ゲストＯＳ（３００）のゲストメモリ管理情報（３０３、３０４、３０６）及びホストＯＳ（２００）のホストメモリ管理情報（２０３、２０４）に基づいて、切り替え後のホストＯＳ（２００）のメモリ管理情報となる新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）と、切り替え後のゲストＯＳ（３００）のメモリ管理情報となる新規ホストメモリ管理情報（３０３ａ、３０４ａ）とを生成するステップと、（ｂ）ゲストＯＳ（３００）が、ゲストメモリ管理情報（３０３、３０４、３０６）を新規ホストメモリ管理情報（３０３ａ、３０４ａ）に置き換えるステップと、（ｃ）ホストＯＳ（２００）が、ホストメモリ管理情報（２０３、２０４）を新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に置き換えるステップと、（ｄ）ホストＯＳ（２００）及びゲストＯＳ（３００）が、実行命令を切り替えるステップとを具備する。
【００４４】
上記のＯＳ切り替え方法において、（ｅ）ゲストＯＳ（３００）が、ゲストＯＳ（３００）のゲストデバイス管理情報（３１１、３１３）とホストＯＳ（２００）のホストデバイス管理情報（２０９）とに基づいて、切り替え後のホストＯＳ（２００）のデバイス管理情報となる新規ゲストデバイス管理情報（６１３、６１４）と、切り替え後のゲストＯＳ（３００）のデバイス管理情報となる新規ホストデバイス管理情報（３１１ａ）を生成するステップと、（ｆ）ゲストＯＳ（３００）が、ゲストデバイス管理情報（３１１、３１３）を新規ゲストデバイス管理情報（６１３、６１４）に置き換えるステップと、（ｇ）ホストＯＳ（２００）が、ホストデバイス管理情報（２０９）を新規ホストデバイス管理情報（３１１ａ）に置き換えるステップとを更に具備する。
【００４５】
上記のＯＳ切り替え方法において、（ａ）ステップは、（ａ１）ホストメモリ管理情報（２０３、２０４）に含まれるホストページ情報テーブル（２０４）とホスト論理アドレステーブル（２０３）とに基づいて、新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に含まれる新規ゲストページ情報テーブル（６１２）、新規ゲスト物理アドレス変換表（６１１）及び及び新規ゲスト論理アドレステーブル（２０３ａ）を生成するステップを備える。ホスト論理アドレステーブル（２０３）は、論理アドレスと物理アドレスとの対応を示す。新規ゲストページ情報テーブル（６１２）は、ホストページ情報テーブル（２０４）におけるホストＯＳ（２００）の使用可能な物理アドレスと当該物理アドレスの使用状況との対応を示す。新規ゲスト物理アドレス変換表（６１１）は、新規ゲストページ情報テーブル（６１２）における物理アドレスと仮想物理アドレスとの対応を示す。新規ゲスト論理アドレステーブル（２０３ａ）は、ホスト論理アドレステーブル（２０３）における論理アドレスと新規ゲスト物理アドレス変換表（６１１）における仮想物理アドレスとの対応を示す。
【００４６】
上記のＯＳ切り替え方法において、（ａ）ステップは、（ａ２）ホストページ情報テーブル（２０４）と、ゲストメモリ管理情報（３０３、３０４、３０６）に含まれるゲスト論理アドレステーブル（３０３）及びゲスト物理アドレス変換表（３０６）とに基づいて、新規ホストメモリ管理情報（３０３ａ、３０４ａ）に含まれる新規ホスト論理アドレステーブル（３０３ａ）及び新規ホストページ情報テーブル（３０４ａ）を生成するステップを更に備える。ゲスト論理アドレステーブル（３０３）は、ゲストＯＳ（３００）における論理アドレスと仮想物理アドレスとの対応を示す。
ゲスト物理アドレス変換表（３０６）は、ゲストＯＳ（３００）における仮想物理アドレスと物理アドレスとの対応を示す。新規ホスト論理アドレステーブル（３０３ａ）は、ゲスト論理アドレステーブル（３０３）における論理アドレスとゲスト物理アドレス変換表（３０６）における物理アドレスとの対応を示す。新規ホストページ情報テーブル（３０４ａ）は、ホストページ情報テーブル（２０４）をゲストＯＳ（３００）用に変更したものである。
【００４７】
上記のＯＳ切り替え方法において、（ｅ）ステップは、（ｅ１）ゲストデバイス管理情報（３１１、３１３）に含まれるゲストデバイス対応テーブル（３１３）及びゲストデバイス一覧（３１１）と、ホストデバイス管理情報（２０９、２１０）に含まれるホストデバイス一覧（２０９）とに基づいて、新規ゲストデバイス管理情報（６１３、６１４）に含まれる新規ゲストデバイス対応テーブル（６１３）及び新規ゲストデバイス一覧（６１４）を生成するステップを備える。ゲストデバイス対応テーブル（３１３）は、ゲストＯＳ（３００）の認識するデバイスとホストＯＳ（２００）の認識するデバイスとの対応を示す。ゲストデバイス一覧（３１１）は、ゲストＯＳ（３００）の使用可能なデバイスに関する情報を示す。ホストデバイス一覧（２０９）は、ホストＯＳ（２００）の使用可能なデバイスに関する情報を示す。新規ゲストデバイス一覧（６１４）は、ホストデバイス一覧（２０９）のデバイスのうち、ゲストデバイス対応テーブル（３１３）にあるものについて、当該デバイスのデバイスに関する情報（デバイス名２２３、デバイス操作関数２２２）で、ゲストデバイス一覧（３１１）を更新し、更新されたゲストデバイス一覧（３１１）に、ホストデバイス一覧（２０９）の残りのデバイスのデバイスに関する情報を追加したものである。新規ゲストデバイス対応テーブル（６１３）は、ゲストデバイス対応テーブル（３１３）におけるゲストＯＳ（３００）の認識するデバイスとホストＯＳ（２００）の認識するデバイスとを入れ替えたものである。
【００４８】
上記のＯＳ切り替え方法において、（ｄ）ステップは、（ｄ１）ゲストＯＳ（３００）のプロセスのプロセス情報を、ホストＯＳ（２００）のプロセスのプロセス情報とするステップと、（ｄ２）ホストＯＳ（２００）のプロセスのメモリ情報を新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に基づいて書き換えるステップと、（ｄ３）ホストＯＳ（２００）のプロセスのレジスタ情報をホストＯＳ（２００）のレジスタ情報に書き換えるステップと、（ｄ４）スケジューリングキューにホストＯＳ（２００）のプロセスを登録するステップとを備える。
【００４９】
上記課題を解決するために本発明のプログラムは、（ａ）ゲストＯＳ（３００）をホストに、ホストＯＳ（２００）をゲストにそれぞれ切り替えるとき、ゲストＯＳ（３００）が、ゲストＯＳ（３００）のゲストメモリ管理情報（３０３、３０４、３０６）及びホストＯＳ（２００）のホストメモリ管理情報（２０３、２０４）に基づいて、切り替え後のホストＯＳ（２００）のメモリ管理情報となる新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）と、切り替え後のゲストＯＳ（３００）のメモリ管理情報となる新規ホストメモリ管理情報（３０３ａ、３０４ａ）とを生成するステップと、（ｂ）ゲストＯＳ（３００）が、ゲストメモリ管理情報（３０３、３０４、３０６）を新規ホストメモリ管理情報（３０３ａ、３０４ａ）に置き換えるステップと、（ｃ）ホストＯＳ（２００）が、ホストメモリ管理情報（２０３、２０４）を新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に置き換えるステップと、（ｄ）ホストＯＳ（２００）及びゲストＯＳ（３００）が、実行命令を切り替えるステップとを具備するＯＳ切り替え方法をコンピュータに実行させる。
【００５０】
上記のプログラムにおいて、（ｅ）ゲストＯＳ（３００）が、ゲストＯＳ（３００）のゲストデバイス管理情報（３１１、３１３）とホストＯＳ（２００）のホストデバイス管理情報（２０９）とに基づいて、切り替え後のホストＯＳ（２００）のデバイス管理情報となる新規ゲストデバイス管理情報（６１３、６１４）と、切り替え後のゲストＯＳ（３００）のデバイス管理情報となる新規ホストデバイス管理情報（３１１ａ）を生成するステップと、（ｆ）ゲストＯＳ（３００）が、ゲストデバイス管理情報（３１１、３１３）を新規ゲストデバイス管理情報（６１３、６１４）に置き換えるステップと、（ｇ）ホストＯＳ（２００）が、ホストデバイス管理情報（２０９）を新規ホストデバイス管理情報（３１１ａ）に置き換えるステップとを更に具備する。
【００５１】
上記のプログラムにおいて、（ａ）ステップは、（ａ１）ホストメモリ管理情報（２０３、２０４）に含まれるホストページ情報テーブル（２０４）とホスト論理アドレステーブル（２０３）とに基づいて、新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に含まれる新規ゲストページ情報テーブル（６１２）、新規ゲスト物理アドレス変換表（６１１）及び及び新規ゲスト論理アドレステーブル（２０３ａ）を生成するステップを備える。ホスト論理アドレステーブル（２０３）は、論理アドレスと物理アドレスとの対応を示す。新規ゲストページ情報テーブル（６１２）は、ホストページ情報テーブル（２０４）におけるホストＯＳ（２００）の使用可能な物理アドレスと当該物理アドレスの使用状況との対応を示す。新規ゲスト物理アドレス変換表（６１１）は、新規ゲストページ情報テーブル（６１２）における物理アドレスと仮想物理アドレスとの対応を示す。新規ゲスト論理アドレステーブル（２０３ａ）は、ホスト論理アドレステーブル（２０３）における論理アドレスと新規ゲスト物理アドレス変換表（６１１）における仮想物理アドレスとの対応を示す。
【００５２】
上記のプログラムにおいて、（ａ）ステップは、（ａ２）ホストページ情報テーブル（２０４）と、ゲストメモリ管理情報（３０３、３０４、３０６）に含まれるゲスト論理アドレステーブル（３０３）及びゲスト物理アドレス変換表（３０６）とに基づいて、新規ホストメモリ管理情報（３０３ａ、３０４ａ）に含まれる新規ホスト論理アドレステーブル（３０３ａ）及び新規ホストページ情報テーブル（３０４ａ）を生成するステップを更に備える。ゲスト論理アドレステーブル（３０３）は、ゲストＯＳ（３００）における論理アドレスと仮想物理アドレスとの対応を示す。ゲスト物理アドレス変換表（３０６）は、ゲストＯＳ（３００）における仮想物理アドレスと物理アドレスとの対応を示す。新規ホスト論理アドレステーブル（３０３ａ）は、ゲスト論理アドレステーブル（３０３）における論理アドレスとゲスト物理アドレス変換表（３０６）における物理アドレスとの対応を示す。新規ホストページ情報テーブル（３０４ａ）は、ホストページ情報テーブル（２０４）をゲストＯＳ（３００）用に変更したものである。
【００５３】
上記のプログラムにおいて、（ｅ）ステップは、（ｅ１）ゲストデバイス管理情報（３１１、３１３）に含まれるゲストデバイス対応テーブル（３１３）及びゲストデバイス一覧（３１１）と、ホストデバイス管理情報（２０９、２１０）に含まれるホストデバイス一覧（２０９）とに基づいて、新規ゲストデバイス管理情報（６１３、６１４）に含まれる新規ゲストデバイス対応テーブル（６１３）及び新規ゲストデバイス一覧（６１４）を生成するステップを備える。ゲストデバイス対応テーブル（３１３）は、ゲストＯＳ（３００）の認識するデバイスとホストＯＳ（２００）の認識するデバイスとの対応を示す。ゲストデバイス一覧（３１１）は、ゲストＯＳ（３００）の使用可能なデバイスに関する情報を示す。ホストデバイス一覧（２０９）は、ホストＯＳ（２００）の使用可能なデバイスに関する情報を示す。新規ゲストデバイス一覧（６１４）は、ホストデバイス一覧（２０９）のデバイスのうち、ゲストデバイス対応テーブル（３１３）にあるものについて、当該デバイスのデバイスに関する情報（デバイス名２２３、デバイス操作関数２２２）で、ゲストデバイス一覧（３１１）を更新し、更新されたゲストデバイス一覧（３１１）に、ホストデバイス一覧（２０９）の残りのデバイスのデバイスに関する情報を追加したものである。新規ゲストデバイス対応テーブル（６１３）は、ゲストデバイス対応テーブル（３１３）におけるゲストＯＳ（３００）の認識するデバイスとホストＯＳ（２００）の認識するデバイスとを入れ替えたものである。
【００５４】
上記のプログラムにおいて、（ｄ）ステップは、（ｄ１）ゲストＯＳ（３００）のプロセスのプロセス情報を、ホストＯＳ（２００）のプロセスのプロセス情報とするステップと、（ｄ２）ホストＯＳ（２００）のプロセスのメモリ情報を新規ゲストメモリ管理情報（２０３ａ、６１１、６１２）に基づいて書き換えるステップと、（ｄ３）ホストＯＳ（２００）のプロセスのレジスタ情報をホストＯＳ（２００）のレジスタ情報に書き換えるステップと、（ｄ４）スケジューリングキューにホストＯＳ（２００）のプロセスを登録するステップとを備える。
【発明の効果】
【００５５】
本発明では、仮想計算機システムにおいて、ゲストＯＳ（３００）をホストにしホストＯＳ（２００）をゲストにそれぞれ切り替えるとき、ホストＯＳ（２００）及びゲストＯＳ（３００）の切り替え前のメモリ管理情報／デバイス管理情報に基づいて、切り替え後に用いるメモリ管理情報／デバイス管理情報を新たに生成している。そのため、切り替え前後でメモリ管理情報／デバイス管理情報に矛盾が発生すること無く、ゲストＯＳを再起動しないでスムーズな切り替えが可能となる。そして、ゲストＯＳを再起動しないで、ハードウェアアクセスについて、ゲストＯＳとホストＯＳの依存関係を切り替えることが可能となる。
【発明を実施するための最良の形態】
【００５６】
以下、本発明のＯＳ切り替えシステム、仮想計算機システム、ＯＳ切り替え方法及びＯＳ切り替え用プログラムの実施の形態に関して、添付図面を参照して説明する。
【００５７】
図１１は、本発明のＯＳ切り替えシステムを適用した仮想計算機システムの実施の形態を示す概略構成図である。仮想計算機システム１０は、ホストＯＳ２００、ゲストＯＳ３００及びハードウェア１００を備える。ホストＯＳ２００は、ハードウェア１００を制御するプログラムである。ホストＯＳ２００上では、ホストＯＳ２００のアプリケーションであるホストＯＳアプリケーション２０１−１〜２０１−ｍが動作する。ゲストＯＳ３００上では、ゲストＯＳのアプリケーションであるゲストＯＳアプリケーション３０１−１〜３０１−ｎが動作する。ゲストＯＳ３００は、ホストＯＳ２００のアプリケーションの一種である。これらは、ＣＰＵ（図示されず）により制御される。ホストＯＳ２００、ゲストＯＳ３００及びハードウェア１００は、それぞれ、図１〜図１０に関連して説明されたホストＯＳ２００ａ、ゲストＯＳ３００ａ及びハードウェア１００ａの機能を含む。
【００５８】
本発明のＯＳ切り替えシステムは、ホストＯＳ２００をゲストに、ゲストＯＳ３００をホストに切り替える。すなわち、ホストＯＳ２００を新規ゲストＯＳに、ゲストＯＳ３００を新規ホストＯＳに、それぞれ切り替える。
【００５９】
図１２は、本発明のＯＳ切り替えシステムの実施の形態の構成を示すブロック図である。は、ＯＳ切り替えシステム２０は、ゲストＯＳ３００側にメモリ情報退避部５００、デバイス情報退避部５１０、メモリ情報取得部５２０、デバイス情報取得部５３０、メモリ情報変換部５４０、デバイス情報変換部５５０、実行命令切り替え部５６０、ホストプロセス生成部５７０、コンテキスト情報取得部５８０、プロセス情報取得部５９０を備える。加えて、ホストＯＳ２００側に、メモリ情報退避部４００、デバイス情報退避部４１０、メモリ情報取得部４２０、デバイス情報取得部４３０、メモリ情報入れ替え部４４０、デバイス情報入れ替え部４５０、実行命令切り替え部４６０、コンテキスト情報退避部４７０、プロセス情報取得部４８０を備える。これらの各構成は、ソフトウェアの他、ハードウェア、又は、ソフトウェア及びハードウェアの組み合わせにより実施することも可能である。ＯＳ切り替えシステム２０は、更に、ハードウェア１００の主記憶装置１１０上にＯＳ状態退避領域６００を備える。主記憶装置１１０は、例えば物理メモリである。
【００６０】
ＯＳ状態退避領域６００は、ゲストＯＳ３００とホストＯＳ２００のメモリ管理情報とデバイス管理情報、ホストＯＳ２００のコンテキスト情報を格納しておくための領域である。図１３は、ＯＳ状態退避領域６００を示すブロック図である。ＯＳ状態退避領域６００は物理メモリ上に配置される。ＯＳ状態退避領域６００は、ゲストＯＳ状態退避領域６１０とホストＯＳ状態退避領域６２０を備える。ゲストＯＳ状態退避領域６１０はゲストＯＳ３００が作成した新規ゲストＯＳ用のメモリ管理情報とデバイス管理情報を格納する。ここで、メモリ管理情報は、新規ゲストＯＳ用物理アドレス変換表６１１及び新規ゲストＯＳ用ページ情報テーブル６１２を含む。デバイス管理情報は、新規ゲストＯＳ用デバイス対応テーブル６１３及び新規ゲストＯＳ用デバイス一覧６１４を含む。ホストＯＳ状態退避領域６２０は、ホストＯＳ２００で使用しているメモリ管理情報、デバイス管理情報及びコンテキスト情報２２７を格納する。ここで、メモリ管理情報は、ページ情報テーブル２０４を含む。デバイス管理情報は、デバイス情報テーブル２１０及びデバイス一覧２０９を含む。
【００６１】
図１２を参照して、メモリ情報退避部４００はホストＯＳ２００に、メモリ情報退避部５００はゲストＯＳ３００にそれぞれ配置される。メモリ情報退避部４００は、ホストＯＳ２００自身の使用しているページ情報テーブル２０４を、ＯＳ状態退避領域６００内のホストＯＳ状態退避領域６２０に格納する。メモリ情報退避部５００は、ゲストＯＳ３００が作成した新規ゲストＯＳ用物理アドレス変換表６１１、新規ゲストＯＳ用ページ情報テーブル６１２をＯＳ状態退避領域６００内のゲストＯＳ状態退避領域６１０に格納する。
【００６２】
デバイス情報退避部４１０はホストＯＳ２００に、デバイス情報退避部５１０はゲストＯＳ３００にそれぞれ配置される。デバイス情報退避部４１０は、ホストＯＳ２００自身の使用しているデバイス情報テーブル２１０、デバイス一覧２０９をＯＳ状態退避領域６００内のホストＯＳ状態退避領域６２０に格納する。デバイス情報退避部５１０は、ゲストＯＳ３００が作成した新規ゲストＯＳ用デバイス対応テーブル６１３、新規ゲストＯＳ用デバイス一覧６１４をゲストＯＳ状態退避領域６１０に格納する。
【００６３】
メモリ情報取得部４２０はホストＯＳ２００に、メモリ情報取得部５２０はゲストＯＳ３００にそれぞれ配置される。メモリ情報取得部４２０は、ゲストＯＳ３００が作成した新規ゲストＯＳ用物理アドレス変換表６１１、新規ゲストＯＳ用ページ情報テーブル６１２を、ＯＳ状態退避領域内６００のゲストＯＳ状態退避領域６１０から取得する。メモリ情報取得部５２０は、ホストＯＳ２００によって格納されたページ情報テーブル２０４をＯＳ状態退避領域６００内のホストＯＳ状態退避領域６２０から取得する。
【００６４】
デバイス情報取得部４３０はホストＯＳ２００に、デバイス情報取得部５３０はゲストＯＳ３００にそれぞれ配置される。デバイス情報取得部４３０は、ゲストＯＳ３００が作成した新規ゲストＯＳ用デバイス対応テーブル６１３、新規ゲストＯＳ用デバイス一覧６１４をゲストＯＳ状態退避領域６１０から取得する。デバイス情報取得部５３０は、ホストＯＳ２００によって格納されたデバイス情報テーブル２１０、デバイス一覧２０９をＯＳ状態退避領域６００内のホストＯＳ状態退避領域６２０から取得する。
【００６５】
メモリ情報変換部５４０は、ゲストＯＳ３００に配置される。メモリ情報取得部５２０によって取得したホストＯＳ２００のページ情報テーブル２０４に基づいて、ページ情報テーブル３０４を新規ホストＯＳ用ページ情報テーブル３０４ａに書き換える。また、新規ホストＯＳ用ページ情報テーブル３０４ａと論理アドレステーブル３０３及び物理アドレス変換表３０６とに基づいて、論理アドレステーブル３０３を新規ホストＯＳ用論理アドレステーブル３０３ａに書き換える。それとともに、新規ホストＯＳ用ページ情報テーブル３０４ａに基づいて、新たに新規ゲストＯＳ用ページ情報テーブル６１２を生成する。加えて、新規ホストＯＳ用ページ情報テーブル３０４ａ及び論理アドレステーブル２０３に基づいて、新たに新規ゲストＯＳ用物理アドレス変換表６１１を作成するとともに、論理アドレステーブル２０３を新規ゲストＯＳ用論理アドレステーブル２０３ａに書き換える。新規ゲストＯＳ用ページ情報テーブル６１２は、ＯＳ切り替え前に使用していたページ情報テーブル２０４からゲストＯＳ３００が使用しているページを削除したものに相当する。新規ゲストＯＳ用物理アドレス変換表６１１は、ゲストＯＳ３００が使用している物理メモリアドレスを除いた物理メモリアドレスに連番を割り当てていくことによって作成する。
【００６６】
デバイス情報変換部５５０は、ゲストＯＳ３００に配置される。デバイス情報取得部５３０によって取得したホストＯＳ２００のデバイス情報テーブル２１０及びデバイス一覧２０９と、ゲストＯＳ３００が使用しているデバイス対応テーブル３１３及びデバイス一覧３１１とに基づいて、ホストＯＳ２００のデバイスドライバをゲストＯＳ３００に登録し、新規ホストＯＳ用デバイス一覧３１１ａを生成する。同様に、ゲストＯＳ３００のデバイスドライバをホストＯＳ２００に登録し、新たに新規ゲストＯＳ用デバイス一覧６１４を作成する。加えて、デバイス対応テーブル３１３のホスト側のデータ３２２とゲスト側のデータ３２３を入れ替えて、新たに新規ゲストＯＳ用デバイス対応テーブル６１３を生成する。
【００６７】
メモリ情報入れ替え部４４０は、ホストＯＳ２００に配置される。ホストＯＳ２００のメモリ情報取得部５２０によって取得した新規ゲストＯＳ用ページ情報テーブル６１２と新規ゲストＯＳ用物理アドレス変換表６１１を使って、ホストＯＳ２００の論理アドレステーブル２０３に記載された物理アドレス２１８を仮想物理アドレス３１８に入れ替える。それとともに、ページ情報テーブル２０４を新規ゲストＯＳ用ページ情報テーブル６１２に置き換える。
【００６８】
デバイス情報入れ替え部４５０は、ホストＯＳ２００のデバイス情報取得部４３０によって取得した新規ゲストＯＳ用デバイス一覧６１４と新規ゲストＯＳ用デバイス対応テーブル６１３を使って、新たにデバイスドライバを登録していく。
【００６９】
コンテキスト情報退避部４７０は、ホストＯＳ２００に配置される。ホストＯＳアプリケーションのレジスタ情報をＯＳ状態退避領域６００の中のホストＯＳ状態退避領域６２０に格納する。背景技術におけるコンテキストスイッチにおいて説明したとおり、ホストＯＳ２００がゲストＯＳに、ゲストＯＳ３００がホストＯＳに切り替わる際、それまで動作させていたホストＯＳアプリケーションのレジスタ情報や、次に実行すべき命令の格納されたメモリアドレス（以下、プログラムカウンタと呼ぶ。）が、アプリケーションの実行中断状態（コンテキスト情報２２７）として、ホストＯＳ２００の管理するデータ領域に格納される。すなわち、コンテキスト情報退避部４７０は、プログラムカウンタやレジスタ情報などの実行中断状態（コンテキスト情報２２７）を退避させる。
【００７０】
コンテキスト情報取得部５８０は、ゲストＯＳ３００に配置される。コンテキスト情報退避部４７０によって格納されたコンテキスト情報２２７を取得する。ホストプロセス生成部５７０は、ゲストＯＳ３００に配置される。ゲストＯＳ３００上でホストＯＳ２００の主体となるプロセスを生成する。
【００７１】
実行命令切り替え部４６０はホストＯＳ２００に、実行切り替え部５６０はゲストＯＳ３００にそれぞれ配置される。実行命令切り替え部４６０、５６０は、上記各部の動作が終了した時点で、ゲストＯＳ３００とホストＯＳ２００で使用していたメモリならびにデバイス操作関数を切り替える。ゲストＯＳ３００は、通常（ホストＯＳ）のメモリ管理とは異なり、物理アドレス変換表３０６を持ち、物理アドレス変換部３０７をメモリ操作関数として持っている。上記各部の実行後、ゲストＯＳ３００はホストＯＳとして振る舞うため、ホストＯＳ２００が使用していたメモリ操作関数に切り替える必要がある。デバイスについても同様である。ただし、これらの操作関数は、実行命令切り替え部４６０、５６０の両方が各々持っているものとする。
【００７２】
プロセス情報取得部４８０はホストＯＳ２００に、プロセス情報取得部５９０はゲストＯＳ３００にそれぞれ配置される。それぞれホストＯＳ２００及びゲストＯＳ３００において、プロセス情報のリストからプロセス情報を取得し、使用中デバイス１０５の有無を確認する。使用中デバイス１０５が有れば、当該デバイス１０５への要求を取り消してプロセスにエラーを返す。
【００７３】
次に、本発明のＯＳ切り替えシステムの実施の形態の動作（ＯＳ切り替え方法の実施の形態）について説明する。図１４〜図１６は、本発明のＯＳ切り替えシステムの実施の形態の動作を示すフローチャートである。
【００７４】
図１４は、特に、ホストＯＳ２００の動作を表している。まず、プロセス情報取得部４８０は、プロセス情報のリストからプロセス情報を取得する（Ｓ１）。プロセス情報とはアプリケーションプログラム２０１の一つにつき一つ作成される実行中プログラムの状態を表すものである。プロセス情報には、当該アプリケーションプログラム２０１におけるプロセスが入出力要求を出しているデバイス１０５の情報が格納されている。すなわち、プロセス情報は、当該アプリケーションプログラムにおけるプロセスと、入出力要求を出しているデバイスとを関連付けている。そして、プロセス情報のリストは、アプリケーションプログラムとプロセス情報とを関連付けている。プロセス情報のリストはＯＳ２００が保持している。リストの終端、すなわちすべてのプロセスについてプロセス情報の取得が終了した時点で、次のステップ（Ｓ６）を実行する（Ｓ２：ＹＥＳ）。すべてのプロセスについてプロセス情報の取得が終了していない場合（Ｓ２：ＮＯ）、プロセス情報取得部４８０は、プロセス情報から使用中デバイス１０５の有無を確認する（Ｓ３）。使用中デバイス１０５が有れば（Ｓ４：ＹＥＳ）、プロセス情報取得部４８０は、当該デバイス１０５への要求を取り消してプロセスにエラーを返す（Ｓ５）。当該プロセスに関して、使用中のデバイス１０５が無ければ（Ｓ４：ＮＯ）、プロセス情報取得部４８０は、次のプロセス情報を取得する。ここまでの作業は、デバイス入出力中の状態をなくして、いつでもデバイスドライバ２１３を取り替えることのできるように準備する作業である。
【００７５】
次に、メモリ情報退避部４００は、ページ情報テーブル２０４をホストＯＳ状態退避領域６２０へコピーする（Ｓ６）。続いて、デバイス情報退避部４１０は、デバイス情報テーブル２１０をホストＯＳ状態退避領域６２０へコピーし（Ｓ７）、デバイス一覧２０９をホストＯＳ状態退避領域６２０へコピーする（Ｓ８）。そして、コンテキスト情報退避部４７０は、コンテキスト情報２２７をＯＳ状態退避領域６２０へコピーする（Ｓ９）。その後、従来と同様な方法で、ゲストＯＳ３００へコンテキストスイッチする（Ｓ１０）。
【００７６】
図１５は、図１４の続きであり、特に、ゲストＯＳ３００の動作を表している。まず、プロセス情報取得部５９０は、プロセス情報のリストからプロセス情報を取得する（Ｓ１１）。プロセス情報とはアプリケーションプログラム３０１の一つにつき一つ作成される実行中プログラムの状態を表すものである。プロセス情報には、当該アプリケーションプログラム３０１におけるプロセスが入出力要求を出しているデバイス１０５の情報が格納されている。すなわち、プロセス情報は、当該アプリケーションプログラムにおけるプロセスと、入出力要求を出しているデバイスとを関連付けている。そして、プロセス情報のリストは、アプリケーションプログラムとプロセス情報とを関連付けている。プロセス情報のリストはＯＳ３００が保持している。リストの終端、すなわちすべてのプロセスについてプロセス情報の取得が終了した時点で、次のステップ（Ｓ１６）を実行する（Ｓ１２：ＹＥＳ）。すべてのプロセスについてプロセス情報の取得が終了していない場合（Ｓ１２：ＮＯ）、プロセス情報取得部５９０は、プロセス情報から使用中デバイス１０５の有無を確認する（Ｓ１３）。使用中デバイス１０５が有れば（Ｓ１４：ＹＥＳ）、プロセス情報取得部５９０は、当該デバイス１０５への要求を取り消してプロセスにエラーを返す（Ｓ１５）。当該プロセスに関して、使用中のデバイス１０５が無ければ（Ｓ１４：ＮＯ）、プロセス情報取得部５９０は、次のプロセス情報を取得する。ここまでの作業は、デバイス入出力中の状態をなくして、いつでもデバイスドライバ３１５を取り替えることのできるように準備する作業である。
【００７７】
次に、メモリ情報取得部５２０はＳ６で保存されたページ情報テーブル２０４を、デバイス情報取得部５３０はＳ７で保存されたデバイス情報テーブル２１０及びＳ８で保存されたデバイス一覧２０９を、それぞれＯＳ状態退避領域６００のホストＯＳ状態退避領域６２０から取得する（Ｓ１６）。メモリ情報変換部５４０は、それらのホストＯＳ２００の情報（ページ情報テーブル２０４、デバイス情報テーブル２１０及びデバイス一覧２０９）に基づいて、自身のページ情報テーブル３０４を新規ホストＯＳ用ページ情報テーブル３０４ａに、論理アドレステーブル３０３を新規ホストＯＳ用論理アドレステーブル３０３ａにそれぞれ書き換える（Ｓ１７）。その後、メモリ情報変換部５４０は、新規ホストＯＳ用ページ情報テーブル３０４ａに基づいて、新規ゲストＯＳ用ページ情報テーブル６１２と新規ゲストＯＳ用物理アドレス変換表６１１を作成する。そして、メモリ情報退避部５００は、新規ゲストＯＳ用ページ情報テーブル６１２と新規ゲストＯＳ用物理アドレス変換表６１１をゲストＯＳ状態退避領域６１０に格納する（Ｓ１８）。Ｓ１７とＳ１８におけるメモリ情報変換部５４０の詳細な動作は後述する。
【００７８】
次に、デバイス情報変換部５５０は、ホストＯＳ２００のデバイス情報テーブル２１０及びデバイス一覧２０９と、ゲストＯＳ３００のデバイス対応テーブル３１３及びデバイス一覧３１１とに基づいて、新規ホストＯＳ用デバイス一覧３１１ａを生成する（Ｓ１９）。そして、デバイス情報変換部５５０は、同様に、ゲストＯＳ３００のデバイスドライバをホストＯＳ２００に登録し、新たに新規ゲストＯＳ用デバイス一覧６１４を作成する。加えて、デバイス対応テーブル３１３のホスト側のホストＯＳデバイス名３２２とゲスト側のゲストＯＳデバイス名３２３とを入れ替えて、新たに新規ゲストＯＳ用デバイス対応テーブル６１３を生成する。デバイス情報退避部５１０は、新規ゲストＯＳ用デバイス対応テーブル６１３と新規ゲストＯＳ用デバイス一覧６１４をゲストＯＳ状態退避領域６１０に格納する（Ｓ２０）。Ｓ１９とＳ２０におけるデバイス情報変換部５５０の詳細な動作は後述する。
【００７９】
次に、ホストプロセス生成部５７０は、新たにホストＯＳとなるプロセスを生成する（Ｓ２１）。ホストプロセスの生成の詳細については後述する。そして、実行命令切り替え部５６０は、実行命令を切り替える（Ｓ２２）。ここまでの動作によって、ゲストＯＳ３００は新たなホストＯＳとして実行されることになる。すなわち、ゲストＯＳ３００が、元のホストＯＳ２００の機能を果たすことで、ゲストＯＳ３００は新たなホストＯＳとして動作することが出来る。その後、最後にホストＯＳ２００へコンテキストスイッチを行う（Ｓ２３）。
【００８０】
図１６は、特に、ホストＯＳ２００（新たなゲストＯＳ）の動作を表している。まず、メモリ情報取得部４２０は新規ゲストＯＳ用物理アドレス変換表６１１及び新規ゲストＯＳ用ページ情報テーブル６１２を、デバイス情報取得部４３０は新規ゲストＯＳ用デバイス対応テーブル６１３及び新規ゲストＯＳ用デバイス一覧６１４を、それぞれゲストＯＳ状態退避領域６１０から取得する（Ｓ２４）。次に、メモリ情報入れ替え部４４０は、新規ゲストＯＳ用物理アドレス変換表６１１を追加し、ページ情報テーブル２０４を新規ゲストＯＳ用ページ情報テーブル６１２に入れ替え、論理アドレステーブル２０３を書き換える（Ｓ２５）。具体的には、論理アドレステーブル２０３に記載されている物理アドレス２１８を仮想物理アドレスに書き換えて、新規ゲストＯＳ用論理アドレステーブル２０３ａとする作業を指す。この作業に新規ゲストＯＳ用物理アドレス変換表６１１を用いる。そして、これまで使用していたページ情報テーブル２０４を新しく取得した新規ゲストＯＳ用ページ情報テーブル６１２に置き換える。
【００８１】
次に、デバイス情報入れ替え部４５０は、新規ゲストＯＳ用の情報を使ってデバイス１０５を入れ替える（Ｓ２６）。具体的には、新規ゲストＯＳ用デバイス対応テーブル６１３をホストＯＳ２００内に新たに設けるとともに、デバイス一覧２０９を新規ゲストＯＳ用デバイス一覧６１４に入れ替えて、新規ゲストＯＳ用デバイス一覧６１４に記載されているデバイスのデバイスドライバを新たに登録していく作業を指す。なお、使われなくなったデバイスドライバはこの作業にともない登録を抹消する。最後に、実行命令切り替え部４６０は、ホストＯＳ２００の実行命令を切り替える。ここまでの動作によって、ホストＯＳ２００は新たなゲストＯＳとして実行されることになる。
【００８２】
以上が本発明のＯＳ切り替えシステムの実施の形態の全体の動作である。
【００８３】
次に、メモリ情報変換部５４０の動作の詳細について説明する。
図１７は、Ｓ１７、Ｓ１８におけるメモリ情報変換部の動作を示すフローチャートである。図２０は、Ｓ１７における新規ホストＯＳ用ページ情報テーブル３０４ａの生成過程を示す一例である。図２１は、Ｓ１７における新規ホストＯＳ用論理アドレステーブル３０３ａの生成過程を示す一例である。図２２は、Ｓ１８における新規ゲストＯＳ用ページ情報テーブルの生成過程を示す一例である。図２３は、Ｓ１８において生成される新規ゲストＯＳ用物理アドレス変換表６１１を示す一例である。図２４は、Ｓ１８における新規ゲストＯＳ用論理アドレステーブル２０３ａの生成過程を示す一例である。
【００８４】
図１７を参照して、メモリ情報変換部５４０は、ホストＯＳ２００から取得したページ情報テーブル２０４をコピーする（Ｓ３１）。図２０（ａ）におけるページ情報テーブル２０４を参照すると、ページ情報テーブル２０４は、ページ番号２１９と使用中フラグ２２０とを関連付けている。ページ番号２１９は、既述のように物理アドレスが関連付けられており、以下の説明では簡単のために、物理アドレスとページ番号とは１：１に対応しているとする。使用中フラグ２２０は、既述のように対応するページ番号２１９の示す物理アドレスの物理メモリが使用中か未使用かを示す。白地の「使用中」／「未使用」（例示：ページ番号２／ページ番号３）は、ホストＯＳ２００での使用／未使用を示す。色地の「使用中」／「未使用」（例示：ページ番号１／ページ番号ｍ）は、ゲストＯＳ３００での使用／未使用を示す。
【００８５】
図１７を参照して、メモリ情報変換部５４０は、ページ情報テーブル２０４中の白地の「使用中」と色地の「使用中」とを入れ替え、及び、白地の「未使用」と色地の「未使用」とを入れ替えて、新たな新規ホストＯＳ用ページ情報テーブル３０４ａを生成する（Ｓ３２）。すなわち、ホストＯＳ２００が確保している（使用を許可されている）ページ情報を、ゲストＯＳ３００が確保している（使用を許可されている）ページ情報と入れ換える。図２０（ｂ）は、新たな新規ホストＯＳ用ページ情報テーブル３０４ａを示している。そして、ページ情報テーブル３０４を新規ホストＯＳ用ページ情報テーブル３０４ａに置き換える。
【００８６】
図１７を参照して、メモリ情報変換部５４０は、論理アドレステーブル３０３と物理アドレス変換表３０６とに基づいて、論理アドレステーブル３０３の仮想物理アドレス３１８を物理アドレス変換表３０６の物理アドレス（ホストＯＳ２００の物理アドレス）に書き換える（Ｓ３３）。図２１（ａ）、（ｂ）は、それぞれ論理アドレステーブル３０３と物理アドレス変換表３０６を示す。仮想物理アドレス３１８を物理アドレスに書き換えることで、新規ホストＯＳ用論理アドレステーブル３０３ａ（図２１（ｃ））が生成される。
【００８７】
これにより、新規ホスト（ゲストＯＳ３００）用の新規ホストＯＳ用ページ情報テーブル３０４ａ及び新規ホストＯＳ用論理アドレステーブル３０３ａが生成される（以上、Ｓ１７に対応）。
【００８８】
次に、図１７を参照して、メモリ情報変換部５４０は、新規ホストＯＳ用ページ情報テーブル３０４ａからホストＯＳ２００（新ゲストＯＳ）用のエントリを抽出し、新規ゲストＯＳ用ページ情報テーブル６１２を生成する（Ｓ３４）。図２２を参照して、図２２（ａ）の新規ホストＯＳ用ページ情報テーブル３０４ａのうち、ホストＯＳ用のエントリを示す白地の「使用中」／「未使用」（ぺージ番号１、６、８、…、ｍ）を抽出して並べる。これにより、新規ゲストＯＳ用ページ情報テーブル６１２（図２２（ｂ））が生成される。
【００８９】
図１７を参照して、メモリ情報変換部５４０は、新規ゲストＯＳ用ページ情報テーブル６１２の物理アドレスに連番の仮想物理アドレスを対応させることにより、新規ゲストＯＳ用物理アドレス変換表６１１を生成する（Ｓ３７）。図２３を参照して、新規ゲストＯＳ用ページ情報テーブル６１２の物理アドレス（この例ではページ番号に直接対応）１、６、８、…、ｍに対応して、連番の仮想物理アドレスＡ０、Ａ１、Ａ２、…、Ａｎを対応させて、新規ゲストＯＳ用物理アドレス変換表６１１が生成されている。
【００９０】
以上のようにして、新規ゲスト（ホストＯＳ２００）用の新規ゲストＯＳ用物理アドレス変換表６１１及び新規ゲストＯＳ用ページ情報テーブル６１２が完成する（以上、Ｓ１８に対応）。
【００９１】
ここで、Ｓ２５における、論理アドレステーブル２０３を書き換えて、新規ゲストＯＳ用論理アドレステーブル２０３ａとする工程について説明する。メモリ情報入れ替え部４４０は、論理アドレステーブル２０３に記載されている物理アドレス２１８を、新規ゲストＯＳ用物理アドレス変換表６１１に記載されている仮想物理アドレスに書き換える。図２４（ａ）、（ｂ）は、それぞれ論理アドレステーブル２０３及び新規ゲストＯＳ用物理アドレス変換表６１１を示す。ここで、論理アドレステーブル２０３の物理アドレスＢ０、Ｂ１、…、Ｂｎを、新規ゲストＯＳ用物理アドレス変換表６１１の仮想物理アドレスＡ０、Ａ１、…、Ａｎに書き換えることで、新規ゲストＯＳ用論理アドレステーブル２０３ａ（図２４（ｃ））が生成される。
【００９２】
次に、デバイス情報変換部５５０の動作の詳細について説明する。
図１８は、Ｓ１９におけるデバイス情報変換部の動作を示すフローチャートである。図２５は、Ｓ１９における新規ホストＯＳ用デバイス一覧３１１ａの生成過程を示す一例である。図２６は、Ｓ２０において生成された新規ゲストＯＳ用デバイス一覧６１４を示す一例である。
【００９３】
図１８を参照して、デバイス情報変換部５５０は、Ｓ１６で取得したホストＯＳ２００のデバイス一覧２０９（図２５（ａ））からエントリを一つ取得する（Ｓ４１）。エントリは、デバイス番号２２１デバイス名２２３及びデバイス操作関数２２２を含む。エントリを取得できた場合（Ｓ４２：ＹＥＳ）、デバイス対応テーブル３１３（図２５（ｂ））から、そのエントリ中のデバイス名２２３と一致するホストＯＳデバイス名３２２を検索する（Ｓ４３）。一致するものが発見されたら（Ｓ４４：ＹＥＳ）、デバイス一覧３１１（図２５（ｃ））において、当該ホストＯＳデバイス名３２２に対応するゲストＯＳデバイス名３２３と等しいデバイス名３２８とデバイス操作関数３２７とを、デバイス一覧２０９における当該デバイス名２２１とデバイス操作関数２２２とに置き換える。図２５の例では、デバイス一覧２０９のデバイス名（２２３）Ｌｈ２，Ｌｈ４が、デバイス対応テーブル３１３のホストＯＳデバイス名（３２２）Ｌｈ２，Ｌｈ４と一致する。従って、デバイス一覧３１１において、そのホストＯＳデバイス名（３２２）Ｌｈ２，Ｌｈ４に対応するゲストＯＳデバイス名（３２３）Ｌｇ２、Ｌｇ３と等しいデバイス名（３２８）Ｌｇ２、Ｌｇ３及び、デバイス操作関数（３２７）Ｆｇ２，Ｆｇ３を、当該デバイス名（２２３）Ｌｈ２，Ｌｈ４及びデバイス操作関数（２２２）Ｆｈ２，Ｆｈ４に置き換える。それと共に、デバイス名の一致したゲストＯＳ３００のデバイスドライバ３１５を削除し、新たにホストＯＳ２００のデバイスドライバ２１５をデバイスドライバ３１５として登録する（Ｓ４５）。
【００９４】
ホストＯＳ２００のデバイスにおいて、デバイス名の一致するものが無ければ（Ｓ４４：ＮＯ）、デバイス一覧３１１において、デバイス一覧２０９における一致するものが無いデバイス名２２１及びデバイス操作関数２２２を、それぞれデバイス名３２８及び対応するデバイス操作関数３２７に登録する。図２５の例では、デバイス一覧２０９のデバイス名（２２３）Ｌｈ１、Ｌｈ３、Ｌｈｑについて、デバイス対応テーブル３１３に一致するものが無い。従って、デバイス一覧３１１において、一致するものが無いデバイス名（２２３）Ｌｈ１、Ｌｈ３、Ｌｈｑ及びデバイス操作関数（２２２）Ｆｈ１、Ｆｈ３、Ｆｈｑを、それぞれデバイス名３２８ａ及び対応するデバイス操作関数３２７ａに登録する。それと共に、新規にホストＯＳ２００のデバイスドライバ２１５をデバイスドライバ３１５として登録する（Ｓ４６）。この作業をすべてのエントリに対して行った時点（Ｓ４２：ＮＯ）で、ゲストＯＳ３００用のデバイス一覧３１１が新規ホストＯＳ用デバイス一覧３１１ａに書き換わる（以上、Ｓ１９にに対応）。
【００９５】
Ｓ２０についてもゲストとホストとを入れ替えて、図１８の動作と同様にすれば、図２６のような新規ゲストＯＳ用デバイス一覧６１４を作成することが出来る。すなわち、デバイス情報変換部５５０は、デバイス一覧３１１のデバイス名（３２８）Ｌｇ２，Ｌｇ３が、デバイス対応テーブル３１３のゲストＯＳデバイス名（３２３）Ｌｇ２，Ｌｇ３と一致する。従って、デバイス一覧２０９において、そのゲストＯＳデバイス名（３２３）Ｌｇ２，Ｌｇ３に対応するホストＯＳデバイス名（３２２）Ｌｈ２、Ｌｈ４と等しいデバイス名（２２３）Ｌｈ２、Ｌｈ４及び、デバイス操作関数（２２２）Ｆｈ２，Ｆｈ４を、当該デバイス名（３２８）Ｌｇ２，Ｌｇ３及びデバイス操作関数（３２７）Ｆｇ２，Ｆｇ３に置き換える。このように、Ｓ１６でホストＯＳ状態退避領域６２０から取得したデバイス一覧２０９に置き換えを実行することで、新規ゲストＯＳ用デバイス一覧６１４を生成する。それと共に、デバイス名の一致したホストＯＳ２００のデバイスドライバ２１５を削除し、新たにゲストＯＳ３００のデバイスドライバ３１５をデバイスドライバ２１５として登録する。
【００９６】
また、新規ゲストＯＳ用デバイス対応テーブル６１３については、既述のようにデバイス対応テーブル３１３のホスト側のデータ３２２とゲスト側のデータ３２３を入れ替えることで新たにを生成する。
【００９７】
次に、ホストプロセス生成部５７０の動作の詳細について説明する。
図１９は、Ｓ２１におけるホストプロセス生成部の動作を示すフローチャートである。ホストプロセス生成部５７０は、新たにホストとなるゲストＯＳ３００の親プロセスのプロセス情報を、新たにゲストとなるホストＯＳ２００の子プロセスのプロセス情報としてコピーする（Ｓ５１）。次に、子プロセスのメモリ情報（ページテーブル）を、ホストＯＳ２００のメモリ情報（新規ゲストＯＳ用論理アドレステーブル２０３ａ、新規ゲストＯＳ用物理アドレス変換表６１１、新規ゲストＯＳ用ページ情報テーブル６１２）に基づいて書き換える（Ｓ５２）。次に、子プロセスのレジスタ情報を、コンテキスト情報取得部５８０が取得したコンテキスト情報２２７に基づいて書き換える（Ｓ５３）。最後に、スケジューリングキューに当該プロセスを登録する（Ｓ５４）。
【００９８】
通常のプロセス生成手順は、Ｓ５１と一緒に親プロセスのメモリ空間（メモリ情報）も子プロセスのメモリ空間（メモリ情報）としてコピーする。この動作によって、親プロセスとまったく同一の動作を行う子プロセスが生成されるが、親プロセスと子プロセス（新しく生成されたプロセス）では、プロセス情報の一部分が異なるため、親プロセスと子プロセスは違うプロセスとして認識することができる。プロセス生成後、子プロセスは新たにプログラムをメモリ上にロードすることによって、新たなプログラムを実行することができる。
【００９９】
しかし、本発明におけるホストプロセス生成部５７０は、新たなプログラムをメモリ上にロードする代わりに、既存のホストＯＳのメモリをマップすることによって、新たなプログラムをロードしたように見せかけるところが、通常のプロセス生成とは異なる点である。
【０１００】
本発明によれば、ゲストＯＳを停止せずに、ホストＯＳにセキュリティーパッチを充てるといった用途に適用できる。ホストＯＳにセキュリティーホールが発見された場合、セキュリティーホールを塞ぐためのパッチを当てなければならない。一方、ゲストＯＳ上では、重要なアプリケーションを実行中でありゲストＯＳ上のアプリケーションを停止するのは避けたい。このような場合に、本発明を使ってゲストＯＳとホストＯＳのハードウェア依存関係を切り替えることによって、ゲストＯＳは継続して動作し続け、ホストＯＳにパッチ適用後再起動することができる。
【図面の簡単な説明】
【０１０１】
【図１】図１は、仮想計算機システムの概要を示す構成図である。
【図２】図２は、ホストＯＳのコンテキストスイッチのを示す図である。
【図３】図３は、ゲストＯＳからホストＯＳへのコンテキストスイッチの仕組みを説明する図である。
【図４】図４は、仮想計算機システムにおけるメモリ管理を説明する図である。
【図５】図５は、ホストＯＳにおける論理アドレステーブルと、物理メモリ、及びページ情報テーブルの関係を表す図である。
【図６】図６は、ゲストＯＳにおける論理アドレステーブル、ページ情報テーブル、物理アドレス変換表、及びゲストＯＳ領域の関係を表す図である。
【図７】図７は仮想計算機システムにおけるデバイス管理を説明する図である。
【図８】図８は、デバイス一覧を示す表である。
【図９】図９は、デバイス情報テーブルを示す表である。
【図１０】図１０は、ゲストＯＳのデバイス対応テーブルを示す表である。
【図１１】図１１は、本発明のＯＳ切り替えシステムを適用した仮想計算機システムの実施の形態を示す概略構成図である。
【図１２】図１２は、本発明のＯＳ切り替えシステムの実施の形態の構成を示すブロック図である。
【図１３】図１３は、ＯＳ状態退避領域を示すブロック図である。
【図１４】図１４は、本発明のＯＳ切り替えシステムの実施の形態の動作を示すフローチャートである。
【図１５】図１５は、本発明のＯＳ切り替えシステムの実施の形態の動作を示すフローチャートである。
【図１６】図１６は、本発明のＯＳ切り替えシステムの実施の形態の動作を示すフローチャートである。
【図１７】図１７は、Ｓ１７、Ｓ１８におけるメモリ情報変換部の動作を示すフローチャートである。
【図１８】図１８は、Ｓ１９、Ｓ２０におけるデバイス情報変換部の動作を示すフローチャートである。
【図１９】図１９は、Ｓ２１におけるホストプロセス生成部の動作を示すフローチャートである。
【図２０】図２０は、Ｓ１７における新規ホストＯＳ用ページ情報テーブルの生成過程を示す一例である。
【図２１】図２１は、Ｓ１７における新規ホストＯＳ用論理アドレステーブルの生成過程を示す一例である。
【図２２】図２２は、Ｓ１８における新規ゲストＯＳ用ページ情報テーブルの生成過程を示す一例である。
【図２３】図２３は、Ｓ１８において生成される新規ゲストＯＳ用物理アドレス変換表を示す一例である。
【図２４】図２４は、Ｓ１８における新規ゲストＯＳ用論理アドレステーブルの生成過程を示す一例である。
【図２５】図２５は、Ｓ１９における新規ホストＯＳ用デバイス一覧の生成過程を示す一例である。
【図２６】図２６は、Ｓ２０において生成された新規ゲストＯＳ用デバイス一覧を示す一例である。
【符号の説明】
【０１０２】
１００、１００ａ    ハードウェア
２００、２００ａ    ホストＯＳ
３００、３００ａ    ゲストＯＳ
３０１−１〜３０１−ｎ    ゲストＯＳアプリケーション
２０１−１〜２０１−ｍ    ホストＯＳアプリケーション
３０３    論理アドレステーブル（ゲストＯＳ）
３０３ａ    新規ホストＯＳ用論理アドレステーブル
３０４    ページ情報テーブル（ゲストＯＳ）
３０４ａ    新規ホストＯＳ用ページ情報テーブル
３０５    アドレス変換部（ゲストＯＳ）
３０６    物理アドレス変換表（ゲストＯＳ）
３０７    物理アドレス変換部（ゲストＯＳ）
３０８    メモリ取得部（ゲストＯＳ）
３０９    空き領域管理部（ゲストＯＳ）
３１０    空き領域リスト（ゲストＯＳ）
２０３    論理アドレステーブル（ホストＯＳ）
２０３ａ    新規ゲストＯＳ用論理アドレステーブル
２０４    ページ情報テーブル（ホストＯＳ）
２０５    アドレス変換部（ホストＯＳ）
２０６    メモリ取得部（ホストＯＳ）
２０７    空き領域管理部（ホストＯＳ）
２０８    空き領域リスト（ホストＯＳ）
１０１    物理メモリ
１０２    ゲストＯＳ領域
３１１    デバイス一覧（ゲストＯＳ）
３１１ａ    新規ホストＯＳ用デバイス一覧
３１２    デバイス情報テーブル（ゲストＯＳ）
３１３    デバイス対応テーブル（ゲストＯＳ）
３１４    デバイス抽象化部（ゲストＯＳ）
３１５    デバイスドライバ（ゲストＯＳ）
３１６    デバイス入出力送信部（ゲストＯＳ）
２０９    デバイス一覧（ホストＯＳ）
２１０    デバイス情報テーブル（ホストＯＳ）
２１１    デバイス入出力受信部（ホストＯＳ）
２１２    デバイス抽象化部（ホストＯＳ）
２１３    デバイスドライバ（ホストＯＳ）
２１４    Ｉ／Ｏポート（ホストＯＳ）
２１５    リソース構造体（ホストＯＳ）
２１６    リソース管理部（ホストＯＳ）
１０３    デバイスインターフェイス
１０４    デバイスコントローラ
１０５    デバイス
１０６    ＤＭＡＣ
２１７    論理アドレス（ホストＯＳ）
２１８    物理アドレス（ホストＯＳ）
２１９    ページ番号（ホストＯＳ）
２２０    使用中フラグ（ホストＯＳ）
１０７    ページ
３１７    論理アドレス（ゲストＯＳ）
３１８    仮想物理アドレス（ゲストＯＳ）
３１９    変換表エントリ（ゲストＯＳ）
３２０    ページ番号（ゲストＯＳ）
３２１    使用中フラグ（ゲストＯＳ）
２２１    デバイス番号
２２２    デバイス操作関数
２２３    デバイス名
２２４    使用者情報
２２５    利用カウンタ
２２６    デバイス状態
３２２    ホストＯＳのデバイス名
３２３    ゲストＯＳのデバイス名
５００    メモリ情報退避部
５１０    デバイス情報退避部
５２０    メモリ情報取得部
５３０    デバイス情報取得部
５４０    メモリ情報変換部
５５０    デバイス情報変換部
５６０    実行命令切り替え部
５７０    コンテキストスイッチ部
４００    メモリ情報退避部
４１０    デバイス情報退避部
４２０    メモリ情報取得部
４３０    デバイス情報取得部
４４０    メモリ情報入れ替え部
４５０    デバイス情報入れ替え部
４６０    コンテキストスイッチ部
４７０    実行命令切り替え部
６００    ＯＳ状態退避部
６１０    ゲストＯＳ状態退避領域
６２０    ホストＯＳ状態退避領域
６１１    新規ゲストＯＳ用物理アドレス変換表
６１２    新規ゲストＯＳ用ページ情報テーブル
６１３    新規ゲストＯＳ用デバイス対応テーブル
６１４    新規ゲストＯＳ用デバイス一覧
【図１】
0004743529.tif 000002
【図２】
0004743529.tif 000003
【図３】
0004743529.tif 000004
【図４】
0004743529.tif 000005
【図５】
0004743529.tif 000006
【図６】
0004743529.tif 000007
【図７】
0004743529.tif 000008
【図８】
0004743529.tif 000009
【図９】
0004743529.tif 000010
【図１０】
0004743529.tif 000011
【図１１】
0004743529.tif 000012
【図１２】
0004743529.tif 000013
【図１３】
0004743529.tif 000014
【図１４】
0004743529.tif 000015
【図１５】
0004743529.tif 000016
【図１６】
0004743529.tif 000017
【図１７】
0004743529.tif 000018
【図１８】
0004743529.tif 000019
【図１９】
0004743529.tif 000020
【図２０】
0004743529.tif 000021
【図２１】
0004743529.tif 000022
【図２２】
0004743529.tif 000023
【図２３】
0004743529.tif 000024
【図２４】
0004743529.tif 000025
【図２５】
0004743529.tif 000026
【図２６】
0004743529.tif 000027