INTEL VT-D根表与上下文表的关系

时间:2018-11-14 06:52:50

标签: x86 intel virtualization dma iommu

我正在尝试了解INTEL VT-D,我读到根表具有256个条目,每个根表都指向具有256个条目的更高级的上下文表,其中每个上下文表都包含第二级转换。不幸的是,我无法弄清楚根表和上下文表之间的确切关系。我们是否有256 * 256个上下文表条目?或每个根表都指向相同的上下文表。通过查看下图,enter image description here 它说每个上下文表具有不同的总线号,但是我无法将其关联,如果有人讲述二级转换,那将是很棒的。我对MMU寻呼很熟悉,但VT-D寻呼确实令人困惑。我已经看过VT-D规范,但是上面我描述的一些概念仍然不清楚。

1 个答案:

答案 0 :(得分:2)

在PCIe中,有256个总线号,每个总线有256个设备/功能号,总共有256 * 256个功能。在VT-d中,每一个都可以有一个上下文条目。

根表/上下文表被组织为两级表,因此不必完全填充上下文表。每个根表条目都有一个当前位。如果当前位为0,则该总线没有上下文表。

一个以上的根表项指向同一上下文表是非常不寻常的,尽管没有什么可以排除它。

如果您熟悉CPU分页,则VT-d页表结构与EPT非常相似(实际上,内存中的相同物理表可同时用于这两个目的)。 VT-d支持具有多达48位地址的两级,三级或四级分页结构(取决于硬件实现;我相信当前所有的实现都仅支持4级遍历)。

如果您有更具体的问题,我可以回答,但我认为这不是教程的好地方。