2010-11-20 3 views
1

Ich schreibe eine virtuelle Maschine - nicht ein existierender Architektur-Emulator wie Virtualbox, sondern etwas wie die JVM oder BEAM - mit einem eigenen Befehlssatz, Speichermodell usw. Schließlich plane ich, ein sehr kleines und einfaches zu implementieren (aber turing-complete) High-Level-Sprache, die nur zum Spaß in ihren Bytecode kompilieren würde.Bessere Möglichkeit zum Implementieren von E/A in einer virtuellen Maschine?

Natürlich muss die Maschine einige Unterstützung von I/O haben, aber ich will es nicht nur auf Manipulationen mit stdin/stdout beschränken. Ich stelle mir so etwas wie modulare "virtuelle Geräte" vor, die als Shared Libraries implementiert werden können, damit die VM sie zur Laufzeit laden und über eine Standardschnittstelle mit ihnen kommunizieren kann. Auf diese Weise können wir beispielsweise "virtuelle Geräte" für Standardeingabe/-ausgabe, Grafiken (stellen Sie sich ein virtuelles Gerät vor, mit dem Ihr VM-Programm Daten in einem SDL-Fenster zeichnen kann) oder sogar ein Netzwerk erstellen.

Die Frage ist: Wie sollen die für die VM geschriebenen Programme mit den virtuellen Geräten kommunizieren? Ich beschloss, Techniken nachzuahmen, die mit der tatsächlichen Hardware verwendet werden, und lernte Port-basierte I/O und Speicher-Mapped I/O kennen. Ich bin mir jedoch nicht sicher, welcher von ihnen für meine Ziele besser geeignet ist. Kannst du vorschlagen, welche besser ist oder vielleicht sogar eine völlig andere Technik für den Umgang mit Input/Output aufzeigen?

Vielen Dank im Voraus.

Antwort

0

Sowohl Speicherkarten- als auch Port-basierte sind für die meisten E/A ungeeignet.

DMA-Anfrage mit Block-Kopie ist in der Regel, was Sie wollen.

Verwandte Themen