cache与SDRAM

- hugohong
- hugohong
- 本版等级:
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的存在, 只在必定条件下才写, 呜呼~ ,这个更惨~
cache与SDRAM的更多相关文章
- 思科ACS的性能总结
ACS Performance & Scale 思科ACS目前还能支持的可能就是ACS5.8版本了,该版本也将于2020年停止支持,关于ACS信息会逐步退出大家的视野.该文档是Cisco论坛t ...
- SDRAM的主要参数
(1) 容量.SDRAM的容量经常用XX存储单元×X体×每个存储单元的位数来表示.例如某SDRAM芯片的容量为4M×4×8bit,表明该存储器芯片的容量为16 M字节.或128 M bit. (2) ...
- 关于CPU Cache -- 程序员需要知道的那些事
本文将介绍一些作为程序猿或者IT从业者应该知道的CPU Cache相关的知识.本章从"为什么会有CPU Cache","CPU Cache的大致设计架构",&q ...
- SDRAM,DRAM,SRAM,DDR的概念
一:SDRAM SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输 ...
- RAM,SRAM,DRAM,SDRAM,DDR RAM,ROM,PROM,EPROM,EEPROM,NAND FLASH,NOR FLASH的区别
RAM:由字面意思就可以理解,SDRAM SRAM DRAM(下面蓝色字体的这几种)都可以统称RAM,random access memory(随机存取存储器)的缩写,下面是51hei.com为大家整 ...
- DDR3详解(以Micron MT41J128M8 1Gb DDR3 SDRAM为例)
转自:http://www.360doc.com/content/14/0116/16/15528092_345730642.shtml 以及参考网络. 首先,我们先了解一下内存的大体结构工作流程,这 ...
- 关于CPU Cache:程序猿需要知道的那些
天下没有免费的午餐,本文转载于:http://cenalulu.github.io/linux/all-about-cpu-cache/ 先来看一张本文所有概念的一个思维导图: 为什么要有CPU Ca ...
- mini2440的SDRAM分析
首先是2440的存储控制器: 暂时不管是从nand启动还是nor启动,因为我现在只关注内存,从上图可以看到由2440的Memory Controller可以寻址的范围是0x0000,0000---0x ...
- [ZZ] Cache
http://blog.sina.com.cn/s/blog_6472c4cc0102duzr.html 处理器微架构访问Cache的方法与访问主存储器有类似之处.主存储器使用地址编码方式,微架构可以 ...
随机推荐
- 类型强转(type cast)
类型转换有 c 风格的,当然还有 c++风格的.c 风格的转换的格式很简单(TYPEEXPRESSION),但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合适的, 因为它可以在任 ...
- by maintaining a log containing a record of each transaction’s activities - The Commit/Rollback Protocol
Computer Science An Overview _J. Glenn Brookshear _11th Edition Before a transaction is allowed to a ...
- (转)面试题--JAVA中静态块、静态变量加载顺序详解
public class Test { //1.第一步,准备加载类 public static void main(String[] args) { new Test(); //4.第四步,new一个 ...
- CSS子元素margin-top对于父元素的影响
父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. html代码如下 <styl ...
- Groovy 在eclipse中的使用
今天在写Groovy脚本的时候发现一个问题.如下图,element的elementIterator()方法不能智能显示,只能手动输入.而在eclipse中如果类a没有方法a,那么你是用"cl ...
- JS使用ActiveXObject读取数据库代码示例(只支持IE)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Block的简单使用
代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数,并得到返回值. 代码块本质上是变量,只不过它存储的数据是一个函数体,因此名字 ...
- JSON数据转换为字典型
-(NSDictionary *)parseJSONStringToNSDictionary:(NSString *)JSONString { NSData *JSONData = [JSONS ...
- php比较加赋值语句
$a=-2;if ($a < 0 && $a = 1) { echo $a;} 输出1 右面的$a=1可不是条件哦,而是赋值
- AMQP协议
当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本. AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的 ...