DX Column

2021年10月30日

#仮想マシン(Virtual Machine) – 知ったかテックワード!君もIT博士

カテゴリー:

タグ:, ,

仮想マシン(Virtual Machine)は、特定のコンピュータの動作を再現したソフトウェアのこと。VMと呼ぶこともある。コンピュータのなかに仮想マシンを用意すると、元のコンピュータとは異なるコンピュータを動作させたり、元のコンピュータから独立して動作させたりできる。

仮想マシンはソフトウェアで構成されているので、特定の状態を保存したり複製・再起動が簡単にできるといったメリットもある。この仮想マシンの保存データを「スナップショット」とか「イメージファイル」と呼ぶ。ハードウェアが故障した場合も、保存しておいた仮想マシンのイメージファイルを再起動するだけで、元のコンピュータ環境をすぐに再現できるんだ。

仮想マシンには、次のような用途がある。

  • コンピュータのエミュレータ
  • 仮想化によるコンピュータの分離
  • プログラミング言語の実行エンジン

エミュレータ:ビデオゲームなどで使われているよね。新しいゲーム機で、古いゲーム機を仮想マシンとして再現する。すると、古いゲーム機用のゲームが新しいゲーム機でそのまま動作する。わざわざゲームごと移植する必要がない。

仮想化:サーバーなどの運用で利用される。大型のハードウェアのなかで、複数の仮想マシンを動作させて分離・独立させるんだ。コンピュータは常に同じペースで動作しているわけではないから。大型ハードウェアのなかで複数の仮想マシンを動作させてそれぞれを仮想サーバーとして利用すると、処理の効率化を実現できる。

プログラミング言語のランタイム:いくつかのプログラミング言語では、プログラムを動作させるとき、単純な仮想マシンを動作させて処理を実行する。これを「ランタイムシステム」とか、略して「ランタイム」と呼ぶ。たとえば、JavaはJVM(Java virtual machine)、RubyはYARV(Yet Another Ruby VM)という言語処理用の仮想マシンを持っている。

C言語などのプログラミング言語では、ソースコードを実行対象となるコンピュータで直接実行できる実行コード(オブジェクトコード)に変換(コンパイル)する。異なるコンピュータを実行対象にする場合、実行対象に合わせて変換ツール(コンパイラー)を作り直す必要がある。これは結構大変なんだ。

これに対して、JavaやRubyなどの仮想マシン方式では、ソースコードを仮想マシンで実行できる中間コードに変換する。そして、この中間コードを仮想マシンで実行する。異なるコンピュータを実行対象にする場合、仮想マシンだけど移植すればいい。これは変換ツールを作るよりずっと簡単だし、実行速度も早くしやすいんだよ。

関連ページ

おまけのコント

カエル:さぁ、バーチャルレーシング世界選手権、ウサギ選手の登場です。

ウサギ:やあ元気!?

カエル:今回はどんな仮想マシンを用意していますか?

ウサギ:そうですね。できる限り早くて、頑丈で運転しやすいマシンを作りました。

カエル:ライバルも、全員同じものを用意していますよ。レースにならないのでは?

ウサギ:そこで、マシンのデザインで勝負します。全体がモフモフで、かわいい耳と尻尾を付けてあります。

カエル:今回も完璧ですね。レースというより、デザインコンテストとの批判がありますが?

ウサギ:カワイイは正義!