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. linux下创建和删除软、硬链接

    linux下创建和删除软.硬链接 在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号.文件属性保存在索引结点里,在访问文件时,索引结点被复制 ...

  2. lua5.2版本在VS2010下的环境搭建

    第一次使用脚本语言,第一次使用解释性语言 公司的现在维护的游戏开发的比较早,采用的lua还是比较早的版本,像NPC脚本系统就是使用lua+luabind结合的module模式,服务器端没涉及到,所以不 ...

  3. 【IOS笔记】About Events in iOS

    About Events in iOS Users manipulate their iOS devices in a number of ways, such as touching the scr ...

  4. Bootstrap页面布局8 - BS常用标签与样式

    常用的Css文字标签 一. <p>文字段落Start,<strong>重要的文字</strong>,<em>倾斜的文字用来提示</em>,& ...

  5. python函数参数

    1.位置参数 2.默认参数 指向参数为不可变对象 3.可变参数 **args    一个列表list或是元组tuple 4.关键字参数 **kw,是一个字典dict 5.命名关键字参数 *,

  6. but this usually doesn’t gain you anything.

    High Performance My SQL, Third Edition Date and Time Types My SQL has many types for various kinds o ...

  7. Java管道流

    管道流的主要作用可以用于两个线程之间的通信,有管道输出流 PipeOutputStream和管道输入流 PipeInputStream.然后通过connect将两个管道连接起来. import jav ...

  8. Peeking into Apache Flink's Engine Room

    http://flink.apache.org/news/2015/03/13/peeking-into-Apache-Flinks-Engine-Room.html   Join Processin ...

  9. 二 mybatis 动态sql

    动态sql应用  一 .什么是动态sql 1.where条件  动态查询 根据姓名或年龄或地址查询 UserMapper.xml 1 <select id="findUser" ...

  10. 【转】Laravel+Angularjs+D3打造可视化数据,RESTful+Ajax

    http://897371388.iteye.com/blog/1975351 大致思路也就是下面,由于最近在学Laravel也在学Angularjs,加上之前做的项目用到了d3. 原来的方案如下: ...