2017-03-26 31 views
2

ハードウェア支援仮想化では、ゲストOSはリング0上で実行されるため、特権命令を直接実行できますか?完全仮想化でバイナリ変換が必要なのはなぜですか?

なぜ完全仮想化では、VMMはリング0でゲスト特権命令を実行しませんか?なぜそれらを翻訳する必要がありますか?

異なるアーキテクチャ(異なるゲストとホスト)が心に浮かぶ1つの理由があります。もっと何かありますか?

答えて

0

ので、それが直接、特権命令を実行することができ、私は右ですか?

いいえ、それは完全に真実ではありません。特権命令は引き続き特権リソースへのアクセスを試みるため、VMMの背後でそれらの参照/変更を許可することはできません。したがって彼らは罠に陥るだろう。そのため、従来のVMMでは「トラップ・エミュレート」アプローチでゲストが実行されます。非特権ゲスト命令の大半は直接実行され、特権命令はトラップされ、エミュレートされたものは1つずつ実行されます。いずれの場合も、翻訳は行われません。つまり、コードの大規模な(> 1ゲスト命令)ブロックの変換が必要です。

また、システムリソースを非特権にすることができ、それにアクセスする命令は仮想環境内で無害になります。

なぜ完全仮想化では、VMMはリング0でゲスト特権命令を実行しませんか?

「リング0」は単なる数である特定の命令が新しい意味を受け取る除いて、それはあまり意味がありません。代わりに、彼らはそれらがシステムリソースにアクセスすることを許可されている上位のリング上で行うように断層運動の。しかし、VMMの内部では、それは許可されていません。

なぜ私たちはそれらを翻訳する必要がありますか?

個々の特権命令はトラップされ、エミュレートされ、解釈される可能性があります。用語としての "翻訳"は、命令のブロックに対してのみ意味を持ちます。心に入って来る

一つの理由は、異なるアーキテクチャ

ゲスト命令の100%が「特権」のとき選択した上で期待どおりに動作しません。すなわち、変性例いくつかの並べ替えである

ですホスト。それらを直接実行しようとするのは理にかなっておらず、それぞれを解釈することは多くのアプリケーションでは遅すぎます。これは、より大きなブロックの翻訳==コンパイルが意味を持ち始めるところです。

他に何かありますか?

Intelアーキテクチャでは、ハードウェア支援の仮想化を(一時的に)無効にし、速度と正確性の面で2進変換に後退することを時々考えているアーキテクチャ固有の特徴があります。しかし、このトピックは別の具体的な質問の一部であると考えています。その答えはかなり複雑であり、インテルVT-xの深い理解が必要です。

関連する問題