【问题标题】:Better way to implement I/O in a virtual machine?在虚拟机中实现 I/O 的更好方法?
【发布时间】:2010-11-20 16:18:12
【问题描述】:

我正在编写一个虚拟机——不是像 Virtualbox 这样的现有架构模拟器,而是像 JVM 或 BEAM 这样的东西——有自己的指令集、内存模型等。最终我计划实现一个非常小的和简单(但图灵完备)的高级语言,可以编译成它的字节码,只是为了好玩。

当然,机器必须支持一些 I/O,但我不想将其仅限于使用 stdin/stdout 进行操作。我想像模块化的“虚拟设备”这样的东西,它可以实现为共享库,以便 VM 可以在运行时加载它们并通过标准接口与它们通信。这样,例如,我们可以为标准输入/输出、图形(想象一个让您的 VM 程序在 SDL 窗口中绘制内容的虚拟设备)甚至网络拥有“虚拟设备”。

问题是:为 VM 编写的程序应该如何与虚拟设备通信?我决定模仿与实际硬件一起使用的技术,并了解了基于端口的 I/O 和内存映射 I/O。但是,我不确定其中哪一个更适合我的目标。您能否建议哪个更好,或者甚至指出一种完全不同的处理输入/输出的技术?

提前致谢。

【问题讨论】:

    标签: input interpreter vm-implementation


    【解决方案1】:

    内存映射和基于端口都不适合大多数 I/O。

    带有块复制的 DMA 请求通常是您想要的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2012-05-04
      • 1970-01-01
      相关资源
      最近更新 更多