見出し画像

コンピューターの進化の歴史から読み解く。プログラムとは翻訳だらけ (5): 仮想マシン

さて、前回は Web ブラウザーを扱いました。アプリケーションのOS非依存の方法が増えましたよね。

今回は仮想マシンについて扱います。

仮想マシン - 1つのコンピューターに別の種類のOSを動かす

仮想マシンは、エミュレーターの一種と言えるでしょう。Windows OS の上で Linux を動かすことが出来ます。Windows 11 の上で、Windows 7 を動かす事もできます。

仮想マシン と 仮想OS は若干異なるんです。

  • 仮想マシン - 特定CPUのエミュレーション。ハードウェアをソフトウェアで表現。

仮想機械 - Wikipedia

  • 仮想OS - 特定OSのエミュレーション

ハイパーバイザ - Wikipedia

仮想化しているレイヤーの違いですね。

実は仮想マシンという概念は全然新しくないんです。IBMのSystem 360 が登場した当時にもあったんですね。厳密にはその前 IBM 709 というシステム絡みたいですが…

ここは大事なので敢えて文章にします。
発送や技術自体、新しいものが必要じゃない事も沢山あります。あたかも最近出てきたかのように思えるのは、皆さんが純粋に情報を持っていないからですよね。是非、経緯を追ってみてください。そして経験の積んだエンジニアに相談してみる事も大事ですよ😊 皆さんとのアイディアのぶつけ合いで、昔存在していた技術が今爆発的に役に立つ事が十二分にあり得ます。

上記の図の中には、2形態の仮想OSがあります。

こちらの形式の場合ですが。Windows の上で、Virtual Server というアプリケーションが動いています。その Virtual Serverの上で、WindowsやLinuxを動かすことが出来るわけです。
図の上に文章がありますが。OS上のアプリケーションがハードウェアのエミュレーションを行っています。結構重たい処理なんですね。

こちらの方式。これは、仮想マシン部分の動きがハードウェアに近いですよね。

OSが登場してから、ハードウェアとのやり取りを行うソフトウェアは、デバイスドライバーと呼ばれています。そのドライバーを、この Hypervisor というソフトウェアで保持して動かしています。仮想マシン、図の中のゲストOSは、管理OSのデバイスドライバーと通信をしてハードウェアにメッセージを送っているわけです。

Hypervisor 自体もいろんなものがあります。

  • VMware

  • Hyper-V (Microsoft)

  • Xen

などなど…

実は、皆さんがよく使っているであろう Public Cloud の Microsoft Azure の Hypervisor は Hyper-V で動いています。AWSは Xen だと言われていますね。GCP はLinux based KVM と言われています。

What is a Cloud Hypervisor? | VMware Glossary

左側の仮想マシンの方式だと、パフォーマンスに大きく難があったんです。ハードウェアをソフトウェア上でエミュレーションするのはとっても大変で。しかも、OSの管理下にあるアプリケーションですから。そのホストOSの制約を大きく受けるわけですよね
それで、Hypervisor スタイルの仮想マシン形式が登場します。

仮想OSの中で皆さんがアプリケーションを動かす場合ですが…
もうすんごいことになっていますよね。PythonのアプリがLinux の仮想OSで動いているとして。それが、Hyper-VやXen、あるいは KVM などを経由して、CPU へ… まさに階層化の積み重ね。翻訳しまくり。変換しまくりです。

Intel CPU の進化 - Intel VT

ここで今主力となっている Intel のCPUの強化を取り上げないわけにはいきません。
今、多くのPC/Mac や Cloud上で動いているCPUは x64 の 64bit CPUです。IntelやAMDが主なCPUメーカーですね。x64は 32bit CPUであった x86 と極めて互換性が高いCPUなんです。ここでは、その x86 CPUでの Intel CPUの進化を取り上げます。 

この図にある通り、Intel のCPUへの命令は Ring Protection という技術で、出来る事が限られています。所謂、特権レベルでほぼ何でもできるものと、アプリケーションから呼べるものとに分離されています。

リングプロテクション - Wikipedia

Intel は Intel VT という仮想マシンを極めて高速かつ安全に実施する技術をCPUに搭載しました。これによって、Hypervisor のソフトウェアが、特権レベルで動作し、OSなどを制御するようになります。これによって複数のOSの制御がよりやりやすくなったわけです。

今ではHypervisor ソフトウェア上でOSを動かす事によるオーバーヘッドは 1-2% 程度だと言われてます。確か😅

インテル バーチャライゼーション・テクノロジー - Wikipedia

当然 AMD も AMD-V という似た技術を登場させます。

x86仮想化 - Wikipedia

皆さんがお持ちの Windows 10や Window 11のエディションが Pro 以上であれば、実は Hyper-V が使えます。

この図の中ですと、Windows 10 の中に、別の Windows 10 が動いていて。その 2つめの Windows 10の中に、更に Windows 10 が動いてます!!!

Windows 10 の Hyper-V の概要 | Microsoft Docs

仮想マシンを見てみます。

私の Windows 11 は、Hyper-V の上で動かしています。物理マシンの名前は、DAHATAKE-CORE3 です。そこに1台の別の仮想マシンを動かしています。dahatake-vm が仮想マシンです。

これが、仮想OSの設定画面です。
その中に「ハードドライブがありますね。これを見ると仮想ハードディスクがあります。

これが実体です!

ありましたね。仮想ハードディスク。
何と約30GB もありますよー
ストレージは、物理OSと共有しており、その中の領域を使っているコトがわかります。

ストレージがファイルになっている点に注目してください。そうなんです。この仮想マシンを別の Hyper-V環境にもっていけば、簡単に起動できます!
別の x64 のHypervisor サービス、例えば VMware やXen、KVMにも、ファイル形式の返還を行えば、動くんです!

じゃ、バックアップは?
ファイルのバックアップです。

Cloud に持っていくときは?
ファイルのコピーなんです。

OSを増やすときは?
同じく、ファイルのコピーなんです!

圧倒的に回復性や可搬性が高まったことがわかりますよね?

WSL - Windows Subsystem for Linux

さて、Windows ユーザーの私が愛用しているのは、現在はこの WSLです。現在最新の WSL2は凄くて。何かといえば Hyper-Vの機能の一部を WSL自身が持っています。ですので、Hyper-Vを有効化しなくても、Linux が動きます! つまり、Hyper-V が動かなかったWindows Home でも動くんです。

Linux 用 Windows サブシステムとは | Microsoft Docs

しかも、Windowsのファイルエクスプローラーからもシームレスにアクセスできます。


WSLから Windows のファイルシステムも見えます。


Hyper-V の場合は、別OSでしたから、双方起動して、ネットワーク経由でのやり取りでした。
これがWSLだとほぼ直接!

私は、Linuxとの相性が良い PythonやNode。次回扱う Container を動かす際には、 WSLばかり使っています。すごい時代になったもんです。

注意点

仮想マシンはあくまでCPUのエミュレーションです。同じCPUアーキテクチャでないと、仮想OSとして動かす事は出来ません。ですから、利用する環境がどんなCPUアーキテクチャの仮想マシンを提供してくれているのかを知る事は大事です。
再度ですが。2022年2月時点。殆どの Cloud やホスティング環境では、 x64 アーキテクチャが提供されています。64 bit CPUです。ARMや、FGPA が使える事は稀です。


いいなと思ったら応援しよう!