从虚拟地址 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 匹配。
这个主题在其他帖子中有所涉及,但在我的示例中,我需要找到比其他示例中显示的更多的内容,我很难清楚地理解到底发生了什么。
假设我有以下系统属性(我知道解决方案的工作示例,但不是很清楚):
假设我想将虚拟地址 0x0712
转换为物理地址:
我会先将 0x0712
转换为二进制:000011100010010
(知道 VA 是 15 位宽)
我知道页面大小是 128 字节,所以 log2(128) = 7
,这是我的偏移位。
然后我需要回答以下问题:
什么是虚拟页码?
什么是TLB索引?
什么是 TLB 标签?
TLB 命中还是未命中?
是否存在页面错误?
什么是物理页码?
我该如何回答这些问题?我知道 VPN 可以显示为 E(或 0E),这是有道理的,因为 15 位虚拟地址减去偏移位 (7) 将留下:00001110 = E
。我也明白为什么没有 PPN,因为在 table.
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 匹配。