仮想機械

仮想機械の最新ニュースをまとめて検索!

仮想機械(かそうきかい、Virtual Machine、かそうマシン、バーチャル・マシン、VM)とは、コンピュータCPU記憶装置などのリソース仮想化した上で、その仮想化したコンピュータを実行するためのアーキテクチャまたはソフトウェアである。更にはそれら技術により実現された仮想機械(仮想のコンピュータ)そのものを指す。

目次

[編集] 概要

仮想機械は、コンピュータ仮想化技術のひとつであり、1つのコンピュータ上で複数のコンピュータ(OSなど)が稼動したり、場合によっては別のアーキテクチャのコンピュータを模倣する(エミュレータ)技術である。

仮想機械の実装方法は、以下のいずれか、あるいは組み合わせなどがある。

仮想機械を制御するプログラム等はハイパーバイザとも呼ばれる。

仮想機械は通常は、ユーザーやプログラムから「別のコンピュータ」に見えるもの(複数のOSまたはOS環境を実現するもの)を指すが、コンピュータの初期には、仮想記憶マルチタスクマルチユーザータイムシェアリングなど、現在では一般的なOSの機能となった技術を含める場合がある。仮想機械の技術はメインフレームで生まれ発展したが、現在は各種サーバでも一般的な技術となりつつある。

[編集] 利点と難点

実現方式にもよるが一般的には、仮想機械の利点・難点には以下が挙げられる。

  • 利点
    • 多数のユーザーやプログラムが、独立して平行使用でき、相互に干渉しない(信頼性、可用性
    • 別のアーキテクチャのOSやソフトウェアが使用できる(互換性
    • 個々の仮想機械の追加・変更・削除が容易、ハードウェアの集約、負荷の平準化(運用容易性、サーバ統合)
  • 難点
    • 性能が犠牲となる(仮想化のオーバーヘッドを見込んだハードウェア性能が必要)
    • 構成・運用が複雑になる(一定のスキルが必要、特に障害時の問題判別時)
    • 稼動させるプログラムや周辺機器の、サポートやライセンスに制限がある場合が多い

[編集] 歴史

[編集] メインフレーム

[編集] ハードウェアによる仮想化

1950年に世界初の商用コンピュータUNIVAC Iが登場したが、当時は機種ごとにアーキテクチャは別で、互換性は無かった。

1958年 IBM 709は、既存のIBM 704の命令セットをマイクロコードでエミュレーションし、上位互換性を提供した。

1964年 IBM System/360は、同様に既存のIBM 1401IBM 1620の命令セットをマイクロコードでエミュレーションした。また、コンピュータ・アーキテクチャを定義し標準化し、以後の上位互換性を提供した(通常は仮想化と呼ばれないが、プログラムから見れば一種の仮想機械と言える。この効果として、メインフレームではアセンブリ言語でもバイナリでも、40年以上経過した現在まで上位互換が続いている)。

1973年 IBM System/370モデル158およびモデル168により、物理分割(PPAR)をサポート。単一のコンピュータとしても、複数のコンピュータとしても使用可能。ただし細かいリソースの割り当てはできず、変更にはコンピュータ全体の再起動が必要。

1987年 IBM 3090 の PR/SMにより、多数の論理区画(LPAR)を作成し、コンピュータ全体の停止を伴わず、より柔軟なリソースの割り当てが可能となった。

IBMのPR/SMに相当する機能には、日立製作所 PRMFなどがある。

[編集] 仮想化OSによる仮想化

1964年 IBM System/360では、商用初の仮想化OSである CP-40CP-67により、ひとつのコンピュータで複数の仮想コンピュータを作成し、それぞれでゲストOS (MVSやCMSなど)を稼動させる事ができた。この仮想化OSは VM/CMS となり、現在も z/VM として、多数のゲストOS(Linuxなど)を同時稼動させる用途でも使われている。

IBMのz/VMに相当する製品には、富士通 AVM、日立製作所 VMS などがある。

[編集] OSによる仮想化

OSの機能による、アプリケーションから見た複数のOS環境としては、仮想記憶マルチタスクマルチユーザータイムシェアリングなどがある。

商用の仮想記憶装置は、1961年 バロース B5000で登場し、1970年 IBM System/370で普及した。

また商用の複数アドレス空間(OSによるプログラム実行環境の分離)としては、OS/360のバリエーションのひとつであるMVTと、後継のMVSが最初である。MVSは単に「マルチタスク」と呼ばれる事が多いが、ハードウェアの機能も使用して複数の独立したアドレス空間(MVSの用語ではリージョン)をプログラムに提供する事が特徴である。プログラムは独立したアドレス空間で稼動し、相互に直接干渉しない(UNIXやWindowsなどのマルチタスクと異なり、別のプロセスの存在を知る事も原則できない)。このため、可用性・スループット・セキュリティが向上した。MVSの後継のz/OSは現在も使われている。ほぼ同等の複数アドレス空間を持つOSには、IBM z/VSE、富士通 MSP/XSP、日立製作所 VOS3 などがある。

上記の仮想記憶による資源の分離と、タイムシェアリングと呼ばれる時分割多重による並列実行(マルチユーザー)が加わる事によって、それまでの計算機資源を価値の有無に関わらず占有しなければならない、古いコンピューターアーキテクチャを刷新した。

価値が低いプログラム、すなわちバグだらけのプログラムが価値の高い重要なプログラムの動作を妨害する事は無くなり、クリティカルミッションにおけるプログラミングが非常に神経質な物にならざるを得なかった古いプログラミングスタイルを廃した。

コンピューターに対する価値観も変わり、小さなコンピューターを利用者の数だけ購入するのではなく、高価な高性能コンピューターを大勢で共有する事によって、導入コストと維持経費を押し下げた。また高性能コンピューター導入の敷居を下げ、かつてパンチカードやテープを持参して計算機センターに毎日参拝しにいくという過酷な労働からプログラマーを解放した。

[編集] ミッドレンジ

1979年 IBM System/38は、TIMI(Technology Independent Machine Interface、技術に依存しないマシンインターフェイス)を採用した。TIMIは、メインフレームで採用されたマイクロコードによる互換性確保を更に進めたもので、主に水平型レベル・マイクロコードにより実現され、ハードウェア・アーキテクチャ(CPU命令セット等)とプログラムを分離している。プログラムの配布は中間コードであるバイトコードで行われ、インストール時にハードウェアの命令セットに展開される。このためソースプログラムを配布すること無く、実行時の性能を犠牲にすることもなく、別のアーキテクチャのハードウェアへの移行も容易である。実際、CPUアーキテクチャの移行(独自CISC→POWER)も容易に行えたとされる。

TIMIはSystem/38後継のAS/400iSeriesSystem iPower Systems i Edition に、現在でも使用されている。また現在はLPARなどと併用できる(後述のPowerVMを参照)。

各社の商用ミッドレンジオフィスコンピュータミニコンピュータ)では、TIMIと同等の機能を持ったシリーズは、過去も現在も存在しない。

[編集] 商用UNIX

商用UNIXベンダーによる仮想化技術には以下がある。現在の仮想化技術は各種のハードウェアとソフトウェアが密接に連携しており、またベンダーにより各技術の範囲が異なるため、ベンダー単位に記載する。

  • IBM PowerVM - 3エディションあり、全モデルに搭載。
    • LPAR (論理区画) - ファームウェアによる論理分割。複数OSを稼働。
    • マイクロパーティショニング - CPUを10分の1単位でLPARに割り当てる。
    • WPAR - OS(AIX 6)の標準機能。アプリケーションから見て複数のOS環境(インスタンス)を提供。
    • AIX WLM - ミドルウェアの機能でアプリケーションのワークロードを制御。
  • SUN N1構想(Unified Virtualization Manager Environment)
    • DSD (Dynamic System Domain) - 物理分割。動的なリソース移動も可能。上位機種のみ。
    • LDOM (Logical Domain) - ファームウェアによる論理分割。複数OSを稼働。上位機種のみに提供予定。
    • Solarisコンテナ - OS(Solaris 10)の標準機能。アプリケーションから見て複数のOS環境(インスタンス)を提供。
    • Solarisリソース・マネージャ - ミドルウェアの機能でアプリケーションのワークロードを制御
  • HP Virtual Server Environment (VSE)for HP-UX
    • nPartitions(nPars) - ハードウェアによるパーティショニング技術
    • Virtual Partitions(vPars) - nParをさらに分割できる論理パーティション技術、1プロセッサ単位で構成
    • HP Integrity Virtual Machines (Integrity VM) - 各パーティションにプロセッサ・リソースを5% - 100%の範囲で動的に割り当てる、柔軟なsub-CPUパーティションニング技術 。
    • HP-UX Workload Manager - パーティショニング、クラスタ、ユーティリティ・プライシングと連携し、サービスレベル維持に向けた リソース割り当てを自動化 。

[編集] UNIX/Linux/Windowsなど

[編集] 仮想化OS

仮想化OS(仮想マシンモニタ)は、一つの計算機資源を複数の計算機資源としてハードウェア的に利用したり、物理的資源を区分けして特定のワークロードがシステム全体を独占させない目的(パーティション)の為に作られたもので、VMwareXen、Oracle VM(ベースはXen)、Hyper-Vなどがある。

一台のコンピュータを複数のコンピュータとして、ハードウェアレベルで使うことができる。一台のコンピュータ上で特にオペレーティングシステムの変更なしに、複数のゲストオペレーティングシステムを稼働させたりする。稼働させる複数のゲストオペレーティングシステムは、全く別の種類のオペレーティングシステムであることも可能である。

元々仮想マシンモニタはメインフレームにおいてその資源を各ワークロードの負荷に応じて動的に分割し、システム全体の利用効率を上げるために用いられた。計算機が高性能化した現在では、小規模なWebサイトホスティングのような軽い処理を一般的なサーバでも仮想マシンモニタを用いて並列に実行し、資源の有効活用することが行われている。

ハイパーバイザも参照

[編集] OSの機能

UNIXLinuxOS/2Windows等におけるプロセスとは、メモリ管理ユニットによって、仮想化されたメモリ空間でネイティブコードを実行するハードウエアによる仮想機械(VM)とも呼べる。この場合、仮想化された機械を管理するソフトウエア(ハイパーバイザ)は、通常はカーネルである。

[編集] CPU

1985年 インテル80386で採用された仮想86モードは、複数のx86の仮想機械を提供する。これはOSが仮想機械を実装する事を支援するものであり、当モードは OS/2 2.0 や Windows 3.0などのDOS互換環境(仮想DOSマシン)で使用された。

SPARCPOWERIA-64なども、それぞれOSによる仮想化を支援する命令セットを含んでいる。

[編集] 言語環境による仮想機械

SmalltalkPascalJavaJava仮想マシン.NET FrameworkCLRPerlの次期実装Parrotなどがある。

ソフトウェアによる仮想CPUバイトコードを実行させる形式が一般的である。バイトコードの実行方法にはインタプリタ方式や実行前に全バイトコードをネイティブに変換するコンパイル方式もあるが、性能の観点から現在はジャストインタイムコンパイル方式が主流である。

これらの仮想機械の目的は、物理命令セットアーキテクチャと、論理命令セットアーキテクチャの分離にあり、一度コンパイルされたプログラムは物理命令セットアーキテクチャが何であれ、仮想機械によって実行する事ができる。またJavaのようにハードウエアやオペレーティングシステムを抽象化し、オペレーティングシステムを含むコンピュータアーキテクチャ自体を隠蔽し、あらゆるシステムで動作するプログラムの設計を可能とする事を目的とした物もある。

x86アーキテクチャにおけるx86-64のように、物理命令セットアーキテクチャはプロセッサの進化に伴い変更される。適切に設計された論理命令セットアーキテクチャは、これらの物理命令セットアーキテクチャの進化の恩恵を受けつつ後方互換性を維持できるので、既存プログラムの保守コストが低減される。

また、論理命令セットアーキテクチャを固定することで、コンパイラに対して複数の物理命令セットアーキテクチャに対応したコードジェネレータを都度開発しなくて済む。また、非常に複雑で多岐にわたる物理命令セットではなく、その言語や環境にあわせて洗練された命令セットに対応したコードジェネレータを一回だけ設計すれば良く、コンパイラ開発における負担を大いに軽減する。

なお、言語による仮想機械をハードウェア化したものとして以下がある。

  • Pascalのp-codeインタプリタはウェスタン・デジタル MCP-1600チップセットが作られた
  • Javaでは、サン・マイクロシステムズがJavaバイトコードをネイティブに実行するプロセッサを製作する計画を発表したが、実際にはそのサブセット的実装にとどまった。
  • ARMアーキテクチャの中にはJazelleと呼ばれるJavaバイトコード実行モードに切り換える事ができるものがあり、Java仮想マシンの裾野を広げている。

[編集] 脚注


[編集] 関連項目

  • 規格
    • OVF(Open Virtualization Format)

[編集] 外部リンク

最終更新 2009年10月12日 (月) 12:57 (日時は個人設定で未設定ならばUTC)。
【仮想機械】変更履歴

ご利用上の注意

もっと調べる!