虚拟地址与物理地址对缓存的影响

11755 分钟阅读

虚拟缓存和物理缓存

虚拟缓存使用虚拟地址寻址

物理缓存使用TLB转换,然后再寻址。

VIVT架构cache

VIVT (Virtual Index Virtual Tag) 是一种缓存架构设计,其特点是同时使用虚拟地址的索引和标记部分进行缓存操作。

VIVT架构的工作原理

  1. CPU发出虚拟地址后,该地址 直接 送到缓存控制器
  • 缓存控制器使用虚拟地址的索引和标记部分查找缓存
  • 如果命中(cache hit),则直接从缓存返回数据,无需地址转换
  • 如果未命中,则将虚拟地址发送到内存管理单元(MMU),转换为物理地址,然后从主存中读取数据

VIVT架构的优点

  • 访问速度快:命中时无需地址转换,减少了访问延迟
  • 设计简单:实现相对简单直接
  • 不需要TLB查询:缓存命中时不需要访问TLB

VIVT架构的缺点

歧义问题(Ambiguity/Homonym)

  • 不同进程中相同的虚拟地址可能映射到不同的物理地址
  • 解决方案:使用进程标记符(PID)增大缓存地址标记的宽度,或在上下文切换时刷新缓存

别名问题(Aliasing/Synonym)

  • 不同的虚拟地址可能映射到相同的物理地址
  • 这会导致缓存中存在多个相同数据的副本,造成数据一致性问题

由于这些缺点,现代处理器通常采用PIPT或VIPT架构来设计缓存系统,以规避VIVT架构的问题。

虚拟地址直接送到cache控制器,如果cache hit,直接从cache返回数据,否则就把虚拟地址发往MMU,转为物理地址,根据物理地址从主存读数据

PIPT架构cache

PIPT (Physical Index Physical Tag) 是一种缓存架构设计,同时使用物理地址的索引和标记部分进行缓存操作。

PIPT架构的工作原理

  1. CPU发出的虚拟地址经过MMU转换成物理地址
  2. 物理地址发往cache控制器查找确认是否命中
  3. 如果命中,则从缓存返回数据
  4. 如果未命中,则从主存中读取数据并更新缓存

PIPT架构的优势

  • 物理地址是唯一的:不会产生歧义和别名两个问题
  • 一致性管理简单:因为缓存行与物理地址直接对应
  • 多核处理器友好:简化了多核系统中的缓存一致性协议

PIPT架构的缺点

  • 访问延迟增加:不管是否cache命中,都会经过TLB转换地址
  • 流水线加深:TLB查询成为关键路径的一部分
  • 分支预测惩罚增大:延迟可能影响分支预测性能
  • load指令延迟增加:影响整体系统性能

VIPT架构cache

VIPT (Virtual Index Physical Tag) 是一种混合缓存架构设计,结合了虚拟索引和物理标记的优点。

VIPT架构的工作原理

  1. 使用虚拟地址的索引位查找cache(不需等待地址转换)
  2. 同时将虚拟地址发送到MMU转换成物理地址
  3. 当MMU转换完成,同时cache控制器也查找完成
  4. 比较cache line对应的物理tag和转换后物理地址的tag域,判断是否命中

VIPT架构的优势

  • 并行操作:地址转换与缓存查找同时进行,减少延迟
  • 物理tag唯一:避免了VIVT架构中的歧义问题
  • 速度接近VIVT:在命中情况下性能接近VIVT
  • 一致性管理简化:相比VIVT架构更容易维护缓存一致性

VIPT架构的限制

  • 直接映射缓存大小限制:直接缓存映射不能大于页面大小,否则会出现别名问题
  • 相联度要求:为支持更大的缓存需要增加相联度
  • 硬件复杂度增加:比VIVT略复杂,需要精心设计
  • 仍可能存在别名问题:在某些特定情况下需要额外处理

VIPT中的别名问题解决方案

  1. 限制缓存大小:确保每个缓存索引集的大小不超过页面大小
  2. 增加相联度:通过提高缓存的相联度来支持更大的缓存
  3. 使用页着色(Page Coloring):操作系统可以通过页着色技术避免别名问题
  4. 硬件别名检测:某些处理器实现了硬件机制来检测和处理潜在的别名