INTEL VT-D Root table 和 context table 关系

INTEL VT-D Root table and context table relationship

我正在尝试了解 INTEL VT-D,我读到根 table 有 256 个条目,每个根 table 指向进一步的上下文 table 256每个条目,其中每个上下文 table 包含二级翻译。不幸的是,我无法弄清楚根 table 和上下文 table 之间的确切关系。我们有 256 * 256 个上下文 table 条目吗?或者每个根 table 指向相同的上下文 table。通过查看下图, 它说每个上下文 table 都有不同的总线号,但我无法与之相关,如果有人告诉我二级翻译也很好,我对 MMU 寻呼很熟悉,但 VT-D 寻呼真的很混乱.我已经阅读了 VT-D 规格,但仍然有一些我上面描述的概念不清楚。

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

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

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

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

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