我正在回答一些与虚拟内存相关的问题,并希望在澄清或确认我对这些东西是如何完成的理解方面得到一些帮助。
问题如下:
给定一个具有 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 路组关联。但是,我不知道如何计算偏移量,这是帮助计算标签所必需的。
任何帮助将非常感激。