web-dev-qa-db-ja.com

高水準プログラミング言語とオペレーティングシステムの仮想マシン

最近、高水準プログラミング言語用の仮想マシンがOSに非常に似ていることに感銘を受けました。リソースを管理します。スタック、ヒープなど、オペレーティングシステムがリソースを管理する方法と同様です。プログラミング言語がスレッドをサポートしている場合、仮想マシンもオペレーティングシステムが行う方法と同様にタイムシェアリングとコンテキストスイッチングを行います。

このアナロジーはどこまで取れるのでしょうか? JVMのベアメタル実装がないのはなぜですか?すべてのピースが存在するようですが、そのようなものがあまり普及していない理由は何ですか?

5
davidk01

これはどこまでとれるのでしょうか?

かなり遠い。 JVMの完全なベアメタル実装である jnode (Java New Operating System Design Effort)( github repo )をチェックアウトすることをお勧めします。ブートプロセスで使用される「ナノカーネル」としてのアセンブリは約500kだけです。 OSが実行されると、実行中のコードはすべてJavaになります。

JVMのベアメタル実装がないのはなぜですか?

JVM開発者が「ちょうどそこにある」と考えることに慣れている多くのことは、実際には基盤となるOSによってサポートされ、JVMはOSリソースを使用するだけです。例:デバイスドライバー。上記のjnodeコードを見ると、デバイスドライバーのビルドに継続的な取り組みがあることがわかります。それらはJavaで作成する必要があり、他のどこにも見られません。

4
SailsMan63

仮想マシンに基づく「ベアメタル」マシンがあります。ごく最近、ハードウェアでJVM(まあ、仮想ではないのでJM)を実行する Java Processor でさまざまな試みがありました。それらは確かに存在します-私たちが使用する汎用マシンではありませんが、Javaが生まれた元の埋め込みのアイデアにさらに引き込まれます。

これは、CPU自体に高レベルの命令を使用する代わりにCPU設計にアプローチした LISPマシン に戻ります。

その理由は...ハードウェアレベルでの専門性からそれほど多くを得ることができないからです...そして、研究の方向性は、複雑な命令を作成するのではなく、複数のコアを持つ小さな命令セットに向けられてきました。それがお金が追いかけられた場所であり、それが人々がその道をさらに探究している理由です。

考慮すべき問題-システムが実行できる利用可能なプログラムを、そのようなシステムを作成する投資コストに見合うように絞り込むことです。さらに、汎用プロセッサーが高速になるにつれて、実行可能な代替手段についていくことができますか?

...安価なデスクトップPCは、専用ハードウェアを使用せずに、LISPマシンよりもさらに速くLISPプログラムを実行できるようになりました。彼らの高利益率のハードウェアビジネスが排除され、ほとんどのLISPマシンメーカーは90年代前半までに廃業しました...

LISPマシンのWikipediaから。

上記のJavaプロセッサを含む他の言語最適化コンピュータの最後のセクション。それらはほとんどの状況で商業的に実行可能ではなかった(そして汎用マシンではどれも)ないことに注意してください) 。

7
user40980

ベアメタルJVMは存在します(そうでしたか?)。 x86(小さなナノメートルプロセス)またはARMは、最終的にmulti-Moores-law-generations-behind(したがって、大きなナノメートルまたはマイクロンプロセス)カスタムJVM。現在、数千万から数十億を維持する必要があります。

同じことが、一部の非コンシューマ主導型のRISCアーキテクチャと一部の専門性の低いDSPにも起こりました。

3
hotpaw2

JVMのハードウェア実装 存在する から選択できます。ただし、いくつかの欠点がないわけではありません。 1つは、マシンがシリコンで書かれている場合、マシンを簡単にアップグレードできないことです。

2
Caleb

VMとオペレーティングシステムの間に密接な関係があることは正しいです。これら2つとプログラミング言語の間にも密接な関係があります。実際、それらは多かれ少なかれ同じものであると主張するかもしれません!

Smalltalkの設計原則からのDaniel H. H. Ingallsによる有名な引用があります:「オペレーティングシステムは言語から欠落しているルーチンのコレクションです。

元のSmalltalkマシンにはOSがなく、Smalltalkシステムwas OSがありませんでした。ビデオドライバーでさえSmalltalkで書かれています。また、AS/400の設計を調べることもできます。これは、求めていることに密接に関連しています。

1
Jörg W Mittag

表面的にのみ。

通常、OSには、ユーザーがOSで実行しようとしている実行可能コードに対して詳細な静的(コンパイラーまたはマシンコード)分析を実行する余裕はありません。

言語実行環境は、より高いレベルの表現から実行可能なマシン命令にコードをコンパイルする役割を部分的に担っていますが、特定のタイプの不正、不正、または脱獄のペイロードを防ぐために分析を実行するのに最適な位置にあります。

一方、ハイエンドのウイルス対策ソリューションは、この種の分析を行うことを約束することがよくあります。ただし、これは非常に選択的にのみ実行できます。

1
rwong