Hyper-Vは、Windows 8.0から搭載された仮想マシン実行環境だ。今回はこのHyper-Vや仮想マシン環境についてと、Hyper-Vを有効にするまで、そして次回以降、その使い方などを解説していく。
Windows 7まではVirtual PCが提供されていた
仮想マシン実行環境
Windows 7までは、仮想マシン実行環境としてVirtual PCが提供されており、特にWindows 7では、XPモードとして標準組み込みとなった。そしてWindows Server 2008からは、64bit環境に対応した仮想マシン実行環境としてHyper-Vが提供されていた。どちらも、仮想マシン実行環境だが、実現方法がまったく違う。一方でどちらもCPUが持つ仮想マシン支援機能を必要とする。
なお、「仮想マシン」という用語には、大きく2つの意味があり、1つは今回解説するHyper-Vのように実在するコンピュータと同等のハードウェア環境をソフトウェア的に実現するものをいう。もう1つは、Javaや.NET CLRのようにソフトウェアで実在しないCPUの命令を解釈実行するものをいう。後者の場合はCPUのみのエミュレートで、外部記憶やI/Oなどの部分はエミュレートされない。
また、前者の範囲に、俗に言う“エミュレータ”も含まれる。これは、実在するハードウェアをおもにソフトウェアを使って実現するものだが、実行するハードウェアとは違うハードウェアなどを主に実現するものだ。たとえば、現在では使われていない8bit CPUのハードウェアや過去に販売されていたゲーム機などを実現するものなどがある。一般にコンピュータ関係で「エミュレーション」とは、その環境には存在しない機能をソフトウェアで実現することをいう。たとえば、Windows XPまでは、16bitコードを利用するMS-DOSの実行環境をエミュレートする機能があった。
仮想マシン実行環境では、仮想マシン実行環境が置かれる環境のオペレーティングシステムを「ホストオペレーティングシステム」といい、仮想マシン実行環境内で実行されるものを「ゲストオペレーティングシステム」と呼ぶ。また、仮想マシン実行環境を管理する機構を「仮想マシンモニタ」(Virtual Machine Monitor:VMM)という。
Hyper-VとVirtual PCは、仮想マシン実行環境だが、その構造が大きく違っている。Virual PCは、特殊なアプリケーションという位置づけであり、ホストオペレーティングシステムの管理下で動作していた。これに対してHyper-Vは、「ハイパーバイザー」と呼ばれる「仮想マシンモニタ」である、ハードウェアの上で動作し、動作するすべてのオペレーティングシステムを仮想マシン環境で動作させる。
また、仮想マシン環境で動作させるゲストオペレーティングシステムには、大きく2つのタイプがある。1つは、オペレーティングシステムが仮想化のことを何も考慮しておらず、実ハードウェアの上で動作するままの状態である場合、これを「完全仮想化」という。
これに対して、ゲストオペレーティングシステムは、仮想マシンで動作することを想定しており、オペレーティングシステム内の抽象度の高いレベルの処理をハイパーバイザーなどに直接実行させることで、低いレベルのハードウェアエミュレーションを不要にしているものを「準仮想化」という。
「準仮想化」を想定した仮想マシン実行環境では、ゲストオペレーティングシステムのカーネルなどがハイパーバイザーの機能を呼び出すことで、実行効率に影響が出やすいハードウェアのエミュレーションなどを避けることができる。
たとえば、オペレーティングシステムは、CPUの仮想メモリ管理機構を直接制御する。仮想マシン内では、仮想メモリ関連のレジスタへのアクセスを検出して、仮想マシンモニタが制御を奪って処理を行なう。しかし、こうした処理をカーネル内で行わず、仮想マシンモニタ(ハイパーバイザー)側に処理を依頼するようにすれば、不要なコードを実行する必要がない。
準仮想化は実行効率は高くなるもののオペサーティングシステムのカーネルに手を入れる必要があるため、原則オペレーティングシステムのメーカーのみが対応可能なことと、古いオペレーティングシステムなどでは改変ができないために対応が困難な場合がある。
これに対して「完全仮想化」は、低レベルのハードウェア操作をエミュレートするため、効率は良くないが、古いオペレーティングシステムのバイナリコードをそのまま実行できるというメリットがある。
Virtual PCは、いわゆる完全仮想化を想定していているが、Windows用に用意されている仮想マシン専用のドライバや支援プログラムを利用することで、低レベルでのデバイスエミュレーションを回避して、Windows XPなどの実行効率を向上させている。しかし、Virtual PCは、ホストオペレーティングシステムが64bitでも、ゲストオペレーティングシステムは32bit環境という制限があるほか、想定しているハードウェアが古く、DirectXなどの最新の機能を利用するアプリケーションを実行できないという問題があった。
この理由は、もともとVirtual PCは他社を買収した製品であり、マイクロソフトが自社の仮想マシン実行環境を開発するまでの「つなぎ」であったため、根本的な改良は行なわれなかったからだ。だが、Windows 7でCPUが持つ仮想マシン支援機能に対応し、XPモードという名称で、Windows XPとの互換性を取るために利用されていた。
これに対してHyper-Vは、マイクロソフトがWindows環境用に開発した仮想マシン実行環境で、オペレーティングシステムよりもハードウェアに近い部分で動作する「ハイパーバイザー」を利用して実現した仮想マシン実行環境だ。一般にハイパーバイザー型は、ゲストOSやその中のアプリケーションなどの実行効率が高いという特徴を持つ。これは、ゲストOS内からハイパーバイザーの機能を呼び出し、仮想デバイスによる処理やメモリ管理などをハイパーバイザーに任せる「準仮想化」を利用できるためだ。
マイクロソフトのHyper-Vは、ハイパーバイザーによる仮想マシン実行環境だが、最初に作られる実行環境(ルートパーティションと呼ばれる)で動作しているWindowsが物理デバイスのアクセスを行うような構造になっており、Windowsが対応するすべてのハードウェアが利用可能という特徴がある。ただし、ルートパーティションでは必ずWindowsを動かす必要がある。Windows 8.xでは、8.xがルートパーティションで動作する。
ゲストOS側には、VSC(Virtual Service Client)が「仮想化統合サービス」の一部として組み込まれる。これはデバイスドライバとして動作し、たとえば、ゲストOS側からSCSIコマンドのような抽象化したレベルのデバイス操作を受け取り、これをホストOS(ルートパーティションのWindows)とやりとりしてデバイス操作を行なう。
このようにすることで、SCSIコマンドより低いレベルでのデバイスの仮想化をする必要がなく、動作効率が向上する。また、こうしたパーティション間(ホスト/ゲストオペレーティングシステム間)のデータ交換には、VMバスと呼ばれるメモリを介した通信機構が使われる。
これにより、高速なデバイスアクセスが可能になる。また、ハイパーバイザーは、こうした仕組みにより、低レベルのハードウェアを仮想化する必要がなく、デバイスドライバをハイパーバイザー内に持つ必要がない。
Hyper-Vは、従来Windows Serverのみに含まれていたが、Windows 8.0からは、クライアント版Windowsにも標準搭載されるようになった。ただし、標準では機能が有効になっていないためにユーザーが手動で必要なモジュールを組み込む必要がある。
この連載の記事
-
第460回
PC
Windowsでsftpを使う -
第459回
PC
WSL 2.4.4ではtar形式でのディストリビューションが配布でき、企業での利用が容易になってきた -
第458回
PC
Windows上でhostsファイルを活用する -
第457回
PC
IPv6アドレスは先頭を見ればどんな種類かわかる -
第456回
PC
あらためてIPv6基本のキ -
第455回
PC
Windowsで現在どのネットワークアダプタがインターネット接続に使われているかを調べる方法 -
第454回
PC
Windows 11 24H2では「デバイスの暗号化」の条件が変わり、より多くのPCでドライブが暗号化される -
第453回
PC
Windows 11 24H2の配布開始後もすぐにはやってこない Windows UpdateとSafeguard Holds -
第452回
PC
Windows 11 Ver.24H2が登場 Copilot+ PCとそうでないPCで実質Windowsが2つに分かれる -
第451回
PC
新しいWindowsサンドボックスではコマンドラインからの制御が可能に -
第450回
PC
ユニコードで文字数を数える方法 - この連載の一覧へ