我正在编写一个虚拟机——不是像 Virtualbox 这样的现有架构模拟器,而是像 JVM 或 BEAM 这样的东西——有自己的指令集、内存模型等。最终我计划实现一个非常小而简单的(但图灵完备的)高级语言,可以编译成它的字节码,只是为了好玩。
当然,机器必须支持一些 I/O,但我不想将其仅限于使用 stdin/stdout 进行操作。我想像模块化的“虚拟设备”这样的东西,它可以实现为共享库,以便 VM 可以在运行时加载它们并通过标准接口与它们通信。这样,例如,我们可以为标准输入/输出、图形(想象一个让您的 VM 程序在 SDL 窗口内绘制内容的虚拟设备)甚至网络拥有“虚拟设备”。
问题是:为 VM 编写的程序应该如何与虚拟设备通信?我决定模仿与实际硬件一起使用的技术,并了解了基于端口的 I/O 和内存映射 I/O。但是,我不确定其中哪一个更适合我的目标。您能否建议哪个更好,或者甚至指出一种完全不同的处理输入/输出的技术?
提前致谢。