当谈到虚拟缓存时,同义词是指一个虚拟地址对应于多个物理地址。
一种用于解决虚拟缓存中同名问题的已知解决方案是对缓存使用物理标签。也就是说:使用虚拟地址的一部分对缓存进行索引,但是使标记成为物理地址的一部分。我不明白这是怎么回事。
据我了解,处理器正在将虚拟地址发送到缓存。如果处理器没有将任何物理标签发送到缓存,处理器如何知道要检查的物理标签?例如,对于普通的物理高速缓存,如果要查看高速缓存中是否存在00001111,其中0000是标记位,1111是索引位,则将在1111之前对高速缓存进行索引,如果得到点击,查看索引1111的标签是否为0000。
但是,如果您的虚拟地址为00001111(与10101010的物理地址相对应),则处理器会将00001111发送到虚拟缓存。如果处理器在发送的虚拟地址中不存在那些物理标记位,则缓存将如何知道要检查哪些物理标记位(1010)?物理地址来自哪里?
简单来说,假设VA 1映射到3个物理地址:2、3和4。如果我的处理器使用虚拟地址1来查询高速缓存,那么高速缓存如何知道它是否应该在寻找2, 3和4?我要查找哪个物理地址不是很明确吗?
答案 0 :(得分:0)
术语“虚拟索引”仅表示该索引不需要任何翻译。如果索引完全包含在虚拟到物理地址转换的page_offset部分中,则会发生这种情况。
假设您有4kb的页面。这意味着地址的12 LSB不需要任何翻译。
现在假定您具有32kb缓存(2 ^ 15),具有64b(2 ^ 6)行,关联性为8。行数为2 ^ 9,集合数为2 ^ 6。因此,您的索引是6位。由于线为64b,所以线偏移为6b,而零件(索引+偏移)为12b。您会注意到它等于页面偏移大小,并且需要否翻译。这就是所谓的虚拟索引缓存。
因此,在虚拟索引的高速缓存中,您可以对地址的MSB进行并行地址转换,并使用未转换地址的LSB从高速缓存中提取标签。地址一经翻译,您就可以将您的物理标签与翻译后的地址进行比较,而不会出现同音异义的情况。
以某种方式,虚拟索引一词具有误导性,因为它仅在物理和虚拟索引相同时才适用。