首页 > 其他分享 >Cache - 虚拟地址 or 物理地址

Cache - 虚拟地址 or 物理地址

时间:2023-06-10 10:22:28浏览次数:46  
标签:cache 主存 Cache 虚拟地址 物理地址 进程 数据


  • Cache使用地址判断是否命中,地址使用的是物理地址还是虚拟地址呢?

1. VIVT(Virtually Indexed Virtually Tagged)

  • 虚拟高速缓存:以虚拟地址作为查找对象。
  • 首先虚拟地址给cache,如果命中,则返回数据给cpu,如果未命中,则将虚拟地址通过MMU转化为物理地址,根据物理地址从主存中读取数据。
  • 优点
    • 不需要在查找cache过程将虚拟地址翻译成物理地址,节省了MMU转换的时间,提高访问cache的访问速度。
  • 缺点
    • 引入软件使用上的问题,歧义(ambiguity)和别名(alias)。

2. 歧义

  • 歧义是指数据在cache中有相同的tag和index。
  • 发生情况:不同进程,相同的虚拟地址映射不同的物理地址。
    • 可能出现A进程地址a映射的数据为b,而B进程地址a映射的数据为c,当A进程运行时,访问地址a会将数据b加载到cache上,而进程B运行时,访问地址a时命中了并将数据b返回给CPU,但是实际上B进程应该把数据c给CPU。
  • 解决方法:切换进程,flush cache,主要有两种。
    • 使主存储器有效:首先将主存置为有效,将cacheline上已经修改的数据写回主存上,避免修改的数据丢失。
    • 使高速缓存无效:首先将cacheline都置为无效,保证切换时不会有进程误命中上一进程的数据。
  • 所以对于VIVT来说,每次进程切换时,都可能出现大量的cache缺失,且只要切换进程就需要flush cache,导致性能的缺失。

3. 别名

  • 发生情况:不同虚拟地址映射到相同物理地址。
    • 可能出现物理地址A对应的虚拟地址为B和C,index值B<C,那么当程序想要修改物理地址A对应的数据时,采用写回策略,对B进行修改,且修改的值没有同步到主存中,当程序想要访问虚拟地址C时,命中,但是取出的数据是未修改的。
  • 解决方法
    • (1)采用nocache映射,不通过cache映射,CPU直接去主存读写数据。既适用于不同进程共享数据也适用于相同进程共享数据。
    • (2)不同进程共享数据,可以选择在进程切换时,flush cache,(主要因为存在一个向主存写数据的过程)。
    • (3)同一进程共享数据,

4. PIPT(Physically Indexed Physically Tagged)

  • 物理高速缓存:为了解决VIVT歧义和别名的问题,tag和index都取自物理地址,对于物理地址来说tag和index都是唯一的。
  • 实现过程
    • CPU发出的虚拟地址首先经过MMU转化为物理地址,给到cache控制器观察是否命中。如果未命中,将去主存中根据物理地址取出数据。
  • 缺点
    • 硬件设计较VIVT要复杂很多,需要等待MMU转换之后才可以查cache。
    • 为了加快MMU转换速度,硬件上也会加一块TLB,虚拟地址和物理地址转换可以这篇博客
    • 很多CPU都使用PIPT高速缓存。

5. VIPT(Virtually Indexed Physically Tagged)

  • 物理标记的虚拟高速缓存:

标签:cache,主存,Cache,虚拟地址,物理地址,进程,数据
From: https://www.cnblogs.com/qianbinbin/p/17470849.html

相关文章

  • Cache - 直接映射缓存
    参考https://zhuanlan.zhihu.com/p/1022934371.Cachelinecachesize:cache可以缓存最大数据的大小。将cache均分相等的块,每一块称为cacheline,现在的硬件设计中,一般cacheline的大小为4-128字节,cacheline做的太小会导致tag资源占用过大。cacheline是cache和主存......
  • Memcache升级版:CouchBase的安装配置与使用说明
    Memcache基本上已经是开发的标配了,但是对于Memcache集群,很多线上部署仍然是很单薄的。几个存在的问题:不健壮、数据不安全、配置变更可能导致存取异常、后备数据的一致性鉴于存在以上问题,Memcache的开发团队开发了Membase,支持多台服务器集群,数据的切片和复制,有效的提高了服务稳定性......
  • 【缓存】J2Cache —— 基于内存和 Redis 的两级 Java 缓存框架的使用方法
    本文目录一、J2Cache简介二、数据读取三、使用方法及实际示例3.1引用Maven3.2准备配置3.3编写代码3.3.1Demo示例3.3.2实际案例四、常见问题4.1J2Cache的使用场景是什么?4.2为什么不能在程序中设置缓存的有效期4.3如何使用memcached作为二级缓存4.4使用何种Redis的存......
  • 深入浅出Spring原理及实战「缓存Cache开发系列」
    1.  缓存Cache的概念和作用在现代软件开发中,缓存已经成为了一个非常重要的概念。缓存是指将数据存储在一个临时的存储器中,以便于快速访问和读取。缓存的作用是提高系统的性能和响应速度,减少网络流量和数据库的负载。以电影院购票为例,当用户选择一部电影时,系统需要查询电影的......
  • 关于 Cache
    参考https://zhuanlan.zhihu.com/p/1022934371.为什么需要Cache运行一个进程的步骤(假设为一个变量a加1)首先从磁盘(辅存)中读出可执行程序,并将其load到主存储器中。CPU从主存储器中读出地址为A的数据发到CPU的通用寄存器中。将通用寄存器的值加1.CPU再将通用寄存器的......
  • Using Redis Cache for session data storage in ASP.NET Core
    reference: https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed?view=aspnetcore-6.0Postedon:11-12-2017TweetWhenyourunanappindevelopmentortesting,itcanbeokayforsessiondatatobelostduringapprestarts.However,in......
  • libmemcached API介绍
    有关memcached的C语言接口——libmemcached的介绍:详情参见:http://docs.libmemcached.org/index.html  1.       创建和删除memcached_st结构。#include<libmemcached/memcached.h>memcachd_st ;该结构可以静态创建也可以由memcached_create动态创建。memc......
  • springMVC集成缓存框架Ehcache
    概述Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力。接下来我们看怎么把缓存在springmvc种使用起来。详细Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问......
  • icache的dcache区别
    iCache是指指令缓存,DCache是指数据缓存。iCache是专门用于存储指令的高速缓存,DCache是用于存储数据的高速缓存。iCache用于存储指令,在CPU执行时将指令从iCache中读取,以提高指令执行的速度;DCache则用于存储数据,如变量、数组等,以避免频繁从内存中读取数据,提高程序执行效率。iCache和......
  • SpringCache的引入
    SpringCache是Spring提供的一套的缓存解决方案,它不是具体的缓存实现,提供了一整套的配置、接口、注解等规范,用来整合当下流行的多种缓存产品。SpringCache的引入点击查看代码<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-s......