【手続補正書】
【提出日】平成19年9月14日(2007.9.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ＩＡ３２アーキテクチャを含むが、該アーキテクチャには限定されないｘ８６プロセッサアーキテクチャ及び同等のアーキテクチャにおけるプロセッサ仮想化を改良するための方法であって、
ｘ８６プロセッサ上で動作する仮想マシンに関する仮想化に悪影響を与えるゲストオペレーティングシステムにおける１つまたは複数の事前定義された命令を削除する、置き換える、または補足するステップ
を備えことを特徴とする方法。
【請求項２】
前記１つまたは複数の命令は、ＰＵＳＨ  ＣＳ、ＰＵＳＨ  ＳＳ、ＳＳからのＭＯＶ、ＣＡＬＬＦ、ＶＥＲＲ、ＶＥＲＷ、及びＬＡＲの命令グループのメンバを含む
ことを特徴とする請求項１に記載の方法。
【請求項３】
ｘ８６プロセッサ上の仮想化に悪影響を与える命令は、前記ｘ８６プロセッサにおいて例外を生じさせる合成命令によって置き換えられるか、または補足され、該例外が、前記ｘ８６プロセッサ上で実行されている仮想マシンによって前記仮想マシンによる処理のためにトラップされる
ことを特徴とする請求項１に記載の方法。
【請求項４】
第２の仮想マシン上で実行されている第１の仮想マシンに関して、命令が、前記ｘ８６プロセッサにおいて例外を生じさせる合成命令によって置き換えられるか、または補足され、該例外が、前記第２の仮想マシンを実質的に迂回することにより、前記ｘ８６プロセッサ上で実行されている前記第１の仮想マシンによって前記仮想マシンによる処理のためにトラップされる
ことを特徴とする請求項３に記載の方法。
【請求項５】
前記合成命令は、ユーザモードと特権モードの両方で使用可能である
ことを特徴とする請求項３に記載の方法。
【請求項６】
前記合成命令は、既存のｘ８６命令に対する帰結を有さない
ことを特徴とする請求項３に記載の方法。
【請求項７】
前記合成命令は、直接実行（例えば、ＶＭＤＸＤＳＢＬ）を無効にするための命令である
ことを特徴とする請求項３に記載の方法。
【請求項８】
前記合成命令は、直接実行（例えば、ＶＭＤＸＥＮＢＬ）を有効にする（または再び有効にする）ための命令である
ことを特徴とする請求項３に記載の方法。
【請求項９】
合成命令で置き換えられる命令に関して、前記合成命令は、置き換えられる前記命令に意味的に類似している
ことを特徴とする請求項３に記載の方法。
【請求項１０】
５バイト未満の長さの命令は、少なくとも５バイトの長さの合成命令で置き換えられる（例えば、パッチングを容易にするため）
ことを特徴とする請求項９に記載の方法。
【請求項１１】
ＳＴＩ命令は、少なくとも５バイトの長さの合成命令（例えば、ＶＭＳＴＩ）で置き換えられる
ことを特徴とする請求項１０に記載の方法。
【請求項１２】
ＣＬＩ命令は、少なくとも５バイトの長さである合成命令（例えば、ＶＭＣＬＩ）で置き換えられる
ことを特徴とする請求項１０に記載の方法。
【請求項１３】
前記ゲストオペレーティングシステムにおけるＣＰＵＩＤ命令は、仮想化されたＣＰＵＩＤ情報を読み取る合成命令（例えば、ＶＭＣＰＵＩＤ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項１４】
前記ゲストオペレーティングシステムにおける少なくとも１つのマルチプロセッサスピンロック命令は、スピンロック獲得が失敗した場合を特定するための合成命令（例えば、ＶＭＳＰＬＡＦ）で補足される
ことを特徴とする請求項３に記載の方法。
【請求項１５】
前記ゲストオペレーティングシステムにおけるＰＵＳＨＦ（Ｄ）命令は、ＩＦをスタック上にプッシュする合成命令（例えば、ＶＭＰＵＳＨＦＤ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項１６】
前記ゲストオペレーティングシステムにおけるＰＯＰＦ（Ｄ）命令は、ＩＦをポップしてスタックから外す合成命令（例えば、ＶＭＰＯＰＦＤ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項１７】
前記ゲストオペレーティングシステムにおいて記述子テーブルエントリを変更する命令は、前記記述子テーブルエントリを更新する合成命令（例えば、ＶＭＷＲＤＥＳＣ）で置き換えられて、シャドー記述子テーブルを保持することに関連するオーバーヘッドが回避される
ことを特徴とする請求項３に記載の方法。
【請求項１８】
前記ゲストオペレーティングシステムにおけるＳＧＤＴ命令は、現在のＧＤＴのベース及び長さをＥＡＸに格納する合成命令（例えば、ＶＭＳＧＤＴ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項１９】
前記ゲストオペレーティングシステムにおけるＳＬＤＴ命令は、現在のＬＤＴ選択子をＥＡＸに格納する合成命令（例えば、ＶＭＳＬＤＴ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項２０】
前記ゲストオペレーティングシステムにおけるＳＩＤＴ命令は、前記現在のＩＤＴのベース及び長さをＥＡＸに格納する合成命令（例えば、ＶＭＳＩＤＴ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項２１】
前記ゲストオペレーティングシステムにおけるＳＴＲ命令は、現在のＴＲ選択子をＥＡＸに格納する合成命令（例えば、ＶＭＳＴＲ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項２２】
前記ゲストオペレーティングシステムにおけるＣＬＩ命令は、仮想化されたＩＦをクリアする合成命令（例えば、ＶＭＣＬＩ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項２３】
前記ゲストオペレーティングシステムにおけるＳＴＩ命令は、仮想化されたＩＦを設定する合成命令（例えば、ＶＭＳＴＩ）で置き換えられる
ことを特徴とする請求項３に記載の方法。
【請求項２４】
前記プロセッサを停止させるための合成命令（例えば、ＶＭＨＡＬＴ）は、ユーザレベルのゲストコードとして実行される
ことを特徴とする請求項３に記載の方法。
【請求項２５】
オペレーティングシステムが、該オペレーティングシステムが仮想化されたプロセッサ上で実行されているか、またはｘ８６プロセッサ上で直接に実行されているかを判定する方法であって、
中央処理装置のＩＤを表す値を戻すために合成命令（例えば、ＶＭＣＰＵＩＤ）を実行するステップと、
値が戻された場合、前記オペレーティングシステムが、仮想化されたプロセッサ上で実行されていると結論付け、当該結論付けの後、合成命令を利用するステップと、
例外が生じた場合、前記オペレーティングシステムが、ｘ８６プロセッサ上で直接に実行されていると結論付け、当該結論付けの後、合成命令を利用することを控えるステップと
を備えることを特徴とする方法。
【請求項２６】
値が戻された場合、基礎にある仮想マシンモニタの機能または動作にアクセスするか、または該機能または該動作を変更するステップ
をさらに備えることを特徴とする請求項２５に記載の方法。
【請求項２７】
前記合成命令に関する１６進演算コードは、０ＦＣ７Ｃ８０１００である
ことを特徴とする請求項２５に記載の方法。
【請求項２８】
長いＪＭＰ命令を使用してトラップ可能な命令を効率的にパッチするためにオペレーティングシステムコードを改良するための方法であって、
ゲストオペレーティングシステムにおいて、５バイト未満の長さのトラップ可能な命令（例えば、リング０コード内で実行されるＳＴＩ命令及びＣＬＩ命令）のインスタンスを探し出し、該トラップ可能な命令を少なくとも５バイトの長さの対応する合成命令（例えば、それぞれＶＭＳＴＩ及びＶＭＣＬＩ）で置き換えるステップ
を備えることを特徴とする方法。
【請求項２９】
ＩＡ３２アーキテクチャを含むが、該アーキテクチャには限定されないｘ８６プロセッサアーキテクチャ上及び同等のアーキテクチャ上で合成命令を処理するためのシステムであって、
前記合成命令が前記ｘ８６プロセッサにおいて例外を生じさせた後、ゲストオペレーティングシステムによって発行された前記合成命令をトラップするためのサブシステムと、
前記ゲストオペレーティングシステムのために前記合成命令を処理するためのサブシステムと
を備えたことを特徴とするシステム。
【請求項３０】
スピンロック獲得が失敗した場合を特定するための合成命令（例えば、ＶＭＳＰＬＡＦ）がトラップされ、処理されるサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項３１】
ＩＦをスタック上にプッシュするための合成命令（例えば、ＶＭＰＵＳＨＦＤ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項３２】
ＩＦをポップしてスタックから外すための合成命令（例えば、ＶＭＰＯＰＦＤ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項３３】
記述子テーブルエントリを更新する合成命令（例えば、ＶＭＷＲＤＥＳＣ）を処理するためのサブシステムをさらに備え、シャドー記述子テーブルを保持することに関連するオーバーヘッドを回避する
ことを特徴とする請求項２９に記載のシステム。
【請求項３４】
現在のＧＤＴのベース及び長さをＥＡＸに格納するための合成命令（例えば、ＶＭＳＧＤＴ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項３５】
現在のＬＤＴ選択子をＥＡＸに格納するための合成命令（例えば、ＶＭＳＬＤＴ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項３６】
現在のＩＤＴのベース及び長さをＥＡＸに格納するための合成命令（例えば、ＶＭＳＩＤＴ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項３７】
現在のＴＲ選択子をＥＡＸに格納するための合成命令（例えば、ＶＭＳＴＲ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項３８】
仮想化されたＩＦをクリアするための合成命令（例えば、ＶＭＣＬＩ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項３９】
仮想化されたＩＦを設定するための合成命令（例えば、ＶＭＳＴＩ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項４０】
ユーザレベルのゲストコードとして実行することができる前記プロセッサを停止させるための合成命令（例えば、ＶＭＨＡＬＴ）を処理するためのサブシステム
をさらに備えたことを特徴とする請求項２９に記載のシステム。
【請求項４１】
前記システムが、仮想化されたプロセッサ上で実行されているか、またはｘ８６プロセッサ上で直接に実行されているかを判定するためのサブシステムをさらに備え、
前記サブシステムは、
中央処理装置によってサポートされる機能のＩＤを表す値を戻すための合成命令（例えば、ＶＭＣＰＵＩＤ）を実行するためのサブシステムと、
値が戻されたかどうかを判定し、（ａ）戻された場合、オペレーティングシステムが、仮想化されたプロセッサ上で実行されていると結論付け、当該結論付けの後、合成命令を使用し、（ｂ）戻されない場合、オペレーティングシステムがｘ８６プロセッサ上で直接に実行されていると結論付け、当該結論付けの後、合成命令を利用することを控えるためのサブシステムとを含む
ことを特徴とする請求項２９に記載のシステム。
【請求項４２】
値が戻された場合、基礎にある仮想マシンモニタの機能または動作にアクセスするか、または該機能または該動作を変更するためのサブシステム
をさらに備えたことを特徴とする請求項４１に記載のシステム。
【請求項４３】
前記合成命令に関する１６進演算コードは、０ＦＣ７Ｃ８０１００である
ことを特徴とする請求項４１に記載のシステム。
【請求項４４】
前記合成命令は、直接実行を無効にするための合成命令（例えば、ＶＭＤＸＤＳＢＬ）を含む
ことを特徴とする請求項２９に記載のシステム。
【請求項４５】
前記合成命令は、直接実行を有効にする（または再び有効にする）ための合成命令（例えば、ＶＭＤＸＥＮＢＬ）を含む
ことを特徴とする請求項２９に記載のシステム。
【請求項４６】
前記合成命令は、
ＩＦをスタック上にプッシュするための合成命令（例えば、ＶＭＰＵＳＨＦＤ）と、
ＩＦをポップしてスタックから外すための合成命令（例えば、ＶＭＰＯＰＦＤ）とを含む
ことを特徴とする請求項２９に記載のシステム。
【請求項４７】
前記合成命令は、
現在のＧＤＴのベース及び長さをＥＡＸに格納するための合成命令（例えば、ＶＭＳＧＤＴ）と、
現在のＬＤＴ選択子をＥＡＸに格納するための合成命令（例えば、ＶＭＳＬＤＴ）と、
現在のＩＤＴのベース及び長さをＥＡＸに格納するための合成命令（例えば、ＶＭＳＩＤＴ）と、
現在のＴＲ選択子をＥＡＸに格納するための合成命令（例えば、ＶＭＳＴＲ）とをさらに含む
ことを特徴とする請求項４６に記載のシステム。
【請求項４８】
前記合成命令は、
仮想化されたＩＦをクリアするための合成命令（例えば、ＶＭＣＬＩ）と、
仮想化されたＩＦを設定するための合成命令（例えば、ＶＭＳＴＩ）とをさらに含む
ことを特徴とする請求項４６に記載のシステム。
【請求項４９】
前記合成命令は、トラップされ、処理されるスピンロック獲得が失敗した場合を特定するための合成命令をさらに含む
ことを特徴とする請求項４６に記載のシステム。
【請求項５０】
前記合成命令は、中央処理装置のＩＤを表す値を戻すための合成命令（例えば、ＶＭＣＰＵＩＤ）をさらに含む
ことを特徴とする請求項４６に記載のシステム。
【請求項５１】
前記合成命令に関する１６進演算コードは、０ＦＣ７Ｃ８０１００である
ことを特徴とする請求項５０に記載のシステム。
【請求項５２】
ＩＡ３２アーキテクチャを含むが、該アーキテクチャには限定されないｘ８６プロセッサアーキテクチャ及び同等のアーキテクチャにおけるプロセッサ仮想化を改良するためのコンピュータ可読命令を含むコンピュータ読み取り可能な記録媒体であって、
前記コンピュータ可読命令は、前記ｘ８６プロセッサにおいて例外を生じさせる合成命令を含み、該例外が、前記ｘ８６プロセッサ上で実行されている仮想マシンモニタによって前記仮想マシンモニタによる処理のためにトラップされる
ことを特徴とするコンピュータ読み取り可能な記録媒体。
【請求項５３】
ゲストオペレーティングシステムにおける少なくとも１つマルチプロセッサスピンロック命令は、スピンロック獲得が失敗した場合を特定するための合成命令（例えば、ＶＭＳＰＬＡＦ）で補足される命令をさらに備える
ことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項５４】
中央処理装置のＩＤを表す値を戻すための合成命令（例えば、ＶＭＣＰＵＩＤ）をさらに含む
ことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項５５】
ＩＦをスタック上にプッシュする合成命令（例えば、ＶＭＰＵＳＨＦＤ）をさらに含む
ことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項５６】
ＩＦをポップしてスタックから外す合成命令（例えば、ＶＭＰＯＰＦＤ）をさらに含む
ことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項５７】
現在のＧＤＴのベース及び長さをＥＡＸに格納する合成命令（例えば、ＶＭＳＧＤＴ）をさらに含むことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項５８】
現在のＬＤＴ選択子をＥＡＸに格納する合成命令（例えば、ＶＭＳＬＤＴ）をさらに
含むことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項５９】
現在のＬＤＴのベース及び長さをＥＡＸに格納する合成命令（例えば、ＶＭＳＩＤＴ）をさらに含む
ことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項６０】
現在のＴＲ選択子をＥＡＸに格納する合成命令（例えば、ＶＭＳＴＲ）をさらに含む
ことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項６１】
仮想化されたＩＦをクリアする合成命令（例えば、ＶＭＣＬＩ）をさらに含む
ことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項６２】
仮想化されたＩＦを設定する合成命令（例えば、ＶＭＳＴＩ）をさらに含む
ことを特徴とする請求項４６に記載のコンピュータ可読命令。
【請求項６３】
前記命令が、仮想化されたプロセッサ上で実行されているか、またはｘ８６プロセッサ上で直接に実行されているかを判定するための命令をさらに含み、
該命令は、
中央処理装置のＩＤを表す値を戻すための合成命令を実行するための命令と、
中央処理装置のＩＤに相当する値が戻されたかどうかを判定し、（ａ）戻された場合、合成命令を利用し、（ｂ）戻されない場合、合成命令の使用を中止するための命令とを含む
ことを特徴とする請求項５２に記載のコンピュータ可読命令。
【請求項６４】
前記合成命令に関する１６進演算コードは、０ＦＣ７Ｃ８０１００である
ことを特徴とする請求項６３に記載のコンピュータ可読命令。
【請求項６５】
ＩＡ３２アーキテクチャを含むが、該アーキテクチャには限定されないｘ８６プロセッサアーキテクチャ上及び同等のアーキテクチャ上で実行されている場合に合成命令を処理するための方法であって、
ゲストオペレーティングシステムにおいて、ＰＵＳＨ  ＣＳ、ＰＵＳＨ  ＳＳ、ＳＳからのＭＯＶ、ＣＡＬＬＦ、ＶＥＲＲ、ＶＥＲＷ、及びＬＡＲの事前定義された命令の１つまたは複数のインスタンスを削除する、置き換える、または補足するステップを含む
ことを特徴とするシステム。
【請求項６６】
ＩＡ３２アーキテクチャを含むが、該アーキテクチャには限定されないｘ８６プロセッサアーキテクチャ上及び同等のアーキテクチャ上で実行されている場合にプロセッサ仮想化を改良するようにゲストオペレーティングシステムを最適化するための方法であって、
前記ゲストオペレーティングシステムにおいて、ＰＵＳＨ  ＣＳ、ＰＵＳＨ  ＳＳ、ＳＳからのＭＯＶ、ＣＡＬＬＦ、ＶＥＲＲ、ＶＥＲＷ、及びＬＡＲの事前定義された命令の１つまたは複数のインスタンスを削除する、置き換える、または補足するステップと、
前記ゲストオペレーティングシステムにおけるＣＰＵＩＤ命令を仮想化されたＣＰＵＩＤ情報を読み取る合成命令（例えば、ＶＭＣＰＵＩＤ）で置き換えるステップと、
前記ゲストオペレーティングシステムにおけるスピンロック命令をスピンロック獲得が失敗した場合を特定する合成命令（例えば、ＶＭＳＰＬＡＦ）で補足するステップと、
前記ゲストオペレーティングシステムにおけるＰＵＳＨＦ（Ｄ）命令をＩＦをスタック上にプッシュするための合成命令（例えば、ＶＭＰＵＳＨＦＤ）で置き換えるステップと、
前記ゲストオペレーティングシステムにおけるＰＯＰＦ（Ｄ）命令をＩＦをポップしてスタックから外すための合成命令（例えば、ＶＭＰＯＰＦＤ）で置き換えるステップと、
前記ゲストオペレーティングシステムにおけるＳＧＤＴ命令を現在のＧＤＴのベース及び長さをＥＡＸに格納するための合成命令（例えば、ＶＭＳＧＤＴ）で置き換えるステップと、
前記ゲストオペレーティングシステムにおけるＳＬＤＴ命令を現在のＬＤＴ選択子をＥＡＸに格納するための合成命令（例えば、ＶＭＳＬＤＴ）で置き換えるステップと、
前記ゲストオペレーティングシステムにおけるＳＩＤＴ命令を現在のＩＤＴのベース及び長さをＥＡＸに格納するための合成命令（例えば、ＶＭＳＩＤＴ）で置き換えるステップと、
前記ゲストオペレーティングシステムにおけるＳＴＲ命令を現在のＴＲ選択子をＥＡＸに格納するための合成命令（例えば、ＶＭＳＴＲ）で置き換えるステップと、
前記ゲストオペレーティングシステムにおけるＣＬＩ命令を仮想化されたＩＦをクリアするための合成命令（例えば、ＶＭＣＬＩ）で置き換えるステップと、
前記ゲストオペレーティングシステムにおけるＳＴＩ命令を仮想化されたＩＦを設定するための合成命令（例えば、ＶＭＳＴＩ）で置き換えるステップと
を備えることを特徴とする方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００９０
【補正方法】変更
【補正の内容】
【００９０】
【図１】上述のコンピュータハードウェア上で直接実行し、２つの仮想マシン（ＶＭ）とインタフェースをとる仮想マシンモニタ（ＶＭＭ）ソフトウェアレイヤを含む仮想化されたコンピューティングシステムを示す図である。
【図２】図１の仮想化されたコンピューティングシステムを示すが、コンピュータハードウェアと直接インタフェースをとるホスト（ネイティブ）オペレーティングシステムをさらに含む図である。
【図３】ホストコンピュータシステムにおいて実行されているエミュレートされたコンピュータシステムの要素の論理関係を示す図である。
【図４】ｘ８６プロセッサ（特にＩＡ３２アーキテクチャに関する）のＥＦＬＡＧＳレジスタを示す図である。
【図５】仮想マシンモニタ（ＶＭＭ）によって通常、認識される４つの異なるプロセッサモード分類を示す図である。
【図６】従来のｘ８６プロセッサ仮想化アプローチが抱える問題である、リング０コードであるはずのものが実際にはより高いリングレベルで実行されていることを公開するｘ８６命令を示すテーブルの図である。
【図７】仮想マシンがゲストオペレーティングシステムに関するあるｘ８６レジスタ情報をシャドーイングしていることを公開する命令を示すテーブルの図である。
【図８】仮想化のためにはトラップすべきであるが、ｘ８６アーキテクチャではトラップしない命令を示すテーブルの図である。
【図９】ｘ８６アーキテクチャにおけるＩＦフィールド及びＩＯＰＬフィールドに関係する問題のある命令を示すテーブルの図である。
【図１０】ＯＳコードを最適化し、「合成命令」を使用することによってＩＡ３２アーキテクチャにおける仮想化を改良するための方法の一実施形態を示す流れ図である。