【发布时间】:2016-12-11 09:33:12
【问题描述】:
我想知道使用英特尔 VMX / VT 技术的管理程序如何模拟内存映射 I/O(这样来宾可能会认为它正在对设备执行内存映射 I/O)。
我认为基本原则是设置 EPT 页表,以使所讨论的内存地址通过将它们设置为无法读取或写入而导致 EPT 违规(即 VM 退出)?但是,下一个问题是如何处理 VM 退出。这样的 VM 退出将填写所有退出资格原因等,包括来宾线性地址和来宾物理地址等。但是我在这些退出资格字段中缺少的是一些字段,指示 - 在写入指令的情况下 -尝试写入的值和写入的大小。同样,对于读取指令,最好使用一些指示读取目的地的位字段,例如寄存器或内存位置(在内存到内存字符串操作的情况下)。这将使管理程序很容易弄清楚来宾尝试做什么,然后模拟设备对来宾的行为。
但麻烦的是,我在退出资格中找不到这样的字段。我可以看到指向错误指令所在位置的指令指针,因此我可以遍历页表以读取指令,然后对其进行解码以理解指令,然后模拟 I/O 行为。但是,这需要管理程序对所有 x86 指令有相当完整的了解,并且能够对它们进行解码。这似乎对虚拟机管理程序来说是一个相当沉重的负担,并且还需要它在以后添加指令时保持最新状态。 CPU 应该已经有了这些信息。
我可能会错过这些相关字段,因为文档非常广泛,但我尝试仔细搜索但无法找到它。也许有人可以为我指明正确的方向,或者确认管理程序需要包含指令解码器。
【问题讨论】:
-
我误解了你的问题。不过,您可能需要查看 Intel 的 VT-d 论文,因为它涉及 IO 虚拟化
-
如果您将那堵巨大的文字墙分成多个段落,这将显着提高可读性。
-
有趣的标题,但不够有趣,无法涉足这个巨大的单段文字墙。
-
@Peter:如果这就是你所指的,我已经插入了一些中断。
标签: memory assembly virtualization