CPU 通用寄存器 Byte量级
SRAM 高速缓存 KB~MB量级
- 存储单元
- 双稳态触发器
- 优点
- ◦ 速度较快
- 缺点
- ◦ 集成度低 ◦ 功耗较高 ◦ 价格较高
- 设计
- 平均访存时间Average Memory Access Time = Hit Time + Miss Penalty×Miss Rate
- Cache失效原因
- 义务失效(Compulsory Miss)
- 第一次访问某一数据块◦ 也称为冷启失效(Cold Start Miss)
- 容量失效(Capacity Miss)
- ◦ Cache无法保存程序访问所需的所有数据块
- 冲突失效(Conflict Miss)
- ◦ 多个存储器位置映射到同一Cache位置
- 义务失效(Compulsory Miss)
- Cache的映射策略
- 直接映射Cache
- 二路组相联Cache
- 四路组相联Cache
- Cache替换算法
- 随机(Random)
- 轮转(Round-Robin)
- 最近最少使用(LRU)
- Core i7的多级高速缓存
- 高速缓存的 工作原理
- 程序的局部性原理
- 时间局部性(Temporal Locality)
- ◦ 最近被访问的存储器单元(指令或数据)很快还会被访问
- 空间局部性(Spatial Locality)
- ◦ 正在被访问的存储器单元附近的单元很快会被访问
- 时间局部性(Temporal Locality)
- Cache的基本原理
- Cache对空间局部性的利用
- ◦ 从主存中取回待访问数据时,会同时取回与位置相邻的主存单元的数据
- ◦ 以数据块(Block)为单位和主存进行数据交换
- Cache对时间局部性的利用
- ◦ 保存近期频繁被访问的主存单元的数据
- Cache对空间局部性的利用
- 程序的局部性原理
DRAM 主存 MB~GB量级
- 存储单元
- 电容
- 优点
- ◦ 集成度高 ◦ 功耗较低 ◦ 价格较低
- 缺点
- ◦ 速度较慢 ◦ 定时刷新
- SDRAM内存的访问过程
- 1、Bus Request
- 2、Precharge and Row Access
- 3、Column Access
- 4、Bus Transmission
- SDRAM的关键性能参数
- tRCD: Row to Column Delay, 从行选到列选的延迟时间
- ◦ PC133标准:2
3个时钟周期,约1523ns
- ◦ PC133标准:2
- CL: CAS Latency, 从列选到数据输出的延迟周期数
- ◦ PC133标准:2
3个时钟周期,约1523ns
- ◦ PC133标准:2
- tRP: RAS Precharge, 行预充电(关闭行)的延迟时间
- ◦ PC133标准:2
3个时钟周期,约1523ns
- ◦ PC133标准:2
- tRCD: Row to Column Delay, 从行选到列选的延迟时间
- 主存技术的发展
- SDRAM,又称SDR SDRAM
- DDR SDRAM,又称DDR1 SDRAM
- DDR:Double Data Rate
- DDR2 SDRAM
- DDR3 SDRAM
- DDR4 SDRAM
Disk 本地二级存储 GB~TB量级
附录
cache工作原理
Cache缓存最近访问过的内存数据,由于Cache的访问速度是内存的几十倍,所以有效利用Cache可以大大提高计算机的整体性能。 一级Cache是这样工作的:
- CPU执行单元要访问内存时首先发出VA,Cache利用VA查找相应的数据有没有被缓存
- 如果Cache中有就不需要访问物理内存了: 如果是读操作就直接将Cache中的数据传给CPU寄存器 如果是写操作就直接改写到Cache中;
- 如果Cache没有缓存该数据,就去物理内存中取数据,但并不是要哪个字节就取哪个字节,而是把相邻的几十个字节都取上来缓存着,以备下次用到,这称为一个Cache Line,典型的Cache Line大小是32~256字节。如果计算机还配置了二级缓存,则在访问物理内存之前先用PA去二级缓存中查找。一级缓存是用VA寻址的,二级缓存是用PA寻址的,这是它们的区别。Cache所做的工作是由硬件自动完成的,而不是像寄存器一样由指令决定先做什么后做什么。
cache局部性原理
Cache从内存取数据时会预取一个Cache Line缓存起来,操作系统从硬盘读数据时会预读几个页面缓存起来,都是希望这些数据以后会被程序访问到。 大多数程序的行为都具有局部性(Locality)的特点:它们会花费大量的时间反复执行一小段代码(例如循环),或者反复访问一个很小的地址范围中的数据(例如访问一个数组)。 所以预读缓存的办法是很有效的:CPU取一条指令,我把和它相邻的指令也都缓存起来,CPU很可能马上就会取到;CPU访问一个数据,我把和它相邻的数据也都缓存起来,CPU很可能马上就会访问到。 设想有两台计算机,一台有256KB的Cache,另一台没有Cache,两台计算机的内存都是512MB的,硬盘都是100GB的,虽然多出来256KB的Cache与内存、硬盘的容量相比微不足道,但访问Cache比访问内存、硬盘快几个数量级,由于局部性原理,CPU大部分时间是在和Cache打交道,有Cache的计算机明显会快很多。高速存储器的容量只能做得很小,却能显著提升计算机的性能,这就是Memory Hierarchy的意义所在。