私は、Virtualboxのような既存のアーキテクチャエミュレータではなく、JVMやBEAMのようなもので、独自の命令セットやメモリモデルなどを備えた仮想マシンを作成しています。最終的には、非常に小さくシンプルなものを実装する予定です(ただしturing-complete)楽しみのために、バイトコードにコンパイルされる高レベルの言語。
もちろん、マシンはI / Oをある程度サポートしている必要がありますが、stdin/stdoutを使用した操作だけに制限したくはありません。モジュール式の「仮想デバイス」のようなものを想像します。これは、共有ライブラリとして実装できるため、VMは実行時にそれらをロードし、標準のインターフェイスを介して通信できます。このようにして、たとえば、標準の入出力、グラフィックス(VMプログラムがSDLウィンドウ内にデータを描画できる仮想デバイスを想像してください)、またはネットワーク用の「仮想デバイス」を使用できます。
問題は、VM用に作成されたプログラムが仮想デバイスとどのように通信する必要があるかということです。実際のハードウェアで採用されている手法を模倣することにし、ポートベースのI/OとメモリマップドI/Oについて学びました。しかし、どちらが私の目標に適しているかはわかりません。どちらが優れているか、あるいは入出力を処理するためのまったく異なる手法を指摘することさえできますか?
前もって感謝します。