信息安全系统设计基础第七周总结
第六章存储器层次结构
6.1存储技术
6.1.1
随机访问存储器
RAM分为静态和动态的。SRAM和DRAM。
1).静态RAM
具有双稳态特性。每个单元用一个六晶体管电路来实现的。它可以无限期地保持在两个不同的电压配置或状态之一。
2).动态RAM
DRAM将每个位存储对应一个电容充电。
3).传统的DRAM
一个DRAM芯片中所有单元(一个单元是一位),被分成d个超单元,每个超单元由w个单元构成。
因此一个DRAM芯片能存储dw位。 这d个超单元组织成一个r行c列的矩阵。
因此每个超单元有一个地址(i,j),i是行号,j是列号。
CPU访问存储器中超单元(i,j)的方式:
先将地址i通过存储控制器发送到DRAM,DRAM取出第i行超单元内容,放入内部行缓冲区。再将地址j通过存储控制器发送到DRAM。DRAM从内部行缓存区中取出
第j个超单元,通过数据总线将数据返回。
好处:地址总线长度短。若有16个超单元,组成44的矩阵,则地址总线只需要两位。若组成线性数组,地址总线需要4根
坏处:地址需要分两次发送,增加访问时间。
DRAM芯片中的单元为被分为d个超单元,由w个DRAM单元组成。d*w的DRam总共存储dw位信息。超单元被分为行与列
4).存取器模块
5).增强的DRAM
快页模式DRAM,扩展数据输出DRAM,同步DRAM,双倍数据速率同步DRAM,Rambus DRAM,视频RAm
6).非易失性存储器
如果断电RAM会丢失信息。ROM只读存储器断电后仍然可以保存信息。
PROM只能被编程一次。
可擦写可编程ROM。
闪存(flashmemory)基于EEPROM。为大量的电子设备提供快速而持久的非易失性存储。
7).访问主存
总先事务。读事务。写事务。
总线是一组并行的导线,能携带地址,数据,控制信息。
I/O桥将系统总线的电子信号翻译成存储器总线的电子信号。
6.1.2磁盘存储
1,磁盘构造包含盘片、磁道、扇区、间隙、柱面;磁盘驱动器
磁盘表面覆盖着磁性记录材料。主轴使得盘片以固定的旋转速率旋转。
2,磁盘容量
由记录密度,磁道密度和面密度决定。
.记录密度(位/英寸):磁道一英寸的段中可以放入的位数。
.磁道密度(道/英寸):从盘片中心出发半径上一英寸内可以有磁道数。
.面密度(位/平方英寸):记录密度与磁道密度的体积。
(2)磁盘
磁盘由一些盘片构成,盘片的正反面都能存储数据,每个盘片分成许多的磁道,每个磁道分成一些扇区。
因此磁盘的容量 = 盘片数量 * 2 * 磁道数 * 每磁道扇区数 * 每扇区大小。
通常一个扇区为512B。
对扇区的访问时间包括:寻道时间,旋转时间和传送时间
寻道时间:即将读写磁头放在包含要访问的扇区的磁道上。T(seek),取决于磁头以前的位置和传动臂移动的速度。通常为6-9ms(不知道对现在的磁盘该数据是否准确)。
旋转时间:定位到磁道后,转动盘片,直到指定的扇区到达磁头下。取决与盘片的转速。最大旋转时间就是盘片转一圈的时间了。平均旋转时间通常为最大旋转时间的一半。
传输时间:读扇区内容需花费的时间。
书中总结“将寻道时间乘2是估计磁盘访问时间的简单而合理的方法”
逻辑磁盘块:在访问扇区时,通常只给出扇区的逻辑号,然后磁盘控制器会将逻辑号转换为相应的盘片上的相应磁道的相应扇区。
(3)局部性
随着CPU的发展,CPU与内存和磁盘的差距迅速拉大,为充分利用CPU性能,人们才采用了层次的存储结构。
而采用层次存储结构能提升性能的原因是:局部性,包括时间局部性和空间局部性。
(本以为局部性是程序局部性和数据局部性,仔细看书,原来是时间局部性和空间局部性)
时间局部性:被引用过的存储器位置,不久的将来很可能还会被引用。
空间局部性:一个存储器位置被引用了,那相邻的位置可能也会被很快被引用到。
书上示例:
int sumvec(int v[N])
{
int i, sum = 0;
for (i = 0; i < N; i++)
sum += v[i];
return sum;
}
由于sum会被多次引用,因此具有时间局部性。
由于数组v的被顺序访问,因此具有空间局部性。
这里是连续访问v的元素,称这种访问方式为具有步长为1的引用模式。
对于具有步长为k的引用模式,k越大,空间局部性越低,k越小,空间局部性越高。 可以将步长看成是衡量空间局部性的一个因素。
(4)存储器层次结构
L0 寄存器
L1 芯片里L1高速缓存
L2 芯片外L2高速缓存
L3 主存
L4 本地磁盘
L5 远程二级存储
第k层是第k+1层的缓存,因为第k层的存储速度更块,当然空间也更小。 这样便有一个统一的缓存模型。
第k+1层的存储器分成不同的块,每个块有唯一的地址,通常块的大小固定(也可以变化)
第k层的存储里缓存着k+1层里的部分块,在k和k+1之间传输数据时,都是以块为大小来传输。
i)缓存命中
若需要访问k+1层里的数据块d,如果d已经缓存在第k层,则称缓存命中。这样从第k层取块d要比k+1层更块。
ii)缓存不命中
若d不在第k层,则是缓存不命中,此时将k+1层存储中取出块d,放入k层。可能需要替换掉k层中已有的块。替换策略是:随机,最近最少使用等。
刚开始k层中没有缓存k+1中的数据,这时称为强制性不命中。
由于k层大小较小,因此k+1层中可能多个块会需要放入k层中相同位置,此时为冲突不命中,因为k层中可能还有多的空间没用。
若循环访问一个数组,当数组大小大于k层的大小时,就会发生容量不命中,即是因k层容量太小导致的。
需要有个东西对缓存进行管理,比如怎么进行块的划分,各层次间怎么传送块,判断是否命中,不命中该如何处理,写回数据的时候该如何处理。
都是需要考虑的问题,可用硬件管理如cache,也可用软件管理如虚拟内存。
(5)缓存的管理
i)相关假定
假定存储器的地址有m位,便有M=2m 不同地址。
一个缓存被分成S=2s个的高速缓存组(cache set),
每个组包含 E 个高速缓存行。
每个缓存行由一个B=2b字节的数据块,一个有效位,t=m-(b+s)个标记位组成。
一个高速缓冲区的大小C = S * E * B。
ii)如何访问缓存
当要访问存储器中的一个字节时,给出的访问地址的m位中,前t位表示标记位,中间s位为组索引,最后b位为块偏移。
因此对这个访问地址,首先利用中间的s位组索引找到相应的组,
对组中的每一个缓存行,将缓存行的t位标记与访问地址中的前t位进行比较,若相等,则找到字节所在的块。若没找到,缓存不命中。
如果有效位为1,则利用b位块偏移,在缓存行中取出要访问的字节。
若有效位为0,则缓存不命中。
iii)缓存不命中时
当缓存不命中时,则若需要将存储器中的块放入缓存对应的组中。
若组中的行都有数据,则需要进行替换,替换策略是:LFU或这LRU(不想细说了)
iv)三种缓存方式的划分
分为直接映射高速缓存,组相联高速缓存,全相联高速缓存
若指定了S,E,B的值,则缓存的划分方式就已经确定了。
缓存块与存储块之间也就建立了一种映射关系。
当E = 1时, 一个组中只有一个行,明显这个时候不需要使用替换策略,比较简单。查找块也很块,但容易发生冲突不命中。 直接映射高速缓存
当E < C/B时,一个组中有多个行,这时需要考虑使用什么替换策略了。而且在查找块时,需要将地址中的标记与组中全部缓存行的标记进行比较。 组相联高速缓存
当E=C/B时,仅有一个组,这时不会出现冲突不命中的情况,但容易发生容量不命中。而且查找块时,需要比较全部缓存行中的标记。 全相联高速缓存
高速缓存参数的性能影响
不命中率。
命中率
命中时间
不命中处罚