X86 英特尔VT-D根表和上下文表关系

X86 英特尔VT-D根表和上下文表关系,x86,intel,virtualization,dma,iommu,X86,Intel,Virtualization,Dma,Iommu,我试图了解英特尔VT-D,我读到根表有256个条目,每个根表指向具有256个条目的furhter上下文表,其中每个上下文表包含二级转换。不幸的是,我无法弄清楚根表和上下文表之间的确切关系。我们是否有256*256个上下文表条目?或者每个根表指向相同的上下文表。通过查看下图, 它说每个上下文表都有不同的总线号,但我无法联系到它,如果有人告诉我第二级翻译,那就太好了,我与MMU分页很相似,但VT-D分页确实令人困惑。我已经阅读了VT-D规范,但仍有一些概念不清楚,我在上面描述了这些概念。在PCIe中

我试图了解英特尔VT-D,我读到根表有256个条目,每个根表指向具有256个条目的furhter上下文表,其中每个上下文表包含二级转换。不幸的是,我无法弄清楚根表和上下文表之间的确切关系。我们是否有256*256个上下文表条目?或者每个根表指向相同的上下文表。通过查看下图,
它说每个上下文表都有不同的总线号,但我无法联系到它,如果有人告诉我第二级翻译,那就太好了,我与MMU分页很相似,但VT-D分页确实令人困惑。我已经阅读了VT-D规范,但仍有一些概念不清楚,我在上面描述了这些概念。

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

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

多个根表条目指向同一个上下文表是非常不寻常的,尽管没有什么可以阻止它

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

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