2010-11-20 7 views
1

私は仮想マシンを作成しています - VirtualBoxのような既存のアーキテクチャエミュレータではなく、JVMやBEAMのようなものです。独自の命令セットやメモリモデルなどを持っています。バイトコードにコンパイルする高級言語(チューリング完結型)の高級言語です。仮想マシンでI/Oを実装する方が良い方法はありますか?

もちろん、マシンにはある程度のI/Oサポートが必要ですが、stdin/stdoutを使った操作のみに制限したくありません。私はモジュラーな "仮想デバイス"のようなものを想像しています。これは、共有ライブラリとして実装して、実行時にVMをロードして、標準インターフェースを通じてそれらと通信できるようにするためのものです。このようにして、例えば、標準的な入出力、グラフィックス(あなたのVMプログラムがSDLウィンドウの中に物を描くことを可能にする仮想デバイスを想像してください)、あるいはネットワークさえあれば "仮想デバイス"を持つことができます。

問題は、VM用に書かれたプログラムを仮想デバイスとどのように通信するのですか?実際のハードウェアに採用されている技術を模倣し、ポートベースのI/OとメモリマップされたI/Oについて学びました。しかし、どちらが自分の目標に適しているかわかりません。どちらが優れているのかを教えてください。あるいは、入出力を扱う全く異なるテクニックを指摘できますか?

ありがとうございます。

答えて

0

メモリマップとポートベースは、ほとんどのI/Oには不適切です。

ブロックコピーを使用したDMAリクエストは、通常あなたが望むものです。

関連する問題