私が聞きたい質問は次のとおりです。
1) ハイパーバイザーは正確に何をしますか? なぜそれが必要なのですか?
2) ハイパーバイザーと Java Virtual mMhine の違いは何ですか?
3) JVM はハイパーバイザーを使用しますか?
4) Linux のようなホスト オペレーティング システムが複数のゲスト オペレーティング システムを処理できる場合、なぜハイパーバイザーを使用するのですか?
誰かがこれに光を当てるなら、大きな助けになるでしょう
私が聞きたい質問は次のとおりです。
1) ハイパーバイザーは正確に何をしますか? なぜそれが必要なのですか?
2) ハイパーバイザーと Java Virtual mMhine の違いは何ですか?
3) JVM はハイパーバイザーを使用しますか?
4) Linux のようなホスト オペレーティング システムが複数のゲスト オペレーティング システムを処理できる場合、なぜハイパーバイザーを使用するのですか?
誰かがこれに光を当てるなら、大きな助けになるでしょう
ハードウェア仮想化とも呼ばれるハイパーバイザーは、物理マシン上で実行されているかのように、その上で 1 つ以上のネイティブ オペレーティング システムを実行できる仮想化レイヤーです。これはエミュレーションに似ていますが、ハイパーバイザーなしで実行できるオペレーティング システムのみを実行するため、はるかに高速です。
どちらも仮想化レイヤーです。ただし、Java はパフォーマンスと移植性のために最適化されています。Java は技術的にはエミュレーターですが、ハイパーバイザーよりもはるかに高速です。これは、エミュレートされたプラットフォームが高速なエミュレーション用に設計されているため実現できます。Java は x86 または x86_64/amd64 コードを実行せず、Bytecode と呼ばれるものを実行します。バイトコードの専門用語は中間言語 (IL) です。これは、ジャスト イン タイム コンパイラ (JIT) によって、実行時にプロセッサにネイティブなコードにコンパイルされます。JIT はコンパイル プロセスを実行するため、Java のセキュリティ制約に違反するコードを生成しないことで、プログラムが Java のセキュリティ制約に準拠していることを確認できます。ハイパーバイザーは、いわゆる特権命令をインターセプトし、ディスク ドライブなどのデバイスをエミュレートすることによって、セキュリティの制約を強化します。これが行われるのは、ネイティブの x86 または x86_64/amd64 コードはプログラムが理解するのが非常に難しく、セキュリティ制約を自己強制するように変更することはほぼ不可能であるためです。一方、Java は、プログラムが簡単に理解できるバイトコードを実行し、セキュリティ ルールを自己強制する可能性があります。
簡単な答え: ハイパーバイザーは Java よりも低速ですが、多数の完全なオペレーティング システムと、それらで利用可能なすべてのソフトウェアを実行できます。これはJavaの方が高速ですが、Javaソフトウェアのみを実行できます。仮想マシンで Windows と Office を実行したい場合、Java では実行できません。
私は上記でこれに答えたと思いますが、いいえ、コードインスペクションを使用してプログラムを変更し、セキュリティルールを自己施行します。これが可能なのは、実行可能な Java アプリケーションがバイトコードと呼ばれる中間状態にあるためです。これは、Java がルールを理解し、検査し、ルールに違反する可能性のあるコードを見つけ、ルールに従うために変更するのが簡単なためです。これはかなり複雑なプロセスであり、ハイパーバイザーよりもいくつかの利点があります。Java はバイトコードとしてコンパイルおよび配布されるため、最初の利点は「一度コンパイルするとどこでも実行できる」ことです。2 番目の利点は速度です。厳格なセキュリティが適用されている場合でも、JIT:ed コードは非仮想化コードと同じ速度です。欠点は、バイトコード プログラムしか実行できないため、たとえば、仮想マシン内で Windows や Linux を実行できないことです。
Windows や別の Linux ディストリビューションなどの別のオペレーティング システムを実行している場合は、ハイパーバイザーを実行しています。KVM、Xen、VirtualBox はハイパーバイザーの例です。OS ベースの仮想化または「コンテナー」と呼ばれる、1 つの共有カーネルで Linux の複数のインスタンスを実行することもできます。ただし、コンテナはカーネルを共有するため、実行中の OS を備えた仮想マシンのみを使用できます。コンテナの利点は、複数のカーネルを重ねて実行する必要がないため、より軽量です...
質問に答える前に、ウィキペディアで関連するエントリを検索することをお勧めします。ハイパーバイザーは複数のゲスト OS を実行するために使用され、JVM は Java バイト コードを解釈するために使用されます。JVM は OS 上で実行され、OS がベア メタル上で実行されるかハイパーバイザー上で実行されるかは関係ありません。実際、Linux は、Linux カーネルの一部である KVM を使用して複数のゲスト OS を処理できます。したがって、最後の質問の説明は完全に間違っています。