【计算机组成原理】存储器
存储器的分类与性能评价
存储器的分类
按存储介质分类:
- 半导体存储器
- 磁表面存储器
- 磁芯存储器
- 光盘存储器
按存取时间是否相等分类:
- 存取时间与物理地址无关(随机访问) 随机存储器和只读存储器
- 存取时间与物理地址有关(串行访问) 顺序存取存储器和直接存取存储器
按处理器是否直接访问:分为主存和辅存
按掉电后信息是否丢失:分为易失性存储器和非易失性存储器
按访问方式的不同,可分为:
- 按地址访问的存储器
- 按内容访问的存储器CAM(相联存储器)
- 指定位置访问的存储器(堆栈)
按在计算机中的作用分类:
存储器的性能评价
存储容量:存放二进制信息的数量
存储容量=存储单元个数*存储字长(按字)=字节数(按字节编址)
目前计算机存储容量大多以字节数表示
存取速度:一般采用两种参数描述
- 存取时间$(T_A)$指从CPU给出有效地址启动一次存取(读/写)操作到该操作完成所需的时间。读写分别为$T_{AR}、T_{AW}$
- 存取周期$(T_{mc})$指连续两次存储器操作之间的最小时间,间隔略大于$T_A$
带宽:每秒从存储器进出的最大信息量
存取周期反映了存储器的带宽
提高带宽途径:
- 缩短存取周期(制造工艺方面)
- 增加存储字长
- 增加存储体
成本:价格,有两个指标,存储系统总的拥有成本和每存储位的成本
存储系统的层次结构
存储器访问的局部性原理
经过对处理器访问主存储器情况的统计发现,无论是取指令还是存取数据,处理器访问的存储单元趋向于聚集在一个相对较小的连续存储单元区域内。这种现象称为存储器访问的局部性原理。
访问局部性表现为时间局部性和空间局部性。
时间局部性是指将要访问的信息就是现在正在访问的信息。
空间局部性是指将要用到的信息就在正使用的信息旁边。
层次结构的存储系统
用户对存储系统的要求一般是相同的:容量大、速度快、价格低。 在现有存储器工艺技术水平下,上述要求无法满足。容量大的存储器在速度上通常要比容量小的存储器慢。速度快的存储器在价格上通常要比速度慢的存储器贵。
为了解决这种问题,选用生产与运行成本不同的、存储容量不同的、读写速度不同的多种存储介质,按一定的层次结构组织成一个统一的存储器系统,使每种介质都处于不同的地位,发挥不同的作用,充分发挥各自在速度、容量、成本方面的优势,从而综合达到最优性能价格比,即把这样一个存储器组织作为一个整体看,具有容量大、速度快、位价低的综合指标。这样一个存储整体称为“存储系统”。
存储器三个主要特性的关系:(速度、容量、价格)
- 通用寄存器组处于CPU内部、为执行指令方便而设。速度最快、容量最小、位价最高
- 主存:是存储系统的核心,是计算机自动、高速运行程序必不可少的功能部件、是计算机传统的五大部件之一。因此,计算机对主存的要求是比较高的,但在目前的存储技术水平下,主存只能做到容量比较大、速度比较快、位价适中,仍然远远满足不了CPU运行程序的要求。
- 高速缓存Cache:为平滑主存与CPU之间的速度之差,加速CPU访存的速度,在性能较好的计算机中,主存与CPU之间增加一个缓冲存储器,其容量比通用寄存器组大得多,比主存小得多,速度接近CPU,位价介于寄存器与主存之间。Cache与主存一起构成内存。
寄存器、Cache、主存由不同指标的半导体存储器实现
- 辅助存储器(外部存储器):为存放大量备用的程序和数据,在主机之外设置了一级辅助存储器,其容量比主存大得多,速度比主存慢得多,但位价也便宜得多。 辅存通常由磁表面存储器实现,目前大多数计算机使用磁盘,但由于磁盘的容量实际上也有限,因此有些系统使用磁带等速度更低、容量更大(磁带等设备带盘可换,容量可无限延伸)的磁表面存储器作为硬盘的后备。 由于辅存与主机的连接方式和I/O设备相同,因此主机通常以I/O管理方式管理外存。
缓存—主存层次和主存—辅存层次
- Cache—主存层次:根据程序运行的局部性原理,可以在计算机运行程序时,通过合理的调度将当前使用最多的一小段程序和数据放在Cache中,使 CPU大部分时间访问高速缓存Cache,只有个别的指令或数据从缓存中读不到,需要到主存去取。这样,从整体运行的效果分析,CPU访存速度接近于Cache的速度,而寻址空间和位价却接近于主存。
- 主存—辅存层次:为了更好地对主存、辅存统一调度,目前广泛采用虚拟存储技术,即将主存与辅存的一部份通过软硬结合的技术组成虚拟存储器,程序员可使用这个比主存实际空间大得多的虚拟地址空间编程,当程序运行时,再由软、硬件自动完成虚拟地址空间与主存实际物理空间的转换。这个转换操作对于程序员来说是透明的。因此,从程序员的角度看,他所使用的存储器其容量和位价接近于辅存,而速度接近于主存。
命中率
若要访问的信息在高一级存储器中找到,则称为命中,否则称为不命中或失效。
若要访问的信息在高一级存储器中找到,则称为命中,否则称为不命中或失效。
设第1级和第2级存储器分别用M1和M2表示。设执行一组有代表性的程序后,测得对M1和M2访问的次数分别为R1和R2,则M1的命中率H为
整个存储层次的平均访存周期$T_c$与$M_1$和$M_2$的访存周期$T_{c1}$和$T_{c2}$的关系为:
层次结构存储系统的平均字节价格C为:
式中,$C_1$和$S_1$分别为$M_1$的单位字节价格和容量,$C_2$ $S_2$分别为$M_2$的单位字节价格和容量。
各级存储器存放的信息必须能够满足两个基本原则:
- 一致性原则:同一个信息在各级存储器中必须保持相同的值
- 包含性原则:处在内层(更靠近CPU)存储器中的信息一定包含在各外层的存储器中
半导体存储器
根据存储的信息是否可以读/写,半导体存储器分为随机访问半导体存储器(RAM)和只读半导体存储器(ROM)
基本结构
半导体存储芯片的译码驱动方式
单译码方式(线选法)
单译码的含义:只用一个地址译码器电路将地址信号变换成选中信号,译码器输出的每一根线可选中存储单元的各位。这种选中信号称为字选择信号。
线选法的特点:
- 译码结构简单、速度快、但器材用量大(n根地址线用$2^n$套驱动器),当容量大时成本太高。仅适合高速小容量存储器
- 并行输入/输出(数据I/O)按多位(字节)组织
重合法(双译码方式)
双译码的含义:使用两个译码电路(称为X译码器和Y译码器),分别产生行选择信号和列选择信号,行选择信号和列选择信号同时有效的存储单元为被选中的存储单元。
重合法的特点:
- 与线材法相比大大减少了译码输出线根数,则器材用量也大大减少、有效降低了存储器的成本,适用于大容量存储芯片
- 数据位I/O 按位组织
随机存储器(RAM)
静态RAM(SRAM)
静态RAM基本电路
SRAM读操作:
- 行选:$T_5$,$T_6$开
- 列选:$T_7$,$T_8$开
- $V_A \rightarrow T_6 \rightarrow T_8 \rightarrow 读放\rightarrow D_{OUT}$
SRAM写操作:
- 行选:$T_5$,$T_6$开
- 列选:$T_7$,$T_8$开
- $D_{IN}$ 两个写放
(左)$D_{IN}\rightarrow 反相\rightarrow T_7 \rightarrow T_5 \rightarrow A^{‘}$
(右)$D_{IN}\rightarrow T_8\rightarrow T_6 \rightarrow A$
SRAM读时序图:
SRAM写时序图:
动态RAM(DRAM)
基本电路:
时序:
DRAM刷新:
DRAM靠电容存储的电荷来表示信息,由于漏电流的存在,电容上的电荷会缓慢消失,为了保证存储信息的稳定性和正确性,需要隔一段时间给电容补充电荷,这个过程称为“刷新”或“再生”。
DRAM是破坏性读出
读放大器同时又是再生放大器,利用双稳态结构,在读出过程中建立起稳态,然后该稳态再自动写回存储单元。 刷新与常规读/写操作不同,为了节省时间,通常不是按字逐个单元处理,而是每次刷新内部存储矩阵的一行,即为连接在同一行上所有存储元的电容补充一次能量。因此,刷新周期只送行地址,不送列地址,I/O电路不打开,数据线无输出,相当于一次“内部读”操作。
典型的刷新间隔为2ms
刷新周期:对DRAM的刷新是按行进行的,每刷新一行的时间称为刷新周
几种刷新方式:
- 集中刷新:在一个刷新间隔内,集中一段时间对全部存储单元进行逐行刷新,在此期间正常的读/写操作将被停止,所以这段时间称为死时间。
- 分散刷新:将刷新分散到每个读/写周期内完成
- 分散刷新与集中刷新相结合(异步刷新):在最大刷新时间间隔内,对芯片内的全部存储元逐行轮流刷新一遍。刷新周期平均分散在最大刷新间隔中。
三种刷新方式的特点:
集中刷新:正常工作期间DRAM可达全效率,但刷新期间CPU不能访存(例中为16µs),形成访存“死区”
分散刷新:消除了访存死区,但使CPU访存周期延长一倍(例中 =1µs)。另外,存在多余的刷新操作
集中与分散相结合:结合集中、分散刷新的优点,既克服了死时间,又没有多余的刷新操作,DRAM工作效率达到最高,是一种理想的刷新方式,得到广泛应用。但这种方式控制较复杂,需要较多的存储器外围电路支持(刷新地址计数器、刷新定时器、访存仲裁逻辑等)
DRAM和SRAM的比较
只读存储器(ROM)
掩膜ROM(MROM)
PROM(一次性编程)
EPROM(多次性编程)
EEPROM(电可擦除可编程只读存储器)
特点是:
- 擦除和编程均可联机进行,更加方便
- 电可擦写
- 局部擦写
- 全部擦写
Flash Memory(快擦型存储器)
特点:擦除和写入速度更快
与EEPROM不同的是只能整体擦或分区擦
由于闪速存储器具有非电易失性,且读取速度与DRAM接近,写入速度与硬盘接近,因此目前逐渐用来替代软、硬盘,称为半导体盘,具有无机械运动,抗震性好,可靠性高等优点,发展前景看好。
概括图
主存储器
主存储器由RAM和ROM芯片组成。
例如,系统程序区存放的是不需要改动也不允许改动的系统程序,所以这部分存储空间应用ROM来实现;系统程序工作区是系统程序在工作时写入并读出临时数据的,所以这部分存储空间应用RAM来实现。用户程序区存放的是用户的程序与数据,这些信息是可读、可改写的,所以这部分存储空间也应用RAM来实现。
由于单片存储芯片提供的存储容量与存储字长一般不能直接满足实际需求,所以经常是将若干存储芯片连接在一起组成特定机器的存储系统,这就叫存储器扩展。
存储器的拓展
存储器容量拓展
位拓展(增加存储字长)
字拓展(增加存储字的数量)
字、位拓展
存储器与CPU的连接
CPU对主存的读写操作
读操作:CPU从指定的存储单元取出信息的过程
- CPU将地址信号发送到地址总线
- CPU发出读命令
- 读出信息经数据总线送至CPU
写操作:CPU将要写入的信息存入指定的存储单元
- CPU将地址信号发送到地址总线
- CPU将要写入的数据发送到数据总线
- CPU发出写命令
- 等待信息经数据总线送至存储器
存储器的校验
前置知识:奇偶校验
偶校验:补一位校验位,统计数据位中1的个数,若是偶数,校验位为0,否则为1
奇校验:补一位校验位,统计数据位中1的个数,若是奇数,校验位为0,否则为1
编码的最小距离
任意两组合法代码之间 二进制位数 的 最少差异
编码的纠错 、检错能力与编码的最小距离有关
L为编码的最小距离
D为检测错误的位数
C为纠正错误的位数
汉明码
具有一位纠错能力的编码
设数据位共n位
汉明码需增添k位校验位,其中k满足:
检测位的位置分别在第$2^i$位,其中$i=0,1,2,3,4,…$
检测位的取值与该位所在的检测小组中承担的奇偶校验任务有关
各检测位$C_i$所承担的检测小组为:
$C_1$检测的$g_1$小组包含第 1,3,5,7,9,11,…
$C_2$检测的$g_2$小组包含第 2,3,6,7,10,11,…
$C_3$检测的$g_3$小组包含第 4,5,6,7,12,13,…
$C_4$检测的$g_4$小组包含第 8,9,10,11,12,13,14,15,24,…
规律:
$g_i$小组独占第$2^{i-1}$位
$g_i$和$g_j$小组共同占第$2^{i-1}+2^{j-1}$位
$g_i$,$g_j$和$g_l$小组共同占第$2^{i-1}+2^{j-1}+2^{l-1}$位
汉明码的纠错
新增新的检测位$P_i$,其位数与增添的检测位有关,就是检测位的位置
$P_i$即把该小组的成员做异或运算
对于偶校验配置的汉明码 $P_i$均为0时不出错
对于奇校验配置的汉明吗 $P_i$均为1时不出错
纠错过程即排除法,排除正确的,没出错的小组成员
提高访存速度的措施
- 采用高速器件
- 采用层次结构 Cache 主存
- 调整主存结构
- 单体多字系统
前提条件是:1.指令和数据在存储体内连续存放;2.内存在硬件配置上支持
在一个存取周期内,从一个地址取出四条指令,再逐条将指令送去CPU执行;即每四分之一存取周期,主存向CPU送一条指令
一次性取出4W位,带宽增大4倍,速度提高了
- 多体并行系统
采用多体模块组成的存储器。它们能并行工作,又能交叉工作
其中,每个模块应当有相同的容量和存取速度;并均有独立的地址寄存器、地址译码器、驱动电路、读写电路
并行工作即可同时访问N个模块,同时启动,同时读出,完全并行的工作
特点:1.带宽增大N倍;2.并行工作;3.有利于单字操作
两种编码
高位交叉
存储单元的高位用于编号 顺序编址
特点:
- 同一存储体的地址空间连续
- 不利于并行处理
- 容易发生访存冲突
低位交叉
存储单元的低位用于编号 各个体轮流编址
特点:
- 同一存储体内地址不连续,以N为模
- 访存冲突小
- 程序连续存放,容易形成并行工作局面
高速缓冲存储器
cache用于解决高性能与低价位的矛盾,解决CPU与I/O的访存冲突
目的:用小容量的SRAM与大容量的DRAM构成一个性能近似于SRAM而价格相当于DRAM的存储系统
Cache的工作原理
主存和缓存的编址
缓存会有标记位
- CPU发出访问主存的地址,这个地址同时会被Cache接收到
- 若目标数据在Cache中(命中)则Cache先于主存把数据送往CPU
- 若没命中,则主存会把目标数据送往CPU(按字传送),同时主存会把该数据所在块送给cache(按块传送)
命中与未命中
缓存共C块
主存共M块 M>>C
命中 主存块调入缓存主存块与缓存块建立了对应的关系
用标记记录某缓存块建立了对应关系的主存块号
未命中 主存块未调入缓存
主存块与缓存块未建立对应的关系
Cache的命中率
CPU欲访问的信息在Cache中的比率
命中率与Cache的容量与块长有关
一般每块可取4~8个字
块长取一个存取周期内从主存调出的信息长度
Cache-主存系统的效率
效率e与命中率有关
设Cache命中率为h,访问Cache的时间为$t_c$,访问主存的时间为$t_m$
则
实现Cache要解决的问题
- Cache内容与主存之间的映像关系
- 如何实现地址的转换,将访问的主存地址转换为Cache地址
- 访问Cache未命中时,若Cache没有满,如何调入Cache;Cache满时,块如何替换
- Cache的一致性问题,即块的更新策略
Cache的基本结构
地址映像和变换
地址映象:为了把信息放到Cache中,必须应用某种函数把主存地址映像到Cache,称作地址映像
地址变换:在信息按照这种映像关系装入Cache后,执行程序时,应将主存地址变换成Cache地址,这个变换过程叫做地址变换
基本地址映象:直接映象、全相联映象、组相联映象、段相连映象
直接映像
$i=jmod C$
每个缓存块i可以和若干个主存块对应
每个主存块j只能和一个缓存块对应
特点:
- 固定、死板易发生冲突,导致频繁的换进换出,适合Cache容量较大的情况
- 硬件实现简单,成本低
全相联映像
主存中的任一块可以映像到缓存中的任一块
特点:
- 优点是极其自由灵活
- 缺点是以硬件电路的复杂来作为牺牲
组相联映像
$i=jmodQ$
某一主存块j按模Q映射到缓存的第i组中的任一块
段相连映像
段相联映象是直接映象和全相联映象结合的另一种方式。
它是把主存和Cache都分成若干段,且使它们每段包含的块数都相等,段之间采用全相联映象,段内块之间采用直接映象。
当段数与Cache块数相等时,为全相联映象;当段数为1时为直接映象。
替换算法
替换算法的目标,是使Cache获得最高的命中率,就是让Cache中总是保持着使用频率高的数据,从而使CPU访问Cache的成功率最高
先进先出法(FIFO)
近期最少使用算法(LRU)
随机法
Cache的读写操作
读
写
由于Cache内容只是内存的一部分内容拷贝,它应当与主存内容保持一致。而CPU对Cache的写入更改了Cache中的内容。如何保持内存与Cache内容的一致性,有以下几种策略。
全写法(写直达法)
当写Cache命中时,CPU对主存和Cache同时进行写作,可较好的维护Cache与内存的一致性;
当未命中时,CPU只直接写入内存
特点:
- 可完全保持内存和Cache的一致性
- 由于对主存访问频繁,故在一定程度上降低了Cache的高速缓冲功能
全写法(写直达法)
当CPU写Cache命中时,只修改Cache中的内容,而不立即写入主存,只有当该块被换出到内存时才写回主存
当CPU写Cache未命中时,将此块拷贝到Cache中进行修改,而主存的写操作统一留到该块被换出时才进行特点:
- 写操作都是在Cache完成的,效率较高
- 写内存和写Cache是异步进行的,故存在内存和Cache不一致隐患
Cache的改进
- 增加Cache的级数
- 统一缓存和分开缓存