4

I/O仮想化について正しく理解したいと思います。コンテキストは純粋/完全仮想化であり、準仮想化ではありません。

私の理解では、ハイパーバイザーはハードウェアを仮想化し、サンドボックス化された各アプリケーションに仮想リソースを提供します。各サンドボックスは、基盤となるハードウェアにアクセスしていると考えていますが、実際にはそうではありません。代わりに、すべてのアクセスを行うのはハイパーバイザーです。私がよりよく理解する必要があるのはこの側面です。

チップに、OSカーネルがティックタイマーとして使用することを目的としたハードウェアタイマーがあると仮定します。ハイパーバイザー上で実行されている2つの仮想マシン(WindowsとLinuxなど)があると仮定します。

どの仮想マシンもソースコードを変更していません。そのため、タイマーリソースを直接プログラムする命令を吐き出し続けます。

ここでのハイパーバイザーの役割は何ですか?2つのOSが実際に実際のものにアクセスすることを実際に防ぐにはどうすればよいですか?

4

1 に答える 1

3

少し読んだ後、次の場所で説明されている特定のレベルの理解に達しました。

https://stackoverflow.com/a/13045437/1163200

ここで完全に再現します:

これは私自身の質問に答えようとする試みです。

システム仮想化 : IO 仮想化とハイパーバイザーの役割を理解する

仮想化

概念としての仮想化により、複数の/多様なアプリケーションが、互いに意識することなく、同じ基盤となるハードウェア上で共存できます。

たとえば、Windows、Linux、Symbian などの本格的なオペレーティング システムとそれらのアプリケーションを同じプラットフォームに共存させることができます。すべてのコンピューティング リソースが仮想化されます。

これは、前述のどのマシンも物理リソースにアクセスできないことを意味します。物理リソースにアクセスできる唯一のエンティティは、仮想マシン モニター (別名ハイパーバイザー) と呼ばれるプログラムです。

今、これは重要です。よく読んでから読み直してください。

ハイパーバイザーは、上記の各マシンに仮想化環境を提供します。これらのマシンは物理ハードウェアではなく仮想化されたハードウェアにアクセスするため、仮想マシンとして知られています。

例として、Windows カーネルが物理タイマー (システム リソース) を開始する場合があります。タイマーがメモリ マップド IO であるとします。Windows カーネルは、タイマー アドレスに対して一連のロード/ストア命令を発行します。仮想化されていない環境では、これらのロード/ストアにより、タイマー ハードウェアのプログラミングが発生します。

ただし、仮想化環境では、これらのロード/ストア ベースの物理リソースへのアクセスにより、トラップ/障害が発生します。トラップはハイパーバイザーによって処理されます。ハイパーバイザーは、ウィンドウがタイマーをプログラムしようとしたことを認識しています。ハイパーバイザーは、各仮想マシンのタイマー データ構造を維持します。この場合、ハイパーバイザーは、Windows 用に作成したタイマー データ構造を更新します。次に、リアル タイマーをプログラムします。タイマーによって生成された割り込みは、最初にハイパーバイザーによって処理されます。仮想マシンのデータ構造が更新され、仮想マシンの割り込みサービス ルーチンが呼び出されます。

簡単に言うと、Windows は、非仮想化環境で行うであろうすべてのことを行いました。この場合、そのアクションにより、実際のシステム リソースが更新されるのではなく、仮想リソース (上記のデータ構造) が更新されます。

したがって、すべての仮想マシンは、基盤となるハードウェアにアクセスしていると認識します。実際には彼らには知られていませんが、物理ハードウェアへのすべてのアクセスはハイパーバイザーによって仲介されています。

上記のすべては、完全な/従来の仮想化です。最新の CPU のほとんどは、従来の仮想化には適していません。トラップ/フォルトは、すべての命令に適用されるわけではありません。そのため、ハイパーバイザーは最新のデバイスでは簡単にバイパスされます。

ここで、準仮想化が登場します。仮想マシンのソース コード内の重要な指示は、ハイパーバイザーの呼び出しに置き換えられます。上記のロード/ストア スニペットは、次のような呼び出しに置き換えることができます。

Hypervisor_Service(Timer Start, Windows, 10ms); 

エミュレーション

エミュレーションは、仮想化に関連するトピックです。もともと ARM 用にコンパイルされたプログラムを ATMEL CPU で実行するシナリオを想像してみてください。ATMEL CPU は、各 ARM 命令を解釈し、ATMEL プラットフォームで必要なアクションをエミュレートするエミュレータ プログラムを実行します。したがって、エミュレーターは仮想化環境を提供します。

この場合、システム リソースの仮想化は、トラップおよび実行モデルを介して実行されません。

于 2012-10-24T08:33:05.203 に答える