计算机组成知识点整理(5):存储器
Last updated on June 7, 2025 pm
这是SJTU-ICE2603《计算机组成》课程的知识点整理系列。本文整理部分为“第5章:存储器”。
5.1 引言
5.1.1 局部性原理
- 时间局部性:
- 定义:如果某个数据项被访问,那么在不久的将来它可能再次被访问
- 举例:循环体中的指令、归纳变量
- 空间局部性:
- 定义:如果某个数据项被访问,与它地址相邻的数据项可能很快也将被访问
- 举例:顺序访问指令、数组元素
5.1.2 存储层次结构
- 特点:离处理器越近,访问速度越快,价格越昂贵,容量越小
- 目的:以最低的价格为用户提供最大容量的存储,同时访问速度与最快的存储相当
- 层次结构:磁盘 主存储器 (DRAM) cache (SRAM)
- 基本概念:
- 块(行):相邻两层之间进行信息交换的最小单元
- 命中率:命中次数 / 总访问次数
- 缺失损失:将数据块从下层存储复制至某层所需的时间
5.2 存储技术
5.2.1 SRAM
- 存储原理:每比特采用多个晶体管(读操作时信息不会丢失)
- 刷新机制:不需要刷新,访问时间和处理器的时钟周期接近
5.2.2 DRAM
- 存储原理:电荷存储在电容中,通过单个晶体管访问(比 SRAM 密度高)
- 刷新机制:不能长久保持数据,必须进行周期性刷新,即读出一行内容后重新写回
- 优化技术:
- 行缓冲器:允许并行地读取或刷新多个字
- 同步 DRAM:使用时钟消除了内存和处理器之间的同步问题
- 突发传输:允许以突发方式连续访问而无需发送每个地址,提高带宽
- DDR:在时钟的上升沿和下降沿都传输,双倍数据带宽
- 多体 DRAM:允许同时访问多个 DRAM,提高带宽
5.2.3 闪存
- 属性:非易失性的半导体存储器
- 与磁盘相比:更快、更小、更坚固、功耗更低、单位成本更高
- 特点:写操作会对器件本身产生磨损
- 耗损均衡:将数据重新映射到较少使用的块中,使得写操作尽量分散
- 分类:
- NOR 闪存:随机读/写访问,如嵌入式系统中的指令存储器
- NAND 闪存:每次只能访问一个块,如 U 盘、媒体存储器
5.2.4 磁盘
- 属性:非易失、转动的磁介质存储器
- 基本概念:
- 磁道:磁盘表面上千同心圆中的一个
- 扇区:磁盘磁道上的一段,是读写磁盘信息的最小单位
- 数据访问过程(访问时间):
- 磁头移动到正确的磁道上方(寻道时间)
- 所需扇区旋转到读写磁头下(旋转延时)
- 传输数据块(传输时间)
5.3 cache
众所周知,cache 是第五章的重点。
5.3.1 cache 基础
- cache 数据块:索引 + 有效位 + 标记 + 数据
- 索引:用来选择数据块(块地址低位)
- 标记:记录块地址信息(块地址高位),用于确定所需数据块是否在 cache 中
- 有效位:表示该表项中是否保存了有效数据
- 地址分解:
标记 | 索引 | 偏移
- cache 缺失处理:阻塞 CPU 流水线,从下一层级取块
- 增大块容量:缺失率先降低后升高、失效损失更大
- 提高主存储器带宽:更高效地传输 cache 块,减小缺失损失
- 方法:加宽主存、交叉访问
5.3.2 地址映射方式
- 直接映射:每个存储地址都被直接映射到 cache 中的确定位置
- cache 块号:由
块地址 % cache块数
决定
- cache 块号:由
- 全相连映射:数据块可以存放在 cache 的任意位置
- 比对方式:每次搜索所有的项,每项用一个比较器,硬件开销大
- 组相连映射:每个数据块在 cache 中有 n 个位置可放
- cache 组号:
块地址 % cache组数
- 比对方式:每次搜索给定组的所有项,n 个比较器
- 缺失率:相连度 n 增大,缺失率先下降后几乎不变
- 缺失率高于全相连,但访问速度更快
- cache 组号:
5.3.3 替换策略
- 最近最少使用(LRU):优先替换最久未访问的块
- 随机替换:高相连度下性能接近LRU
5.3.4 写策略
- 写直达:同时更新 cache 和主存,需写缓冲降低延迟
- 写缺失处理:写分配(取入 cache 并更新)、写不分配(只更新主存)
- 写回:仅更新 cache,替换时写回主存,需脏位标记修改过的块
- 写缺失处理:通常写分配(取入 cache 并更新)
5.3.5 cache 的性能评估
-
CPU 时间:
- 当 CPU 性能提升时,缺失代价更为显著
- 减小基本 CPI,内存阻塞耗时的比例更大
- 增加时钟速率,存储器阻塞占用更多的 CPU 周期
-
平均存储器访问时间:
5.3.6 多级 cache
- 目的:降低缺失代价
- 设计考虑:
- 一级 cache:侧重于最小命中时间
- 二级 cache:侧重于低缺失率,避免访问主存储器
- 结果:一级 cache 通常容量更小、数据块大小更小
5.3.7 软件优化
- 缺失取决于存储器访问模式(算法行为、编译器对存储器访问的优化)
- 目标:在数据被替换之前尽量多用到
- 方法:分块放入 cache 运算(矩阵乘法)
5.4 可靠性与虚拟机
5.4.1 可信性
- 可靠性:系统能够持续提供用户需求的服务的度量
- 度量方法:平均无故障时间(MTTF,mean time to failure)
- 平均修复时间(MTTR,mean time to repair)
- 平均失效间隔时间(MTBF,mean time between failures)
- 可用性:系统正常工作时间在连续两次服务中断间隔时间中所占的比例
- 提高可用性:
- 增大 MTTF:故障避免技术、故障容忍技术、故障预报技术
- 减小 MTTR:改进用于诊断和修复的工具与流程
5.4.2 汉明编码
- 汉明距离:两个二进制数的相异位数
- 1 位奇偶校验:仅用于检测 1 位错误
- 汉明纠错码:纠正 1 位错并检测 2 位错
- 计算步骤:
- 从左侧由 1 开始逐位编号
- 所有位于 2 的幂的数位是奇偶校验位,剩余其他位用于数据位
- 奇偶校验位的位置决定了其对应的数据位(校验位 检查编号最右第 位为 1)
- 设置奇偶校验位,为各组进行偶校验
- 校验位数:,其中 表示校验位的位数, 表示数据位的位数
- 校验步骤:奇偶校验位的值指出了出错的位,可纠 1 位错
- 检测 2 位错:为整个字附加一个奇偶校验位
- 计算步骤:
5.4.3 虚拟机
- 作用:更好地隔离多客户、避免安全性和可靠性问题、有助于资源共享
- 虚拟机监视器:支持虚拟机的软件
- 将虚拟资源映射到物理资源、隔离客户端状态
- 控制特权态的访问、I/O、例外和中断等
- 指令集支持:分为用户模式和系统模式
- 特权指令仅在系统模式下可用
- 所有物理资源只允许用特权指令访问
5.5 虚拟存储器
5.5.1 基本概念
- 虚拟存储:将主存储器作为辅存的 cache 使用
- 动机:允许多个程序高效安全地共享内存、允许单用户程序使用超出内存容量的内存
- 页:虚拟存储器的基本单位
- 地址转换:CPU 和 OS 将虚拟地址转换为物理地址
- 虚拟地址:高位为虚拟页号,低位为页内偏移
- 物理地址:高位为物理页号,低位为页内偏移
- 页表:位于内存中,保存着虚拟页号和物理页号之间的转换关系
- 缺页代价:缺页时必须从磁盘取这一页
- 降低缺页率:以全相联方式放置、智能的替换算法
5.5.2 页表
- 页表:页表项构成的数组,按虚页号索引
- 有效位为有效:页表项存储物理页号及其他状态位(引用位、脏位等)
- 有效位为无效:页表项指向它在磁盘交换区中的位置
- 页表寄存器:位于 CPU 中,指向页表首地址
5.5.3 替换与写
- 替换策略:最近最少使用(LRU)
- 写策略:写回策略,原因是写磁盘时间开销大
5.5.4 TLB
- 快表(TLB):页表的 cache,记录最近使用的地址映射信息,避免每次访问页表
- TLB 缺失:
- 页在内存中:从内存读页表项,更新 TLB,然后重试
- 页不在内存中:OS 进行取页并更新页表,然后重启引起缺页的指令
graph TD
A[虚拟地址] --> B{TLB命中?}
B -- 是 --> C[获取物理地址]
B -- 否 --> D[查页表]
D --> E{页在内存?}
E -- 是 --> F[更新TLB并获取物理地址]
E -- 否 --> G{主存有空闲页?}
G -- 否 --> H[磁盘页读入主存]
G -- 否 --> I[选一页替换]
I --> H[页读入主存]
H --> J[更新页表和TLB]
C --> K[cache命中?]
F --> K[cache命中?]
K -- 是 --> L[读cache数据]
K -- 否 --> M{cache有空闲块?}
M -- 是 --> N[主存块读入cache]
M -- 否 --> O[选一块替换]
O --> N[主存块读入cache]
N --> L[读cache数据]
5.5.5 存储器保护
- 共享内存:不同任务可以共享其部分虚拟地址空间,但要防止不当访问
- 保护方式:页表和其他状态信息只在超级用户模式下可访问
5.6 存储层次结构的一般框架
5.6.1 块的放置
- 放置方式:取决于相连度
- 直接相连:1 个放置选择
- n 路组相连:1 组中有 n 种选择
- 全相连:任意位置
- 增加相连度:
- 好处:降低失效率
- 坏处:增加了复杂度、成本和访问时间
5.6.2 块的查找
- 查找方式:取决于放置方式
相联度 | 定位方法 | 比较标记的次数 |
---|---|---|
直接映射 | 索引 | 1 |
n 路组相联 | 组索引,然后查找组内的项 | n |
全相联 | 查找所有的项 | 项数 |
全相连 | 整个查找表 | 0 |
- cache:减少比较的次数以降低成本
- 虚拟存储器:全相联有利于降低缺失率
5.6.3 替换策略
- 最近最少使用(LRU):对于高相联度,硬件复杂而且成本高
- 虚拟存储器:硬件支持近似 LRU 算法
- 随机:接近LRU,容易实现
5.6.4 写策略
- 写直达:简化了替换,但可能需要写缓冲
- 写回:需要保存更多状态信息
- 虚拟存储器:写磁盘高延迟,只能写回
5.6.5 缺失的来源
- 强制缺失:首次访问一个块时
- 容量缺失:由于 cache 的大小有限,被替换掉的块随后又被访问到
- 冲突缺失:在非全相连 cache 中,很多块为了竞争同一个组导致的缺失
设计变化 | 对缺失率的影响 | 对性能的负面影响 |
---|---|---|
增加 cache 容量 | 减少了容量缺失 | 可能增加访问时间 |
提高相联度 | 减少了冲突缺失 | 可能增加访问时间 |
增加块大小 | 减少了强制缺失 | 增加缺失代价,块太大会增加缺失率 |
5.7 cache 一致性
- 基本操作:
- 迁移:数据到本地 cache 的迁移,减少对共享存储器带宽的需求
- 复制:读共享数据的复制,减少由访问导致的竞争
- 监听协议:每个 cache 监视总线的读/写
- 写无效协议:cache 要写一个块时,获得独占访问
- 写入时使得其他 cache 中的副本无效
- 写无效协议:cache 要写一个块时,获得独占访问
历年真题
- 下列对于 Cache 的性能或作用的描述不正确的是
- A:Cache 的设计是利用了指令和数据的时间局部性和空间局部性原理
- B:对于分体 Cache,指令 Cache 的缺失率要小于数据 Cache 的缺失率
- C:对于分体 Cache,指令 Cache的局部性要强于数据 Cache的局部性
- D:设计巧妙的 Cache,可以让 CPU 的所有访问都在 Cache 中命中
- 下列关于 Cache 和虚拟存储器的表述,不正确的是
- A:虚拟存储器的内容替换是由硬件产生的缺页异常引发操作系统控制完成的
- B:Cache 缺失时的内容替换是由硬件控制自动完成的
- C:Cache 和主存统一编址,Cache 的地址空间是主存地址空间的一部分
- D:处理器的地址大小决定了虚拟存储器空间的大小,但与 Cache 的大小无关
- CPU从下列存储器中访问数据速度最快的是
- A:高速缓存
- B:磁带
- C:磁盘
- D:内存
- 关于虚拟存储器中进行虚拟地址变换的快表 TLB/TB,下述不正确的表述是
- A:TLB 是一块专门用来快速变换虚存地址的专用地址变换 Cache
- B:快表 TLB 中缓存经常使用的程序指令及其存储地址
- C:这块特殊专用的 TLB 中缓存的是经常需要访问的页表项
- D:TLB 一般采用全相联映射,需要并行比较所有表项,所以表项不易做的很大
- 组成常用的虚拟存储器寻址系统的两级存储器是
- A:主存和辅存
- B:缓存和主存
- C:以上都不对
- D:缓存和辅存
- 以下说法不正确的是
- A:虚拟内存的主要目的是允许多个程序之间有效而安全的共享主存,并且消除一个小而受限的主存对程序的影响;
- B:处理器的地址空间大小决定了虚拟存储器空间的大小,与 cache 的大小无关
- C:主频是 2GHz 的一款处理器一定比另一款主频为 1.2GHz 的处理器运行速度快
- D:硬件层次的指令级并行执行不需要编程者的干预
- 在虚拟存储器中,程序正在执行时,完成地址映射的是
- A:编译器
- B:Cache 控制器
- C:操作系统
- D:程序员
- 下列说法正确的是
- A:Cache 技术应用带来了 CPU 数据存取性能提升,因此可以加速 CPU 与 I/O 设备的通信速度
- B:CPU 的字长与其外部数据总线宽度不一定相等
- C:由于二进制计算在实现技术上的优势,因此所有的计算机都是采用此方式来运作
- D:在不支持浮点运算的 CPU 组成的计算机上无法运行带有浮点运算的程序
- RAID(Redundant Arrays of Inexpensive Disks,廉价磁盘冗余阵列)技术特点不正确的是
- A:RAID 技术能够提供高可靠性的存储能力,但不是任何磁盘故障引起的数据损失都可以修复
- B:提升 I/O 带宽
- C:RAID 技术让用户在 I/O 性能和可靠性之间二选一,二者不可兼得
- D:通过增加冗余,使系统能够在不丢失信息的情况下一定程度上容忍磁盘故障
- (大题)cache
- 给参数算 tag、index、offset 长度
- 给定策略模拟访问,算缺失命中情况
- 该 cache 所需要空间和实际存储空间的位数比
- (大题)一个多核处理器,其每个核都有 L1、L2 cache,所有核的 L2 cache 连接到一个统一的 L3 cache,L3 cache 连接内存,只有 L1 分为指令 cache 和数据 cache
- 问这种设计如何结合了普林斯顿结构和哈佛结构
- 多核情况下 cache 一致性问题的产生和解决方法
Reference
https://gist.github.com/smallaccount101/6324d7c82d103783f21b7cc6da7d0f7c
计算机组成知识点整理(5):存储器
https://cny123222.github.io/2025/05/15/计算机组成知识点整理-5-:存储器/