从虚拟地址 space 转换为物理地址空间

Converting from a virtual address space to a physical address spae

这个主题在其他帖子中有所涉及,但在我的示例中,我需要找到比其他示例中显示的更多的内容,我很难清楚地理解到底发生了什么。

假设我有以下系统属性(我知道解决方案的工作示例,但不是很清楚):

假设我想将虚拟地址 0x0712 转换为物理地址:

我会先将 0x0712 转换为二进制:000011100010010(知道 VA 是 15 位宽)

我知道页面大小是 128 字节,所以 log2(128) = 7,这是我的偏移位。

然后我需要回答以下问题:

什么是虚拟页码?

什么是TLB索引?

什么是 TLB 标签?

TLB 命中还是未命中?

是否存在页面错误?

什么是物理页码?

我该如何回答这些问题?我知道 VPN 可以显示为 E(或 0E),这是有道理的,因为 15 位虚拟地址减去偏移位 (7) 将留下:00001110 = E。我也明白为什么没有 PPN,因为在 table.

页面中没有匹配 VPN 0E

我猜页面错误是 Y,正是因为在页面 table 中没有匹配到 VPN 0E?然而,我只是凭直觉得出这个结论。

但剩下的部分我不明白,我该如何回答?我再次知道解决方案为:

什么是虚拟页码? = 0E

什么是TLB索引? = 2

TLB 标签是什么? = 03

TLB 命中还是未命中? = M

是否存在页面错误? = Y

什么是物理页码? none

但我似乎无法理解他们是如何从上面的示例中得出这些答案的。我试图阅读这里的不同帖子,但我没有发现任何人介绍如何正确找到 TLB 索引和标签,在这种情况下如何查看是否是 TLB hit/miss 以及是否发生页面错误。

谁能给我解释一下这些概念?

编辑: 我在其他地方找到了解决方案,我将其作为评论发布在下面以展示工作示例。

我检查了更多示例教程后偶然发现了一个对我有意义的解决方案。在上面的情况下,我有以下内容:

什么是虚拟页码? 虚拟地址:0x0712 映射到二进制地址:000011100010010

我知道偏移位由 log2(128) = 7 bits 找到,剩下的 8 位用于实际虚拟地址。

什么是TLB索引? 因为我在 TLB 中有 4 个集合,所以我有 2 个索引位(2^k = 4,对于 k = 2,这是覆盖 TLB 缓存中所有 4 个集合所需的实际索引位数),因此我可以读取来自虚拟地址的 2 个最低有效位的 TLB 索引:10 = 2.

什么是 TLB 标签? TLB 标记是虚拟地址的剩余 8-2 = 6 位,在本例中 000011 = 03.

TLB 命中还是未命中? 为了检查我是否有 TLB 命中,我检查了 TLB table,在集合 2 中查找(这是 TLB 索引)并查看是否与标签 03 匹配(这是 TLB 标签)。在这种情况下,我没有匹配项,因此存在 TLB MISS。

是否存在页面错误? 由于 TLB 缓存没有提供答案,我需要使用页面 table 从虚拟地址查找翻译。因此,我检查 table 是否存在 0E 的 VPN 匹配项,但没有匹配项,因此我遇到了页面错误。如果我真的找到了匹配项,我需要检查有效位是 1,因为它表明数据是否已加载到页面 table.

物理页码是多少? 由于在 TLB 缓存转换或虚拟地址 0E 的实际页面 table 中没有匹配,因此没有 PPN 匹配。