仮想機械とは?バーチャルマシンの基礎を理解しよう

このQ&Aのポイント
  • 仮想機械(バーチャルマシン)は、ソフトウェア技術によって作られたプログラムが動作するためのハードウェアひとそろいを実現するものです。
  • 特に、プログラミングにおいてのバーチャルマシンは、プログラミング言語の実行コードをプラットフォームに適したコードに変換し、実行するソフトウェアです。
  • バーチャルマシンによってプラットフォームごとの違いを吸収するため、ソフトウェアの開発者はプラットフォームの違いを意識せずに開発することができます。
回答を見る
  • ベストアンサー

仮想機械(仮想計算機、バーチャルマシン)とは

こんにちは。 今回、仮想機械(仮想計算機、バーチャルマシン)について、色々調べてみたのですが、 様々な表現のされ方があって、はっきりと理解できませんでした。 仮想機械について、自分なりに以下のようにまとめたのですが、 間違っていると思われるところを、指摘して頂けませんでしょうか? ------------------------------------------------------------ オペレーティングシステム(OS)は、「マシンの上で動作するプログラム」と表現することができるが、バーチャルマシンは、その「マシン」を、ソフトウェア技術によって作ろうとしたものである。 つまり、プログラム(OSも含む)が動作するためのハードウェアひとそろいを、(目的に合わせて)ソフトウェアによって実現したもの、特に、既存のオペレーティングシステム(OS)の上で動作させる事ができるものを、バーチャルマシンと表現する。 特に、プログラミングにおいてのバーチャルマシンとは、特定のプログラミング言語の実行コードを、そのプラットフォームに適したコードに変換して実行するソフトウェアのことをいう。 バーチャルマシンがプラットフォームによる違いを吸収してくれるため、プログラマは、プラットフォームごとの違いを意識せずにソフトウェアを開発できるようになる。 ------------------------------------------------------------ よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.1

VM(バーチャルマシン)は、私は幾つかの世界があると思っています。 1つは、昔からのVMで今ではPCではVirtual PCやVirualBoxやVMWareなどのもの。 もう一つは、まあ元のVMから来ているとは思うのですが、JAVAにおけるVMです。 これはVMと言っても特殊化していると私は考えています。 ご質問の内容の前半は昔からのVM。 後半はJAVAのVMですね。 VMの発祥は、マシンを開発してからそのマシンでOSの開発を行うのは工数が長くなるので、マシンの開発中にVMでそのマシンを実現し、VM上でOSを開発することにより、並行開発が出来、開発期間が短くなるのを狙ったものです。 また、マシン開発中にマシンの問題がOSの開発で発見されるのが大きいですね。 昔はその名もそのものVMという名前のコンピュータがIBMにありました。 それを使って未来のマシンのOSの開発をしたことがあります。 JAVAのVMは、後半に書いてある通り、プラットフォームを意識しないで、全てのプラットフォームで、同じ仕様のVMを実現しているのが目的です。 PCにおけるVMは、標準的なPCをVMで実現し、PCの様々なOSを実行できるところが眼目です。 今のレンタルサーバはこの特質を活かし、1台の巨大サーバに、多くのVMを立ち上げて、ユーザ毎に1つのVM上のOSを丸々貸出しています。 ユーザがどんなことを行ってもVMが1つ落ちるだけで他のユーザに迷惑がかからない。 新しい仮想マシンの定義は、OSがインストールされたバーチャルHDDのファイルをコピーするだけ、という簡易さなどが眼目でしょう。 基本的にソフトウェアでマシンを表現しますが、全てをソフトウェアで実現するのはCPU資源上好ましくなく、処理速度に著しく影響を与えますので、なるべく実マシンで動かせる部分は実マシンを使うように作られています。 ということで、私はVMは1つではない、という意見です。

MetalLover
質問者

お礼

御丁寧な御回答、ありがとうございます。 内容は難しかったですが、大体のイメージはつかめました。 >JAVAのVMは、後半に書いてある通り、プラットフォームを意識しないで、全てのプラットフォームで、同じ仕様のVMを実現しているのが目的です。 Java以外に、Cなどの高級言語のプログラムも、 仮想マシンを使っているからこそ、様々なOS上で、 動かす事ができるのでしょうか?

その他の回答 (2)

回答No.3

>Java以外に、Cなどの高級言語のプログラムも、 >仮想マシンを使っているからこそ、様々なOS上で、 >動かす事ができるのでしょうか? C言語はバイナリ互換無いだろ。ビルドし直さないでWindowsやLinuxではそのまま動かないだろ。 それに対してJavaは再ビルドなしでWindowsやLinuxで動くだろ。 Cが互換があるのはソースレベルの話。ただしそれはANSIやISO内の規格上で作られた物だけ。 OSに依存するAPI/システムコールやライブラリを利用されている物はソースをビルドし直した所で 動かないだろ。 後、.NET FrameworkもJavaと同じようにVM上で動くシステム。 >特に、プログラミングにおいてのバーチャルマシンとは、特定のプログラミング言語の実行コードを、そのプラットフォームに適したコードに変換して実行するソフトウェアのことをいう。 これはどちらかというとWINEの様なAPIをエミュレートしている物の仕組みでVMの仕組みとはまた違う。

MetalLover
質問者

お礼

御回答ありがとうございます。 なるほど、Windows上でもLinux上で動くCプログラムは、 OSに依存するAPIやシステムコールを使っていないものだけなのですね。 ソースレベルでの互換性を、バイナリ互換とごちゃ混ぜにしていました。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

C/C++はVMとの関連性はないですし、プラットフォーム間の互換もありません。 プラットフォーム間では、C/C++コンパイラがどれだけの互換性を持っているか、です。 同じOSでもコンパイラが変わると互換がなかったりします。 また、ライブラリを使用することが一般的で、ライブラリの互換はそれこそありません。 プラットフォームに影響のない機能しか使っていないプログラムだけが互換があるでしょうが、プログラムとしては希でしょう。 コンパイル言語よりインタプリタ言語がプラットフォーム間の互換が大きいでしょう。 Actionscript、Javascript、PHP、Lispなどです。 まあ、このような話題はVMから大きく外れた話題です。 VMの説明が少し難しかったようで失礼致しました。

MetalLover
質問者

お礼

再度の御回答、ありがとうございます。 なるほど、C/C++プログラムは、バーチャルマシンとの関連性はないのですね。 となると、C/C++プログラムを、異なるプラットフォーム上で動かすのは、 難しそうですね。 そういったことも含めて、最近では、 バーチャルマシンが利用できるJavaが、 流行ってきているのかもしれないですね。

関連するQ&A

  • 仮想マシンについて

    こんにちは 仮想マシン(VMwareなど)に OS をインストールして、その OS にソフトウェアをインストールすることはできますか よろしくお願いします

  • 仮想マシンに関して

    仮想マシンソフトウェアを利用してWindows7にXPを載せたいと思っています。 そこで質問なのですが仮想マシンでインストールしたOSにセキュリティソフトを導入したほうがよろしいのでしょうか? ご回答お願いします。

  • 仮想PC Virtual PCで困った

    仮想PCというものに興味を持ちVirtual PC2007というソフトMicrosoftからダウンロードしたんですがヘルプの[CD または ISO ファイルを使用してオペレーティング システムをインストールするには]という項目の中の ●オペレーティング システムの起動用 CD を CD ドライブに挿入し、Enter キーを押します。 この文中の「オペレーティング システムの起動用 CD 」というのは仮想PCのOSの起動用CDなんでしょうかそれとも自分が使っているOSの起動用CDなんでしょうか?

  • Homeで仮想マシンプラットフォーム有効化出来る訳

    仮想環境といえばWindowsにサンドボックスが実装されたとか。 わーい!使ってみよう!と思ったら・・・ Homeエディションは対応していないって!残念。 https://www.atmarkit.co.jp/ait/articles/1906/21/news019.html 対応していないことを確認する為に・・・ 対応していたらいいなって期待を込めて コントロールパネル → プログラムと機能 → Windowsの機能 を開いてみたら、やっぱり無かった。 Windows10 Home 1903 使用中 ま、サンドボックス機能は、360 Total Security で使えるようだから、そっちで試すとして、 なぜかWindowsの機能欄には 仮想マシンプラットフォーム とか Windows ハイパーバイザープラットフォーム とかが存在する。 Hyper-VはHomeエディションでは使えないんでしょう? なら仮想マシンプラットフォームを有効にしても意味ないと思うんですけど、 有効に出来ちゃったりします。不思議。 Hyper-Vとハイパーバイザープラットフォームは別物みたいですけど。 この仮想マシンプラットフォームの有効化できる意味はなんですか? これを有効化していなくてもVirtualBoxとか、VMwareとかは使えますよ。 どういう機能? よろしくお願い致します。

  • JAVA仮想マシンの検索

    あるソフトウェアのインストールに失敗して、 アンインストールができなくなってしまいました。 JAVA仮想マシン1.4.1が見つかりません。 と言われるのですが、JAVAはjdk1.5.0です。 -is:javahome<java home dir>オプションを指定して、 プログラムを実行し直してくださいと言われるのですが、 やり方が解りません。 説明不足だと思いますが、宜しくお願い致します。

  • JVM(Java仮想マシン)の動作原理を教えて下さい。

    JVM(Java仮想マシン)の動作原理を教えて下さい。 Javaバイトコードとして定義される命令セットを見たところ、比較的単純な命令しかありません。 Swingライブラリのようにウィンドウ表示などの環境に依存するプログラムがバイトコードでどのように表現されているのか教えて下さい。 つまり、Swingライブラリを使う側のバイトコードではなく、Swingライブラリ側のバイトコードはどのようになっているのでしょうか? (Swingに限らず、環境に依存する部分のバイトコードの表現がどのようになっているかを知りたいのです。)

    • ベストアンサー
    • Java
  • Microsoft Virtual PCについて

    Microsoft Virtual PC2007を使って仮想PCを構築したいのですが、 新しいwindowsOSを買う余裕がありません。^^; そこでLinuxのOSを入れたいのですが・・・ 動作確認できた方はいらっしゃるのでしょうか? オペレーティング システムにその他があったのでいけるかな?と思うんですけど・・・ また参考になるようなサイトがあれば教えていただきたいです。 ご回答おねがいします。

  • デスクトップ仮想化でオススメ

    現在WindowsXP上でしか動作しないサーバークライアント型のソフトウェアを使用中です。 サーバー、クライアント共 XPで稼働中です。 サーバー機が、5年以上使用しており、壊れる前に新しい環境を模索中です。 以下 3つの方法を思いつきました。 方法1:サーバーOS上でソフトウェアを稼働する環境に移行する これを機にサーバーOS上でソフトウェアを稼働する環境に移行することが、 最も簡単に構築できる術と思いますが、 稼働しているソフトウェアが、サーバーOSに移行するとデーターの互換性がなく 今まで積み重ねてきたものが、また1からしないといけなくなり、サーバーOSで稼働させることに躊躇しています。 方法2:新たにXPが動くマシン上で構築し直す。 XPの動作が確認されているマシンを購入して、XPをクリーンインストールし、 ソフトウェアをインストールすることも模索しましたが、ソフトウェアのメディアが手元に無く、 ソフト屋さんに訪問していただかないと再インストールすらできないということがわかりました。 交通費、作業費、、、だけでもサーバー機が買える金額にもなることから、こちらも躊躇しております。 方法3 仮想化ソフト上でXPを動かす 前置きが長くなりましたが、現実的に出来る事の消去法ではありますが、 下記がうまくいけば一番現実的かなあ と思いました。 新しくPCを購入し、その上でShadow protect等でイメージバックアップしたものを バーチャルPC等の仮想化ソフト上で動かしたら、、、ということです。 そこで皆様にお聞きしたいのが、 ホストOSは、何がおすすめか? ということです。 市販のメーカー製PCにプリインストールされてあるWindows7をそのまま使って バーチャルPCやバーチャルBOXで稼働させるのが、一番手っ取り早い方法とおもいますが、 素人考えですが、 はたしてwin7まで必要か? Linuxを最低限インスールして、その上で仮想化ソフトを動かしたほうが、 資源の有効利用でないか?(メモリ、ディスク、CPU等)と思います。 他に同様の理由でWindows98でないと動かないソフトがあり、そちらは、WindowsXP上のバーチャルPCで動かしており まずWindows7のマシンで検証してみたいと思っておりますが、 オススメや、注意点等ありましたらご教授ください。 よろしくお願いいたします。

  • virtual pc 2007を使ってます。

    OSはXPです。 本体(仮想ではない方)に外付けHDDを接続しています。 それをvirtual pc の仮想マシン上からアクセスするにはどのように設定したらいいのでしょうか?

  • バーチャルPCについて。

    こんにちは。よろしくお願いします。 起動している一つのWindowsマシン内で、さらにもう1つ(以上)WindowsOSの仮想マシン(?)が動かせるソフトがある。というような説明を聞いた事があり、仕事上、使いたいと思いちょっと調べてみたのですが。。。 イマイチ分かりません。 調べて一番多く出てくるもの?は バーチャルPC2004。というパッケージソフト(?)なのですが、コレを使うとどのような構成(?)になるのでしょうか。 今やりたいこととしては、WindowsXPマシンの中で、WindowsMEまでしか動作保障していないソフト(XPでは動かなかった)を動かしたいので、バーチャルPCでWinXP機の中にMEが導入できたら。と思っています。 その場合、どのように導入していけばいいのでしょうか?? バーチャルPC2004を購入すれば全て解決するのか、それとも、MEのOSディスクも必要になるのかなどなど。。。 ご存知の方がいましたら、ご教授願えませんでしょうか。 よろしくお願いします。

専門家に質問してみよう