高速缓存技术(2)缓存类型

概述

高速缓存可以设计成通过虚拟地址或者物理地址来访问,这在处理器设计时就确定下来了,并且对高速缓存的管理有很大的影响。高速缓存可以分成如下3类:

  • 虚拟高速缓存(VIVT):使用虚拟地址的索引域和虚拟地址的标记域,相当于虚拟高速缓存。
  • 物理高速缓存(PIPT):使用物理地址的索引域和物理地址的标记域,相当于物理高速缓存。
  • 物理标记的虚拟高速缓存(VIPT):使用虚拟地址的索引域和物理地址的标记域。

虚拟高速缓存(VIVT)

若处理器使用虚拟地址来寻址高速缓存,这种高速缓存称为虚拟高速缓存。处理器在寻址时,首先把虚拟地址发送到高速缓存,若在高速缓存里找到需要的数据,就不再需要访问TLB和物理内存。虚拟高速缓存的工作流程如图:
在这里插入图片描述

重名问题

在操作系统中,多个不同的虚拟地址可能映射相同的物理地址。由于采用虚拟高速缓存,因此这些不同的虚拟地址会占用高速缓存中不同的高速缓存行,但是它们对应的是相同的物理地址,这样会引发问题。第一,浪费高速缓存空间,造成高速缓存等效容量减少,整体性能降低。第二,当执行写操作时,只更新了其中一个虚拟地址对应的高速缓存,而其他虚拟地址对应的高速缓存并没有更新。那么处理器访问其他虚拟地址时可能得到旧数据。
在这里插入图片描述

同名问题

同名问题指的是相同的虚拟地址对应不同的物理地址,因为操作系统中不同的进程会存在很多相同的虚拟地址,而这些相同的虚拟地址在经过MMU转换后得到不同的物理地址,这就产生了同名问题。同名问题最常见的地方是进程切换。当一个进程切换到另外一个进程时,若新进程使用虚拟地址来访问高速缓存,新进程会访问到旧进程遗留下来的高速缓存,这些高速缓存数据对于新进程来说是错误和没用的。解决办法是在进程切换时使旧进程遗留下来的高速缓存都无效,这样就能保证新进程执行时得到“干净的”虚拟高速缓存。同样,需要使TLB无效,因为新进程在切换后会得到一个旧进程使用的TLB,里面存放了旧进程的虚拟地址到物理地址的转换结果,这对于新进程来说是无用的,因此需要把TLB清空。

物理高速缓存(PIPT)

当处理器查询MMU和TLB并得到物理地址之后,使用物理地址查询高速缓存,这种高速缓存称为物理高速缓存。使用物理高速缓存的缺点就是处理器在查询MMU和TLB后才能访问高速缓存,增加了流水线的延迟时间。物理高速缓存的工作流程如图:
在这里插入图片描述

物理标记的虚拟高速缓存(VIPT)

处理器输出的虚拟地址会同时发送到TLB/MMU进行地址翻译,以及在高速缓存中进行索引和查询高速缓存。在TLB/MMU里,会把VPN翻译成PFN,同时用虚拟地址的索引域和偏移量来查询高速缓存。高速缓存和TLB/MMU可以同时工作,当TLB/MMU完成地址翻译后,再用物理标记域来匹配高速缓存行。VIPT的工作流程如图:
在这里插入图片描述

相关参考

  • 《奔跑吧,Linux内核》
  • 《计算机组成与体系结构——性能设计》
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值