hugohong
hugohong
本版等级:

 
#2 得分:20回复于: 2009-04-19 21:51:03
牛人说的,拿出来分享一下:
cache是高速缓冲, 解决高速cpu和相对低速sdram的速度瓶颈而设计的, 也知道cache是SRAM, 这个SRAM不同于我们挂在51外部总线的SRAM, 那个sram速度可不快, 几十ns, 可能是制造工艺不同, cache速度很快,和cpu相当,要比sdram快很多, sdram最快也就133M就是75ns. L1是指片内cache, L2指片外cache. Arm920t的16k的指令cache和16k的数据cache就是L1了, 没有L2. Arm920t存储系统的L1除了Icache和Dchche外,包括write buffer和PA TAG RAM, 后面会说到.

Cache的原理其实也简单的, 打开cache后, cpu就不直接从主存(指sdram)读写了, 而是首先访问cache, 这样就不要插入很多等待周期来等sdram. Cpu为什么可以从cache中读写, 而不要访问sdram呢? 是根据一个叫做程序和数据的局限性, 即在一个较短时间内, 程序或者数据往往集中在很小的存储器地址范围内. cpu访问一个地址, cache自动将这个地址后面一块数据拷贝到cache中. 其实就是预测了, 这个预测可不是100%的.Cache中有cpu要的数据则命中, cache没有则访问主存,没有命中, cache越大, 命中率越高, cache大小等于sdram, 当然就100%了, 但是他们的关系不是线性的, cache大到一定程度后, 命中率改善就有限了, 有数据说, 当cache在256k的时候, 命中率有98%. 难怪一般pc机器的L2是这么大.

上面说的是读的情况, 对数据cache, cpu计算完毕还要写回sdram, 但Dcache的存在, 现在cpu只是写到cache里面了, 所以cache还需要把数据写回sdram, 何时写怎么写就是cache的写回策略了, 一共2种:write-back和write-through. 其实就是异步写回和同步写回的差别. 立刻写就是write-through, 即cpu更新cache同时更新sdram, 迫不得已时在写就是write-back.cpu更新cache, 但cache不立刻写回sdram, 在合适时候写,所以这里引入一个write buffer.cache先把更新的数据缓存到write buffer.这个最多只能buffer 16个words和4个独立地址.什么是合适的时候write-back? 只是在cache数据被修改,并且cache满了, 再加上个条件, 替代算法后要求自己滚出cache, 这时候得写回sdram. 明显的, write-through设计比较容易, 但效率比较差, write-back设计复杂, 要是用了一个新的Soc,没有大量测试的, 这个可能有机会出错…得谨慎.

Cache大小有限, 总会写满, 写满了怎么办? 所以引入替代算法, 新的记录替换旧的记录. Arm920t默认的是随机替代算法, 设置cp15的寄存器RR位为1可以选择round-robin算法.指令也可以锁定在cache不被替代, 那么就要进行锁操作.锁定操作的粒度是256个字节.就是说一次锁这么多字节.

[cache的组织结构和寻址]

已经知道arm920t的Cache是16k, 这16k是怎么组织的? 它分成了8个段(Segment), 每个段又分成64个行(lines), 每个行是32个字节, 或者说是8个word. 1个word等于4个字节.所以16k=8 Seg * 64 line * 32bytes. 从arm920技术手册截张图如下:

所以, cache的寻址也比较简单.

对于wince,高2G的地址空间里面, 0x80000000-0x9FFFFFFF和0xA0000000-0xBFFFFFFF都是映射到相同的地方:内存和soc的寄存器地址,(arm是这样的, i/o都被映射成为存储器操作了).区别是前一个是cache的, 后一个是uncache的.通过对cache的理解, 这就很容易明白为什么驱动里面设置soc寄存器总是使用uncache的地址了.再说细点啊, 究竟为啥子不能用cache的? Ok,cache有这些特性, 对同一目标单元连续读取操作将得到相同的结果. 比如你的按键io,要是使用cache地址, 我想, 无论你怎么按, cpu都是从cache读到相同的值了.呜呼~.还有个特性, 对同一地址连续写只是把后一次写操作的值写入, 第一次的没有意义. 再加上write buffer的存在, 只在必定条件下才写, 呜呼~ ,这个更惨~

 

摘自  http://bbs.csdn.net/topics/300207716

cache与SDRAM的更多相关文章

  1. 思科ACS的性能总结

    ACS Performance & Scale 思科ACS目前还能支持的可能就是ACS5.8版本了,该版本也将于2020年停止支持,关于ACS信息会逐步退出大家的视野.该文档是Cisco论坛t ...

  2. SDRAM的主要参数

    (1) 容量.SDRAM的容量经常用XX存储单元×X体×每个存储单元的位数来表示.例如某SDRAM芯片的容量为4M×4×8bit,表明该存储器芯片的容量为16 M字节.或128 M bit. (2) ...

  3. 关于CPU Cache -- 程序员需要知道的那些事

    本文将介绍一些作为程序猿或者IT从业者应该知道的CPU Cache相关的知识.本章从"为什么会有CPU Cache","CPU Cache的大致设计架构",&q ...

  4. SDRAM,DRAM,SRAM,DDR的概念

    一:SDRAM SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输 ...

  5. RAM,SRAM,DRAM,SDRAM,DDR RAM,ROM,PROM,EPROM,EEPROM,NAND FLASH,NOR FLASH的区别

    RAM:由字面意思就可以理解,SDRAM SRAM DRAM(下面蓝色字体的这几种)都可以统称RAM,random access memory(随机存取存储器)的缩写,下面是51hei.com为大家整 ...

  6. DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)

    转自:http://www.360doc.com/content/14/0116/16/15528092_345730642.shtml 以及参考网络. 首先,我们先了解一下内存的大体结构工作流程,这 ...

  7. 关于CPU Cache:程序猿需要知道的那些

    天下没有免费的午餐,本文转载于:http://cenalulu.github.io/linux/all-about-cpu-cache/ 先来看一张本文所有概念的一个思维导图: 为什么要有CPU Ca ...

  8. mini2440的SDRAM分析

    首先是2440的存储控制器: 暂时不管是从nand启动还是nor启动,因为我现在只关注内存,从上图可以看到由2440的Memory Controller可以寻址的范围是0x0000,0000---0x ...

  9. [ZZ] Cache

    http://blog.sina.com.cn/s/blog_6472c4cc0102duzr.html 处理器微架构访问Cache的方法与访问主存储器有类似之处.主存储器使用地址编码方式,微架构可以 ...

随机推荐

  1. Google Chrome can not be run as root

    Ubuntu运行Chrome出现"Google Chrome can not be run as root"的解决方法 编辑启动文件:/opt/google/chrome/goog ...

  2. QT学习之-HelloWorld

    实现HelloWorld有2种方法. 第一种在mainwindow.ui直接添加Label且写上“HelloWorld”. 第二种是代码直接实现 #include "mainwindow.h ...

  3. javascript Math.pow 函数 详解

    语法 Math.pow(x,y) 定义和用法 pow() 方法可返回 x 的 y 次幂的值. 处理简单数学问题 6的4次方等于1296,记作:64=1296; 求值: Math.pow(6,4)=12 ...

  4. ArcGIS Server发布服务,报错00032

    错误00032 独立表数据源无法访问 00032: 修复已断开的数据连接,具体做法是将每个独立表的数据源都设置为正确的位置. 或者,如果不需要该表,将其从文档中移除. 建议在ArcMap中重新加载数据 ...

  5. maven--composer---setting.xml(updatepolicy)---mvn install , mvn deploy

    场景:最近再整系统的自动部署流程,由于公司的jar包在svn以及mvn的仓库上都存在,开发人员在开发的过程中都依赖mvn仓库中的Jar 包,在jar上线的时候,配置管理人员把jar 从svn管理的工作 ...

  6. nginx博客系统(内含nginx图片缩略图处理代码,不错)

    一直以来都在Qzone.CSDN等上面写博客,偶尔有些想法就在Paas平台上搭建服务,新浪和曾经的google上都用过其appengine.可是在别人的平台上写东西,总归有些不方便,有受制于人的感觉. ...

  7. 利用VS编译libiconv库

    参考文章:http://blog.csdn.net/ghevinn/article/details/9834119 关于中文字符编码问题,这篇文章里面讲的很详细-->http://www.tui ...

  8. [LeetCode]题解(python):064-Minimum Path Sum

    题目来源 https://leetcode.com/problems/minimum-path-sum/ Given a m x n grid filled with non-negative num ...

  9. Shell Script-读取配置文件

    需求 有时候在shell script里面需要一些执行,如果放在程序里面不便于统一管理,并且每一次修改路径都要去script里面改好麻烦,所以统一把路径放在配置文件中方便管理. 问题 如何读取相对应的 ...

  10. asp:gridview 中显示日期格式

    boundfield中应该这样设置: <asp:BoundField HeaderText="发表时间" DataField="PostTime" Htm ...