ARM的CACHE原理(转)
对大量典型程序运行情况的分析结果表明,在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连 续的,再加上循环程序段和子程序段要重复执行多次。
Cache的工作原理是基于程序访问的局部性。 Cache的基本结构 DCACHE ARM cache架构由cache存储器和写缓冲器(write-buffer)组成,其中写缓冲器是CACHE按照FIFO原则向主存写的缓冲处理器。 一般来说CACHEABILITY和BUFFERABILITY都是可以配置的,所以,一块存储区域可以配置成下面4种方式:NCNB CNB NCB CB。 在实际应用当中,可以根据需要对主存进行配置。对I/O MAP来说,一般都需要采用NCNB方式,以保证对I/O的正确操作。而其他的存储区域一般都可以配置成CB方式,以获取最好的性能。 引入CACHE和WRITE BUFFER是为了提高存储访问的 速度,提供系统性能。如果CACHE打开的话,CPU读写主存的时候,都是通 DCaches使用的是虚拟地址,它的大小是16KB,它被分成512行(entry),每行8个字(8 words,32Bits)。每行有两个修改标志位(dirty bits),第一个标志位标识前4个字,第二个标志位标识后4个字,同时每行中还有一个TAG 地址(标签地址)和一个valid bit。 从上面的表格中我们可以清楚的知道系统什么时候使用的是DCaches,什么时候使用的是Write Buffer,我们也可以看到DCaches的写回方式是怎么决定的(write-back or write-througth)。 情况1(Ctt =0, Ccr=0):这种情况下CPU的DCaches功能是关闭的(Ccr=0),所以CPU存取数据的时候不会从DCaches里进行数据地查询,CPU直接去内存存取数据。 ICACHE 当系统上电或重起(Reset)的时候,ICaches功能是被关闭的,我们必须往lcr bit置1去开启它,lcr bit在CP15协处理器中控制寄存器1的第12位(关闭ICaches功能则是往该位置0)。ICaches功能一般是在MMU开启之后被使用的(为了 降低MMU查表带来的开销),但有一点需要注意,并不是说MMU被开启了ICaches才会被开启,正如本段刚开始讲的,ICaches的开启与关闭是由 lcr bit所决定的,无论MMU是否被开启,只要lcr bit被置1了,ICaches就会发挥它的作用。 大家是否还记得discriptor(描述符)中有一个C bit我们称之为Ctt,它是指明该描述符描述的内存区域内的内容(可以是指令也可以是数据)是否可以被Cache,若Ctt=1,则允许Cache,否 则不允许被Cache。于是CPU读取指令出现了下面这些情况: 如果CPU从Caches中读取到所要的一条指令(cache hit)且这条指令所在的内存区域是Cacheble的(该区域所属描述符中Ctt=1),则CPU执行这条指令并从Caches中返回(不需要从内存中读取)。 通过以上的说明,我们可以了解到CPU是怎么通过ICaches执行指令的。你可能会有这个疑问,ICaches总共只有512个条目(entry),当 512个条目都被填充完之后,CPU要把新读取近来的指令放到哪个条目上呢?答案是CPU会把新读取近来的8个word从512个条目中选择一个对其进行 写入,那CPU是怎么选出一个条目来的呢?这就关系到ICaches的替换法则(replacemnet algorithm)了。 ICaches的replacemnet algorithm有两种,一种是Random模式另一种Round-Robin模式,我们可以通过CP15协处理器中寄存器1的RR bit对其进行指定(0 = Random replacement 1 = Round robin replacement),如果有需要你还可以进行指令锁定(INSTRUCTION CACHE LOCKDOWN)。 虚拟cache Cache 位于MMU前面靠近CPU称为逻辑CACHE又叫虚拟Cache。CPU可以直接访问CACHE的数据,而ARM 11(ARMV6)的结构是CACHE 在MMU后面CPU访问CACHE要通过MMU地址转换 在DM6446的core用的是哈佛结构,即把CACHE分为8K的D-CACHE(数据CACHE)和16K的I-cache(指令CACHE) 一个完整的CACHE分为CACHE控制器和CACHE存储器 例子 Davinci DM6446 D-cache行应为512行 ,cache存储器主要分为三个部分:目录存储段(driectory-story),状态信息段(status information)和数据项段(data section)每一行cache都包括这三部分。Cache用目录存储段来存储主存的地址,数据项段存放的是主存的数据,在cache中用状态信息段来 记录状态信息,其中v表示有效位,d表示脏位,有效位记录当前cache行是活动的,cache行的数据和主存中的数据是一致的,处理器可以读取。脏位则 表示cache行的数据和主存中的数据不一致。 在读写请求到达存储器前会被CACHE捕获,cache存储器将该请求分成三部分标签,组索引和数据索引域,cache通过组索引域确定可能包含地 址和数据cache的行,cache存储器检查匹配的CACHE 行的状态标签,如果是V表示(cache hit)命中,否则cache失效(cache miss)在cache失效时从主存吧cache行考到CACHE存储器 主存中的部分内容存放在cache中的最简单方式是直接映射,在一个直接映射中,主存的地址唯一对应cache行,因为主存容量很大所以主存的很多地址映射到同一个cache行 见下图: 在DM6446 中内存为128M (bootargs 设为128M)8K的D-CACHE则128×1024/8 = 16384映射一个cache行。由于cache的速度大大大于低速的主存速度,因此需要写缓冲器。 Cache与DRAM存取的一致性 在CPU与主存之间增加了Cache之后,便存在数据在CPU和Cache及主存之间如何存取的问题。读写各有2种方式。 贯穿读出式(Look Through) 该方式将Cache隔在CPU与主存之间,CPU对主存的所有数据请求都首先送到Cache,由Cache自行在自身查找。如果命中,则切断CPU对主存的请求,并将数据送出;不命中,则将数据请求传给主存。 写穿式(Write Through) 任一从CPU发出的写信号送到Cache的同时,也写入主存,以保证主存的数据能同步地更新。 它的优点是操作简单,但由于主存的慢速,降低了系统的写速度并占用了总线的时间。 回写式(Copy Back) 为了克服贯穿式中每次数据写入时都要访问主存,从而导致系统写速度降低并占用总线时间的弊病,尽量减少对主存的访问次数,又有了回写式。 它是这样工作的:数据一般只写到Cache,这样有可能出现Cache中的数据得到更新而主存中的数据不变(数据陈旧)的情况。但此时可在Cache 中设一标志地址及数据陈旧的信息,只有当Cache中的数据被再次更改时,才将原更新的数据写入主存相应的单元中,然后再接受再次更新的数据。这样保证了 Cache和主存中的数据不致产生冲突。 ARM cache 策略 Cache的写策略分为直写策略和回写策略。同时向cache行和相应的主存位置写数据,同时更新这两个地方的数据的方法称为直写策略 (writethrough),把数据写入cache行,不写入主存的或者只有当cache被替换时或清理cache行时才写入主存的策略称为回写策略 (writeback)。采用回写策略时,当处理器cache命中,只向cache存储器写数据,不写入主存,主存里的数据就和cache里不一 致,cache里的数据是最新的,主存里的数据是早前的。这就用cache存储器信息状态标志位了,当向cache存储器里某行写数据时,置相应行的信息 标志脏位为1,那么主控制器下次访问cache存储器就知道cache里有主存没有的数据了,把数据写回到主存中去。 当一个cache访问失效时,cache控制器必须从当前有效行中取出一个cache行存储从主存中取到的信息,被选中替换的cache行称为丢弃者,如 果这个cache行中脏位为1则应把该cache行中的数据回写到主存中,而替换策略决定了那个cache行会被替换,在arm926ejs中ARM支持 两种策略:轮转策略和伪随机策略。轮转策略就是取当前cache行的下一行,伪随机策略是控制器随机产生一个值。 当cache失效时,ARM采取两种方式分配cache行,一种是读操作(read-allocate)还有一种是读-写分配策略(read- write-allocate),当cache未命中时对于读操作策略,在对cache存储器读操作时才会分配cache行 全相联Cache 在全相联Cache中,存储的块与块之间,以及存储顺序或保存的存储器地址之间没有直接的关系。程序可以访问很多的子程序、堆栈和段,而它们是位于主存储器的不同部位上。 因此,Cache保存着很多互不相关的数据块,Cache必须对每个块和块自身的地址加以存储。当请求数据时,Cache控制器要把请求地址同所有地址加以比较,进行确认。 这种Cache结构的主要优点是,它能够在给定的时间内去存储主存器中的不同的块,命中率高;缺点是每一次请求数据同Cache中的地址进行比较需要相当的时间,速度较慢。 直接映像Cache 直接映像Cache不同于全相联Cache,地址仅需比较一次。 |
ARM的CACHE原理(转)相关推荐
- java memorycache原理_CPU Cache 原理及操作
CPU Cache原理 CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多.缓存的出现主要是为了解决CPU运算速度与内存 读写速 ...
- CPU Cache原理与示例
CPU Cache原理与示例 基础知识 现在的 CPU 多核技术,都会有几级缓存,老的 CPU 会有两级内存(L1 和 L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: 其中: ...
- ARM的cache和写缓冲器(write buffer)
转:https://blog.csdn.net/gameit/article/details/13169445?utm_medium=distribute.pc_relevant.none-task- ...
- ARM SMMU的原理与IOMMU[转载]
ARM SMMU的原理与IOMMU 首先放一个社区iommu patch的网址:https://lore.kernel.org/linux-iommu/ arm smmu的原理 smmu 基本知识 如 ...
- 基于ARM的微机原理-Cortex-M3处理器
基于ARM的微机原理-Cortex-M3处理器 Cortex-M3处理器由以下组件整合 处理器内核 嵌套向量中断控制器(NVIC) 存储器保护单元(MPU) 总线接口 低成本调试解决方案 工作模式和工 ...
- Cache原理简介及cache miss
Cache原理简介及cache miss CPU体系结构之cache小结 1.What is cache? Cache是用来对内存数据的缓存. CPU要访问的数据在Cache中有缓存,称为" ...
- ARM JTAG 调试原理
ARM JTAG 调试原理 JTAG的接口是一种特殊的4/5个接脚接口连到芯片上 ,所以在电路版上的很多芯片可以将他们的JTAG接脚 通过Daisy Chain的方式连在一起,并且Probe只需连接到 ...
- Guava 源码分析(Cache 原理)
作者:crossoverJie's Blog 来源:https://crossoverjie.top/2018/06/13/guava/guava-cache/ 前言 Google 出的 Guava ...
- 微型计算机工业控制技术,基于ARM的微机原理与接口技术(STM32嵌入式系统架构编程与应用嵌入式与工业控制技术高等学校电子信息类专业系列教材)...
导语 内容提要 本书首先介绍微型计算机的相关概念及嵌入式系统的应用,接着介绍Cortex M3微处理器架构及开发方法,介绍汇编语言及其程序设计.在开发应用方面,以STM32F103VET6为背景,介绍 ...
最新文章
- vc与matlab联合,浅析VC与Matlab联合编程(二) - VC知识库文章
- 高效职场人不得不懂的“脑”知识
- phpmyadmin 查看sql历史记录
- 太难了~面试官让我结合案例讲讲自己对Spring事务传播行为的理解!
- 混编ObjectiveC++
- linux下的nginx+php+mysql
- java8 快排_Java 8快多少?
- 2135亿!2018 双11阿里数据库技术战报新鲜出炉
- 十大经典排序算法动画与解析(配代码完全版)
- AjAx下拉列表框(SELECT)jquery插件
- 嵌入式linux驱动笔试,嵌入式Linux驱动工程师/BSP开发工程师面试笔试题集锦
- 大数据分析有哪些技巧
- 红外遥控NEC协议总结
- verilog实现格雷码与二进制码的互换
- linux7磁盘挂载大于16T,CentOS6.5挂载超过16T的大容量存储空间,格式化为xfs
- JAVA中盒子鱼与盒子的间隙,盒子鱼英语 - boxfish智能英语学习,全年龄段英语小班制...
- PHP个人逍遥商城系统源码 可商用版
- 小韩实操 -- Mysql数据库的备份与恢复及安全配置
- 隐马尔可夫--大内密探HMM围捕赌场老千
- 小时候跟妈妈去外婆的路为什么那么遥远,而今天我几分钟就走了一半--清明节回家记
热门文章
- 【Android 逆向】Frida 框架 ( 安装 frida 12.7.5 | 安装 frida-tools 5.1.0 | PC 端 frida 与 安卓模拟器端 frida-server )
- 【Binder 机制】Native 层 Binder 机制分析 ( binder_loop | svcmgr_handler | binder.c | binder_parse )
- 【Flutter】Animation 动画 ( AnimatedWidget 动画使用流程 | 创建动画控制器 | 创建动画 | 创建 AnimatedWidget 动画组件 | 动画运行 )
- 【Flutter】Flutter 拍照示例 ( 拍照并获取照片源码示例 | image_picker: ^0.5.2 版本 )
- 【组合数学】生成函数 ( 移位性质 )
- 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来
- [bzoj2815] [洛谷P2597] [ZJOI2012] 灾难
- python之markdown转html
- JSP/SERVLET(5)——JSP页面单选按钮操作
- 满有趣的屏幕快捷键;)