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