导图社区 第三章 存储系统
这是一个关于第三章 存储系统的思维导图,包含存储器概述、主存储器、主存储器与CPU的连接、外部存储器等。
编辑于2024-01-16 15:52:21第三章 存储系统
存储系统
存储器概述
存储器的分类
作用(层次)分类
主存储器
辅助存储器
高速缓冲存储器
存取方式分类
随机存储器(RAM)
只读存储器(ROM)
串行访问存储器
顺序存取存储器(SAM) (如磁带)
直接存取存储器(DAM) (如磁盘、光盘)
信息的可保存性分类
易失性存储器
非易失性存储器
存储器的性能指标
存储容量
单位成本
存储速度
多级层次的存储系统
各级存储器中的信息是包容关系
Cache-主存层
主要解决CPU 和主存速度不匹配的问题
主存和Cache之间的数据调动是由硬件自动完成的,对所有程序员均是透明的
主存-辅存层
主要解决存储系统的容量问题
主存和辅存之间的数据调动则是由硬件和操作系统共同完成的,对应用程序员是透明的
在Cache-主存层和主存辅存层中,上一层中的内容都只是下一层中的内容的副本, 也即Cache(或主存)中的内容只是主存(或辅存)中的内容的一部分。
主存中数据的存放
主存通常按字节进行编址。以 32 位计算机为例,主存既可以按字节访问, 也可以按 16 位半字访问, 还可以按照 32 位的字进行访问。
数据的边界对齐
从理论上讲可以从任何字节地址开始,但当一个多字节变量分布在不同的字存储单元中时,访问该变量就需要多个存储周期。
所谓边界对齐就是按照数据类型的大小进行边界对齐,具体规则如下。
(1)八字节数据起始字节地址的最末 3 位为 000,地址是 8 的整数倍。 (2)四字节数据起始字节地址的最低两位为 00,地址是 4 的整数倍。 (3)双字节数据起始字节地址的最低一位为 0,地址是 2 的整数倍。 (4)单字节数据不存在边界对齐问题(主存按字节编址)。
主存储器
SRAM芯片和DRAM芯片
SRAM的工作原理
存储元是用双稳态触发器(六晶体管MOS)
非破坏性读出
DRAM的工作原理
利用存储元电路中栅极电容上的电荷来存储信息
刷新方式
集中刷新
在一个刷新周期内,利用一段固定的时间,依次对存储器的所有行进行逐一再生。
优点是读写操作时不受刷新工作的影响。 缺点是在集中刷新期间(死区)不能访问存储器。
分散刷新
存储芯片的存取周期为0.5μs, 则系统的存取周期为1μs。
一个存储器的系统工作周期分为两部分: 前半部分用于正常读、写或保持。后半部分用于刷新。
优点是没有死区。 缺点是加长了系统的存取周期,降低了整机的速度。
异步刷新
异步刷新是前两种方法的结合,它既可缩短“死时间”,又能充分利用最大刷新间隔为2ms的特点。
将刷新周期除以行数,得到两次刷新操作之间的时间间隔t,利用逻辑电路每隔时间t产生一次刷新请求。
避免使CPU连续等待过长的时间,而且减少了刷新次数,从根本上提高了整机的工作效率。
DRAM芯片的读写周期
SRAM和DRAM的比较
存储器芯片的内部结构
存储体(存储矩阵)
地址译码器
I/O控制电路
片选控制信号
读/写控制信号
只读存储器
只读存储器(ROM)的特点
ROM和RAM都是支持随机访问的存储器。
结构简单,所以位密度比可读写存储器的高
具有非易失性,所以可靠性高
ROM的类型
掩模式只读存储器
一次可编程只读存储器
可擦除可编程只读存储器
Flash存储器
固态硬盘(Solid State Drives,SSD)
主存储器的基本组成
多模块存储器
单体多字存储器
单体多字存储器的构造与存储器位扩展方式完全相同,该方式中多个存储模块共享地址总线,按同一地址并行访问不同存储模块的同一单元,从而实现在同一个存储周期内访问多个存储字,如果 m 个存储模块并发工作,则主存带宽可提升 m 倍。
目前在计算机中常见的多通道内存技术就是采用的单体多字技术。
一次并行读出m个字(总线宽度也为m个字)。
在一个存取周期内,从同一地址取出m条指令,然后将指令逐条送至CPU执行,即每隔1/m存取周期,CPU向主存取一条指令。
缺点:指令和数据在主存内必须是连续存放的,一且遇到转移指令,或操作数不能连续存放这种方法的效果就不明显。
多体并行存储器
高位交叉编址(顺序方式)
主要目的是扩充存储器的容量,与存储器字扩展完全相同。
低位交叉编址(交叉方式)
同一个体内的最低位地址是相同的
主存储器与CPU的连接
连接原理
主存容量的扩展
位扩展法
字扩展法
字位同时扩展法
存储芯片的地址分配和片选
线选法
线选法用除片内寻址外的高位地址线直接(或经反相器)分别接至各个存储芯片的片选端, 当某地址线信息为“0”时,就选中与之对应的存储芯片。
缺点:地址空间不连续。
译码片选法
用8片8Kx8 位的存储芯片组成64Kx8位存储器(地址线为16位,数据线为8位),需要8个片选信号。
若采用线选法,除去片内寻址的13位地址线,仅余高3位,不足以产生8个片选信号。
存储器与CPU的连接
合理选择存储芯片
地址线的连接
CPU的地址线数往往比存储芯片的地址线数要多。通常将CPU地址线的低位与存储芯片的地址线相连。 可以不等。
数据线的连接
在不等时必须对存储芯片扩位,使其数据位数与CPU的数据线数相等。 必须相等。
读/写命令线的连接
片选线的连接
片选有效信号与CPU的访存控制信号MREO(低电平有效)有关。
若CPU访问I/O,则MREO为高,表示不要求存储器工作。
SRAM 芯片的控制线包括片选信号和读写控制线。
DRAM 没有片选控制线,进行容量扩展时,可以利用RAS和CAS控制芯片的选择。
外部存储器
磁盘存储器
磁盘设备的组成
硬盘存储器的组成
磁盘驱动器
磁盘驱动器又称为磁盘机,主要功能是利用电信号驱动磁盘盘片完成磁操作,由主轴驱动、定位驱动及数据控制三个部分组成。
磁盘控制器
主要功能是接收主机的磁盘操作、实现驱动器控制、实现读/写控制,硬件主要由主机接口、设备接口控制电路、数据缓冲器、数据控制电路、数据分离电路等组成。
盘片
主要功能是存储数据。硬盘通常有多个盘片,都固定在主轴上。 工作时都采用匀速转动方式,因而,内圈磁道的记录密度比外圈磁道的记录密度要高。
存储区域
磁头数(Heads)
柱面数(Cylinders)
扇区数(Sectors)
磁记录原理
通过电磁转换完成读/写操作。
磁盘的性能指标
记录密度
磁盘的容量
平均存取时间
平均存取时间由寻道时间(磁头移动到目的磁道的时间)、旋转延迟时间(磁头定位到要读写扇区的时间)和传输时间(传输数据所花费的时间)三部分构成。由于寻道和找扇区的距离远近不一,故寻道时间和旋转延迟时间通常取平均值。(真题有时还给出磁盘控制器的延迟时间。)
数据传输率
磁盘地址
硬盘的工作过程
寻址
读盘
写盘
磁盘阵列
将多个独立操作的磁盘按某种方式组织成阵列,采用数据分块技术,将数据交错存放在不同磁盘上,使它们并行工作来提高访问速度
RAID通过同时使用多个磁盘,提高了传输率
通过在多个磁盘上并行存取来大幅提高存储系统的数据吞吐量
不仅扩大了存储容量而且提高了磁盘数据存取速度
交叉存储、并行访问
提高可靠性
通过镜像功能,提高安全可靠性
通过数据校验,提供容错能力
固态硬盘
组成
一个或多个闪存芯片 (类似:磁盘驱动器)
闪存翻译层 (类似:磁盘控制器 将来自CPU的逻辑块读写请求翻译成对底层物理设备的读写控制信号)
数据是以页为单位读写的。
只有在一页所属的块整个被擦除后,才能写这一页。
不过,一但一个块被擦除,块中的每个页都可以直接再写一次。
随机写很慢,有两个原因
擦除块比较慢。
如果写操作试图修改一个包含已有数据的页P,那么这个块中所有含有用数据的页都必须被复制到一个新(擦除过的)块中,才能进行对页P的写。
优缺点
优点
随机访问比机械磁盘要快很多
没有任何机械噪声和震动
能耗更低
抗震性好
安全性高
缺点
容易磨损
高速缓冲存储器
程序访问的局部性原理
时间局部性
最近的未来要用到的信息,很可能是现在正在使用的信息,因为程序中存在循环。
具体到数组元素,若数组元素只被访问一次,则一定没有时间局部性。
空间局部性
最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是邻近的,因为指令通常是顺序存放、顺序执行的,数据一般也是以向量、数组等形式簇聚地存储在一起的。
Cache的基本工作原理
Cache和主存都被划分为大小相等的块,Cache中的块数要远少于主存中的块数,它仅保存主存中最活跃的若干块的副本。
CPU与Cache之间的数据交换以字为单位,而Cache与主存之间的数据交换则以Cache块为单位。
当CPU发出读请求时
若访存地址在Cache中命中,就将此地址转换成Cache地址,直接对Cache进行读操作,与主存无关。
若Cache不命中,则仍需访问主存,并把此字所在的块一次性地从主存调入Cache。
若此时Cache已满,则需根据某种替换算法,用这个块替换Cache中原来的某块信息。
最终都是访问Cache
当CPU发出写请求时
若Cache命中,需要按照一定的写策略处理,常见的处理方法有全写法和回写法。
缺失时,写分配法将数据写入Cache中,非写分配法直接将数据写回主存
Cache和主存的映射方式
直接映射
Cache行号=主存块号 mod Cache总行数
全相联映射
任何位置
使用 G 个比较器,同时比较所有 Cache 行。
组相联映射
Cache组号=主存块号 mod Cache组数(Q)
二路组相联
每个Cache行对应一个标记项
包括有效位、标记位Tag、一致性维护位、替换算法控制位
Cache写策略
对于Cache写命中(write hit)
全写法(写直通法、write-through)
当 cache 写命中时,同时对 cache 和主存中的同一数据块进行修改。
写穿法的缺点是 cache 对 CPU 的写操作无缓冲功能,降低了 cache 的功效。
回写法(write-back)
每个Cache行设置一个修改位(脏位)。
这种策略使 cache 在读操作和写操作上都起到高速缓存作用。
对于Cache写不命中
写分配法(write-alocate)
加载主存中的块到Cache中,然后更新这个Cache块。
非写分配法(not-write-allocate)
只写入主存,不进行调块。
虚拟存储器
虚拟存储器的基本概念
虚拟存储器将主存或辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间内, 用户可以自由编程,而不必在乎实际的主存容量和程序在主存中实际的存放位置。
主存和辅存共同构成了虚拟存储器,二者在硬件和系统软件的共同管理下工作。
虚拟存储器的典型组织结构
虚拟地址(虚地址)
虚存页号+页内字地址
主存物理地址(实地址)
主存页号+页内字地址
CPU 以虚拟地址访问主存,使用存储管理控制部件 MMU (Memory Management Unit)找出虚拟地址和物理地址之间的对应关系,并判断这个虚拟地址对应的内容是否已经在主存中。
磁盘存储器地址(磁盘地址或辅存地址)
磁盘号+盘面号+磁道号+扇区号
虚拟存储器的工作过程
虚存-主存地址变换必须由 MMU 完成,变换失败时产生异常信号,触发执行缺页异常处理程序来完成剩余工作,并重新执行产生缺页异常的指令,以保证程序正确地执行。
最终还是从主存中获取数据, CPU不能直接访问辅存。
页式虚拟存储器
在大多数系统中,每个进程对应一个页表。
页表
页表逻辑结构示意图
主存和磁盘都分为固定大小的页面
磁盘又分为交换分区和数据分区
交换分区用于存放主存页面换出的动态修改数据
数据分区用于存储用户程序和数据
主存和磁盘两部分空间合并构成虚拟地址空间。
页式虚拟存储器的访问流程
页面命中时,CPU 硬件执行的步骤
处理器生成一个虚拟地址,并把它传送给 MMU。
MMU 利用页表基址寄存器 PTBR 和虚页号生成页表项地址 PTEA,访问存放在 cache/ 主存中的页表,请求与虚拟页号对应的页表项。
cache / 主存向 MMU 返回页表项,以构成所访问信息的物理地址。
若返回的页表项中有效位为 1,则 MMU 利用返回的页表项构造物理地址 PA,并利用构造出的物理地址 PA 访问 cache / 主存。
cache / 主存返回所请求的数据给处理器。
缺页处理流程如下
处理器生成一个虚拟地址,并把它传送给 MMU。
MMU 利用页表基址寄存器 PTBR 和虚页号生成页表项地址 PTEA,访问存放在 cache/ 主存中的页表,请求与虚拟页号对应的页表项。
cache/ 主存向 MMU 返回页表项,以构成所访问信息的物理地址 PA。
若页表项中有效位为 0,则表明所访问的页不在主存中,MMU 触发一次异常,调用操作系统内核中的缺页异常处理程序。
如果主存页满,则需要根据替换算法确定换出页。如果换出页修改位为 1,则把该页面换出到磁盘,否则直接丢弃。
缺页处理程序从磁盘中调入新的页,并更新存储器中的页表项 PTE。
缺页处理程序返回到原来的进程,驱使引起缺页的指令重新启动,本次执行将不再缺页。
结合 cache 的虚拟存储器访问流程
MMU 根据处理器发送来虚拟地址 VA,生成页表项地址访问 cache。
如果页表项 PTE 命中,则直接返回页表项,生成物理地址访问主存。
如果 页表项PTE 缺失,则需要将页表项所在的页表块从主存调度到 cache 中。
利用 PA进行数据访问时同样也可能存在 cache 缺失问题。
快表(TLB)
在包含快表和慢表的页式虚拟存储系统中,在进行地址转换时,往往会同时查快表和慢表。
按内容访问快表,按地址访问页表
TLB 命中访问流程
处理器生成虚拟地址,并把它传送给 MMU。
MMU 利用虚页号 VPN 查询 TLB。
如果 TLB 访问命中(页表项在 TLB 中且相应 PTE 中有效位为 1),则 TLB 向 MMU 返回与虚页号对应的物理页号。
MMU 利用返回的页表项(中的物理页号)构造物理地址 PA,并利用 PA 访问 cache/ 主存。
cache/ 主存返回 CPU 请求的数据给处理器。
TLB 不命中(假定访问主存命中)时的流程
处理器生成一个虚拟地址,并把它传送给 MMU。
MMU 利用虚页号 VPN 查询 TLB。
如果 TLB 访问不命中,则向 MMU 返回 TLB 访问缺失信息。
MMU 利用页表基址寄存器 PTBR 和虚页号生成页表项地址 PETA,访问存放在 cache / 主存中的页表,请求与虚拟页号对应的页表项内容。
cache / 主存向 MMU 返回页表项 PTE,以构成所访问信息的物理地址 PA。
若返回的页表项 PTE 中有效位为 1,则需要更新 TLB 表,同时利用返回的 PTE 构造物理地址 PA,并利用构造出的物理地址 PA 访问 cache / 主存。
cache / 主存返回所请求的数据给处理器。
具有TLB和Cache的多级存储系统
TLB缺失:要访问的页面的页表项不在TLB中
Page 缺失:要访问的页面不在主存中(对应页表项的有效位为0)。 对应缺页处理:载入页面 更新TLB 重启缺页指令
Cache缺失:要访问的主存块不在Cache中。 对应Cache缺失处理:从内存中调入,并重新访问Cache
段式虚拟存储器
每个程序设置一个段表。
通常,程序员把子程序、操作数和常数等不同类型的数据划分到不同的段中,并且每个程序可以有多个相同类型的段。
段表表项至少包含下面三个字段
有效位 指明该段是否已经调入实存。
段起址 指明在该段已经调入实存的情况下,该段在实存中的首地址。
段长 记录该段的实际长度。
地址转换
3种异常情况
缺段(段不存在):装人位=0。
地址越界:偏移量超出最大段长。
保护违例,操作方式与指定访问权限不符。
段页式虚拟存储器
每道程序均通过一个段表和多个页表进行两级再定位。
段表中的每个表项对应一个段,每个表项有一个指针指向该段的页表。
一个虚地址可以看作由四个字段构成
用一个段表和一组页表来指明虚存所有页在主存中的位置。
(多任务系统)段页式虚存的地址变换过程 每个程序对应一个段表,每段对应一个页表(有语义歧义,以图片为准)。
虚拟存储器与Cache的比较
相同之处
都有地址的映射、替换算法、更新策略等问题。
不同之处
Cache 主要解决系统速度,而虚拟存储器却是为了解决主存容量。
Cache全由硬件实现,是硬件存储器,对所有程序员透明。 虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。