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的方法与访问主存储器有类似之处.主存储器使用地址编码方式,微架构可以 ...
随机推荐
- boolalpha
/* 功能: 把bool值显示为true或false */ #include<iostream> using namespace std; int main() { char str1[] ...
- DirectX基础学习系列8 渐进网格以及外接体
1 IUnknown--> ID3DXBUFFER D3D泛型接口: GetBufferPointer Retrieves a pointer to the data in the buffer ...
- 类型强转(type cast)
类型转换有 c 风格的,当然还有 c++风格的.c 风格的转换的格式很简单(TYPEEXPRESSION),但是 c 风格的类型转换有不少的缺点,有的时候用 c 风格的转换是不合适的, 因为它可以在任 ...
- Redis安装及初步使用
一.Centos下安装Redis1.wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm2.rp ...
- nginx安全相关设置
Nginx默认是显示版本号,隐藏 # vim nginx.conf 在http {—}里加上server_tokens off; 如: http { ……省略 server_tokens off; h ...
- Spark 2.0
Apache Spark 2.0: Faster, Easier, and Smarter http://blog.madhukaraphatak.com/categories/spark-two/ ...
- 八 mybatis查询缓存(一级缓存,二级缓存)和ehcache整合
1 查询缓存 1.1 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存.
- js中json字符串转成js对象
json字符串转成js对象我所知的方法有2种: //json字符串转换成json对象 var str_json = "{name:'liuchuan'}"; //json字符串 / ...
- Python 虚拟环境Virtualenv
本人也是Python爱好者,众所周知,Python扩展多,每次为了测试,安装各种各样的扩展,这样导致本地的Python环境非常混乱,就有人想到搞个隔离环境 和 本地环境没有关系,随时可以删除这个隔离 ...
- ServletContextDemo
1.servlet 之间共享数据 package xw.servlet; import javax.servlet.ServletContext; import javax.servlet.http. ...