Virtual address to physical address example「Computer Architecture学习」 Virtual address to physical address example

1.此架构是如何转换虚拟地址的?

  1. 简单的处理方式,page offset位宽 = L1 cache index + block offset 位宽,低位就是虚拟地址(也等于物理地址)此架构中,L1低地址用虚拟地址index,用物理地址比较Tag,是所谓的VIPT。其他方式在这里先不展开。
  2. 第一拍:低位虚拟通过direct-map,直接index到一个L1 cache line,这是组合电路可以完成的,这拍可以直接读数据了(甚至可以只用一拍得到数据,具体怎么用的不清楚);高位物理地址则通过TLB转换得到,假设比较需要一拍
  3. 第二拍:第一拍cache line的Tag中,其实也是物理地址<26>, 与TLB得到的物理地址比较:一样,说明hit,第一拍读到的数据继续用;不一样说明miss了,得去L2 cache找。
  4. 第二拍:L2中,通过第一拍的物理地址,找到L2 cache line(假设hit),若步骤3,miss了,则取L2里的数据,两拍得到数据

2. VIPT有什么限制?

1.index位宽/block offset 被page size的位宽限制死了。

3. index + block offset 位宽 != page size位宽会有什么问题?(有aliasing 问题)

  1. 假设page size多一bit,变成<15>,可能有两个虚拟地址,只有1bit不一样。但是可能这两个虚拟地址,可能都指向同一个物理地址,此处无法识别。
    若这种情况发生,往cache里面写了其中一个虚拟地址,而另一个同一个物理地址映射的虚拟地址可能得不到更新,数据不一致了。需要有机制来避免这种情况——避免cache中有一个物理地址的两个虚拟地址,或对两个虚拟地址同步进行更新。
  2. 假设page size少1bit,还是上面的情况。虚拟地址,物理地址无法在一个cache中一一对应。

4. Cache用虚拟地址还是物理地址?

  1. 除了L1,其他一定用物理地址;L1似乎可能存虚拟地址;
  2. 此架构中,L1其实存的还是物理地址
  3. 若L1 index + block offset 位宽 >= page size位宽,则L1 cache中,有几bit,存的其实是虚拟地址?存疑,只是需要处理这几bit带来的aliasing问题,要看具体是怎么处理的了:
    a. 这几bit是虚拟地址,若允许一个物理地址的多个虚拟地址存在L1中,则可以认为L1 cache line存了虚拟地址;
    b. 不允许一个物理地址的多个虚拟地址存在L1中,L1只存物理地址,则在存入之前,还有一个防止同一个物理地址的多个虚拟地址存进cache line的模块。L1只存物理地址。

5. 按照这个架构的思路,L1 cache必须direct-map才行?(不一定)

  1. 这个架构的思路中,direct-map只需要用index来找到cache line,就可以去读数据了。
  2. 如果是n-way需要比较tag,则第一拍读n-way数据(并行),且TBL转换出物理地址;第二拍,再用TAG去看是哪个way,取出第一拍读出来的并行数据中的某一way。
  3. VIPT理论上两拍得到数据,如果是direct-map一些情况下,一拍就可以(存疑)。

相关文章: