计算虚拟内存页表和转换后备缓冲区

bas*_*sil 4 computer-science computer-architecture virtual-memory

我正在回答一些与虚拟内存相关的问题,并希望在澄清或确认我对这些内容如何完成的理解方面提供一些帮助.

问题如下:

给定一个具有32位字的字节可寻址系统,4千兆字节的虚拟地址空间,1千兆字节的物理地址空间和4千字节的页面大小.假设页表条目向上舍入为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:

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

任何帮助将非常感激.

Pau*_*ton 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中[类似于扇区缓存块],为每个"条目"提供两个或更多翻译 - 条目变得不太明确,因为它可以引用翻译条目或标记和多个翻译的组合与那个标签相关联.[我怀疑你很欣赏这些复杂性不属于这些问题.])