システム仮想マシン(SYS-VM [要出典]とも呼ばれる)は、完全なシステムプラットフォームを提供し、完全なオペレーティングシステム(OS)の実行をサポートする仮想マシン(VM)です。[1]これらは通常、既存のアーキテクチャをエミュレートし、実際のハードウェアが使用できない場合にプログラムを実行するためのプラットフォームを提供するか(たとえば、他の方法では廃止されたプラットフォームで実行する)、仮想マシンの複数のインスタンスを用意して、エネルギー消費とコスト効率の両方の点でコンピューティングリソースをより効率的に使用するか(クラウドコンピューティング環境の鍵となるハードウェア仮想化として知られています)、またはその両方を目的として構築されます。 VM はもともと、Popek と Goldbergによって「実際のマシンの効率的で分離された複製」と定義されていました。
システム仮想マシン
システム仮想マシンの利点:
- 複数の OS 環境を同じプライマリ ハード ドライブに共存させることができ、仮想パーティションにより、「ホスト」オペレーティング システムまたは「ゲスト」仮想環境のいずれかで生成されたファイルを共有できます。補助ソフトウェアのインストール、ワイヤレス接続、印刷やファックスなどのリモート複製は、ゲストまたはホスト オペレーティング システムのいずれかで生成できます。システムに関係なく、すべてのファイルはホスト OS のハード ドライブに保存されます。
- アプリケーションのプロビジョニング、メンテナンス、高可用性、および災害復旧は、選択した仮想マシン ソフトウェアに組み込まれています。
- エミュレーションまたはジャストインタイムコンパイルを使用することで、ホストの命令セットアーキテクチャ(ISA) とは異なるエミュレートされたハードウェア環境を提供できます。
VM の主な欠点は次のとおりです。
- 仮想マシンは、ホストのハード ドライブに間接的にアクセスする場合、実際のマシンよりも効率が低くなります。
- 複数の VM が実際のホストのハード ドライブ上で同時に実行されている場合、補助仮想マシンのパフォーマンス (実行速度とマルウェア保護) が変動したり不安定になったりすることがあります。これは、選択した VM ソフトウェアが仮想マシン間の一時的な分離を提供しない限り、他の VM によってシステムに課せられるデータ負荷に依存します。
- VM のマルウェア保護は必ずしも「ホスト」と互換性があるわけではなく、別のソフトウェアが必要になる場合があります。
同じ実際のマシン プラットフォーム上の個別の VM からの干渉を回避するために、独自のゲスト オペレーティング システムを実行する複数の VM がサーバー統合に使用されることがよくあります。
仮想マシンの当初の目的は、複数のオペレーティングシステムを実行したいという要望であり、複数のシングルタスクオペレーティングシステム間でタイムシェアリングを可能にするためでした。ある意味では、システム仮想マシンは、歴史的に先行していた仮想メモリの概念を一般化したものと考えることができます。完全な仮想化を可能にした最初のシステムであるIBMのCP/CMSは、各ユーザーにシングルユーザーオペレーティングシステムであるCMSを提供することでタイムシェアリングを実装しました。仮想メモリとは異なり、システム仮想マシンでは、ユーザーがコードに特権命令を書き込む権限が与えられました。このアプローチには、標準システムでは許可されていない入出力デバイスを追加するなど、いくつかの利点がありました。[2]
仮想化を目的とした仮想メモリの技術が進歩するにつれ、1 台の実際のコンピュータ オペレーティング システム上の複数の仮想マシン間でのメモリ共有を管理するために、新しいメモリ オーバーコミットシステムが適用される可能性があります。同じ物理マシン上で実行される複数の仮想マシン間で、同一のコンテンツを持つ「メモリ ページ」を共有できる場合があり、その結果、カーネル SamePage Mergingと呼ばれる手法によって、それらのページが同じ物理ページにマッピングされる可能性があります。これは、コード セグメントを含むページなど、読み取り専用ページに特に役立ちます。特に、複数の仮想マシンで同一または類似のソフトウェア、ソフトウェア ライブラリ、Web サーバー、ミドルウェア コンポーネントなどが実行されている場合に当てはまります。ゲスト オペレーティング システムはホスト ハードウェアに準拠する必要がないため、将来のソフトウェアをサポートするために、同じコンピュータで異なるオペレーティング システム ( Microsoft Windows、Linux、または以前のバージョンのオペレーティング システムなど) を実行できます。
組み込みシステムでは、仮想マシンを使用して個別のゲストオペレーティングシステムをサポートすることが一般的です。典型的な使用法は、リアルタイムオペレーティングシステムを、LinuxやWindowsなどの好みの複雑なオペレーティングシステムと同時に実行することです。もう1つの使用法は、開発段階にある新しい未検証のソフトウェアで、サンドボックス内で実行することです。仮想マシンには、オペレーティングシステム開発における他の利点もあり、デバッグアクセスの改善や再起動の高速化などが挙げられます。[3]
テクニック
目的の使用法に基づいて、さまざまな仮想化技術が使用されます。 ネイティブ実行は、基盤となる生のハードウェアの直接仮想化に基づいているため、実際のマシンがベースとするのと同じアーキテクチャの複数の「インスタンス」が提供され、完全なオペレーティング システムを実行できます。一部の仮想マシンは、さまざまなアーキテクチャをエミュレートして、別のCPUまたはアーキテクチャ用に記述されたソフトウェア アプリケーションやオペレーティング システムを実行できることもできます。 オペレーティング システム レベルの仮想化では、カーネルによる複数の分離されたユーザー空間インスタンスのサポートを介して、コンピューターのリソースを分割できます。これらのインスタンスは通常、コンテナーと呼ばれ、エンド ユーザーには実際のマシンのように見えます。一部のコンピューター アーキテクチャは、主にホスト CPU の仮想化固有のハードウェア機能を使用して、効率的な完全仮想化を可能にするハードウェア 支援仮想化に対応しています。
基盤となる生のハードウェアの仮想化(ネイティブ実行)
このアプローチはハードウェアの完全な仮想化として説明され、タイプ 1 またはタイプ 2ハイパーバイザーを使用して実装できます。タイプ 1 ハイパーバイザーはハードウェア上で直接実行され、タイプ 2 ハイパーバイザーはLinuxやWindowsなどの別のオペレーティング システム上で実行されます。各仮想マシンは、基盤となるハードウェアでサポートされている任意のオペレーティング システムを実行できます。したがって、ユーザーは、別々の「プライベート」仮想コンピューターで、2 つ以上の異なる「ゲスト」オペレーティング システムを同時に実行できます。
この概念を採用した先駆的なシステムは IBM のCP-40であり、これは IBM のCP/CMS (1967–1972) の最初の (1967) バージョンであり、IBM のVM ファミリー(1972–現在)の前身です。 VM アーキテクチャでは、ほとんどのユーザーがVM 制御プログラム ( VM-CP )上の「ゲスト」として、比較的単純な対話型コンピューティングのシングルユーザー オペレーティング システムであるCMSを実行します。このアプローチにより、CMS の設計は、単独で実行されているかのように単純なまま保たれ、制御プログラムは「舞台裏で」マルチタスクおよびリソース管理サービスを静かに提供します。CMS に加えて、通信やその他のシステム タスクはマルチタスク VM (RSCS、GCS、TCP/IP、UNIX) によって実行され、ユーザーはMVSなどの他の IBM オペレーティング システム、さらには新しい CP 自体やz/OS を実行できます。単純な CMS でさえ、スレッド環境 (LISTSERV、TRICKLE) で実行できます。z/VM はVM の現在のバージョンであり、特定のメインフレーム上の数百または数千の仮想マシンをサポートするために使用されます。一部のインストールでは、Web サーバーを実行するためにIBM Z 上の Linux が使用され、多くの仮想マシン内でLinux がオペレーティング システムとして実行されます。
完全仮想化は、実験的な新しいコードを、それぞれ別の仮想マシンで、より安定した古いバージョンと同時に実行できるオペレーティングシステムの開発に特に役立ちます。このプロセスは再帰的に実行することもできます。IBMは、仮想マシンオペレーティングシステムVMの新しいバージョンを、古いバージョンの VM で実行されている仮想マシンでデバッグし、この手法を使用して新しいハードウェアをシミュレートしました。[NB 1]
現代の PC で使用されている標準のx86 命令セット アーキテクチャは、実際にはPopek と Goldberg の仮想化要件を満たしていません。特に、すべてのセンシティブなマシン命令が常にトラップされ、命令ごとの仮想化を可能にする実行モードは存在しません。
これらの制限にもかかわらず、いくつかのソフトウェア パッケージはx86 アーキテクチャ上で仮想化を提供することに成功しています。ただし、VMwareによって最初に実装された特権コードの動的再コンパイルでは、IBM System/370 やMotorola MC68020などのネイティブに仮想化可能なアーキテクチャ上で実行される VM と比較して、パフォーマンスのオーバーヘッドが発生します。現在までに、 Virtual PC、VirtualBox、Parallels Workstation、Virtual Ironなどの他のいくつかのソフトウェア パッケージが、x86 ハードウェア上で仮想化を実装しています。
IntelとAMD は、ハードウェアでの仮想化を可能にする機能を x86 プロセッサに導入しました。
単一マシンのリソースの仮想化だけでなく、クラスター内の複数の独立したノードを組み合わせて単一の仮想NUMAマシンとしてアクセスすることもできます。[4]
非ネイティブシステムのエミュレーション
仮想マシンはエミュレーターの役割も果たし、別のコンピュータ プロセッサアーキテクチャ用に作成されたソフトウェア アプリケーションやオペレーティング システムを実行できるようにします。
オペレーティング システム レベルの仮想化
オペレーティング システム レベルの仮想化は、オペレーティング システム(カーネル) 層でサーバーを仮想化するサーバー仮想化テクノロジです。これはパーティショニングと考えることができます。つまり、単一の物理サーバーが複数の小さなパーティション (仮想環境 (VE)、仮想プライベート サーバー(VPS)、ゲスト、ゾーンなどとも呼ばれます) に分割され、各パーティションはユーザーの観点からは実際のサーバーのように見え、感じられます。
たとえば、Solaris ゾーンは、Solaris 10 などの同じオペレーティング システムで実行される複数のゲスト オペレーティング システムをサポートします。[5]ゲスト オペレーティング システムは、同じオペレーティング システム バージョンで同じカーネル レベルを使用することも、Solaris カーネル ゾーンを使用して異なるカーネル バージョンのオペレーティング システムの別のコピーを使用することもできます。[6] Solaris ネイティブ ゾーンでは、ホスト オペレーティング システムが Solaris のバージョンであることも必要です。他のメーカーの他のオペレーティング システムはサポートされていません。[引用が必要]ただし、他のオペレーティング システムをゾーンとして使用するには、Solaris ブランド ゾーンを使用する必要があります。[引用が必要]
もう 1 つの例は、IBM AIX オペレーティング システムのバージョン 6.1 で導入された システム ワークロード パーティション(WPAR) です。システム WPAR は、グローバル AIX OS 環境の 1 つのインスタンスで実行されるソフトウェア パーティションです。
オペレーティング システム レベルのアーキテクチャはオーバーヘッドが低く、サーバー リソースの効率的な使用を最大限に高めるのに役立ちます。仮想化によって生じるオーバーヘッドはごくわずかで、1 台の物理サーバーで数百の仮想プライベート サーバーを実行できます。対照的に、完全仮想化( VMwareなど) や準仮想化( XenやUMLなど)などのアプローチでは、複数のカーネルを実行するオーバーヘッドのため、このようなレベルの密度を実現できません。一方、オペレーティング システム レベルの仮想化では、異なるオペレーティング システム (つまり、異なるカーネル) を実行することはできませんが、異なるライブラリ、ディストリビューションなどを実行することは可能です。目的の使用法に基づいて、さまざまな仮想化手法が使用されます。ネイティブ実行は、基盤となる生のハードウェアの直接仮想化に基づいているため、実際のマシンがベースとするアーキテクチャと同じアーキテクチャの複数の「インスタンス」を提供し、完全なオペレーティング システムを実行できます。一部の仮想マシンは、さまざまなアーキテクチャをエミュレートして、別の CPU またはアーキテクチャ用に作成されたソフトウェア アプリケーションやオペレーティング システムを実行できます。オペレーティング システム レベルの仮想化では、カーネルが複数の分離されたユーザー スペース インスタンスをサポートすることで、コンピューターのリソースを分割できます。これらのインスタンスは通常コンテナーと呼ばれ、エンド ユーザーには実際のマシンのように見えます。一部のコンピューター アーキテクチャはハードウェア支援による仮想化に対応しており、主にホスト CPU の仮想化固有のハードウェア機能を使用して、効率的な完全仮想化を実現します。
仮想化対応ハードウェア
仮想化対応ハードウェアの例は次のとおりです。
- Alcatel-Lucent 3B20D/3B21Dは、3B2OE または 3B21E システムを搭載した市販のコンピュータでエミュレートされます[説明が必要]
- ARM トラストゾーン
- 16 個のARC 750D コアと Time-machine ハードウェア仮想化モジュールを搭載した Boston Circuits gCore (グリッド オン チップ) 。
- フリースケール PowerPC MPC8572 および MPC8641D
- IBM System/360 モデル 67、System/370、System/390、およびzSeriesメインフレーム
- IBM パワーシステム
- :
...
- AMD-V (旧コード名 Pacifica)
- Intel VT-x (以前のコード名は Vanderpool)
- HP vPAR およびセルベースのnPAR
- GEおよびHoneywell Multics システム[説明が必要]
- Honeywell 200/2000 システム Liberator が IBM 14xx システムに取って代わりました
- ハネウェルレベル 62/64/66 [引用が必要]
- IBM System/360およびSystem/370モデル (旧 IBM システムのプログラムをサポートするエミュレータ搭載)
- Honeywell Level 6ミニコンピュータは、前身の 316/516/716 ミニをエミュレートしました[引用が必要]
- Oracle Corporation (旧Sun Microsystems ) SPARC sun4v ( SPARC M6、T5、T4、T3、UltraSPARC T1およびT2 ) – Oracle VM Server for SPARCで使用(「Logical Domains」とも呼ばれる)
- Xerox Sigma 6 CPU は GE/Honeywell 600/6000 システムをエミュレートするように変更されました[引用が必要]
参照
注記
- ^ IBM がオペレーティングシステムの開発と新しいハードウェアのシミュレーションに仮想マシンを使用した経緯については、 CP/CMS の歴史を参照してください。
参考文献
- ^ 「仮想マシン: 仮想化 vs. エミュレーション」。2014 年 7 月 15 日時点のオリジナルよりアーカイブ。2011年 3 月 11 日閲覧。
- ^ スミスとネア、395-396ページ
- ^ 超高速サーバー再起動 - 仮想化が優れているもう一つの理由 Archived 2006-06-14 at the Wayback Machine . vmwarez.com (2006-05-09). 2013-06-14 に取得。
- ^ マシュー・チャップマンとゲルノット・ハイザー。vNUMA: 仮想共有メモリマルチプロセッサ。2009 USENIX 年次技術会議議事録、サンディエゴ、カリフォルニア州、米国、2009 年 6 月 [1]
- ^ 「Oracle Solaris Zones の概要」。docs.oracle.com。2015年 6 月 26 日閲覧。
- ^ 「Oracle Solaris カーネルゾーンについて」。docs.oracle.com。2015年 6 月 26 日閲覧。
さらに読む
- James E. Smith、Ravi Nair、「Virtual Machines: Versatile Platforms For Systems And Processes」、Morgan Kaufmann、2005 年 5 月、ISBN 1-55860-910-5、656ページ (プロセス仮想マシンとシステム仮想マシンの両方をカバー)
- Craig, Iain D. Virtual Machines . Springer、2006 年、ISBN 1-85233-969-1、269 ページ (プロセス仮想マシンのみをカバー)
外部リンク
- 仮想マシンの生まれ変わり、VMware 共同創設者 Mendel Rosenblum による ACM Queue の記事
