仮想化技術の原則(CPU、メモリ、IO)

ます。http://www.ywnds.com/のp = 5856この記事はから来ていますか?

仮想化

クラウドコンピューティングは、現在、非常に成熟しており、仮想化は不可欠なクラウド・コンピューティング・インフラストラクチャを構築するためのキーテクノロジーです。本質的に大規模な分散システムであり、クラウド、クラウドコンピューティングシステム。仮想仮想以上の仮想物理プラットフォーム上のプラットフォーム、及び前記仮想プラットホームの各々は、独立した端末は、クラウドを結合分散システムとして使用することができます。物理プラットフォームの直接使用に比べて、仮想化は、リソースの効率的な使用に大きな利点、動的プロビジョニング、および高い信頼性を有します。仮想化を使用することは、企業がより完全に既存のIT投資を活用するための新しい情報インフラを構築するための既存のインフラストラクチャを放棄する必要はありません。

仮想化技術

仮想化は、広範な用語である仮想ではなく、管理を簡素化するために基づいて実質ベース、リソースの最適化ソリューションを実行しているコンピューティングデバイスを指します。

X86プラットフォームの仮想化技術では、新しい仮想化層の導入は、多くの場合、また、ハイパーバイザとして知られている仮想マシンモニタ(仮想MachineMonitor、VMM)と呼ばれます。実際の物理的なプラットフォームである仮想マシンモニタの動作環境は、ホストと呼ばれます。そして、仮想プラットフォームのうち、それは一般的に次のようにシステムの動作に対応したクライアントは、また、クライアント・オペレーティング・システムと呼ばれていると呼ばれています。

仮想化技術の原則(CPU、メモリ、IO)

1974年には、ポペックとゴールドバーグは「古典仮想化(クラシック仮想化)」紙に基本的なニーズを定義し、彼らは信じている、真の意味でのVMMは、少なくとも3つの分野で基準を満たしています。

  • 同等の実行(Equivalient実行):リソースと時間の可用性の違いに加えて、仮想環境で実行し、実行の実環境はまったく同じです。
  • パフォーマンス(性能):ほとんどの命令セットはCPU上で直接実行することができるようにします。
  • セキュリティ(安全性):VMMを完全にシステムリソースを制御することができるようにします。

このようなソフトウェアの仮想化とハードウェアの仮想化、別の例の準仮想化と完全仮想化など、多くの仮想化技術の実装があります。以下は、それぞれの実装のための簡単な紹介を行います。

CPUの仮想化技術

まず、ソフトウェアの仮想化およびハードウェアの仮想化

1)仮想化 - ソフトウェア・ソリューション

名前が示すように、純粋なソフトウェアの仮想化、物理的なアクセスのためのキャプチャとシミュレーションプラットフォームを実現するために(多くの場合、ハードウェア仮想化をサポートしていません)、既存の物理プラットフォーム上で純粋なソフトウェアの方法を使用することです。このようQEMUなどの一般的なソフトウェアの仮想マシンが、それは、クライアントが直接物理プラットフォーム上で命令を実行しない、フェッチ、デコード、および実行純粋なソフトウェア・シミュレーション・プラットフォームX86プロセッサを介していました。すべての命令はソフトウェア・シミュレーションなので、パフォーマンスがしばしば貧弱ですが、同じプラットフォーム上のプラットフォームをベースと異なる仮想マシンをシミュレートすることができます。

VMware仮想化ソフトウェアは、動的バイナリ変換(BT)技術を使用し、異なる方法でQEMUそのようなシミュレーションは、BTが加速仮想化ソリューションの一つであり、他の一般的なソリューションは、仮想化ハードウェアアシスト加速することです仮想化技術。BTは、クライアントの指示は、物理的なプラットフォーム上で直接実行できるように、マシンを制御することができる仮想マシンモニタの範囲です。しかし、実行する前に、クライアントの命令はブレーク命令の仮想マシンモニタマシンの限界を動的に物理プラットフォーム上で直接実行することができ、安全指示書に置き換え、または仮想マシンモニタに置き換えられます仮想マシンモニタマシンのスキャンになりますソフトウェアと呼ばれます。この利点は存在できない、偽物を作ることだけであるソフトウェアによってシミュレート純粋なソフトウェアのシミュレーション性能(比べて大幅な改善であり、これは、カットのいくつかの種類を介して仮想仮想デバイスをあるか、そうでなければ利用可能サービスの特定のレベル)だけでなく、クロスプラットフォーム仮想化する能力を失いました。

BT技術により、スペースのユーザーは、ユーザーレビュー3にCPUのリングで実行すると、CPUのリング1上のカーネルスペースゲストのランニングは、カーネル空間は、ホストCPUのリング0で実行するように。BTは、特権命令の呼び出しを変換するために、いつでもお客様のカーネル呼び出しで、CPUリング1を監視します。もちろん、CPUのリング1と使用されていないが、BTこの技術は、仮想化のパフォーマンスが大幅に改善されていることができます。しかし、BTは大きな欠点は関係なく、そのようなので、上のPowerPC、ARMおよびなど様々なCPUアーキテクチャ・プラットフォームをシミュレートすることが可能であるどのような基盤となるハードウェアエミュレータQEMU、クロスプラットフォームではないではありません持っている。しかし、BTはこれをしなかった、BTはに強く依存していますこうした下のように根本的なアーキテクチャ、あなただけのX86 CPU X86の仮想マシンを作成することができるように。

純粋なソフトウェア仮想化ソリューションでは、ソフトウェアスイートにおけるVMMの位置は、オペレーティング・システムは、伝統的な意味で配置されている場所であるが、オペレーティング・システムは、従来の意味でのアプリケーションの位置は、この変換は、システムを高めるために結合されている位置であります複雑。ソフトウェアスタックの複雑化が困難な環境は、システムの信頼性とセキュリティを確保するために難易度が増加しますので、管理、およびすることを意味します。

2)仮想化 - ハードウェアソリューション

ハードウェア支援による仮想化(HVM)、要するに、物理プラットフォーム自体は特別な手順については、ハードウェアサポートの傍受やリダイレクトを提供している、でも、新しいハードウェアは、主要なハードウェア資源のソフトウェア実装を支援するために、追加のリソースを提供しますパフォーマンスを向上するように、仮想化、。CPUを高める追加の環-1環は、具体的には実行中の仮想マシンの提供として理解することができます。仮想化されたX86プラットフォームは、例えば、命令セットは、VMMが制限モードに置かれ、クライアントのいずれかで実行するのは非常に簡単になりますそれを通じて仮想プロセスを制御するために設定し、特別な最適化された命令、とX86 CPUの仮想化技術をサポートしていますクライアントは、物理リソースにアクセスしようとすると、クライアントがVMMに制御を返します。一方で、ハードウェアが一時停止します。VMMは、ハードウェア仮想化機能強化メカニズム、制限モードで特定のリソースへのクライアントアクセス、VMM仮想リソースへのハードウェアによって指定された完全なリダイレクターを利用することができ、全体のプロセスは、クライアントソフトウェアとVMMの動作を停止しません参加。

仮想化ハードウェアは、関連するパフォーマンス・オーバーヘッドを低減する、バイナリ変換を必要とせず、直接上記稼働しているオペレーティング・システムをサポートするための新たなフレームワークを提供するよう、VMMは、共通の基準に応じて書き込むことができるように、大幅に性能より強力で、VMMの設計を簡素化。

ハードウェア仮想化技術がソリューションであることに留意すべきです。全体像は、VMMのソフトウェアやオペレーティングシステム自体の一部として、CPU、マザーボードのチップセット、BIOSおよびソフトウェアをサポートする必要があります。CPUのみのサポート仮想化技術は、ソフトウェアの場合にVMMで、仮想化技術をサポートしていないシステムよりも優れた性能があるだろうとしても。仮想化およびハードウェアの仮想化広範な展望の製品のための巨大な需要を考えると、Intelは改善し、彼らのハードウェア仮想化製品ラインを強化しようとしています。2005年後半以来、Intelは、デスクトップPentium、およびCoreシリーズを含むIntelVTプロセッサの仮想化技術と製品のシリーズをリリースし、そのプロセッサ製品ラインのアプリケーションインテルバーチャライゼーション・テクノロジー(IntelVT)仮想化技術を始めただけでなく、 XeonおよびItaniumのItaniumのXeonサーバ。インテルは、最適化されたハードウェア仮想化のパフォーマンスを維持し、プロセッサ・アーキテクチャの各新しい世代の新しい仮想化技術を追加しました。今市場で、デスクトップのCore i3は/ 5/7から、サーバーE3 / 5/7/9に、ほとんどすべてのは、Intel VTテクノロジをサポートしています。近い将来には、インテルVTは、すべてのIntelプロセッサ上の標準になる可能性がある、と言うことができます。もちろん、AMDのCPUの仮想化技術をサポートしています。

概要

ハードウェア支援による仮想化技術は、BT技術は、物理マシンにパフォーマンスの80%を仮想マシンのパフォーマンスを可能にする場合は、ハードウェア支援による仮想化(HVM)が約85%に到達するために、物理マシン、仮想マシンのパフォーマンスを作ることができるようになりますBTよりも良く見えます。もちろん、この中間の変換がまだ必要とされますが、ハードウェアで直接実行され、それはそれです。

第二に、完全仮想化と準仮想化

フル仮想化(完全仮想化)

完全仮想化クライアントは、仮想マシンを構成するために最大限の柔軟性を提供し、プロセッサ、メモリ、および理論的には、実際の物理的なプラットフォーム上で実行できる任意のオペレーティングシステムをサポートするための周辺機器を含めた完全な仮想X86プラットフォームを提供し、セックス。クライアントは、完全に仮想化された比類のない利点である既存のx86オペレーティングシステムとソフトウェアプラットフォームに基づいて、適切に任意の非仮想化環境を実行するためにオペレーティングシステムを変更する必要はありません。

完全仮想化では、仮想マシンは、インストール時に物理マシンでの差はないと、認識されていない仮想化環境で実行されているかを知りません。しかし、これは完全な仮想化ソフトウェアを必要とサポートセンターの操作を行い、あなたはすべてのハードウェアリソースをシミュレートするためのソフトウェアを必要としますが、各ゲストは、彼らが仮想で実行知らなかったようにする必要があるため、少なくともCPU特権命令は、シミュレートするためのソフトウェアを使用する必要があります環境、あなたは特権命令でCPUを提供する必要があります。

仮想化環境では、通常、仮想シミュレーションとの二つの概念、VMWareの動的バイナリ変換技術(BT)であり、QEMUは、仮想ソフトウェア技術がアナログです。最大の違いは、すべての命令のCPUリング0-3変換の必要はなく、唯一の仮想CPUのリング0特権命令をすることができ変換する必要がありますされてアナログシミュレーションCPUリング0-3ソフトウェアで実装、要求することによって、ということです。

我々は、仮想この一歩を合理化することができます場合はもちろん、関係なく、それはBTの技術やQEMUまたはハードウェア支援による仮想化技術の一番上に来るとき、すべて完全に仮想化技術です命令変換を必要とする、複雑なステップは、完了する必要はありませんパフォーマンスマシンは改善があるでしょう。それでは、どのようにそれを合理化するには?これは、以下の準仮想化と言われています。また、完全仮想化モードでは:

CPUは、ハードウェア仮想化技術をサポートしていない場合:VMMは、仮想その後、すべての命令は、物理的な命令セットに特権コマンドを実行して、その後、CPUを実行する仮想マシンを変換するために、VMMの動的翻訳技術にBTによって渡されます。

GuestOSはリング0で実行している間、VMM走行​​リング-1:CPUは、ハードウェア仮想化技術をサポートしている場合。

準仮想化(準仮想化)

仮想化ソフトウェアは、完全にそれらの間で、互いに独立し孤立確実にするために、ハードウェアの仮想化支援プラットフォームの欠如にVMMのソフトウェアを介して、個々の仮想マシンの監視を実現することができます。しかし、増加したソフトウェアの複雑さ、およびパフォーマンスの損失を犠牲に。それは、それは仮想環境で実行されている知っている仮想マシンの監視マシンで作業できるように、この負担を軽減する1つの方法は、ゲストオペレーティングシステムへの変更です。この方法は、準仮想化(準仮想化)と呼ばれています。VMカーネルは明らかに、メモリやCPU使用率VMMの使用への直接適用のためではなく、直接呼び出して、ハードウェアリソースの使用のためにBTは、もはや自分自身の使用のためではなく、VMMに適用する必要がある、彼らは仮想化の上で実行されている知っていません翻訳。それができたとしても、パフォーマンスの途中で翻訳自然なステップを減らし、ハードウェアを直接扱うことができますハイパーコールを介したI / Oデバイスの使用のために(ハイパーバイザコールシステムを提供する)は、準仮想化モードは、仮想化を可能にすることが良いと言われています物理マシンの性能の90%です。本質的には、準仮想化は、積極的にクライアントオペレーティングシステムに通知するために、それを変換し、受動的な傍受仮想マシン固有の命令の要件を弱めました。しかし、準仮想化ゲスト・オペレーティング・システムには、事前通知を実装するためのソースコードを変更する必要があります。

Xenは、Xenのハイパーバイザー上で実行する前に、オペレーティング・システム準仮想化のオープンソースの一例であり、仮想サーバとして、カーネル・レベルで特定の変更でなければなりません。そのため、彼らはありませんので、BSD、Linuxでは、Solarisおよびその他のオープンソースのオペレーティング・システムに適したXenのが、Windowsのように、これらの独自のオペレーティング・システムには適していませんが、仮想化
、オープンソースなので、カーネルを変更することはできません。

概要

ハードウェア支援による仮想化の登場以来、完全仮想化は、性能も強化されています。そして、準仮想化の面で比較した、より合理化、仮想プロセスの使用上の完全仮想化ゲストに対して透過的です。このようKVM仮想マシンが言ったの背面など、より市場の需要に沿ったので完全仮想化、。

メモリの仮想化技術

仮想化技術のCPUで最も重要な関連技術を持って、次は5つのコンポーネントのコンピュータのメモリで二番目に大きいの成分、メモリの仮想化技術について話しています。

まず、メモリ自体は、仮想アドレスを介して外部サービスを提供する仮想化技術、彼らはすべての物理メモリを使用することができ、すべてのプロセスに類似していることを知っています。以下は、非仮想化と仮想アドレッシングモードが用意されています。

仮想化技術の原則(CPU、メモリ、IO)

ませんVirtualation

非仮想化では、システムは、彼らがすべての物理メモリを使用することができ、各プロセスを使用するプロセスを経るための物理アドレス(ページ・フレーム)仮想アドレスを提供します。あなたは仮想アドレスの場合にもその線形アドレスを、特定のデータのデータにアクセスしたいときはいつでも、もともとCPUにMMU(メモリ管理ユニット)と呼ばれるものがあります。このプロセスは、CPUへのアドレス、およびデータを読み込む必要になりますが、CPUは実際にデータにアクセスするためのアドレスを知っていないので、MMUを介してCPUが対応する物理アドレスにアクセスするには、このアドレスを変換するので、このデータはあなたが訪問することができるようになります。得られた一般的なプロセスのメモリアドレス空間は、連続した仮想アドレス空間であり、実際の物理メモリ記憶装置に一般的に連続したアドレス空間はありません。

Virtualationで

ためには、アドレス空間の新たな層の導入として、KVM仮想マシンをクライアントが孤立し、スクラッチを使用できるように、仮想メモリを実装し、連続したメモリ空間を持っているために、つまり、クライアントの物理アドレス空間(ゲスト物理アドレス、GPA)、このアドレス空間は、それがクライアントのアドレス空間にマッピングされたばかりのホスト仮想アドレス空間ですが、実際の物理アドレス空間ではありません。クライアント、クライアントの物理アドレス空間は、最初から連続したアドレス空間であるが、ホストのために、クライアントの物理アドレス空間は限らない連続、ゲスト物理アドレス空間マッピングが可能です不連続なホストアドレスの範囲の複数。

私たちは、仮想環境では、仮想マシンはMMUに対処物理ホストの物理アドレスに直接使用することができない、という参照図から、物理アドレス変換Chengsu仮想マシンホストの仮想アドレス(仮想アドレス、HVAホスト)に必要です。ハードウェア上で実行されているハイパーバイザーは、最初の物理メモリの仮想アドレスを変換し、また再び変換された仮想の仮想メモリアドレス空間を必要とし、その後、上の仮想マシンへの出力、およびバーチャル(仮想アドレス、HVAホスト)しますしかし、同じマシンにGPA GVA操作を変換します。複数のアドレス変換ソフトウェアによって明らかにこのマッピングにより、各仮想マシンのメモリアクセスが必要とされているハイパーバイザの介入は、その効率は非常に低いです。

したがって、HPAにGVAの変換効率を向上させるために、ホスト物理アドレスに対する仮想アドレスとクライアントの直接変換を達成するための2つの方法があります。一つは、シャドウページテーブル(シャドウページテーブル)により、ホストの物理アドレスへのゲスト仮想アドレス(KVM仮想マシンがサポートされている)の間の直接変換を達成するためのソフトウェアベースの実装、すなわちです。第二は、二つの間の変換を達成するために、仮想化のためのハードウェア支援MMUサポートに基づいています。

これはシャドウページテーブル(シャドウページテーブル)各仮想マシンは、シャドウページテーブルを持っている必要があるため、その実装は、非常に複雑です。これは非常に悪い結果で発生し、TLB(変換索引バッファ、送信アサイドバッファ)は、TLBキャッシュがGPAへの変換GVAであるので、仮想ホストの場合は特に、複数ヒットすることは困難です関係は、そうすべての仮想ホスト・スイッチは、そうでなければ、データがホスト間(ホストがGPAにGVAの中であるため)、エラーが発生読み取り、TLBをクリアする必要があります。送信ルックアサイド・バッファは、変換後の物理アドレスキャッシュ結果に仮想アドレスメモリ管理ユニットを改善するために使用され、そしてこの問題は、仮想マシンのパフォーマンスの低下につながる可能性があります。

また、メモリの仮想化のためのIntelのEPT(エクステントページの表)技術とAMDのNPT(ネストページの表)技術は、ハードウェアサポートを提供します。両方の技術は、同様の原理は、ハードウェアレベルでのホスト間の物理アドレスに、クライアントの仮想アドレスを達成することです。Virtualation MMUに呼び出されます。この技術ではMMUの仮想化は、仮想マシンプロセスは内部MMUはGPAに変換することにより、まだ同じGVAあるとき、それは完全に仮想化のメリットを維持し、何も変更する必要はありません。しかし、本当の物理アドレス(HPA)にVirtualation MMU技術により、同時に自動的GVAで。これは、大幅に仮想マシンのパフォーマンスを向上させ、HPAプロセスにGPAにより減少しました。

そして、CPUメーカーも、それは、今3つの分野に拡大し、これらの二つのフィールドを、あるホストフィールドを追加し、GVAによってGPAにと、GPAとの対応をマークするために、以前はTLB GVA、TLBハードウェア仮想化技術を提供します対応はHPAにGVAとの対応になりました。明らかにこれはHPAへのマッピング仮想マシンのGVAの結果であると述べました。

概要

これは、ハードウェアをサポートしていない場合は、あなただけのTLBは常に空にする必要があることを意味する、シャドウページテーブル(シャドウページテーブル)を使用することができ、そのメモリの仮想化を示しています。メモリと仮想マシン技術、ある程度の仮想マシンのパフォーマンスは、また、大幅に強化されてきたが。

I / O仮想化技術

アクセスされる周辺I Oリソース(ポートI / OまたはMMIO)のセットを介して、仮想デバイス関連/はI / O仮想化と呼ばれ、プロセッサの観点から見て、例えば:

1)外部記憶装置:ハードディスクドライブ、CD、Uディスク。

2)ネットワーク機器:カード。

3)表示装置:VGA(ビデオカード)。

4)キーボードマウス:PS / 2、USB。

シリアルデバイス、COMポートや他の機器をまとめてIOデバイスなどのいくつかありますが、いわゆるIO仮想化は、これらのデバイスのサポートを提供することで、アイデアは、デバイスへのVMMインターセプトのゲスト・オペレーティング・システムに対するアクセス要求にあり、その後、ソフトウェアを介して、実際のデバイスをシミュレートします効果。多様化、I / O仮想化機能と複雑な方法のデバイスタイプに基づいて、我々は話をし、いくつかの一般的なIOデバイスを選択します。

IO仮想化が、以下に示すように、一般的に3つの方法が、あります。

仮想化技術の原則(CPU、メモリ、IO)

最初:アナログI / Oデバイス

シミュレートするソフトウェアをフルに活用、これが最も簡単な方法ですが、アナログおよび完全仮想化のためのIOデバイスの最安パフォーマンスが差にあまり意味がありません。VMMのゲストOSは、ゲストOSカーネルは、アナログ駆動、アナログ装置を介してIOデバイスにアクセスするためにVMMに調整する必要があり、その後、VMMの領域に達する使用するために、デバイスとデバイスドライバIO、IOデバイスをシミュレートします。VMMは、上記装置をシミュレートし、そんなにたくさんホストVMMは、それはまた、実際の物理IOデバイス上のIOデバイスにそれらの要求をスケジュールするVMM I / Oスタック(複数のキュー)を提供し、実行されます。要求を完了するためにいくつかの手順を実行します。

举例:Qemu、VMware Workstation

第二:準仮想化

半虚拟化比模拟性能要高,其通过系统调用直接使用I/O设备,跟CPU半虚拟化差不多,虚拟化明确知道自己使用的IO设备是虚拟出来的而非模拟。VMM给Guest OS提供了特定的驱动程序,在半虚拟化IO中我们也称为“前端IO驱动”;跟模拟I/O设备工作模式不同的是,Guest OS自己本身的IO设备不需要处理IO请求了,当Guest OS有IO请求时通过自身驱动直接发给VMM进行处理,而在VMM这部分的设备处理我们称之为“后端IO驱动”。

举例:Xen、virtio

第三种:I/O透传技术

I/O透传技术(I/O through)比模拟和半虚拟化性能都好,几乎进阶于硬件设备,Guest OS直接使用物理I/O设备,操作起来比较麻烦。其思想就是提供多个物理I/O设备,如硬盘提供多块,网卡提供多个,然后规划好宿主机运行Guest OS的数量,通过协调VMM来达到每个Guest OS对应一个物理设备。另外,要想使用I/O透传技术,不光提供多个I/O设备还需要主板上的I/O桥提供支持透传功能才可以,一般Intel提供的这种技术叫VT-d,是一种基于北桥芯片的硬件辅助虚拟化技术,主要功能是由来提高I/O灵活性、可靠性和性能的。

为什么I/O透传还需要主板支持呢?每个虚拟机直接使用一个网卡不就可以了吗?主要是因为在我们传统的X86服务器架构上,所有的IO设备通常有一个共享或集中式的DMA(直接内存访问),DMA是一种加速IO设备访问的方式。由于是集中式的,所以在VMM上管理多块网卡时其实使用的还是同一个DMA,如果让第一个Guest OS直接使用了第一块网卡,第二个Guest OS直接使用第二块网卡,但使用的DMA还是同一个,而DMA是无法区分哪个Guest OS使用的是哪块网卡,这就变的麻烦了。而像Intel的VT-d就是用来处理这些问题的,以及处理各主机中断。

举例:Intel VT-d

对应具体设备是如何实现?

1)硬盘如何虚拟化?

虚拟化技术中,CPU可以按时间切割,内存可以按空间切割,那么磁盘设备呢?也可以按照空间来切割,把硬盘划分成一个一个的区域。但是好像没有这么用的,一般磁盘虚拟化的方式就是通过模拟的技术来实现。

2)网卡如何虚拟化? 

网卡的虚拟化方式一般使用模拟、半虚拟化、IO透传技术都行,其实现方式根据VMM的不同有所不同,一般的VMM都会提供所有的方式。

3)显卡如何虚拟化?

显卡虚拟化通常使用的方式叫frame buffer(帧缓存机制),通过frame buffer给每个虚拟机一个独立的窗口来实现。当然其实对于显示设备的虚拟化是比较麻烦的,所以通常在虚拟化环境中我们的显示设备性能都不会很好的,当然安装个Windows显示还是没有问题的,但不适用图形处理类的服务。

4)键盘鼠标如何虚拟化?

我们在虚拟机中使用键盘鼠标通常都是通过模拟的方式实现的,通过焦点捕获将模拟的设备跟当前设备建立关联关系,比如你使用Vmware workstation时把鼠标点进哪个虚拟机后,相当于被此虚拟机捕获了,所有的操作都是针对此虚拟机了。

总结

简单描述了CPU虚拟化、内存虚拟化、IO虚拟化的实现方式。其一,我们大概知道了如何选择虚拟化主机性能会最大化,CPU支持硬件辅助虚拟化技术,如Intel的VT;内存支持硬件辅助虚拟化技术,如Virtualization mmu和TLB;IO支持硬件辅助虚拟化技术,如Intel的VT-d。当然光有硬件的支持还不是太够,在使用虚拟化时要能够充分利用到这些硬件才行。

虚拟化的运行模式

Type-I:直接运行在操作系统之上的虚拟化,模式如下图:

仮想化技術の原則(CPU、メモリ、IO)

如:Vmware workstations、Kvm等。

Type-II:直接运行在硬件之上的(提供各种硬件驱动),模式如下图:

仮想化技術の原則(CPU、メモリ、IO)

如:Vmware EXSI、Xen等。

但是Xen有点特别,虽然也是直接安装在硬件之上,提供Hypervisor,但是只负责CPU、内存、中断,不提供I/O驱动,需要额外安装一个虚拟机再安装一个Linux系统用来管理I/O设备,如下图:

仮想化技術の原則(CPU、メモリ、IO)

Type-III:其他类型

当然,除了上面提到的基于操作系统或直接基于硬件的虚拟化外,还有如下常见的类型。

容器虚拟化

基于内核的虚拟化,所有的虚拟机都是一个独立的容器,但共同运行硬件之上,使用着同一个内核。优点就是速度快,部署容易,缺点就是相互间的资源相互隔离比较麻烦,但现在市场也都有了相对成熟的解决方案。如,如今大火的Docker,网上都有人说Docker具有取代虚拟化的势头。

模拟器虚拟化

通过模拟器模拟所有的硬件,如QEMU,KVM就是使用QEMU。

库虚拟化

通过在操作系统之上模拟出不同系统的库,如Linux上运行Wine就可以支持Windows上的软件运行,Windows上运行Cywin就可以支持Linux上的软件运行。因为现在操作系统都是遵循POSIX标准,所以各自提供的库接口都是同一个标准,只需要在对应的平台上运行一个可以提供对方库的软件,然后在此软件之上运行针对对方系统编译好的软件即可。为什么要运行针对对方平台编译好的软件,因为虽然库统一了,但是各自的ABI(应用二进制接口)接口还是不同的。

X86平台实现虚拟化技术的挑战?

首先我们知道X86处理器有4个特权级别,Ring 0~Ring 3,只有运行在Ring 0 ~ 2级时,处理器才可以访问特权资源或执行特权指令,运行在Ring 0级时,处理器可以运行所有的特权指令。X86平台上的操作系统一般只使用Ring 0和Ring 3这两个级别,其中,操作系统内核运行在Ring 0级,也被称为内核空间指令,用户进程运行在Ring 3级,也被称为用户空间指令。

特权级压缩(ring compression)

为了满足上面所述的需求,VMM自身必须运行在Ring 0级,同时为了避免Guest OS控制系统资源,Guest OS不得不降低自身的运行级别而运行于Ring 3(Ring 1、2 不使用)。

此外,VMM使用分页或段限制的方式保护物理内存的访问,但是64位模式下段限制不起作用,而分页又不区分Ring 0,1,2。为了统一和简化VMM的设计,Guest OS只能和用户进程一样运行在Ring 3。VMM必须监视Guest OS对GDT、IDT等特权资源的设置,防止Guest OS运行在Ring 0级,同时又要保护降级后的Guest OS不受Guest进程的主动攻击或无意破坏。

特权级别名(Ring Alias)

设计上的原因,操作系统假设自己运行于ring 0,然而虚拟化环境中的Guest OS实际上运行于Ring 1或Ring 3,由此,VMM必须保证各Guest OS不能得知其正运行于虚拟机中这一事实,以免其打破前面的“等价执行”标准。例如,x86处理器的特权级别存放在CS代码段寄存器内,Guest OS却可以使用非特权PUSH指令将CS寄存器压栈,然后POP出来检查该值;又如,Guest OS在低特权级别时读取特权寄存器GDT、LDT、IDT和TR时并不发生异常。这些行为都不同于Guest OS的正常期望。

地址空间压缩(Address Space Compression)

地址空间压缩是指VMM必须在Guest OS的地址空间中保留一段供自己使用,这是x86虚拟化技术面临的另一个挑战。VMM可以完全运行于自有的地址空间,也可以部分地运行于Guest OS的地址空间。前一种方式,需在VMM模式与Guest OS模式之间切换,这会带来较大的开销;此外,尽管运行于自己的地址空间,VMM仍需要在Guest OS的地址空间保留出一部分来保存控制结构,如IDT和GDT。无论是哪一种方式,VMM必须保证自己用到地址空间不会受到Guest OS的访问或修改。

非特权敏感指令

x86使用的敏感指令并不完全隶属于特权指令集,VMM将无法正确捕获此类指令并作出处理。例如,非特权指令SMSW在寄存器中存储的机器状态就能够被Guest OS所读取,这违反了经典虚拟化理论的要求。

サイレント特権障害(サイレント特権障害)

障害発生時に、特定の権限のx86命令がエラーを返さないため、エラーがそれは、古典的な仮想「同等の実行」ルールの教義に違反する原因となる、VMMキャプチャされません。

割り込みの仮想化(仮想化割り込み)

仮想化環境、シールドとシールドなし割り込み割り込み管理は、VMMによって行われるべきであるが、GuestOS特権リソースへの各アクセスは、VMMによって要求された場合、必然的に、頻繁に、マスクされたか、割り込みを許可プロセッサ例外をトリガプロセスは、大幅にシステム全体のパフォーマンスに影響を与えるにバインドされています。

おすすめ

転載: www.cnblogs.com/bj-mr-li/p/11407927.html