一、存储系统的基本概念
1.1 存储器的分类:
1.1.1 按在计算机中的作用(层次)分类
主存储器:主存,又称内存储器(内存),用来存放计算机运行期间所需的程序和数据,CPU可以直接随机地对其进行访问,也可以和高速缓冲存储器及辅助存储器交换数据。
辅助存储器:辅存,又称外存储器(外存),用来存放当前暂时不用的程序和数据,以及一些永久性保存的信息。
高速缓冲存储器:简称Cache,介于主存和CPU之间,用来存放当前CPU经常使用的指令和数据,以便CPU可以高速访问他们。
1.1.2 按存储介质分类
磁表面存储器:磁盘,磁带
磁芯存储器
半导体存储器:MOS型存储器,双极性存储器
光存储器:光盘
1.1.3 按存取方式分类
随机存储器:存储器中的任何一个存储单元都可以随机存取,而且存取时间与存储位置无关。
只读存储器:存储器的内容只能随机读出而不能随机写入。信息一旦写入存储器就固定不变,即使断电,内容也不会丢失。
串行访问存储器:对存储单元进行读/写操作,需要按照物理地址去寻址。
1.1.4 按信息的可保存性分类
易失性存储器
非易失性存储器
1.2 存储器的性能指标
- 存储容量 = 存储字数 X 字长
- 单位成本:每位价格 = 总成本 / 总容量
- 存储速度:数据传输率 = 数据的宽度 / 存取周期
- 存取时间:存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间
- 存储周期:存取周期又称读写周期或访问周期。
- 主存带宽:表示每秒从主存进出信息的最大数量,单位为字/秒。
1.3 多级层次的存储系统
二、主存储器
2.1 DRAM芯片和SRAM芯片
2.1.1 DRAM的工作原理(动态RAM)
动态随机存储器(DRAM)是利用存储元电路中的栅极电容上的电荷来存储信息的(读出1:MOS管接通,电容放电,数据线上产生电流;读出0:MOS管接通后,数据线上无电流),DRAM的基本存储元通常只使用一个晶体管,所以他比SRAM的密度要高的。(破坏性读出)
DRAM具有容易集成,价位低,容量大和功耗低等优点,但DRAM的存取速度要比SRAM的慢,一般用于大容量的主存系统。
DRAM上的电荷一般只能存储2ms,因此即使电源不断电,信息也会自动消失,因此,每隔一定时间必须刷新。每次刷新一行存储单元,利用行列地址来减少选通线的数量。
假如DRAM内部结构排列成128 X 128的形式,读/写周期0.5us(2ms一共4000个周期)
常用的刷新方式有三种:
- 刷新方式一:每次读写完都刷新一行,系统的存取周期变为1us,前0.5us时间用于正常读写,后0.5us时间用于刷新某行。
- 刷新方式二:2ms内集中安排时间全部刷新,系统的存取周期还是0.5us,有一段时间专门用于刷新,无法访问存储器,称为访存死区。
- 刷新方式三:2ms内需要产生128次刷新请求,每个2ms / 128 = 15.6us一次,每15.6us中有0.5us的死时间。
2.1.2 SRAM的工作原理(静态RAM)
通常把存放一个二进制位的物理器件称为存储元,他是存储器的最基本的构件。地址码相同的多个存储元构成了一个存储单元,若干个存储单元的集合构成了存储体。
静态随机存储器的存储元是用双稳态触发器来记忆信息的,因此即使信息被读出后,它仍保持其原状态而不需要再生(非破坏性读出)。
SRAM的存取速度快,但集成度低,功耗较大,价格昂贵,一般用于高速缓冲存储器。
2.1.3 SRAM和DRAM的比较
类型特点 | SRAM(静态RAM) | DRAM(动态RAM) |
存储信息 | 触发器 | 电容 |
破坏性读出 | 非 | 是 |
读出后需要重写?(再生) | 不用 | 需要 |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
发热量 | 大 | 小 |
存储成本 | 高 | 低 |
易失/非易失存储器 | 易失(断电后信息消失) | 易失(断电后信息消失) |
需要“刷新” | 不需要 | 需要 |
送行列地址 | 同时送 | 分两次送 |
主要用途 | 高速缓存 | 主机内存 |
2.1.4 DRAM的地址线复用技术
2.2 只读存储器(*ROM)
2.2.1 只读存储器(ROM)的特点
ROM和RAM都是支持随机访问的存储器,其中SRAM和DRAM都是易失性半导体存储器,而ROM中一旦有了信息,就不能轻易改变,即使掉电也不丢失。
ROM器件有两个显著的优点:
- 结构简单,所以位密度比可读写存储器的高
- 具有非易失性,所以可靠性高
2.2.2 ROM的类型
- 掩模式只读存储器(MROM)
- 一次可编程存储器(PROM)
- 可擦除可编程只读存储器(EPROM)
- Flash存储器
- 固态硬盘(SSD)
2.2.3 总结
- 很多芯片虽然名字是"Read-Only",但很多ROM也可以"写"
- 闪存的写速度一般比读速度更慢,因为写入前要先擦除
- RAM芯片是易失性的,ROM芯片是非易失性的。很多ROM也具有“随机存取“的特性
三、主存储器和CPU之间的连接
想要扩展主存子树怎么办?——字扩展
数据总线宽度 > 存储芯片字长怎么办?——位扩展
现在的计算机MAR、MDR通常集成在CPU内部。存储芯片内只需要一个普通的寄存器(暂存输入、输出数据)
3.1 单块存储芯片与CPU之间的连接
3.2 多块存储芯片与CPU之间的连接
增加主存的存储字长——位扩展
增加主存的存储字数——字扩展
线选法 | 译码器选法 |
n条线——n个选片信号 | n条线——2^n个选片信号 |
电路简单 | 电路复杂 |
地址空间不连续 | 地址空间可连续 |
主存容量扩展——字位同时扩展
3.3 译码器
四、外存储器
4.1 磁盘存储器
计算机的外存储器又称为辅助存储器,目前主要适用磁表面存储器。
4.1.1 磁盘设备的组成
磁盘设备的组成:
磁盘驱动器:核心部件是磁头组件和盘片组件,
磁盘控制器:硬盘存储器和主机的接口
盘片:一块硬盘含有若干记录面,每个记录面划分为若干磁道,而每条磁道又划分为若干扇区,扇区是磁盘的最小单位,即磁盘按块存取。
磁头数:记录面数
柱面数:有多少条磁道
扇区数:表示每条磁道上有多少个扇区
4.1.2 磁盘的性能指标
磁盘的容量:一个磁盘所能存储的字节总数称为磁盘容量。磁盘容量有非格式化容量和格式化容量之分。
非格式化容量是指磁记录表面可以利用的磁化单元总数。
记录密度:记录密度是指盘片单位面积上记录的二进制的信息量,通常以道密度、位密度和面密度表示。
平均存取时间 = 寻道时间(磁头移动到目的磁道)+旋转延迟时间(磁头定位到所在扇区)+ 传输时间(传输数据所花费的时间)
数据传输率:磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。
假如磁盘的转数为r(转/秒),每条磁道容量为N个字节,则数据传输率为Dr = r * N
4.1.3 磁盘的地址
主机向磁盘控制器发送寻址信息,磁盘的地址一般如图所示:
4.1.4 磁盘的工作过程
磁盘的主要操作是寻址,读盘,写盘。每一个操作都对应一个控制字,硬盘工作时,第一步是取控制字,第二步是执行控制字。
硬盘属于机械式部件,其读写操作是串行的,不可能在同一时刻即读又写,也不可能在同一时刻读两组数据或写两组数据。
4.1.5 磁盘阵列
RAID(廉价冗余磁盘阵列)是将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储,并行访问,具有更好的存储性能、可靠性和安全性。
4.2 固态硬盘SSD
原理:基于闪存技术Flash Memory,属于电可擦除ROM,即EEPROM
组成:闪存翻译层——负责翻译逻辑块号,找到对应的页。存储介质:多个闪存芯片。
五、高速缓冲存储器
由于程序的转移概率不会很低,数据分布的离散性较大,所以单纯依靠并行主存系统提高主存系统的。这就必须从系统结构上进行改进,即采用存储体系。通常将存储系统分为Cache——主存层次和主存——辅存层次。
5.1 程序访问的局部性原理
程序访问的局部性原理包括时间局部性和空间局部性。时间局部性是指在最近的未来要用到的信息,很可能是现在正在使用的信息,因为程序中存在循环。空间局部性是指在最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是临近的,因为指令通常是顺序存放、顺序执行的,数据一般也是以向量、数组等形式存储在一起的。
5.2 Cache的基本工作原理
Cache位于存储器层次结构的顶层,通常由SRAM构成。为了便于Cache和主存间交换信息,Cache和生存都被划为相等的块,由于Cache的容量远小于主存的容量,所以Cache仅仅保存主存中最活跃的若干块的副本。
命中率的计算:
设一个程序执行期间,Cache的总命中次数为Nc,访问主存的总次数为Nm,则命中率为:H = Nc(Nc + Nm)。
平均访问时间的计算:
设tc为命中时的Cache访问时间,tm为未命中时的访问时间,1 - H表示未命中率,则Cache——主存系统的平均访问时间Ta为:Ta = Htc + (1 - H)tm 或 Ta = Htc + (1 - H)(tm + tc)
5.3 Cache和主存的映射关系
直接映射
主存中的每一块只能装入Cache中的唯一位置,如果这个位置已经有内容,则产生块冲突,原来的块将无条件地被替换出去。直接映射的块冲突最高,空间利用率最低。
Cache行号 = 主存块号 mod Cache总行数
全相联映射
主存中的每一块可以装入Cache中的任何位置,每行的标记用于指出该行取自主存中的那一块,所以CPU访问时需要与所有Cache行的标记进行比较。全相联映射的优点是:Cache的冲突概率低,空间利用率高,命中率高。
组相联映射
将Cache分为Q个大小相等的组,每个主存块可以固定装入组中的任意一行,
Cache组号 = 主存块号 mod Cache组数
5.4 Cache替换算法
随机算法
随机地确定替换的Cache块。它的实现比较简单,但未依据程序访问的局部性原理,因此命中率较低。
先进先出算法
选择最早调入的行进行替换。它比较容易实现,但未依据程序访问的局部性原理
近期最少使用算法
依据程序访问的局部性原理,选择近期内长久没被访问的Cache行作为替换的行。
计数器变换规则:
命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变;
未命中且还有空闲行时,新装入的行的计数器置为0,其余全部加1;
未命中其无空闲行时,计数值最大的块被淘汰,新装的块的计数器置为0,其余全部加1。
最不经常使用算法
将一段时间内被访问次数最少的存储行换出,每行设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的行计数器加1,将最小值进行替换。
5.5 Cache写策略
写命中
全写法:当CPU对Cache写命中时,必须把数据同时写入Cache和主存。当某一块需要替换时,不必将这一块写会主存,用新调用的块直接覆盖即可。
回写法:当CPU对Cache写命中时,只把数据写入Cache,而不立即写入主存,只有当此块被换出时才写回主存。
写不命中
写分配法:加载主存中的块到Cache中,然后更新这个Cache块,它试图利用程序的空间局部性,但是缺点是:每次不命中都需要从主存中读取一块。
非写分配法:只写入主存,不进行调块。
六、虚拟存储器
主存和辅存共同构成了虚拟存储器,二者在硬性和系统软件的共同管理下工作。对于应用程序员而言,虚拟存储器是透明的,虚拟存储器具有主存的速度和辅存的容量。
6.1 虚拟存储器的基本概念
虚拟存储器将主存或辅存的地址空间统一编址,形成了一个庞大的地址空间,在这个空间内,用户可以自由编程,而不必在乎实际上的主存容量个程序在主存中实际的存放位置。
6.1 页式存储器(存储在主存中)
页式虚拟存储器以页为基本单位。虚拟空间与主存空间都被划分为同样大小的页,主存的页被称为实页,虚存的页被称为虚页。把虚拟地址分为两个字段,虚页号和页内地址。
6.1.1 页表
6.1.2 快表
根据局部性原理,如果我们在一个页表中,找到了一个页表框,我们需要将该页表项复制到快表(TLB)中,在之后的查找中,我们会进行查看是否TLB命中。逻辑地址 = 逻辑页号 + 页内地址(虚地址 = 虚页号 + 页内地址);物理地址 = 主存块号 + 页内地址(实地址 = 实页号 + 页内地址)
6.2 虚拟存储器
6.2.1 对页表进行更一步地理解
6.2.2 存储器的层次结构
段式虚拟存储器——按照功能模块拆分,拆分的页面大小不相等。虚拟地址 = 段号 + 段内地址。
段页式虚拟存储器——按照功能模块分段,再讲各个段分页。
把程序按逻辑结构进行分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。每个程序对应一个段表,每段对应一个页表。
虚拟地址 = 段号 + 段内页号 + 页内地址