0

完全仮想化では、ゲストOSのCPLはどのくらいですか?パラバーチャリゼーションでは、ゲストOSのCPLは1(リング1)ですが、完全仮想化でも同じですか?

また、x86特権命令の一部は簡単に処理できないため、「バイナリ書き換え」方式が必要だと聞きました...

この「バイナリ書き換え」はどのように発生しますか?仮想化では、CPUがエミュレートされないことを理解しています。では、CPUがバイナリ命令コードを実行する前に、ハイパーバイザーはどのようにしてバイナリ命令コードを変更できますか?彼らはメモリ上の次の命令を予測し、CPUがそこに到達する前にメモリの内容を更新しますか?これが本当なら、ハイパーバイザーコード(バイナリ書き換えを実行する)は、ゲストOSの命令が実行される前に、毎回CPUをインターセプトする必要があると思います。これはばかげていると思います。

具体的な説明をいただければ幸いです。前もって感謝します..!!

4

1 に答える 1

2

完全仮想化とは、ハードウェアでサポートされている仮想化を意味する場合、ゲストのCPLは、ベアメタルで実行されている場合と同じです。

Xenがバイナリを書き換えることはありません。

これはVMWareが(私が理解している限りでは)何かです。私の理解の限りでは(ただし、VMWareソースコードを見たことがありません)、このメソッドは基本的に、異なる方法で実行する必要のあるコードのランタイムパッチを実行することで構成されます-通常、これには既存のオペコードを別のものに置き換えることが含まれます-いずれかが発生しますハイパーバイザーへのトラップ、または「正しいことを行う」コードの置換セット。これがVMWareでどのように機能するかを理解している場合、ハイパーバイザーはブロックをシングルステップで実行することでコードを「学習」し、バイナリパッチを適用するか、セクションを「クリア」としてマークします(変更する必要はありません)。次回このコードが実行されるときは、すでにパッチが適用されているか、クリアされているため、「フルスピード」で実行できます。

Xenでは、準仮想化(リング圧縮)を使用して、OSのコードが仮想化環境を認識するように変更されているため、特定のことを理解するために「信頼」されています。ただし、ハイパーバイザーは、たとえばページテーブルへの書き込みをトラップします(そうでない場合、誰かがページテーブルを変更して別のゲストのメモリなどにマップする悪意のあるカーネルモジュールを作成する可能性があります)。

HVMメソッドは特定の命令をインターセプトしますが、AMDのSVMやIntelプロセッサのVMXなどの最新のプロセッサのハードウェアサポートのおかげで、残りのコードは通常のフルスピードで実行されます。ARMのプロセッサの最新モデルにも同様のテクノロジがありますが、その名前がわかりません。

私があなたの質問のかなりすべてに答えたかどうか、私が何かを逃したかどうか、またはそれが十分に明確でないかどうかはわかりません、遠慮なく尋ねてください...

于 2013-01-06T14:43:40.610 に答える