学习意义
1.了解基本的存储技术,
2.程序员需要理解存储器层次结构,因为其对应用程序的性能有巨大影响。
3.理解局部性原理,缩短程序运行时间。
基本存储技术
- 随机访问存储器(断电后信息便丢失,如内存条)
① 静态RAM(SRAM,比动态RAM即DRAM更快更贵):
用来作为高速缓冲存储器。
②动态RAM
作用:用来作为主存以及图片系统的帧缓冲区。
形式:传统的DRAM芯片的单元被分成d个超单元,每个超单元都有w个DRAM单元组成,总共存储了dw位信息。超单元被组织成r行c列的长方形阵列,这里rc=d。每个超单元有形如(i,j)的地址,这里i表示行,j表示列。
示例:(以16*8的DRAM芯片的组织为例)
[16个超单元,每个超单元8位,2个addr引脚带位的行和列超单元地址] - 非易失性存储器
即使在关电后仍然保存信息。
(ROM:只读存储器、PROM:可编程ROM,只能被编程一次)
①磁盘存储
磁盘容量=磁道数×表面数×平均扇区数×字节数×盘片数
磁盘操作:
对扇区的访问时间=寻道时间(seek)+旋转时间(rotation)+传送时间(transfer)
②固态硬盘
一种基于闪存的存储技术。
局部性
局部性通常有两种不同的形式: 时间局部性和空间局部性。
在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用。在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。
一个编写良好的计算机程序常常具有良好的局部性。这种倾向性,称为局部性原理。
①对程序数据引用的局部性
②取指令的局部性
如for循环里的指令按照连续的内存顺序执行,循环体会被执行多次,所以拥有很好的时间和空间局部性。
③如何有更好的局部性
- 最好重复引用相同变量。
- 程序的步长尽量少。
- 循环体越小,循环迭代次数越多,局部性越好。
存储器存储结构相关
1.存储器层次结构
2.缓存
高速缓存(cache)是一个小而快的存储设备,作为存储在更大也更慢的设备中的数据对象的缓冲区域。使用高速缓存的过程成为缓存。
第k层总是作为第k+1层存储设备的数据对象的缓冲区域。在这过程中,总是以传送单元(块)在第k层与第k+1层之间来回拷贝数据。
缓存命中:需要的第k+1层的数据对象d刚好缓存在第k层,直接从第k层读取d。
缓存不命中:第k层没有数据对象d。
3.高速缓存存储器
通用的高速缓存存储器组织结构
另:高速缓存之所以用中间的位作为组索引,不是用高位这是因为使用高位一些连续的存储器会映射在相同的高速缓存块中,造成冲突不命中的情况。
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程:组选择、行匹配、字抽取。
4.请求是否命中?
直接映射高速缓存:每个组只有一行(E=1)的高速缓存。
以 直接映射高速缓存 为例:
组组相连高速缓存:E = C/B
全相联高速缓存:E = C(一个组包含所有高速缓存)
5.有关写的问题
当字w写命中时:
直写在需要写的时候立即将w的高速缓存写回到紧接着的低一层中去
写回尽可能的推迟存储器更新,只有当替换算法要替换掉这一个块的时候,才把w写回紧接着的低一层去”两种方式。
写不命中时:
有两种处理方法:
写分配加载相应的低一层的快到高速缓存,然后更新这个高速缓存块
非写分配直接写入到低一层去,避开高速缓存。
直写高速缓存通常非写分配,写回高速缓存通常写分配。
小结
程序员可以通过编写有良好空间和时间局部性的程序显著改进程序的运行时间,利用基于SRAM的高速缓存存储器特别重要(从高速缓存取数据的程序比主要从内存存数据的程序运行快得多)。