(57)【要約】      （修正有）【課題】仮想マシン（ＶＭ）環境における複数の仮想プロセッサを初期化するためのシステムおよびその方法を提供すること。【解決手段】この方法は、このホストが複数のプロセッサのＶＭを作成して「スタータ仮想プロセッサ」をアクティブにし、これに次の仮想プロセッサにスタートアップ・コマンドを発行させ、仮想マシン・モニタ（ＶＭＭ）がターゲット仮想プロセッサにハードウェア・リソースにアクセスするための最高優先順位を付与し、このＶＭＭが「スタータ仮想プロセッサ」に強制的にリソースの制御を放棄させ、ＶＭＭがこれらのリソースの制御をこのターゲット仮想プロセッサに渡し、これがスタートアップ・ルーチンを実行し完了し、ＶＭＭがこのターゲット仮想プロセッサに強制的にリソースの制御を放棄させ、ＶＭＭが後続の仮想プロセッサをアクティブにするためにリソースの制御をこの「スタータ仮想プロセッサ」に返す、ことを含む。【選択図】図５
2006018813.tif 000002
【特許請求の範囲】
【請求項１】
仮想マシン環境において仮想プロセッサを起動するための方法であって、前記仮想マシン環境は、第１の実行スレッドに対応する第１の仮想プロセッサ上で実行されるゲスト・オペレーティング・システムを備え、前記方法は、
第２の実行スレッドに対応する第２の仮想プロセッサにスタートアップ・コマンドを発行すること、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供すること、および
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドが、スタートアップを完了すること
を備えることを特徴とする方法。
【請求項２】
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドがスタートアップを完了した後に、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供することをさらに備えることを特徴とする請求項１に記載の方法。
【請求項３】
前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに強制的に少なくとも１つのハードウェア・リソースの制御を放棄させ、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに、そのハードウェア・リソースに対する制御を提供することをさらに備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに強制的に少なくとも１つのハードウェア・リソースの制御を放棄させ、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに、そのハードウェア・リソースに対する制御を提供することをさらに備えることを特徴とする請求項１に記載の方法。
【請求項５】
仮想マシン環境において仮想プロセッサを起動するための方法であって、前記仮想マシン環境は、仮想マシン・モニタによってエミュレートされる仮想マシン上で実行されるゲスト・オペレーティング・システムを備え、前記仮想マシンは、別々の実行スレッドとして実装される複数の仮想プロセッサを備え、前記ゲスト・オペレーティング・システムは、プロセッサを起動するコマンドを発行するためのサブシステム（例えば、ＢＩＯＳ）を備え、前記方法は、
前記ゲスト・オペレーティング・システムが、第１の実行スレッドに対応する第１の仮想プロセッサ上で実行され、前記第１の仮想プロセッサを介して第２の実行スレッドに対応する第２の仮想プロセッサにスタートアップ・コマンドを発行すること、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供し、それによって前記オペレーティング・システムに対応する前記第１の実行スレッドが実行を継続しないように防止し、したがって前記スタートアップ・コマンドに対応するタイムアウトを防止すること、
前記仮想マシン・モニタが、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに強制的に１組のすべてのハードウェア・リソースの制御を放棄させ、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに、そのハードウェア・リソースに対する制御を提供すること、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドが、スタートアップを完了すること、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供すること、および
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに強制的に前記１組のすべてのハードウェア・リソースの制御を放棄させ、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに、そのハードウェア・リソースに対する制御を提供すること
を備えることを特徴とする方法。
【請求項６】
前記仮想マシン・モニタは、ホスト・オペレーティング・システムのコンポーネント部分であることを特徴とする請求項５に記載の方法。
【請求項７】
前記第１の実行スレッドおよび前記第２の実行スレッドは、共に第１の物理プロセッサ上で実行されることを特徴とする請求項５に記載の方法。
【請求項８】
前記第１の実行スレッドは、第１の物理プロセッサ上で実行され、前記第２の実行スレッドは、第２の物理プロセッサ上で実行され、前記方法は、
前記仮想マシン・モニタのエレメントが前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供するのと実質的に並行して、前記第１のスレッドの実行を一時停止すること、および
前記仮想マシン・モニタのエレメントが前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供するのと実質的に並行して、前記第２のスレッドの実行を継続すること
をさらに備えることを特徴とする請求項５に記載の方法。
【請求項９】
仮想マシン環境において仮想プロセッサを起動するためのシステムであって、前記仮想マシン環境は、第１の実行スレッドに対応する第１の仮想プロセッサ上で実行されるゲスト・オペレーティング・システムを備え、前記システムは、
第２の実行スレッドに対応する第２の仮想プロセッサにスタートアップ・コマンドを発行すること、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供すること、および
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドが、スタートアップを完了すること
を実行するための少なくとも１つのサブ・システムを備えることを特徴とするシステム。
【請求項１０】
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドがスタートアップを完了した後に、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供するための少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項９に記載のシステム。
【請求項１１】
前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに強制的に少なくとも１つのハードウェア・リソースの制御を放棄させ、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに、そのハードウェア・リソースに対する制御を提供するための少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項９に記載のシステム。
【請求項１２】
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに強制的に少なくとも１つのハードウェア・リソースの制御を放棄させ、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに、そのハードウェア・リソースに対する制御を提供するための少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項９に記載のシステム。
【請求項１３】
仮想マシン環境において仮想プロセッサを起動するためのシステムであって、前記仮想マシン環境は、仮想マシン・モニタによってエミュレートされる仮想マシン上で実行されるゲスト・オペレーティング・システムを備え、前記仮想マシンは、別々の実行スレッドとして実装される複数の仮想プロセッサを備え、前記ゲスト・オペレーティング・システムは、プロセッサを起動するコマンドを発行するためのサブ・システム（例えば、ＢＩＯＳ）を備え、前記システムは、
前記ゲスト・オペレーティング・システムが、第１の実行スレッドに対応する第１の仮想プロセッサ上で実行され、前記第１の仮想プロセッサを介して第２の実行スレッドに対応する第２の仮想プロセッサにスタートアップ・コマンドを発行すること、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供し、それによって前記オペレーティング・システムに対応する前記第１の実行スレッドが実行を継続しないように防止し、したがって前記スタートアップ・コマンドに対応するタイムアウトを防止すること、
前記仮想マシン・モニタが、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに強制的に１組のすべてのハードウェア・リソースの制御を放棄させ、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに、そのハードウェア・リソースに対する制御を提供すること、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドが、スタートアップを完了すること、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供すること、および
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに強制的に前記１組のすべてのハードウェア・リソースの制御を放棄させ、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに、そのハードウェア・リソースに対する制御を提供すること
を実行するための少なくとも１つのサブ・システムを備えることを特徴とするシステム。
【請求項１４】
前記仮想マシン・モニタを、ホスト・オペレーティング・システムのコンポーネント部分とする少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項１３に記載のシステム。
【請求項１５】
前記第１の実行スレッドおよび前記第２の実行スレッドが、共に第１の物理プロセッサ上で実行されるようにする少なくとも１つのサブ・システムをさらに備えることを特徴とする請求項１３に記載のシステム。
【請求項１６】
前記第１の実行スレッドが、第１の物理プロセッサ上で実行され、前記第２の実行スレッドが、第２の物理プロセッサ上で実行されるようにする少なくとも１つのサブ・システムをさらに備え、当該少なくとも１つのサブ・システムは
前記仮想マシン・モニタのエレメントが前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供するのと実質的に並行して、前記第１のスレッドの実行を一時停止すること、および
前記仮想マシン・モニタのエレメントが前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供するのと実質的に並行して、前記第２のスレッドの実行を継続すること
を実行することを特徴とする請求項１３に記載のシステム。
【請求項１７】
仮想マシン環境において仮想プロセッサを起動するためのコンピュータ読取り可能命令を備えるコンピュータ読取り可能媒体であって、前記仮想マシン環境は、第１の実行スレッドに対応する第１の仮想プロセッサ上で実行されるゲスト・オペレーティング・システムを備え、前記コンピュータ読取り可能命令は、
第２の実行スレッドに対応する第２の仮想プロセッサにスタートアップ・コマンドを発行すること、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供すること、および
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドが、スタートアップを完了すること
を実行するため各命令を備えることを特徴とするコンピュータ読取り可能媒体。
【請求項１８】
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドがスタートアップを完了した後に、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供するための命令をさらに備えることを特徴とする請求項１７に記載のコンピュータ読取り可能媒体。
【請求項１９】
前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに強制的に少なくとも１つのハードウェア・リソースの制御を放棄させ、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに、そのハードウェア・リソースに対する制御を提供するための命令をさらに備えることを特徴とする請求項１７に記載のコンピュータ読取り可能媒体。
【請求項２０】
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに強制的に少なくとも１つのハードウェア・リソースの制御を放棄させ、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに、そのハードウェア・リソースに対する制御を提供するための命令をさらに備えることを特徴とする請求項１７に記載のコンピュータ読取り可能媒体。
【請求項２１】
仮想マシン環境において仮想プロセッサを起動するためのコンピュータ読取り可能命令を備えるコンピュータ読取り可能媒体であって、前記仮想マシン環境は、仮想マシン・モニタによってエミュレートされる仮想マシン上で実行されるゲスト・オペレーティング・システムを備え、前記仮想マシンは、別々の実行スレッドとして実装される複数の仮想プロセッサを備え、前記ゲスト・オペレーティング・システムは、プロセッサを起動するコマンドを発行するためのサブ・システム（例えば、ＢＩＯＳ）を備え、前記コンピュータ読取り可能命令は、
前記ゲスト・オペレーティング・システムが、第１の実行スレッドに対応する第１の仮想プロセッサ上で実行され、前記第１の仮想プロセッサを介して第２の実行スレッドに対応する第２の仮想プロセッサにスタートアップ・コマンドを発行すること、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供し、それによって前記オペレーティング・システムに対応する前記第１の実行スレッドが実行を継続することを防止し、したがって前記スタートアップ・コマンドに対応するタイムアウトを防止すること、
前記仮想マシン・モニタが、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに強制的に１組のすべてのハードウェア・リソースの制御を放棄させ、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに、そのハードウェア・リソースに対する制御を提供すること、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドが、スタートアップを完了すること、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供すること、および
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに強制的に前記１組のすべてのハードウェア・リソースの制御を放棄させ、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに、そのハードウェア・リソースに対する制御を提供すること
を実行する各命令を備えることを特徴とするコンピュータ読取り可能媒体。
【請求項２２】
前記仮想マシン・モニタは、ホスト・オペレーティング・システムのコンポーネント部分である命令をさらに備えることを特徴とする請求項２１に記載のコンピュータ読取り可能媒体。
【請求項２３】
前記第１の実行スレッドおよび前記第２の実行スレッドは、共に第１の物理プロセッサ上で実行される命令をさらに備えることを特徴とする請求項２１に記載のコンピュータ読取り可能媒体。
【請求項２４】
前記第１の実行スレッドが、第１の物理プロセッサ上で実行され、前記第２の実行スレッドが、第２の物理プロセッサ上で実行されようにする命令をさらに備え、当該命令は、
前記仮想マシン・モニタのエレメントが前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供するのと実質的に並行して、前記第１のスレッドの実行を一時停止すること、
前記仮想マシン・モニタのエレメントが前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供するのと実質的に並行して、前記第２のスレッドの実行を継続すること
を実行する各命令をさらに備えることを特徴とする請求項２１に記載のコンピュータ読取り可能媒体。
【請求項２５】
仮想マシン環境において仮想プロセッサを起動するためのハードウェア制御デバイスであって、前記仮想マシン環境は、第１の実行スレッドに対応する第１の仮想プロセッサ上で実行されるゲスト・オペレーティング・システムを備え、前記ハードウェア制御デバイスは、
第２の実行スレッドに対応する第２の仮想プロセッサにスタートアップ・コマンドを発行する手段と、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供する手段と、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドが、スタートアップを完了する手段と
を備えることを特徴とするハードウェア制御デバイス。
【請求項２６】
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドがスタートアップを完了した後に、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供する手段をさらに備えることを特徴とする請求項２５に記載のハードウェア制御デバイス。
【請求項２７】
前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに強制的に少なくとも１つのハードウェア・リソースの制御を放棄させ、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに、そのハードウェア・リソースに対する制御を提供する手段をさらに備えることを特徴とする請求項２５に記載のハードウェア制御デバイス。
【請求項２８】
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに強制的に少なくとも１つのハードウェア・リソースの制御を放棄させ、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに、そのハードウェア・リソースに対する制御を提供する手段をさらに備えることを特徴とする請求項２５に記載のハードウェア制御デバイス。
【請求項２９】
仮想マシン環境において仮想プロセッサを起動するためのハードウェア制御デバイスであって、前記仮想マシン環境は、仮想マシン・モニタによってエミュレートされる仮想マシン上で実行されるゲスト・オペレーティング・システムを備え、前記仮想マシンは、別々の実行スレッドとして実装される複数の仮想プロセッサを備え、前記ゲスト・オペレーティング・システムは、プロセッサを起動するコマンドを発行するためのサブシステム（例えば、ＢＩＯＳ）を備え、前記ハードウェア制御デバイスは、
前記ゲスト・オペレーティング・システムが、第１の実行スレッドに対応する第１の仮想プロセッサ上で実行され、前記第１の仮想プロセッサを介して第２の実行スレッドに対応する第２の仮想プロセッサにスタートアップ・コマンドを発行する手段と、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供し、それによって前記オペレーティング・システムに対応する前記第１の実行スレッドが実行を継続しないように防止し、したがって前記スタートアップ・コマンドに対応するタイムアウトを防止する手段と、
前記仮想マシン・モニタが、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに強制的に１組のすべてのハードウェア・リソースの制御を放棄させ、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに、そのハードウェア・リソースに対する制御を提供する手段と、
前記第２の仮想プロセッサおよびその対応する第２の実行スレッドが、スタートアップを完了する手段と、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供する手段と、
前記仮想マシン・モニタが、前記第２の仮想プロセッサおよびその対応する第２の実行スレッドに強制的に前記１組のすべてのハードウェア・リソースの制御を放棄させ、前記第１の仮想プロセッサおよびその対応する第１の実行スレッドに、そのハードウェア・リソースに対する制御を提供する手段と
を備えることを特徴とするハードウェア制御デバイス。
【請求項３０】
前記仮想マシン・モニタを、ホスト・オペレーティング・システムのコンポーネント部分とする手段をさらに備えることを特徴とする請求項２９に記載のハードウェア制御デバイス。
【請求項３１】
前記第１の実行スレッドおよび前記第２の実行スレッドは、共に第１の物理プロセッサ上で実行される手段をさらに備えることを特徴とする請求項２９に記載のハードウェア制御デバイス。
【請求項３２】
前記第１の実行スレッドが、第１の物理プロセッサ上で実行され、前記第２の実行スレッドが、第２の物理プロセッサ上で実行されようにする手段をさらに備え、当該手段は、
前記仮想マシン・モニタのエレメントが前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位を提供するのと実質的に並行して、前記第１のスレッドの実行を一時停止すること、および
前記仮想マシン・モニタのエレメントが前記第２の仮想プロセッサおよびその対応する第２の実行スレッドにハードウェア・リソースを利用するための最高優先順位以外の優先順位を提供するのと実質的に並行して、前記第２のスレッドの実行を継続すること
実行することを特徴とする請求項２９に記載のハードウェア制御デバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に（「プロセッサ仮想化」としても知られている）仮想マシン（virtual machine）、および仮想マシン環境において実行されるソフトウェアの分野に関する。より詳細には、本発明は、１台の仮想マシン内で複数のＶＰ（virtual processor；仮想プロセッサ）を初期化するためのシステムおよびその方法を対象としている。
【背景技術】
【０００２】
コンピュータは、特定の１組のシステム命令を実行するように設計された汎用のＣＰＵ（中央演算処理装置）を含んでいる。同様なアーキテクチャまたは設計仕様を有する１グループのプロセッサは、同じプロセッサ・ファミリ（processor family）のメンバと考えることができる。現行のプロセッサ・ファミリの実施例には、アリゾナ州、フェニックス市のモトローラ社が製造するモトローラ６８０Ｘ０プロセッサ・ファミリ、カリフォルニア州、サニーベール市のインテル・コーポレーションが製造するインテル８０Ｘ８６プロセッサ・ファミリ、モトローラ社が製造し、カリフォルニア州、クパチーノ市のアップル・コンピュータ社が製造するコンピュータ中で使用されるパワーＰＣプロセッサ・ファミリが含まれる。１グループのプロセッサは、それらが同様なアーキテクチャおよび設計を考慮しているので同じファミリ中に存在するけれども、各プロセッサは、それらのクロック速度および他の性能パラメータに応じてファミリ内で大きく異なることもある。
【０００３】
マイクロ・プロセッサの各ファミリは、そのプロセッサ・ファミリに固有の諸命令を実行する。プロセッサまたはプロセッサのファミリが実行することができる集合的な１組の命令は、そのプロセッサの命令セット（instruction set）として知られている。一実施例として、インテル８０Ｘ８６プロセッサ・ファミリが使用する命令セットは、パワーＰＣプロセッサ・ファミリが使用する命令セットとは互換性がない。このインテル８０Ｘ８６命令セットは、ＣＩＳＣ（複雑命令セット・コンピュータ）フォーマットに基づいている。モトローラのパワーＰＣ命令セットは、ＲＩＳＣ（縮小命令セット・コンピュータ）フォーマットに基づいている。ＣＩＳＣプロセッサは、多数の命令を使用しており、これらの命令の一部は、かなり複雑なファンクションを実施することができるが、この命令は、一般に実行するために多数のクロック・サイクルを要する。ＲＩＳＣプロセッサでは、さらに少ない数の使用可能な命令が使用して、ずっと高速で実行される、さらに簡単な１組のファンクションを実施する。
【０００４】
コンピュータ・システムの中でもとりわけ、このプロセッサ・ファミリの固有性により、一般的にコンピュータ・システム中のハードウェア・アーキテクチャの他のエレメントの間に、非互換性がもたらされることにもなる。インテル８０Ｘ８６プロセッサ・ファミリからのプロセッサを用いて製造されるコンピュータ・システムは、パワーＰＣプロセッサ・ファミリからのプロセッサを用いて製造されるコンピュータ・システムのハードウェア・アーキテクチャとは異なるハードウェア・アーキテクチャを有することになる。このプロセッサの命令セットおよびコンピュータ・システムのハードウェア・アーキテクチャの固有性のために、アプリケーション・ソフトウェア・プログラムは、一般的に、特定のオペレーティング・システムを実行する特定のコンピュータ・システム上で実行されるように書かれる。
【０００５】
コンピュータ製造業者は、そのコンピュータ製造業者の製品ラインに関連付けられたマイクロプロセッサ・ファミリ上で実行される、少ないアプリケーションよりもさらに多いアプリケーションを有することによってその製造業者のマーケット・シェアを最大にしたいと望む。あるコンピュータ・システム上で実行することができるオペレーティング・システムおよびアプリケーション・プログラムの数を増大するために、ある技術分野が発展してきており、この技術分野においては、ホストと呼ばれる、あるタイプのＣＰＵを有する所与のコンピュータが、ゲストと呼ばれる無関係のタイプのＣＰＵの命令を、そのホスト・コンピュータがエミュレートすることができるようにするエミュレータ・プログラムを含むことになる。したがって、このホスト・コンピュータは、所与のゲスト命令に応答して１つまたは複数のホスト命令が呼び出されるようにするアプリケーションを実行することになる。したがって、このホスト・コンピュータは、それ自体のハードウェア・アーキテクチャ用のソフトウェア設計も、無関係のハードウェア・アーキテクチャを有するコンピュータ用に書かれたソフトウェアも共に実行することができる。より具体的な実施例としては、アップル・コンピュータが製造するコンピュータ・システムでは、例えばＰＣベースのコンピュータ・システム用に書かれたオペレーティング・システムおよびプログラムを実行することができる。エミュレータ・プログラムを使用して１つのＣＰＵ上で複数の互換性がないオペレーティング・システムを同時に動作させることも可能にすることができる。この構成においては、各オペレーティング・システムは、他のオペレーティング・システムと互換性がないけれどもが、エミュレータ・プログラムが、２つのオペレーティング・システムのうちの一方をホストすることができ、それとは別の互換性のないオペレーティング・システムを同じコンピュータ・システム上で同時に実行できるようにする。
【０００６】
ゲスト・コンピュータ・システムがホスト・コンピュータ・システム上でエミュレートされる際、このゲスト・コンピュータ・システムは、ある特定のハードウェア・アーキテクチャのオペレーションについての純粋なソフトウェア表現としてこのホスト・コンピュータ・システム中に存在するにすぎないので、このゲスト・コンピュータ・システムは、「仮想マシン」であると言われる。エミュレータ、仮想マシン、およびプロセッサ・エミュレーションという用語は、時々交換可能なように使用されて、全体のコンピュータ・システムのハードウェア・アーキテクチャを模倣し、またはエミュレートする機能を指し示している。一実施例として、カリフォルニア州、サンマテオ市のＣｏｎｎｅｃｔｉｘ  Ｃｏｒｐｏｒａｔｉｏｎが作成したＶｉｒｔｕａｌ  ＰＣソフトウェアは、インテル８０Ｘ８６ペンティアム（登録商標）プロセッサおよび様々なマザーボード・コンポーネントとカードを含むコンピュータ全体をエミュレートする。これらのコンポーネントのオペレーションは、このホスト・マシン上で実行される仮想マシン中でエミュレートされる。パワーＰＣプロセッサを有するコンピュータ・システムなどのホスト・コンピュータのオペレーティング・システム・ソフトウェアおよびハードウェア・アーキテクチャ上で実行されるエミュレータ・プログラムは、この全体のゲスト・コンピュータ・システムのオペレーションを模倣する。
【０００７】
このエミュレータ・プログラムは、このホスト・マシンのハードウェア・アーキテクチャと、このエミュレートされる環境内で実行されるソフトウェアが伝送する各命令との間のやりとりを行う役割を果たす。このエミュレータ・プログラムは、ＨＯＳ（host operating system；ホスト・オペレーティング・システム）とすることができ、このＨＯＳは、この物理コンピュータ・ハードウェア上で直接実行されるオペレーティング・システムである。一方、このエミュレートされた環境はまた、ＶＭＭ（virtual machine monitor；仮想マシン・モニタ）でもあり、このＶＭＭは、このハードウェア上で直接実行されるソフトウェア・レイヤであり、またこのＶＭＭは、このＶＭＭが仮想化しているそのハードウェアと同じインターフェースを見えるようにすることによって、このマシンのすべてのリソースを仮想化する（このことは、ＶＭＭが、それについて実行中のオペレーティング・システム・レイヤから気付かれずに動作することを可能にする）。ホスト・オペレーティング・システムとＶＭＭは、この同じ物理ハードウェア上で並列に実行されることになる。
【０００８】
「実際の（real）」物理／非仮想コンピューティング環境においては、このコンピュータ・ハードウェア内に複数の物理プロセッサを含んでいるコンピューティング・システムが存在する。一般的に、マルチ・プロセッサ・システムの初期状態では、１つのプロセッサが、このシステム中に存在する他の各プロセッサに対してスタートアップ・メッセージ（start-up message）を送信する「スタータ・プロセッサ（starter processor）」としての役割を果たすようになっている。より詳細には、そのＢＩＯＳまたはＯＳの形でコード化されて、ローカルＡＰＩＣ（advanced programmable interrupt controller；高度プログラマブル割込みコントローラ）デバイスへの通信が、このスタータ・プロセッサから存在する各プロセッサへとスタートアップ・メッセージを向けるように行われる。（ローカルＡＰＩＣデバイスは、複数のプロセッサからの割込み、および複数のプロセッサについての割込みを処理する。）最初に、このスタータ・プロセッサと他のすべてのプロセッサの間にはマスタ−・スレーブ関係が存在するが、すべてのプロセッサが起動された後にはこれらのプロセッサはピア・レベルで実行される。プロセッサを起動するためのメカニズムは、Ｘ８６アーキテクチャでは、非常に大まかに定義されている。プロセッサを起動するためのメッセージは存在するが、このスタータ・プロセッサにターゲット・プロセッサ（target processor）が正常に起動されたかどうかを知らせるアーキテクチャ手段は定義されていない。以上を仮定すると、そのターゲット・プロセッサが正常に起動されたかどうかを決定するために使用される従来のメカニズムは、ＢＩＯＳ（basic input/output system；基本入出力システム）であり、このＢＩＯＳは、コンピュータのスイッチが入れられたときに実行されるソフトウェアのまさに最初の部分である。開始するためには、スタータ・プロセッサ上で実行されるＢＩＯＳコードは、そのターゲット・プロセッサとして知られている別のプロセッサに開始メッセージを発行し、どの共有メモリのロケーションからプロセッサがスタートアップ・プログラム実行を開始すべきかを知らせる。次いで、共有メモリ中に残されたスタートアップ・プログラムの実行が、そのターゲット・プロセッサによって開始され、そのターゲット・プロセッサは、フラグをセットする。このスタータ・プロセッサのＯＳは、メモリ中のそのロケーションに変化があるかを調べる。このスタータ・プロセッサのＢＩＯＳコードが、この共有メモリ・ロケーションが変化していることを検出するときには、このＢＩＯＳコードは、そのターゲット・プロセッサが起動していることを知る。そのターゲット・プロセッサが起動しなかったことをこのスタータＢＩＯＳコードに対して知らせるのはただ、このコードがある限られた時間内にメモリ・ロケーションの変化を検出しないときだけにすぎず、したがってこのプロセッサに問題があるとすると、それは使用可能ではない。このタイムアウト期間は短く、数ミリ秒である。
【０００９】
【特許文献１】米国特許第号６０７５９３８明細書
【特許文献２】米国特許第号６２６９３９１明細書
【特許文献３】米国特許出願公開第２００２−００８３３６９号明細書
【特許文献４】米国特許出願公開第２００３−０１１０１７３号明細書
【特許文献５】米国特許出願公開第２００３−０１８８１６５号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１０】
現在では、ほとんどのＶＭでは、一般に１つの仮想プロセッサ（ＶＰ）が使用されているが、ＭＰＶＭ（multi-processor VM；マルチ・プロセッサＶＭ）が望ましいこともある。ＶＭ環境においては、複数のＶＰを初期化する１つの方法は、このホスト・コンピュータ・システム上の複数の実行スレッドを介して複数のＶＰをエミュレートするＶＭＭに対する方法である。しかし、これらのＶＰは、このホスト環境における別々の実行スレッドに対応しており、システム中には限られたシステム・リソースを求めて競合する複数のＶＭが存在することもあるので、ＶＰに相当するスレッドの実行時間は、タイム・スライシングのために任意の大きさになる。したがって、初期化に際して所与のＶＰが直ちに起動しないこともあることが予想される。しかし、ゲスト・オペレーティング・システム（また、より詳細には、オペレーティング・システムの一部分であるＢＩＯＳ）は、実際の複数のプロセッサを有する物理ハードウェア上で、実際のプロセッサに対する非常に高速なスタートアップ時間で実行されるはずであるという仮定に基づいて開発されており、したがって、このゲストＯＳは、初期化されたプロセッサが、実際のプロセッサ・ハードウェアにとっては適切なタイムアウトの前に実際に起動するので、小さな有限の実時間だけしか提供されない。しかし、このことは、仮想化環境においては、どちらかというと問題である。その理由は、ＶＰの初期化およびスタートアップが、（スレッドの実行などに起因して）数ミリ秒かかってしまうこともあり、実際にＶＰを起動するのにかかる時間は、このゲストＯＳのタイムアウトをほとんどいつも超過してしまうことになるからである。タイムアウト問題を処理する簡単で直接的な１つの方法は、このゲストＯＳのＢＩＯＳを修正してこのタイムアウトを長くすることであるが、この解決方法は、すべてのゲストＯＳを保守すること（すなわち、それらのタイムアウトのすべてが変更される必要があり）、ＶＭの利点の１つ（すなわち、（たぶん実際のハードウェア用に開発された）市販のオペレーティング・システムを実行する能力を備えること、を必要とする。さらに、（ケースバイケースで、およびＯＳごとに）このメンテナンスを行う必要性は、このメンテナンスが適切に適用されない場合に障害を引き起こすリスクがあるために問題になることもある。したがって、必要とされる方法は、タイムアウトなしに、また各ゲストＯＳ、および／またはＢＩＯＳなどその関連するコンポーネントを修正し保守する必要性なしに、ＶＭ環境内の複数のＶＰを初期化する方法である。
【課題を解決するための手段】
【００１１】
本発明は、ＶＭ環境中の複数の仮想プロセッサを初期化するためのシステムおよびその方法に関するものである。初期化に際して、このゲストＯＳにおけるタイムアウト状態を防止するために、本発明のこのマルチ・プロセッサＶＭのシステムおよび方法では、各ゲストＯＳ、および／またはＢＩＯＳなどその関連するコンポーネントを修正し保守する必要性なしにＶＭ環境内の複数の仮想プロセッサを初期化する方法が提供され、それによってＶＭ環境におけるさらに高い効率性が実現される。
【００１２】
複数の仮想プロセッサを初期化するこの方法は、このホストが、複数のプロセッサのＶＭを作成し、「スタータ仮想プロセッサ（starter virtual processor）」をアクティブにするステップと、この「スタータ仮想プロセッサ」が、次の仮想プロセッサにスタートアップ・コマンドを発行するステップと、仮想マシンモニタ（ＶＭＭ）が、このターゲット仮想プロセッサ（target virtual processor）にこれらのハードウェア・リソースにアクセスするための最高優先順位を付与するステップと、このＶＭＭがこの「スタータ仮想プロセッサ」に強制的にこれらのハードウェア・リソースの制御を放棄させるステップと、このＶＭＭがこれらのハードウェア・リソースの制御をこのターゲット仮想プロセッサに渡すステップと、このターゲット仮想プロセッサがそのスタートアップ・ルーチンを実行し完了するステップと、このＶＭＭがこのターゲット仮想プロセッサに強制的にこれらのハードウェア・リソースの制御を放棄させるステップと、後続の仮想プロセッサをアクティブにするためにこのＶＭＭがこれらのハードウェア・リソースの制御をこの「スタータ仮想プロセッサ」に返すステップと、を含んでいる。
【発明を実施するための最良の形態】
【００１３】
前述の「課題を解決するための手段」、ならびに好ましい実施形態についての以下の詳細な説明は、添付の図面を併せ読むときにさらによく理解されよう。本発明を例証するために本発明の例示の構成が図面に示されている。しかし、本発明は、これらの開示された特定の方法および手段だけに限定されるものではない。
【００１４】
本発明の主題については、法令によって定められた要件を満たすように具体性をもって説明している。しかし、この説明それ自体が、本特許の範囲を限定することは意図していない。そうではなくて、本発明者は、この請求された主題を、別の方法で、異なるステップあるいはこの文書中で説明されるステップと同様なステップ含んで、現在または将来の他の技術と組み合わせて、実施することもできると考えている。さらに、本明細書中では、用語「ステップ」を使用して、使用される方法の個々のエレメントを示していきるが、この用語は、個別のステップの順序が明示的に説明されていない限り、また明示的に説明されるとき以外は、本明細書中で説明する様々なステップの間のどのような特定の順序を暗示しているとも解釈すべきではない。
【００１５】
コンピュータ環境
本発明についての多数の実施形態が、コンピュータ上で実行することができる。図１および以下の説明では、本発明を実施することができる適切なコンピューティング環境の一般的な簡潔な説明を提供することが意図されている。必要ではないが、本発明については、クライアントワーク・ステーションやサーバなどのコンピュータによって実行されるプログラム・モジュールなど、コンピュータ実行可能命令の一般的なコンテクストで説明することにする。一般的に、プログラム・モジュールは、特定のタスクを実施し、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含んでいる。さらに、本発明は、ハンドヘルド・デバイス、マルチ・プロセッサ・システム、マイクロ・プロセッサ・ベースのまたはプログラマブルな電電製品、ネットワークＰＣ、ミニ・コンピュータ、メインフレーム・コンピュータなどを含めて、他のコンピュータ・システム構成を用いて実行することもできることが当業者には理解されよう。本発明は、分散コンピューティング環境中において実施することもでき、ここでは、タスクは、通信ネットワークを介してリンクされたリモート処理デバイスによって実施される。分散コンピューティング環境においては、プログラム・モジュールは、ローカル・メモリ・ストレージ・デバイス中にもリモート・メモリ・ストレージ・デバイス中にも配置することができる。
【００１６】
図１に示すように、例示の汎用コンピューティング・システムは、処理装置２１、システム・メモリ２２、およびこのシステム・メモリを含めて様々なシステム・コンポーネントを処理装置２１に結合するシステム・バス２３を含めて、従来のパーソナル・コンピュータ２０などを含んでいる。このシステム・バス２３は、メモリ・バスまたはメモリ・コントローラ、周辺バス、および様々なバス・アーキテクチャのうちのいずれかを使用したローカル・バスを含めて、いくつかのタイプのバス構造のうちのいずれかにすることもできる。このシステム・メモリは、ＲＯＭ（読取り専用メモリ）２４およびＲＡＭ（ランダム・アクセス・メモリ）２５を含んでいる。起動中などパーソナル・コンピュータ２０内のエレメント間で情報を転送する助けをする基本ルーチンを含む基本入出力システム２６（ＢＩＯＳ）は、ＲＯＭ２４中に記憶される。パーソナル・コンピュータ２０は、図示していないハードディスクから情報を読取りそれに情報を書き込むハードディスク・ドライブ２７、着脱可能な磁気ディスク２９から情報を読取りそれに情報を書き込む磁気ディスク・ドライブ２８、およびＣＤ−ＲＯＭや他の光媒体など着脱可能な光ディスク３１から情報を読取りそれに情報を書き込む光ディスク・ドライブ３０をさらに含むことができる。ハードディスク・ドライブ２７、磁気ディスク・ドライブ２８、および光ディスク・ドライブ３０は、それぞれハードディスク・ドライブ・インターフェース３２、磁気ディスクド・ライブ・インターフェース３３、および光ドライブ・インターフェース３４によってシステム・バス２３に接続される。これらのデバイスおよびその関連するコンピュータ読取り可能媒体は、パーソナル・コンピュータ２０のためのコンピュータ読取り可能命令、データ構造、プログラム・モジュールおよび他のデータの不揮発性ストレージを提供する。本明細書中で説明される例示の環境は、ハードディスク、着脱可能磁気ディスク２９、および着脱可能光ディスク３１を使用しているが、磁気カセット、フラッシュ・メモリ・カード、デジタル・ビデオ・ディスク、ベルヌーイ・カートリッジ、ランダム・アクセス・メモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）などコンピュータによってアクセス可能なデータを記憶することができる、他のタイプのコンピュータ読取り可能媒体をこの例示の動作環境中において使用することもできることを当業者には理解されたい。
【００１７】
オペレーティング・システム３５、１つまたは複数のアプリケーション・プログラム３６、他のプログラム・モジュール３７およびプログラム・データ３８を含めて、いくつかのプログラム・モジュールをこのハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ２４またはＲＡＭ２５に記憶することができる。ユーザは、キーボード４０やポインティング・デバイス４２など入力デバイスを介してパーソナル・コンピュータ２０中にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、衛星パラボラ・アンテナ、スキャナなどを含むことができる。これらおよび他の入力デバイスはしばしば、このシステム・バスに結合されるシリアル・ポート・インターフェース４６を介して処理装置２１に接続されるが、パラレル・ポート、ゲームポート、ＵＳＢ（ユニバーサル・シリアル・バス）などの他のインターフェースによって接続することもできる。モニタ４７または他のタイプのディスプレイ・デバイスもまた、ビデオ・アダプタ４８などのインターフェースを介してシステム・バス２３に接続することができる。このモニタ４７に追加してパーソナル・コンピュータは、一般的にスピーカやプリンタなど他のペリフェラル出力デバイス（図示せず）を含んでいる。図１の例示のシステムはまた、ホスト・アダプタ５５、ＳＣＳＩ（Small Computer System Interface）バス５６、およびこのＳＣＳＩバス５６に接続された外部ストレージ・デバイス６２も含んでいる。
【００１８】
パーソナル・コンピュータ２０は、リモート・コンピュータ４９など１つまたは複数のリモート・コンピュータに対する論理接続を使用して、ネットワーク環境において動作することができる。リモート・コンピュータ４９は、別のパーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア・デバイス、または他の共通ネットワーク・ノードであってもよく、一般的にパーソナル・コンピュータ２０に対して前述したエレメントの多くまたはすべてを含んでいるが、メモリ・ストレージ・デバイス５０だけしか図１には示してはいない。図１に示す論理接続は、ＬＡＮ（ローカル・エリア・ネットワーク）５１およびＷＡＮ（ワイド・エリア・ネット・ワーク）５２を含んでいる。かかるネットワーキング環境は、オフィス、企業規模のコンピュータ・ネットワーク、イントラネットおよびインターネットにおいては一般的である。
【００１９】
ＬＡＮネットワーキング環境中で使用されるときには、パーソナル・コンピュータ２０は、ネットワーク・インターフェースまたはアダプタ５３を介してＬＡＮ５１に接続される。ＷＡＮネットワーキング環境中で使用されるときには、パーソナル・コンピュータ２０は、一般的にインターネットなどのワイド・エリア・ネットワーク５２上で通信を確立するモデム５４または他の手段を含んでいる。モデム５４は、内蔵でもよく、また外付けでもよいが、シリアル・ポート・インターフェース４６を介してシステム・バス２３に接続される。ネットワーク環境においては、パーソナル・コンピュータ２０に対して示したプログラム・モジュール、またはその一部分は、このリモート・メモリ・ストレージ・デバイスに記憶することができる。図に示すネットワーク接続は、例示的であり、これらのコンピュータ間で通信リンクを確立する他の手段を使用することもできることが理解されよう。さらに、本発明の多数の実施形態がコンピュータ化されたシステムにとって特によく適していることが想定されているが、この文書中においては、本発明をかかる実施形態だけに限定することは全く意図されていない。
【００２０】
仮想マシン
概念的な観点から、コンピュータ・システムは、一般的にハードウェアの基本レイヤ上で実行される１つまたは複数のソフトウェア・レイヤを含んでいる。この階層化することは、抽象化の理由から行われる。所与のソフトウェア・レイヤについてのインターフェースを定義することにより、このレイヤは、その上の他の諸レイヤとは異なるように実装することができる。うまく設計されたコンピュータ・システムにおいては、各レイヤは、その直下のレイヤについてしか知らない（またそれにしか依拠しない）。このことは、レイヤまたは「スタック」（複数の隣接レイヤ）が、前記レイヤまたはスタックの上位の諸レイヤに悪影響を与えずに置き換えることができることを可能にする。例えば、ソフトウェア・アプリケーション（上位レイヤ）は、一般的にそのオペレーティング・システム（下位レイヤ）という下位レベルに依存して、ファイルをある形態の恒久的ストレージに書き込み、この結果、これらのアプリケーションは、データをフロッピー（登録商標）ディスクに書き込む、ハード・ドライブに書き込むか、あるいはネットワーク・フォルダに書き込む、ことの間におけるその違いを理解する必要がない。この下位レイヤが、ファイルを書き込むための新しいオペレーティング・システムで置き換えられる場合にも、この上位レイヤ・ソフトウェア・アプリケーションのオペレーションは、影響を受けなくて済む。
【００２１】
階層化ソフトウェアの柔軟性は、仮想マシン（ＶＭ）が、実際には別のソフトウェア・レイヤである仮想ハードウェア・レイヤを表現することを可能にする。このようにして、ＶＭは、その上のソフトウェア・レイヤに対して、前記ソフトウェア・レイヤがそれら自体のプライベート・コンピュータ・システム上で実行されているという錯覚（illusion）を作り出すことができ、したがってＶＭは、複数の「ゲストシステム」が単一の「ホスト・システム」上で同時に実行することを可能にする。
【００２２】
図２は、コンピュータ・システムにおけるエミュレートされた動作環境についての、ハードウェア・アーキテクチャおよびソフトウェア・アーキテクチャの論理階層化を示す図である。エミュレーション・プログラム９４が、ホスト・オペレーティング・システムおよび／またはハードウェア・アーキテクチャ９２上で実行される。エミュレーション・プログラム９４は、ゲスト・ハードウェア・アーキテクチャ９６およびゲスト・オペレーティング・システム９８をエミュレートする。次にソフトウェア・アプリケーション１００がゲスト・オペレーティング・システム９８上で実行される。たとえソフトウェア・アプリケーション１００が、ホスト・オペレーティング・システムおよびハードウェア・アーキテクチャ９２とは一般的に互換性がないオペレーティング・システム上で実行されるように設計されているとしても、図２のエミュレートされた動作環境においては、エミュレーション・プログラム９４のオペレーションによって、ソフトウェア・アプリケーション１００は、コンピュータ・システム９０上で実行されることが可能になる。
【００２３】
図３Ａは、物理コンピュータ・ハードウェア１０２上で直接に実行されるホスト・オペレーティング・システム・ソフトウェア・レイヤ１０４を含む仮想化コンピューティング・システムを示しており、ホストＯＳ（host operating system；ホスト・オペレーティング・システム）１０４は、このホストＯＳが仮想化しているハードウェアと同じインターフェースを公開する（exposing）（それにより、このホストＯＳが、その上で実行されるオペレーティング・システム・レイヤによって気付かれないままであることが可能になる）ことによってこのマシンのすべてのリソースを仮想化する。
【００２４】
代わりに、仮想マシン・モニタ、すなわちＶＭＭソフトウェア・レイヤ１０４’は、ホスト・オペレーティング・システム１０４”の代わりに、または並行して実行することが可能であり、この後者のオプションを図３Ｂに示している。簡潔に言えば、（特にホスト・オペレーティング・システム１０４に関する）以下のすべての説明は、図３Ａに示すこの実施形態を対象としている。しかし、かかる説明のすべての態様は、図３Ｂの実施形態にも同様に適用されるはずであり、ここで、図３ＢのＶＭＭ１０４’は、機能レベル上実質的に本明細書中で以下に説明する図３Ａのホスト・オペレーティング・システム１０４の役割を置き換えることになる。
【００２５】
もう一度、図３Ａを参照すると、ホストＯＳ１０４（またはＶＭＭ１０４’）の上には、２つの仮想マシン（ＶＭ）の実装形態、すなわち例えば仮想化されたインテル３８６プロセッサとすることができるＶＭ  Ａ１０８と、例えばモトローラ６８０Ｘ０プロセッサ・ファミリのうちの１つのプロセッサの仮想化バージョンとすることができるＶＭ  Ｂ１１０とが存在する。各ＶＭ１０８および１１０の上には、それぞれゲストＯＳ（guest operating system；ゲスト・オペレーティング・システム）Ａ１１２およびＢ１１４が存在する。ゲストＯＳ  Ａ１１２の上では２つのアプリケーション、すなわちアプリケーションＡ１  １１６およびアプリケーションＡ２  １１８が実行されており、ゲストＯＳ  Ｂ１１４上にはアプリケーションＢ１  １２０が存在する。
【００２６】
複数の仮想プロセッサの初期化
図４は、図３Ｂのシステムの各部分を示し、そこでは複数の仮想プロセッサ（ＶＰ）をさらに含んでいる。当業者には知られており理解されているように、ＶＰは、物理プロセッサに論理的に等価な仮想デバイスであり、この仮想マシンは、ゲスト・オペレーティング・システムに対してエミュレートする。図４のマルチ・プロセッサＶＭシステムにおいて、ＶＭ  Ａ１０８は、ＶＰ  Ａ１  １２４、ＶＰ  Ａ２  １２６ないしＶＰ  ＡＮ  １２８を含み、これらは、即ちこのＶＭ  Ａ１０８は、それぞれ例えばアプリケーションＡ１  １１６、アプリケーションＡ２  １１８ないしアプリケーションＡＮ  １２２を実行するためのゲストＯＳ  Ａ１１２に対してエミュレートすることができる。さらに、各ＶＰは、関連する仮想ローカルＡＰＩＣを有しており、この仮想ローカルＡＰＩＣは、よく知られているようにそれによって１つのプロセッサが別のプロセッサに割込みを行うことができるプロセスを処理し、１つのプロセッサが別のプロセッサを起動できるようにする。プロセッサがアクセスする際に、このローカルＡＰＩＣデバイスは、割込みのマスキングを行い、割込みを可能にし、プロセッサ間の割込みを生成するなどのアクションを実施する。より詳細には、図４のマルチ・プロセッサＶＭシステムにおいて、ＶＭ  Ａ１０８は、ＶＰ  Ａ１  １２４に関連する仮想ローカルＡＰＩＣ  Ａ１  １３０と、ＶＰ  Ａ２  １２６に関連する仮想ローカルＡＰＩＣ  Ａ２  １３２と、ＶＰ  ＡＮ  １２８に関連する仮想ローカルＡＰＩＣ  ＡＮ  １３４をさらに備える。同様に、ＶＭ  Ｂ１１０は、複数のＶＰおよび仮想ローカルＡＰＩＣデバイスを含むことができるが、図を簡単にするためにこれらは示していない。
【００２７】
よく知られているように、各ＶＰは、このＶＭＭ中にそれ自体の実行スレッドを有する。スレッドは、プロセッサ上で実行される特定のプログラムまたはアプリケーションに関連する自己完結型のプロセスである。このプロセッサは、外見上では並列にプログラムまたはアプリケーションを実行するが、実際にはこのプロセッサは、優先順位に基づいてスレッド間でタイム・スライスされている。その結果、図４を引き続き参照すると、ＶＭＭ１０４’は、ＶＰ  Ａ１  １２４に関連するスレッドＡ１  １３６、ＶＰ  Ａ２  １２６に関連するスレッドＡ２  １３８、ないしＶＰ  ＡＮ  １２８に関連するスレッドＡＮ  １４０をさらに備えている。並行して実行される各スレッドには、たとえＶＭＭ１０４’の各スレッドへの割当て、例えばタイム・スライシング、に従ってこれらのハードウェア・リソース（すなわち、コンピュータ・ハードウェア１０２）にアクセスするための優先順位が割り当てられる。
【００２８】
初期化に際して、このゲストＯＳ中におけるタイムアウト状態を防止するために、図４に示すように、本発明のマルチ・プロセッサＶＭシステムでは、各ゲストＯＳ、および／またはＢＩＯＳなどのその関連するコンポーネントを修正し保守する必要なしに、ＶＭ環境内の複数の仮想プロセッサを初期化する方法が提供される。複数のプロセッサＶＭを初期化する方法は、図５を参照するより詳細な説明中に見出される。
【００２９】
図５は、本発明による、および図４を引き続き参照した場合の、複数のプロセッサＶＭを初期化する方法１５０を示すフローチャートである。ステップ１５２において、ホストＯＳ１０４”は、図４に示すＶＭ  Ａ１０８など、複数のプロセッサＶＭを作成し、ある「スタータ仮想プロセッサ」をアクティブにする、例えばＶＰ  Ａ１  １２４をこの「スタータ仮想プロセッサ」としてアクティブにする。ステップ１５４において、この実施例における「スタータ仮想プロセッサ」であるＶＰ  Ａ１  １２４は、仮想プロセッサＶＰ  Ａ２  １２６ないしＶＰ  ＡＮ  １２８のうちの１つなど、次の仮想プロセッサに対してスタートアップ・コマンドを発行する。
【００３０】
ステップ１５６において、ＶＭＭ１０４’は、それぞれ仮想プロセッサＶＰ  Ａ２  １２６ないしＶＰ  ＡＮ  １２８のスレッドＡ２  １３８ないしＡＮ  １４０のうちの１つなどこのターゲットの仮想プロセッサに関連付けられたスレッドに、ハードウェア・リソース、すなわち１つまたは複数の物理プロセッサ（図示せず）を含むコンピュータ・ハードウェア１０２にアクセスするための最高優先順位を付与する。ステップ１５８において、ＶＭＭ１０４’は、ＶＰ  Ａ１  １２４に関連付けられたスレッドＡ１  １３６に強制的にこれらのハードウェア・リソース、すなわちコンピュータ・ハードウェア１０２の制御を放棄させる。ステップ１６０において、ＶＭＭ１０４’は、それぞれ仮想プロセッサＶＰ  Ａ２  １２６ないしＶＰ  ＡＮ  １２８のスレッドＡ２  １３８ないしＡＮ  １４０のうちの１つなど、ターゲット仮想プロセッサに関連するスレッドにこれらのハードウェア・リソースの制御を渡す。
【００３１】
ステップ１６２において、それぞれ仮想プロセッサＶＰ  Ａ２  １２６ないしＶＰ  ＡＮ  １２８のスレッドＡ２  １３８ないしＡＮ  １４０のうちの１つなど、ターゲット仮想プロセッサに関連付けられたスレッドは、そのスタートアップ・ルーチンを実行し完了する。ステップ１６４において、ＶＭＭ１０４’は、それぞれ仮想プロセッサＶＰ  Ａ２  １２６ないしＶＰ  ＡＮ  １２８のスレッドＡ２  １３８ないしＡＮ  １４０のうちの１つなど、ターゲット仮想プロセッサに関連するスレッドに強制的にこれらのハードウェア・リソース、すなわちコンピュータ・ハードウェア１０２の制御を放棄させる。ステップ１６６において、ＶＭＭ１０４’は、「スタータ仮想プロセッサ」であるＶＰ  Ａ１  １２４に関連するスレッドＡ１  １３６にこれらのハードウェア・リソースの制御を返す。
【００３２】
判断ステップ１６８において、ＶＭＭ１０４’は、初期化すべき仮想プロセッサがどれか残っているかどうかを決定する。もし残っている場合、方法１５０は、ステップ１５４へと戻る。もし残っていない場合には、方法１５０は、終了する。
【００３３】
結論
本明細書中で説明した様々なシステム、方法、および技法は、ハードウェアまたはソフトウェア、あるいは適切な場合にはこれら両者の組合せを用いて実装することができる。したがって、本発明の方法および装置、またはある種の態様またはその一部分は、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、他の任意のマシン読取り可能ストレージ媒体など有形の媒体の形で実施されるプログラム・コード（すなわち、命令）の形態を取ることが可能であり、ここでは、このプログラム・コードが、コンピュータなどのマシンにロードされ、マシンによって実行される場合に、このマシンは、本発明を実行するための装置になる。プログラマブル・コンピュータ上におけるプログラム・コード実行の場合においては、このコンピュータは一般に、プロセッサ、（揮発性および不揮発性のメモリおよび／またはストレージ・エレメントを含めて）このプロセッサにより読取り可能なストレージ媒体、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含むことになる。１つまたは複数のプログラムは、高レベルの手続き形言語またはオブジェクト指向プログラミング言語の形で実装されてコンピュータ・システムと情報をやりとりすることが好ましい。しかし、この１つ（または複数）のプログラムは、必要に応じてアセンブリ言語または機械語で実装することができる。いずれにしても、この言語は、コンパイラ型言語またはインタープリタ型言語とすることが可能であり、ハードウェア実装形態と組み合わせることができる。
【００３４】
本発明の方法および装置は、電気的な配線またはケーブル配線上で、光ファイバを介して、他の任意の伝送形態を介してなど何らかの伝送媒体上で伝送されるプログラム・コードの形態で実施することもでき、ここで、このプログラム・コードがマシンによって受信され、マシンにロードされ、またマシンによって実行されるときに、ＥＰＲＯＭ、ゲートアレイ、ＰＬＤ（プログラマブル・ロジック・デバイス）、クライアント・コンピュータ、ビデオ・レコーダなどのマシンが、本発明を実行するための装置になる。汎用プロセッサ上で実装されるときには、このプログラム・コードがこのプロセッサと組み合わされて、本発明のインデッックス付け機能を実施するように動作する固有の装置が提供される。
【００３５】
本発明を様々な形の好ましい実施形態に関連して説明してきたが、他の同様な実施形態を使用することもでき、あるいは本発明を逸脱することなく本発明と同じファンクションを実施するために、この説明した実施形態に対して変更および追加を行うことができることを理解されたい。例えば、本発明の例示の実施形態は、パーソナル・コンピュータの機能をエミュレートするデジタル・デバイスのコンテクストで説明しているが、本発明は、本出願中で説明されるかかるデジタル・デバイスだけに限定されることなく、有線であれ無線であれ、ゲーミング・コンソール、ハンドヘルド・コンピュータ、ポータブル・コンピュータなど任意数の既存の、または出現しつつあるコンピューティング・デバイスまたはコンピューティング環境にも適用でき、また通信ネットワークを介して接続され、このネットワークを横切って相互作用する任意数のかかるコンピューティング・デバイスにも適用できることが当業者には理解されよう。さらに、特に無線ネットワークデバイスの数が増え続けているので、ハンドヘルド・デバイス・オペレーティング・システム、および他の特定用途向けハードウェア／ソフトウェアインターフェース・システムを含めて様々なコンピュータ・プラットフォームが、本明細書中では企図されていることについて強調しておくべきである。したがって、本発明は、どの１つの実施形態にも限定されるべきではなく、代わりに添付の特許請求の範囲による広がりと範囲で解釈すべきである。
【００３６】
最終的には、本明細書中で説明しているこれらの開示の実施形態は、他のプロセッサ・アーキテクチャ、コンピュータ・ベースのシステム、またはシステム仮想化形態において使用するために適合させることができ、かかる実施形態については、本明細書中で行われた開示によって明確に予想されており、したがって、本発明は、本明細書中で説明している特定の実施形態だけに限定すべきではなく、その代わりに最も広範囲に解釈すべきである。同様に、プロセッサ仮想化以外の目的のための合成命令の使用もまた、本明細書中で行われたこの開示によって予想されており、プロセッサ仮想化以外のコンテクストにおける合成命令のかかるどのような利用についても、本明細書中で行われたこの開示中に最も広範囲に読み込むべきである。
【図面の簡単な説明】
【００３７】
【図１】本発明の態様を組み込むことができるコンピュータ・システムを示すブロック図である。
【図２】コンピュータ・システムにおけるエミュレートされた動作環境についての、ハードウェア・アーキテクチャおよびソフトウェア・アーキテクチャの論理階層化を示す図である。
【図３Ａ】仮想化コンピューティング・システムを示す図である。
【図３Ｂ】ホスト・オペレーティング・システムと並行して実行される仮想マシン・モニタを含む仮想化コンピューティング・システムの代替実施形態を示す図である。
【図４】複数の仮想プロセッサをさらに含む、図３Ｂのシステムの各部を示す図である。
【図５】本発明による、複数のプロセッサのＶＭを初期化する方法を示すフローチャートである。
【符号の説明】
【００３８】
２０  コンピュータ
２１  処理装置
２２  システム・メモリ
２３  システム・バス
２７  ハード・ドライブ
２８  フロッピー（登録商標）ドライブ
２９  着脱可能ストレージ
３０  光ドライブ
３１  光ディスク
３２  ハードディスク・ドライブＩ／Ｆ
３３  磁気ディスク・ドライブＩ／Ｆ
３４  光ドライブＩ／Ｆ
３６  アプリケーション・プログラム
３６’  アプリケーション・プログラム
３７  他のプログラム
３８  プログラム・データ
４０  キーボード
４２  マウス
４６  シリアルポートＩ／Ｆ
４７  モニタ
４８  ビデオ・アダプタ
４９  リモート・コンピュータ
５０  フロッピー（登録商標）ドライブ
５３  ネットワークＩ／Ｆ
５４  モデム
５５  ホスト・アダプタ
５６  ＳＣＳＩバス
６２  ストレージ・デバイス
９０  コンピュータ・システム
９２  ホスト・オペレーティング・システムおよびハードウェア・アーキテクチャ
９４  エミュレーション・プログラム
９６  ゲスト・ハードウェア・アーキテクチャ
９８  ゲスト・オペレーティング・システム
１００  ソフトウェア・アプリケーション
１０２  コンピュータ・ハードウェア
１０４  ホスト・オペレーティング・システム
１０４’  仮想マシン・モニタ
１０４”  ホスト・オペレーティング・システム
１０８  仮想マシンＡ
１１０  仮想マシンＢ
１１２  ゲストＯＳ  Ａ
１１４  ゲストＯＳ  Ｂ
１１６  アプリケーションＡ１
１１８  アプリケーションＡ２
１２０  アプリケーションＢ１
１２２  アプリケーションＡＮ
１２４  
１３０  仮想ローカルＡＰＩＣ  Ａ１
１３２  仮想ローカルＡＰＩＣ  Ａ２
１３４  仮想ローカルＡＰＩＣ  ＡＮ
１３６  スレッドＡ１
１３８  スレッドＡ２
１４０  スレッドＡＮ
【図１】
2006018813.tif 000003
【図２】
2006018813.tif 000004
【図３Ａ】
2006018813.tif 000005
【図３Ｂ】
2006018813.tif 000006
【図４】
2006018813.tif 000007
【図５】
2006018813.tif 000008