Cache组织方式

Posted cyj1258

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cache组织方式相关的知识,希望对你有一定的参考价值。

  1. https://zhuanlan.zhihu.com/p/107096130
  2. 假设Cache大小8KB,CacheLine大小256B,32行CacheLine,CPU是32位的。4KB的页。
    1. 32位虚拟地址 = 20位虚拟页号+12位页内偏移
    2. 虚拟页号 物理页号
      0x
      0x
  3. VIVT
    1. 虚拟地址作为索引以及tag域
    2. 32位   =  Vaddr:   tag(19位) + index(5位) + offset(8位)  
    3. 歧义问题
      1. 两个进程相同的虚拟地址,映射到了不同的物理地址,但是由于使用的虚拟地址作为索引以及tag域,所以映射到了相同的CacheLine
      2. 比如P1虚拟地址为v1: 00000100000000000000 00001 00000001以及P2的虚拟地址v2: 00000100000000000000 00001 00000001
      3. P1(进程1)的虚拟地址V1与进程2的虚拟地址相同,所以索引的是相同的CacheLine,但是由于相同的虚拟页号在不同的进程中映射到不同的物理页号。导致了相同的虚拟地址映射到了不同的物理地址。
      4. 注意tag域是19位,而虚拟页号是20位。物理页号加上低12位为物理地址。
      P1: VN(20位) PN P2: VN(20位)PN
      0x4000 0x2000 0x40000x3000
    4. 别名问题
      1. 两个进程不同的物理地址,映射到了相同的物理地址,这一个物理地址映射到了不同的CacheLine。
      2. 比如P1虚拟地址为v1: 00000100000000000000 00001 00000001以及P2的虚拟地址v2: 00000100000000000000 10001 00000001
      3. P1(进程1)的虚拟地址V1与进程2的虚拟地址中的offset相同,index只有最高位不同(保证两个虚拟地址的低12位,页内偏移相同),由于index不同,所以索引的是不同的CacheLine,但是由于不同的虚拟页号在不同的进程中可以映射到相同的物理页号。导致了不同的虚拟地址映射到了相同的物理地址。
      4. P1: VN(20位) PN P2: VN(20位) PN
        0x4000 0x2000 0x4001 0x2000
  4. VIPT
    1. 用虚拟作为索引,用物理地址作为tag域。
    2.    32位   =  Vaddr:   19位 + index(5位) + offset(8位)。继续使用虚拟地址的index作为CacheLine的索引,但是使用20位的虚拟页号转换成物理页号,然后用物理页号号作为tag域。
    3. 能够避免歧义。
      1. 比如P1虚拟地址为v1: 00000100000000000000 00001 00000001以及P2的虚拟地址v2: 00000100000000000000 00001 00000001
      2. 相同的物理地址,由于依然采用的是虚拟地址的索引,所以对应着相同的CacheLine,如果两个进程相同的虚拟页号对应着不同的物理页号,那么tag域就不相同,避免了VIVT中相同的虚拟地址对应着不同的物理地址。
    4. 依然存在别名的问题。
      1. 比如P1虚拟地址为v1: 00000100000000000000 00001 00000001以及P2的虚拟地址v2: 00000100000000000000 10001 00000001
      2. P1: VN(20位) PN P2: VN(20位) PN
        0x4000 0x2000 0x4001 0x2000
      3. 和VIVT一样。

以上是关于Cache组织方式的主要内容,如果未能解决你的问题,请参考以下文章

高速缓冲存储器例题二

cache-主存的三种映射方式

CPU Cache 一致性:Cache 结构同步方式Cache 一致性总线嗅探MESI 协议

cache中的数据是啥的映射

CPU Cache 一致性:Cache 结构同步方式Cache 一致性总线嗅探MESI 协议

CPU Cache 一致性:Cache 结构同步方式Cache 一致性总线嗅探MESI 协议