学习笔记——Cache访问地址问题

本文探讨了在使用虚拟地址的系统中,如何处理Cache访问的问题。当进程切换导致虚拟地址可能匹配错误的Cache条目时,提出了利用物理地址比较Tag的方法,通过TLB进行虚实地址转换,确保正确访问Cache。该过程分为三个节拍,包括虚拟地址到物理地址的转换、Cache访问以及物理地址的Tag比较,确保了Cache命中时的准确性。
摘要由CSDN通过智能技术生成

Cache的虚实地址问题

cache是体系结构中很重要的一个设计,也是有关存储体系中的一个重要环节,考虑到现实的应用中,由于开发了虚拟地址这个概念,即每个进程都可以拥有一个完整的虚拟地址空间,这样,CPU在执行两道不同的进程,而进程的指令访问都是基于虚拟地址的,因此,可能出现的情况是:进程A在被执行一段时间后,由于进程调度,被切换出去,需要执行进程B,而进程A的PCA(进程A的取指地址指针)所指向的一段代码正在cache中,而进程B的PCB,由于是虚拟地址概念,有可能PCB=PCA(经过虚实地址转换后,物理PCB绝对不会等于物理PCA),如果在cache中利用PCB去访问PCA,则会导致cache hit,但这个时候cache hit其实是错误的,因为cache中存放的是进程A的指令。


为此,针对上述问题,尤其是在虚拟地址这个概念出现后,需要考虑cache的虚拟地址问题。如果我们的系统不支持虚拟地址,也就是没有MMU的系统,则可以不考虑这个问题——因为每个程序,进而每道进程的地址空间都是物理地址空间是不一样的,不会产生上面的冲突情况。

为了解决上面的问题,产生了如下的几种处理cache的方法:


物理地址访问的cache结构

在这种模式下,cache访问时使用的就是物理地址,也就是虚拟地址经过TLB转换后的物理地址。在这种情况下,流水线在使用PC访问cache的时候,首先要利用TLB进行虚实地址转换,然后访问cache,这个时候可以理解为TLB其实是处在cache和流水线之间。这时候,每条指令的执行都需要进行一次虚实地址转换,即查找TLB,然后再访问cache。
由于页表所表示的一个页的空间比较大,例如有4KB或者更大,因此,在一般情况下,TLB的失效率不会很高,但带来的问题就是:每次访问cache都要访问一次TLB,而如果TLB失效,流水线的性能损失非常大,因此TLB一般是存储在外部存储器中。而如果一段指令一直存储在cache中,流水线还是要每次访问TLB才能访问到cache,就感觉会:多此一举。而事实是带来流水线一个流水级的性能损失。
  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值