存储系统 【一】
存储系统的知识大致可分为三类:cache、虚拟存储、与cpu的通信
存储芯片
多个存储元
组成的的存储矩阵M * N
,用存储单元数量*位宽
表示,如:32k*8bit,通过地址线在32k中选择数据行进行读写,每次读写固定为8bit。
- 数据线:数量等于位数,通过地址线控制门电路,从而在实现指定单元的数据读写
- 地址线:数量
n
满足 ,比如1k有10根 ( ) - 除此之外还有
片选线
(选择芯片)、读写控制线
等。
32k 👉 32*1024
8bit (位) = 1 Byte (字节),现在的32位、64位指的就是这个位
⚠️⚠️ 字(word) 是指计算机体系中的基本数据单元,由 CPU 字长(word size)决定
如32位系统中 1 word = 4bytes, 而64位系统中 1 word = 8bytes
位扩展
位扩展与字扩展 ,其中字数扩展只需要通过片选线即可。
通过串连地址线、控制线等,再扩展数据线读写高低位的数据,实现用n块N bit的芯片组成n*N bit的存储器。
DRAM 与 SRAM
👆上面提到的存储元
在常见的元件有电容、二极管、晶体管...,根据不同元件的特性(包括结构、速度、功耗、成本等)便有了用途各异的多种RAM,其中最为常见的就是DRAM与SRAM。
编址
Cache
CPU计算很快,但主存很慢,所以设计了一种更快的存储器: cache 。然而cache的造价很高,一般不会有很大容量。而如何提高cache的命中率便是芯片设计中的一道课题。
程序的局部性原理
因为程序的循环设计所以有:
- 时间局部性:现在用的数据,将来很可能依然使用
- 空间局部性: 现在用的数据,将来很可能使用到其物理空间相邻的数据
数据块
将相邻的内存组合成块;cache
与主存
以字块(block)为单位进行交互
; cpu
与主存
、cpu
与cache
以字(wrod)为单位进行交互。
数据映射
按块编址: 对于地址xxx...x
分块,只需将前m
位标识为块地址,剩余为块内地址即可。
主存的块数远大于 cache的块, 即主存地址的m
> cache地址的m
映射关系
全相联映射
定义:主存中的每一块可以映射到Cache中的任何一个位置。
优点:灵活性高,命中率高,块冲突率低。
缺点:实现复杂,成本较高,适用于小容量Cache。
地址结构:主存字块标记、字块内地址。
直接映射:
定义:每个主存块只能映射到Cache中的一个特定位置。(一般就是轮着来)
优点:实现简单,成本低。
缺点:命中率较低,容易出现Cache颠簸。
地址结构:主存字块标记、Cache字块地址、字块内地址。
组相联映射
定义:将Cache分为若干组,每个主存块可以映射到特定组中的任意一个位置。
优点:结合了直接映射的简单性和全相联映射的高命中率。
缺点:实现复杂度介于直接映射和全相联映射之间。
地址结构:主存字块标记、组地址、字块内地址。