第2回エンペディア大賞」が2月いっぱい開催中です。2024年に作成された記事の中から、お気に入りの記事に投票しましょう!

仮想マシン

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
記事をシェア:
X(旧Twitter)にシェアする
Threadsにシェアする
Facebookにシェアする
はてなブックマークにシェアする
LINEにシェアする
ナビゲーションに移動 検索に移動

仮想マシン(英:Virtual Machine、VM)とは、コンピュータの動作を再現するソフトウェアであり、別のオペレーティングシステム・アーキテクチャ用のソフトウェアを動かすなどを目的に使われる。仮想機械とも言う。

概要[編集]

  • 広義では、コンピュータのエミュレートを行うシステム全般を、狭義では、システム全体を再現し、その上でOSを動かすことを可能にするシステムを指す。狭義の定義については、「システム仮想機械」とも呼ばれる。前者には、ゲーム機エミュレーターやJava仮想マシンなどがある。本節では主に後者について記載する。
  • システムを仮想化する事で、オーバーヘッドは増えるものの容易にコピーを増やせる等、物理的な制約から解放される面がある。
  • VMwareVirtualBoxが有名で、一つのオペレーティングシステム上で複数のオペレーティングシステムを動かしたり出来る。
  • 土台となるOSを「ホストOS」と呼び、その上で動くOSは「ゲストOS」と呼ばれる。大抵メモリが枯渇しがち。
  • Raspberry Pi上で仮想マシンを動かす事もできるようだ[1]

広義の仮想マシン[編集]

  • 広義での仮想マシンとは、コンピュータの動作をソフトウェアで模倣することで、あるソフトウェアの異なるコンピュータでの挙動を再現できるソフトウェア全般を指す。「エミュレータ」とも呼ばれる。
  • ゲーム機エミュレーターは、あたかもゲームソフトがゲーム機本体と接続しているように振る舞う。Dolphin (エミュレータ)などがその例である。
  • Java仮想マシン(JavaVM)は、特定のハードウェアアーキテクチャーを模倣したものではなく、Javaで書かれたソフトウェアを実行するために用意されたもので、いわば文字通りの仮想マシンである。
  • Ruby処理系も、仮想マシンに相当するものを搭載している[注 1]と考えられる。

これは1編集者の私見。(編集者:User:早朝の掃除屋さん)


  • 似たようなものは8ビットCPUの時代からあり、別のCPUに移植するときには仮想マシンをアセンブラで書きかえれば済むため、共通プラットフォームとしてよく使われた。例としては p-cord Pascal システムやBCPLのBCODEマシンおよび INTCODE マシンほか多くの例がある。
  • プログラミング教育に関しては有効であるものの、いわゆる機械語のレベルまで降りないと仮想マシンは実装できないので、アプリケーション開発用の言語で記述するのはけっこう困難である。8bitの時代の開発言語としてはアセンブラが主流だったが、プログラミング言語C の登場以来、C/C++ が主流となった。それゆえ「C言語は高級言語ではなく、『超高級マクロアセンブラ』であると考えるオールドウェーブもいる。

BCPL[編集]

これは1編集者の私見。(編集者:User:早朝の掃除屋さん)


BCPL 言語は、OCODE という仮想コードを実行する仮想マシン上で動作するようにできている。したがって、OCODE を実行する仮想マシン上では、BCPL は動作するはずである。
ただし、昨今では「符号なし」のバイトなどはあまり使われないため、0~255 を -128~127 に持ってゆくのがかなり面倒臭い部分があって、余計な頭を使わされることになる。ただでさえ「脳が足りない」「智慧が遅れている」人間には不自由な部分があり、ますますパソコンに頼るようになる。

脚注[編集]

注釈[編集]

  1. Rubyの高速化のために開発されたYARV(Yet Another Ruby VM)が統合されたことから、Rubyインタープリターは「Ruby仮想マシン」を搭載している、とも言える。

出典[編集]

関連項目[編集]