web-dev-qa-db-ja.com

Fabrice BellardによるJavascriptのLinuxエミュレータはどのように機能しますか?

今日、JavascriptでLinuxエミュレーターを見たとき、あっという間に立ち止まりました: http://bellard.org/jslinux/

Cプログラムをコンパイルし、viとemacsを持ち、すべてのシェルコマンドなどをサポートします。

どのように機能しますか?

68
Nikita Barsukov

最初は、これは単なるVMに接続する端末エミュレータですが、そうではありません。ネットワーク接続を見ると、起動後にデータがないことがわかります。もう送信されました。

だからそれは本当です。

CPUは魔法のようなものではありません。実際には、メモリからバイトを読み取り、コマンドの意味に従ってRAMを変更するだけです。

この場合、CPUエミュレーターはqemuコードに基づいています。彼がしているのは、インデックスがPC(プログラムカウンター)の次のバイトである関数の配列を作成することです。

必要なのは、浮動小数点演算やMMXコードなどのエキゾチックなCPUコマンドを必要としないシンプルなLinuxディストリビューションだけです。

面白いのは獣の速さです。全体は少し緩慢ですが、ブラウザのJavaScriptです。

結論:印象的。 C64エミュレーターを見るのが待ちきれません:-)

36
Aaron Digulla

http://www.quora.com/CPU-Emulation/How-does-bellard-org-jslinux-work を参照してください

簡単な説明

jslinuxは、基本的にソフトウェア、特にJavaScriptで実装された完全なコンピューターです。これはもちろんエミュレーターとして知られています。この特定のバージョンはLinuxを実行するようにセットアップされていますが、理論的には代わりに他のオペレーティングシステムを実行できます。

エミュレーター(JavaScript、〜90KB縮小、〜7000行フォーマット)がブラウザーにロードされます。 Linuxのバージョンは、以前にx86プロセッサ用のマシンコードにコンパイルされ、エミュレートされたコンピュータのRAMとして機能する整数の大きな配列にロードおよびコピーされます。次に、エミュレータCPUはマシンコードの最初の命令をポイントし、命令の解釈を開始するように指示されます(RAMの読み取り/書き込み、算術演算および論理演算の実行、さまざまな命令へのジャンプなど)。ブラウザDOMを使用してシリアルポートと端末をシミュレートする別のJavaScriptコードを介して、「端末」にデータ(システムログやシェルコマンドプロンプトなど)を書き込むことがあります。キーを押すと、このシミュレートされたシリアルポート経由でLinuxに返送されます...

24
alex