仮想マシン
仮想マシン(英:Virtual Machine、VM)とは、ソフトウェアで表現された仮想的なハードウェア、もしくはその上で動作するコンピューター。仮想機械とも言う。
概要[編集]
広義では、ハードウェアのエミュレートを行うシステム全般を、狭義では、OSに対応する仮想ハードウェアを指す。前者には、ゲーム機エミュレーターやJava仮想マシンなどがある。本節では主に後者について記載する。
ハードウェアを仮想化する事で、オーバーヘッドは増えるものの容易にコピーを増やせる等、物理的な制約から解放される面がある。
VMwareやVirtualBoxが有名で、一つのWindowsOS上で複数のLinuxOSを動かしたり出来る。
土台となるOSを「ホストOS」と呼び、その上で動くOSは「ゲストOS」と呼ばれる。大抵メモリが枯渇しがち。
Raspberry Pi上で仮想マシンを動かす事もできるようだ[1]。
広義の仮想マシン[編集]
広義での仮想マシンとは、ハードウェアの動作をソフトウェアで模倣(エミュレート)することで、あるソフトウェアの異なるハードウェアでの挙動を再現できるソフトウェア全般を指す。
ゲーム機エミュレーターは、あたかもゲームソフトがゲーム機本体と接続しているように振る舞う。
Java仮想マシン(JavaVM)は、特定のハードウェアアーキテクチャーを模倣したものではなく、Javaで書かれたソフトウェアを実行するために用意されたもので、いわば文字通りの仮想マシンである。
似たようなものは8ビットCPUの時代からあり、別のCPUに移植するときには仮想マシンをアセンブラで書きかえれば済むため、共通プラットフォームとしてよく使われた。例としては p-cord Pascal システムやBCPLのBCODEマシンおよび INTCODE マシンほか多くの例がある。
プログラミング教育に関しては有効であるものの、いわゆる機械語のレベルまで降りないと仮想マシンは実装できないので、アプリケーション開発用の言語で記述するのはけっこう困難である。8bitの時代の開発言語としてはアセンブラが主流だったが、プログラミング言語C の登場以来、C/C++ が主流となった。それゆえ「C言語は高級言語ではなく、『超高級マクロアセンブラ』であると考えるオールドウェーブもいる。
Ruby処理系も、仮想マシンに相当するものを搭載している[2]と考えられる。
BCPL[編集]
BCPL 言語は、OCODE という仮想コードを実行する仮想マシン上で動作するようにできている。したがって、OCODE を実行する仮想マシン上では、BCPL は動作するはずである。
ただし、昨今では「符号なし」のバイトなどはあまり使われないため、0~255 を -128~127 に持ってゆくのがかなり面倒臭い部分があって、余計な頭を使わされることになる。ただでさえ「脳が足りない」「智慧が遅れている」人間には不自由な部分があり、ますますパソコンに頼るようになる。
脚注[編集]
- ↑ “VMware、ラズパイ用のESXiをデモ。vSANやvMotionなどvSphereの全機能を実装と説明”. Publickey (2018年11月8日). 2019年11月16日確認。
- ↑ Rubyの高速化のために開発されたYARV(Yet Another Ruby VM)が統合されたことから、Rubyインタープリターは「Ruby仮想マシン」を搭載している、とも言える。