C P U → C a c h e → 主 存 → 辅 存 ( 外 存 ) CPU\rightarrow Cache\rightarrow 主存\rightarrow 辅存(外存) CPU→Cache→主存→辅存(外存)
程序局部性
- 时间局部性:反复访问同一个存储区域(循环)
- 空间局部性:访问区块相邻(顺序结构)
技术指标
- 存储容量指标:存储器所能存储的二进制信息的位数.
- 速度指标:
•存取时间(存储器访问时间)
启动存取操作到操作完成所经历的时间
•存储周期(读写周期)
对存储器进行连续两次存取操作所需的最短时间间隔。存储器在一次存取操作后需要一定的恢复时间.因此,该时间一般大于存取时间.
•存储器带宽
单位时间内存储器所存取的信息位,也称存储器的数据传输率.即存储器总线宽度/存储周期, 单位:位/ 秒(bps)
随机存储器
双译码器
地址编码分为行址和列址.
减少地址开销,同样长度的地址可以寻址更大的空间.
SRAM
- 写过程:互锁态保存信息
- 读过程:放大器电流方向
- 保持:T1,T2稳定互锁
译码-驱动-I/O-输出驱动
动态存储器
- 需要预通电
- 需要定时刷新
刷新
对电子管进行反复充电.
- 集中刷新:每个刷新末尾周期集中刷新,此时不能进行操作.
- 分段刷新:一个读写周期后刷新.
- 异步刷新:刷新周期分为128行数段,每n个读写周期刷新一行.
信息存储:大小端
- 存储字长: 一个存储单元包含的二进制位数
- 数据字长:CPU一次可以处理的二进制位数
- 大端存储:高位作该字节代表地址
- 小端存储:低位作该字节代表地址
字节对齐
对于一个64位的System,为查找方便,设置存储对齐机制
注:8位BIN(2位HEX)对应一字节,是存储的基本单位.
TYPE | Length | Bits | Tail |
---|---|---|---|
双字 | 8 | 64 | 000 |
单字 | 4 | 32 | 00 |
字节(char,int,…) | 2 | 16 | 0 |
Expanding
- 字扩展:容量扩展,低位/高位选片
- 位扩展:位数扩展
- 同时扩展
CACHE
CPU主存速度的差异
- 双端存储器 :两套I/O系统 冲突时由判断电路处理.
- 多体交叉:并行结构,各程序独立:一套中控控制.
- 顺序放置(×)&交叉放置(√)
- 相连存储器:对内容检索.发起检索时逐位比较,符合则修改命中位为1.
- 屏蔽电路:决定内容在输入key的哪几位
CAM
执行映射(选址,控制)的逻辑结构.
**CACHE的机制是块传递.一个块包含多个字节(地址).**传输时以块为基本单位.Cache的一个单元(一行)容量都等于一块.
映射方案
Ref:https://blog.csdn.net/HaoDaWang/article/details/78885737
对软件,程序员,系统程序员透明
全相连
- 主存分块,Cache分行.
- 以行数(块数)为模,
- 映 射 行 数 = 块 号 ( n o n − 0 s t y l e ) ( m o d 行 数 ) 映射行数=块号(non-0 style)\pmod {行数} 映射行数=块号(non−0style)(mod行数)
- 注意表示的行编号和块编号均是0-style.计算时用的non- 0 style(存疑)
- 未命中几率大,适合小规模cache.
直接相连
- 主存按照cache容量分区.每区的块数=Cache行数.
- 每区的第i行对应cache的第i行.
- 每行的可能块编号形成同余系.
组相连
- 主存和Cache按同样大小划分成块。
- 主存和Cache按同样大小划分成组。
- 主存容量是缓存容量的整数倍,将主存空间按缓冲区的大小分成区,主存中每一区的组数与缓存的组数相同。
- 当主存的数据调入缓存时,主存与缓存的组号应相等,也就是各区中的某一块只能存入缓存的同组号的空间内,但组内各块地址之间则可以任意存放, 即从主存的组到Cache的组之间采用直接映象方式;在两个对应的组内部采用全相联映象方式。
- k路的意思是一组内有k行.
- 组间全相连,组内直接相连
- 先命中组,再组内检索.
替换算法
当未命中且cache全满时,决定对可行行的替换方案.
FLU
将一段时间内命中最少的数据丢弃.:对新数据不友好
LRU
将未被命中时间最长的数据丢弃.
脏位
CPU更新的数据只写回了Cache.此时内存的数据无效.
Solution
- 要求写入Cache时也写进内存一份
- 或标识脏位.
有效位
内存绕过了Cache,更新了数据.此时Cache对应的数据失效.
Solution
- 改有效位.有效位标识出现时从内存重新调取数据.
局部性
对象:数组,变量,结构(循环等)
空间局部性
存放区域连续.
时间局部性
对同一块内存重复访问.
- Tag位:就是行地址.标识块位置的位.