我正在尝试了解 INTEL VT-D,我读到根表有 256 个条目,每个根表指向进一步的上下文表,每个上下文表有 256 个条目,其中每个上下文表包含二级翻译。不幸的是,我无法弄清楚根表和上下文表之间的确切关系。我们有 256 * 256 上下文表条目吗?或者每个根表都指向相同的上下文表。通过查看下图, 它说每个上下文表都有不同的总线编号,但我无法与它联系起来,如果有人告诉我二级翻译,那就太好了,我熟悉 MMU 分页,但 VT-D 分页确实令人困惑。我已经阅读了 VT-D 规范,但仍然不清楚我上面描述的一些概念。
最佳答案
在 PCIe 中,有 256 个总线编号,每个总线有 256 个设备/功能编号,总共 256*256 个功能。在 VT-d 中,每一个都可以有一个上下文条目。
根表/上下文表被组织为两级表,因此不必完全填充上下文表。每个根表条目都有一个存在位。如果当前位为 0,则该总线没有上下文表。
尽管没有什么可以排除的,但多个根表条目指向同一个上下文表是非常不寻常的。
如果您熟悉 CPU 分页,VT-d 页表结构与 EPT 非常相似(事实上,内存中相同的物理表可以同时用于这两个目的)。 VT-d 支持高达 48 位地址的两级、三级或四级分页结构(取决于硬件实现;我相信当前所有实现仅支持 4 级遍历)。
如果您有更具体的问题,我可以回答,但我认为这不是提供教程的好地方。
关于x86 - INTEL VT-D 根表和上下文表关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53294593/