4

我正在回答一些与虚拟内存相关的问题,并希望在澄清或确认我对这些东西是如何完成的理解方面得到一些帮助。

问题如下:

给定一个具有 32 位字的字节寻址系统、4 GB 的虚拟地址空间、1 GB 的物理地址空间和 4 KB 的页面大小。假设页表项被四舍五入到 4 个字节。

a) 页表的大小(以字节为单位)是多少?

b) 现在假设实现了一个 4 路集合关联转换后备缓冲区,总共有 256 个地址转换。计算其标签和索引字段的大小。

我的回答如下:

A:

页表的大小等于页表中的条目数乘以条目的大小。

页表中的条目数等于内存大小除以页大小:2^32/2^12=2^20。

条目的大小等于字大小减去用于页表中条目数的位:32-20=12。

因此,页表大小为:(2^20) * 12 位 = 12582912 位 = 1572864 字节

但是,我发现了这个(在“页表大小”的标题下),它使用了基本相同的数字。

页表大小 = ((虚拟地址空间大小)/(页大小)) * (页表条目大小) = (4 GB/4 KB) * 4 B = 4 MB

哪个答案是正确的?

接下来,乙:

我不确定如何计算B部分。我相信Tag是通过将块数加上偏移量加上索引来计算的。这是一个 4 路集合关联,因此每个集合中有 4 个块。索引是 8 位,因为基本索引大小是 10 位并且减少了 2,也因为它是 4 路组关联。但是,我不知道如何计算偏移量,这是帮助计算标签所必需的。

任何帮助将非常感激。

4

1 回答 1

5

对于 a 部分,您犯了两个错误。首先,问题特别指出“页表条目四舍五入为4字节”。其次,PTE 包含根据页面对齐的地址确定物理地址所需的位。在所描述的系统中,物理地址只有 30 位 (1 GiB)。由于该系统使用 4KiB 页面,因此 PTE 中物理地址的最低有效 12 位将全为零,因此可以是隐式的。所以只需要 18 位 (30-12) 的物理地址。

除了需要四舍五入到两个字节数的幂之外,大多数 PTE 还包括附加数据,例如有效位、修改位、访问位以及用户和管理员模式的权限位;因此,即使有 512 MiB 的物理地址空间和 8 KiB 页面(需要 16 位来指示物理地址),也无法使用 2 字节的 PTE。

(应该注意的是,没有 32 位处理器会使用平面页表。对于 32 位地址,通常使用分层或线性页表。这些会为完全占用引入一点额外的空间开销,并且可能需要多次内存访问以找到一个翻译,但在部分占用和密集分配的常见情况下,它们使用的内存要少得多。这尤其重要,因为大多数处理器都是为多地址空间操作系统设计的,其中每个进程都有自己的页表。使用几乎一半的物理内存[400 MiB] 在页表中仅支持 100 个进程是没有吸引力的,这是可以理解的。)

对于 b 部分,您是正确的,4 路集合关联意味着每个集合中有 4 个块,因此根据条目数从索引所需的位数中减去 2 位。但是,log2(256) 是 8 而不是 10,因此只有 6 位用于索引 TLB。

在数据缓存中,标签大小等于地址位数减去索引位数,再减去偏移位数(在缓存块内)。

对于 TLB,虚拟地址与页面大小对齐(页面中的最低有效位未翻译)。对于 4 KiB 页面,这意味着 12 个最低有效位被忽略。对于 32 位虚拟地址,这会留下 20 位。

其中 6 位用于索引已经确定,所以剩下 14 位。

对于非集群 TLB,每个标签都与一个翻译相关联。这相当于 1 个字节的数据高速缓存块大小(即 0 个偏移位)。因此,标签(不包括任何地址空间 ID)将为 14 位。

(在集群 TLB [类似于扇区缓存块] 中,为每个“条目”提供两个或多个翻译——条目变得不太清楚,因为它可以指翻译条目或标签和多个翻译的组合与该标签相关联。[我怀疑您欣赏这种复杂性不是这些问题的一部分。])

于 2013-11-05T00:23:38.117 回答