一:随机访问存储器分为:静态RAM(SRAM)和动态RAM(DRAM),静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多。
静态RAM: SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的。
SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值。
动态RAM: DRAM的特点:每一位的存储是对一个电容的充电,电容约为30×10-15F;对干扰非常敏感,当电容的电压被扰乱之后,它就永远不会恢复了。暴露在光线下会导致电容电压改变。
用途:数码照相机和摄像机的传感器
DRAM存储不稳定的应对机制:存储器系统必须周期性地通过读出,或者重写来刷新存储器的每一位;使用纠错码。
SRAM和DRAM的区别: 只要有电,SRAM就会保持不变,而DRAM需要不断刷新;
SRAM比DRAM快;
SRAM对光和电噪声等干扰不敏感;
SRAM比DRAM需要使用更多的晶体管,所以更昂贵。
传统的DRAM: 行地址i:RAS
列地址j:CAS DRAM组织成二位阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量。
二维阵列组织的缺点是必须分两步发送地址,这增加了访问时间。
存储器模块分类: 168个引脚的双列直插存储器模块,以64位为块传送数据;
72个引脚的单列直插存储器模块,以32位为块传送数据。
增强的DRAM: 快页模式DRAM(FPM DRAM):异步控制信号,允许对同一行连续的访问可以直接从行缓冲区得到服务。
扩展数据输出DRAM(EDO DRAM):异步控制信号,允许单独的CAS信号在时间上靠的更紧密一点
同步DRAM(SDRAM):同步的控制信号,比异步的快
双倍数据速率同步DRAM(DDR SDRAM):使用两个时钟沿作为控制信号,使DRAM速度翻倍。
Rambus DRAM(RDRAM):一种私有技术
视频RAM(VRAM):用在图形系统的帧缓冲区中。
非易失性存储器:ROM是以它们能被重编程的次数和对它们进行重编程所用的机制区分的 可编程ROM(PROM):只能被编程一次
可擦写可编程ROM(EPROM):使用紫外线实现
电子可擦除PROM(EEROM):使用印制电路卡实现
闪存(FM):非易失性存储设备
二:磁盘存储
磁盘构造
由盘片构成,每个盘片有两面或者称为表面,表面覆盖着磁性记录材料。盘片中央有一个可以旋转的主轴,使得盘片以固定的旋转速率旋转,通常是5400~15000转每分钟(RPM)
每个表面是由一组称为磁道的同心圆组成;每个磁道被划分成一组扇区;每个扇区包含相等数量的数据位(通常是512字节);这些数据编码在扇区上的磁性材料中。扇区之间由一些 间隙分隔开,这些间隙中不存在数据位。间隙存储用来标识扇区的格式化位。
磁盘容量
一个磁盘上可以记录的最大位数称为它的最大容量/容量。
磁盘容量的决定因素:
记录密度:磁道一英寸的段可以放入的位数。
磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数。
面密度:记录密度与磁道密度的乘积。
磁盘容量计算公式,需要牢记掌握!!
现代大容量磁盘使用一种称为多区记录的技术,柱面的集合被分割称为不相交的子集合,称为记录区,每个区包含一组连续的柱面。
磁盘操作:磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂 一端,通过移动转动臂将读写头定位在磁道上的机械运动称为寻道。磁盘以扇区大小的块来读写数据,对扇区的访问时间有三个主要的组成部分:
寻道时间:转动臂将读/写头定位到包含目标扇区的磁道上所需时间。
旋转时间:驱动器等待目标扇区的第一个位旋转到读/写头下的时间。最大为
固态磁盘
固态硬盘是一种基于闪存的存储技术。
一个SSD包由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中机械驱动器;闪存翻译层(一个硬件/固件设备)替代磁盘控制器,将对逻辑块的请求翻译成对底层物理设备的访问。
性能特性:顺序读和写(CPU按顺序访问逻辑磁盘块)性能相当,顺序读比顺序写稍快一点;随机顺序访问逻辑块时,写比读慢一个数量级;读写性能差别是由底层闪存基本属性决定的。
优点:由半导体构成,没有移动的部件;随机访问时间比旋转磁盘要快、能耗低、结实。
缺点:易磨损、更贵
存储技术趋势
不同的存储技术有不同的价格和性能折中
不同存储技术的价格和性能属性以截然不同的速率变化着(增加密度从而降低成本比降低访问时间更容易)
DRAM和磁盘的性能滞后于CPU的性能
三:局部性原理
一个编写良好的计算机程序常常具有良好的局部性,即倾向于引用临近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。有良好局部性的程序比局部性差的程序运行得更快。
两种不同形式:空间局部性、时间局部性
硬件层:局部性原理允许计算机设计者通过引入高速缓存存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。
操作系统级:局部性原理允许系统使用主存作为虚拟地址空间最近被引用块的高速缓存,用主存来缓存磁盘文件系统中最近被使用的磁盘块。
应用程序中:例如,Web浏览器将最近被引用的文档放在本地磁盘上。
数据引用局部性
步长为k的引用模式
定义:一个连续变量中,每隔k个元素进行访问。
步长为1的引用模式:就是顺序访问一个向量的每个元素,有时也被称为顺序引用模式,它是程序中空间局部性常见和重要的来源。
一般来说,随着步长增加,空间局部性下降。
多维数组程序
语言中数组在存储器中是按照行顺序存放的,所以按照行优先顺序执行的代码的局部性要好于按列优先顺序的代码。
取指令局部性
程序指令是存放在存储器中的,CPU必须取出(读出)这些指令。
代码区别于程序数据的一个重要属性是在运行时它是不能被修改的。当程序正在执行时,CPU只从存储器中读出它的指令,CPU绝不会重写或修改这些指令。
存储层次结构:
四:缓存
1.
缓存命中
当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。
该程序直接从第k层读取d,比从第k+1层中读取d更快。
缓存不命中
即第k层中没有缓存数据对象d。
这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块.
覆盖一个现存的块的过程称为替换/驱逐这个块。
被驱逐的块有时也称为牺牲块。
替换策略:决定替换哪个块
随机替换策略:随机选择一个牺牲块
最近最少被使用替换策略(LRU):选择最后被访问的时间距现在最远的块
缓存不命中的种类
强制性不命中/冷不命中:即第k层的缓存是空的(称为冷缓存),对任何数据对象的访问都不会命中。通常是短暂事件,不会在反复访问存储器使得缓存暖身之后的稳定状态中出现。
冲突不命中:由于一个放置策略:将第k+1层的某个块限制放置在第k层块的一个小的子集中,这就会导致缓存没有满,但是那个对应的块满了,就会不命中。
容量不命中:当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。
缓存管理
某种形式的逻辑必须管理缓存,而管理缓存的逻辑可以是硬件、软件,或者两者的集合。
五:高速缓存存储器
1.
高速缓存结构(S,E,B,m):高速缓存组、高速缓存行、块
高速缓存是一个高速缓存组的数组,高速缓存的结构将m个地址划分成了t个标记位,s个组索引位和b个块偏移位。
结构可以用元组(S,E,B,m)来描述:
m:每个存储器地址有m位,形成M=2^m个不同的地址
S:这个数组中有S=2^s个高速缓存组
E:每个组包含E个高速缓存行
B:每个行是由一个B=2^b字节的数据块组成的
标记位:t=m-(b+s)个,唯一的标识存储在这个高速缓存行中的块
有效位:每个行有一个有效位,指明这个行是否包含有意义的信息
高速缓存的大小/容量C:C=SEB
指所有块的大小的和,不包括标记位和有效位。
映射和命中
根据E(每个组的高速缓存行数)划分高速缓存为不同的类,E=1的称为直接映射高速缓存。
高速缓存确定一个请求是否命中,然后取出被请求的字的过程,分为三步:
组选择
行匹配
字抽取
组选择
高速缓存从w的地址中间抽取出s个组索引位
组索引位:一个对应于一个组号的无符号整数。
行匹配
判断缓存命中的两个充分必要条件:
该行设置了有效位
高速缓存行中的标记和w的地址中的标记相匹配
字选择:确定所需要的字在块中是从哪里开始的。
缓存不命中时的行替换:用新取出的行替换当前的行。
后运行中的直接映射高速缓存
标记位和索引位连起来唯一的标识了存储器中的每个块。
因为有8个存储块,4个高速缓存组,多个块映射到同一个高速缓存组(因为他们有相同的组索引)。
映射到同一个高速缓存组的块由标记位唯一地标识。
CPU执行一系列读的步骤:
用索引位,确定针对的是哪个组
然后看对应的组是否有效:
如果无效则缓存不命中,高速缓存从存储器或低一层中取出要找的块,存储在对应的组中,再把有效位置1,返回需要的值
如果有效,再根据标记找是否有匹配的标记:如果有,则缓存命中,返回需要的值;如果没有,则替换行,返回。
直接映射高速缓存中的冲突不命中
原因:在块之间抖动,即这些块被映射到了同一个高速缓存组。
抖动:高速缓存反复的加载和驱逐相同的高速缓存块的组
解决方法:在每个数组的结尾放B字节的填充(B字节是一个块的长度,一行是一个块,相当于分开了行)从而使得他们映射到不同的组。
六:练习题
6.2
有2个盘片,10 000个柱面,每条磁道平均有400个扇区,每个扇区平均有512个字节
磁盘容量 = 512字节/扇区400扇区/磁道10 000磁道/表面2表面/盘片2盘片/磁盘 = 8 192 000 000 字节 = 8.192GB
6.3
访问一个磁盘上的一个扇区需要的时间(以ms为单位)。旋转速率:15000RPM;Taveseek = 8ms;每条磁道的平均扇区数:500
访问时间 = Taveseek+Taverotation+Tavetransfer = 8ms+0.51/15000RPM60secs.min1000ms/s+1/15000RPM1/50060secs/min1000ms/s=8ms+2ms+0.008ms=10.008ms
6.4
假设1MB的文件由512字节的逻辑块组成,存储在有如下特性的磁盘驱动器上(旋转速率:10 000RPM,Taveseek=5ms,平均扇区/磁道 = 1000)。
(1)最好的情况:给定逻辑块到磁盘扇区的最好的可能的映射(即,顺序的),估计读这个文件需要的最优时间
(2)随机的情况:如果块是随机地映射到磁盘扇区的,估计读这个文件需要的时间
答:首先明确:1MB=2^20字节,即数据存储在2000个逻辑块中;对于磁盘,Taverotation=0.51/10000RPM60secs/1min*1000ms/s=3ms
则:(1)T=Taveseek+Taverotation+2Tmaxrotation=5ms+3ms+26ms=20ms
(2)在这种情况下,块被随机的映射到扇区上,读2000块的每一块都需要Taveseek+Tavgrotation=8ms。所以读这个文件的总时间为T = 8ms*2000=16000ms=16s
6.8
int sumarray3d(int a[N] [N] [N])
{
int i,j,k,sum=0;
for(k=0;k<N;k++){
for(i=0;i<N;i++){
for(j=0;j<N;j++){
sum += a[k] [i] [j];
}
}
}
return sum;
}
6.9
判断图中三个函数的空间局部性。
函数clear1以步长为1的引用模式访问数组,因此明显的具有最好的空间局部性;函数clear2依次扫描N个结构中的每一个,这也可以,但是在每个结构中,它以步长不为1的模式跳到下列相对于结构起始位置的偏移处,所以clear2的空间局部性比clear1的差;函数clear3不仅在每个结构中跳来跳去,而且还从结构跳到结构,所以clear3的空间局部性最差。![]