综述

现在的CPU的速度远远高于现代存储器的速度所以出现了cache。按和CPU距离分为L1级和L2级(SM)等。这里主要记录一下自己对cache的工作方式的学习理解。

cache工作方式

cahe是对内存数据的缓存从而加快CPU对数据的访问,那么前提肯定是之前从内存中读取过数据才会有缓存一说。那么该如何保证下次对同一块内存的访问时可以找到cache中的缓存呢?这就是cache的做工原理核心。先抛开cache的后续优化版本,从最简单的实现方式理解学习。最简单的就是使用 地址信息+data的key-val的方式来进行缓存就能按地址招待数据缓存这就是cache-line。那么这里data数据是多少byte合适呢?这取决于实现以最常见的32byte的大小来理解,在此此种情况下cache-line中的地址信息就不用记录最低的5bit从而简化设计;直接使用地址的低5bit来作为单缓存行行内的字节寻址,这就是cache映射的基本原理。根据这个原理cache的的映射分为如下几种。

cache映射方式分类

  1. 全关联

    这个不清楚。

  2. 直接映射

    直接映射就是上面原理介绍的方式,cache是一个单列的cache-line表如下图示意,而因为cache远小于内存所以cache仅能映射部分内存区域所以一个时间段他映射了内存的不同地址空间且是线性的映射,所以有可能发生“颠簸”。原因是假如有cache总共有四条缓存行,而地址0x*08都会映射到同一行,程序刚好要循环访问0x****10800和0x****20800这两个地址则就会出现cache被循环的换入换出,这里的08就是cache的index的概念。所以后来优化有了如下的方式来解决这个问题。

  3. 组相连

    直接映射他的缺点就是在有些情况下会导致cache的“颠簸”。所以后来就想到了让同一个index的缓存行对应到两个缓存行上就形成了cache的组的概念,即index相同的cache称为一个组(set),这样一个index就会对应到组宽度n个cache-line,如果n为2则前面颠簸换出的概念就是原来的1/n即0.5这就是组映射。既然同一个index对应到不止一个cacae-line所以就会加上TAG的概念来区分同一个组的cache-line。组映射这里最后还有一个概念就是way,他就是一个cache所能映射的index区域,即如果index有5bit则一个way就是五个cache-line如下示意图所示的:

这样就是现代cache的缓存映射使用的策略,后续在介绍更加细节的内容。

cache 按组织方式分类

  1. VIPT 虚拟索引物理TAG

    使用虚拟地址的一部分作为索引物理地址一部分作为TAG标记;算是VIVT的优化,页表切换了不需要整个cache无效,实现相对PIPT简单。
  2. VIVT 虚拟索引虚拟TAG

    使用虚拟地址的一部分作为索引一部分作为TAG标记;存在物理地址重名,即多个虚拟地址缓存了同一块物理内存,而且在切换页表后需要cache整个无效。
  3. PIPT 物理索引物理TAG

    使用物理地址的一部分作为索引一部分作为TAG标记,芯片设计实现起来复杂。

最早是全部使用虚拟地址作为index和tag的,但是因为存在多个虚拟地址映射到同一个物理地址的情况所以会造成cache的别名(浪费)且在多任务发生任务切换时的清空cache。所以后来优化使用了虚拟地址作为index物理地址作为TAG就能有效解决前面的问题,但是VIPT的还是会有cache别名的问题,所以后来又优化出了PIPT即全部使用物理地址从而彻底避免别名但是这种方式的最大问题就是硬件电路实现复杂。

ARM cache 工作方式的更多相关文章

  1. LVS三种工作方式八种算法

    一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算 ...

  2. LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法)

    一.集群简介 什么是集群 计算机集群简称集群是一种计算机系统,它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一 台计算机.集群系统中的单个计 ...

  3. Linux系统的Cache工作原理和管理机制

    Linux系统Cache 管理是 Linux 内核中一个很重要并且较难理解的组成部分.本文详细介绍了 Linux 内核中文件 Cache 管理的各个方面,希望能够帮助到你. 操作系统和文件 Cache ...

  4. LVS原理详解(3种工作方式8种调度算法)--老男孩

    一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...

  5. Arm Cache学习总结

    cache,高速缓存,其原始意义是指访问速度比一般随机存取内存(RAM)快的一种RAM,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术. 1.cache映射方式 cache中 ...

  6. 合理设置apache的连接数及进程工作方式

    网站在线人数增多,访问时很慢.初步认为是服务器资源不足了,但经反复测试,一旦连接上,不断点击同一个页面上不同的链接,都能迅速打开,这种现象就是说明apache最大连接数已经满了,新的访客只能排队等待有 ...

  7. ARM的堆栈方式

    当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(Full Stack): 当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(Empty Stack): 根据对战的生成方式分为:递增堆栈(Asce ...

  8. 浏览器渲染基本原理(二):JS引擎的工作方式

    JS引擎也可以叫做JS解释器 浏览器的组成 浏览器的核心是两部分:渲染引擎和JavaScript解释器(又称JavaScript引擎). (1)渲染引擎 渲染引擎的主要作用是,将网页从代码“渲染”为用 ...

  9. dicom通讯的工作方式及dicom标准简介

    本文主要讲述dicom标准及dicom通讯的工作方式.dicom全称医学数字图像与通讯 其实嘛就两个方面 那就是“存储”跟“通讯”. 文件数据组织方式  网络数据组织方式.文件数据组织方式就是解析静态 ...

随机推荐

  1. 十九、更改LCD显示屏

    一.裸机修改 之前测试用的屏幕是480*272的分辨率,现在要换成800*480的屏,因此要对软件代码进行修改. 对于裸机驱动而言,主要有两个点需要注意,一个是屏幕分辨率变了,因此初始化的时候与屏幕分 ...

  2. Windows 2008server部署pxe启动安装windows系统

    前期准备: 需安装的角色有:AD域-DHCP服务器-DNS服务器-Windows部署服务,我是将这几个服务都安装在一台vps上,C盘50G,D盘100G 安装好后角色会列出所安装的服务,如下图: 1. ...

  3. linux--关于JVM CPU资源占用过高的问题排查

    一.背景: 先执行一个java程序里面开了两个线程分别都在while循环做打印操作. # java -cp ./test-threads.jar com.spiro.Main 二.现象: 通过top命 ...

  4. (转载)微软数据挖掘算法:Microsoft 线性回归分析算法(11)

    前言 此篇为微软系列挖掘算法的最后一篇了,完整该篇之后,微软在商业智能这块提供的一系列挖掘算法我们就算总结完成了,在此系列中涵盖了微软在商业智能(BI)模块系统所能提供的所有挖掘算法,当然此框架完全可 ...

  5. Defining Go Modules

    research!rsc: Go & Versioning https://research.swtch.com/vgo shawn@a:~/gokit/tmp$ go get --helpu ...

  6. ASP.NET Core 5.0 MVC中的视图分类——布局视图、启动视图、具体视图、分部视图

    一.创建MVC应用程序 创建后的项目 二.(全局性)启动视图 _ViewStart.cshtml 顾名思义,就是在View开始执行之前执行,而且是每一个View, 它的预设内容是 @{ Layout ...

  7. 五种C语言非数值计算的常用经典排序算法

    摘要:排序是计算机的一种操作方法,其目的是将一组"无序"的记录序列调整为"有序"的记录序列,主要分为内部排序和外部排序. 排序 排序是计算机的一种操作方法,其目 ...

  8. 一:优化Docker中的Spring Boot应用:单层镜像方法

    优化Docker中的Spring Boot应用:单层镜像方法 1.Docker关键概念 2.镜像层内容很重要 3.镜像层影响部署 4.Docker中的Spring Boot应用 5.单层方法 5.1 ...

  9. MVC架构 项目实践

    MVC MVC架构程序的工作流程 springmvc 中dao层和service层的区别 项目实践 项目目录 项目实现流程 JSP登录页面View层 LoginServletjavaControlle ...

  10. SpringBoot启动方式,Spring Boot 定义系统启动任务

    SpringBoot启动方式,Spring Boot 定义系统启动任务 SpringBoot启动方式 1.1 方法一 1.2 方法二 1.2.1 start.sh 1.2.2 stop.sh 1.2. ...