我遇到了以下问题,但不确定具体如何解决:
我对如何计算一些参数有些想法,但否则我迷路了。
例如,由于虚拟地址是35位宽,所以我知道我有2 ^ 35个可能的虚拟地址。
因为我有16KB页面(16 * 1KB = 2 ^ 4 * 2 ^ 10 = 2 ^ 14KB),所以我知道我必须具有(3 ^ 35)/(2 ^ 14)= 2 ^ 21页表项。
最后,我知道我的缓存大小为64 * 1KB = 2 ^ 16字节的缓存。
但是经过这些步骤,我迷路了。任何帮助,将不胜感激。
最佳答案
页面偏移量由页面内寻址的位组成,TLB不会翻译这些位。对于16 KiB页面,页面偏移量将为14位。
使用35位虚拟地址,这留下了21位来索引TLB中的一个集并对该集中的标签条目进行索引。由于TLB有256个条目,每个集合有8个条目(8位关联),因此有32个集合,需要5位才能索引一个集合。这为标签留下了16位。
物理页号的大小等于物理地址的大小减去页偏移的大小:32-14 = 18位。
说明既不直接映射也不完全关联的TLB比示例完全关联的TLB更复杂,因为这样会增加集合索引的维度。可以通过叠加方式来处理,以便完全可见一种方式(索引尺寸)。这是用于4路结构的ASCII艺术版本,每路8个条目:
+----------+----------+
+----------+----------+ |
+----------+----------+ |-+
+----------+----------+ |-+ |
| | |-+ |-+
+----------+----------+ |-+ |
| | |-+ |-+
+----------+----------+ |-+ |
| | |-+ |-+
+----------+----------+ |-+ |
| | |-+ |-+
+----------+----------+ |-+ |
| | |-+ |-+
+----------+----------+ |-+ |
| | |-+ |-+
+----------+----------+ |-+ |
| | |-+ |-+
+----------+----------+ |-+
| | |-+
+----------+----------+
对于32套,可能希望使用省略号(...)来暗示其中的大多数。类似地,省略号可以用来暗示某种方式的条目(而不是必须绘制数百条条目)。
对于高速缓存,假设访问4字节,则字节偏移量将为2位。块偏移量用于索引高速缓存块中的4字节块。对于128字节的高速缓存块,索引一个特定的字节将需要7位,因此索引4字节的块将仅需要5位。
2路关联的64 KiB将以每种方式具有32 KiB。对于128字节的缓存块,这意味着每种方式将具有256个块,因此需要8位物理地址(超出块和字节偏移量)来索引特定的集合(每种方式中的缓存块)。这是缓存索引。
给定一个32位物理地址,8位高速缓存索引,5位块偏移和2位字节偏移,该标签将为17位(32-8-5-2)。
关于caching - 使用TLB设计虚拟内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20077549/