第 3 章 名词库

这一页是复习主入口。 目标是把第 3 章的名词收全,并把每个词的边界和适用范围钉死。

每条最多四行:是(定义)/不是(划掉最常见的误解)/易混(成对的对手)/范围(该结论在什么条件下才成立)。

建设进度:✅ 3.1 存储器概述 ✅ 3.2 主存储器 ✅ 3.3 主存与 CPU 的连接 ✅ 3.4 外部存储器 ✅ 3.5 高速缓冲存储器 ✅ 3.6 虚拟存储器 (全章完整)


3.1.1 存储器的分类

主存储器(内存)

  • 是:CPU 可以用指令直接访问的存储器,掉电丢失,容量受地址空间限制。
  • 不是:不等于”内存条”。内存条只是主存中存储体的物理载体,译码驱动与控制逻辑在存储器控制器里。
  • 易混:↔ 辅助存储器(CPU 不能直接访问,必须先调入主存)。

辅助存储器(外存)

  • 是:磁盘、SSD、光盘、磁带等,不在 CPU 的地址空间内。
  • 范围:内存映射文件看起来像”直接访问文件”,实质仍是缺页调入,不构成反例。

高速缓冲存储器 Cache

  • 是:位于 CPU 与主存之间的小容量高速 SRAM,由硬件自动管理,对程序员和操作系统都透明。
  • 不是:程序里没有”访问 Cache”的指令;CPU 发出的永远是主存地址。

控制存储器 CM

  • 是:微程序控制器内部存放微指令的 ROM,属于 CPU 内部。
  • 范围:出现在第 5 章,本章只作分类项。

随机存取存储器(存取方式义)

  • 是:存取时间与被访问单元的地址无关的存储器。
  • 不是:不是”可以随便读写”的意思。ROM 同样满足这个定义,属于随机存取存储器。
  • 易混:中文缩写 RAM 同时被用作”读写存储器”,做题时看题干在比存取时间还是比可写性。

顺序存取存储器 SAM

  • 是:必须从头顺序找到目标位置,如磁带。

直接存取存储器 DAM

  • 是:先直接定位到某个小区域,再在区域内顺序查找,如磁盘、光盘。
  • 易混:↔ 随机存取。磁盘的存取时间与磁头当前位置有关,因此磁盘不是随机存取存储器。

串行访问存储器

  • 是:顺序存取与直接存取的合称,共同特征是存取时间与位置有关。

相联存储器 CAM

  • 是:按内容访问的存储器——输入检索字,所有单元并行比较,输出匹配项。
  • 范围:408 中出现在 TLB、全相联 Cache 的标记阵列、组相联的组内比较三处。
  • 易混:与”相联度”无关,后者指组相联的路数。

易失性 / 非易失性

  • 是:易失 = 断电后信息丢失。SRAM、DRAM 易失;ROM、Flash、磁盘、磁带非易失。
  • 不是:与”要不要刷新”无关。SRAM 不需要刷新但同样易失。
  • 范围:判断题”半导体 RAM 是易失的,但只要不断电所存信息就不丢失”——这句是对的,刷新是通电时的正常操作。

破坏性读出 DRO

  • 是:读操作本身改变原信息,读后必须重写。
  • 范围:只有 DRAM 和 磁芯存储器属于此类,其余均为非破坏性读出。

磁芯存储器

  • 是:早期主存,用铁氧体磁环的剩磁方向存位。
  • 范围:408 里几乎只作为”非易失 + 破坏性读出”的标准例子出现。

3.1.2 存储器的性能指标

存取时间

  • 是:从发出读写命令到数据稳定可用所经历的时间。
  • 易混:↔ 存取周期(还要加上恢复时间)。

存取周期

  • 是:连续两次独立访问之间所需的最小间隔,恢复时间。
  • 范围: 恒成立;DRAM 因读出破坏、需重写与预充电, 显著大于 。

恢复时间

  • 是:一次访问结束后存储介质回到可再次访问状态所需的时间。

主存带宽

  • 是:单位时间内能传送的数据量,每次传送位数存取周期。
  • 不是:分母不是存取时间。
  • 范围:带宽/频率/传输率的 K、M、G 按 进位,只有容量按 。

3.1.3 多级层次的存储系统

多级存储层次

  • 是:寄存器 → Cache → 主存 → 辅存,自上而下速度降、容量升、单位成本降。
  • 范围:成立的唯一前提是程序访问的局部性。

两个缓存对

  • 是:Cache—主存解决速度矛盾,主存—辅存解决容量矛盾。
  • 易混:两者是串联并存的两级,不是二选一。

平均访问时间(层次)

  • 是:,或 。
  • 范围:两种口径都合法,区别在 是”访问下一级的总时间”还是”缺失附加代价”,必须从题干判断并写明。

缺失代价 miss penalty

  • 是:未命中时在命中开销之外额外付出的时间。
  • 不是:不等于下一级的访问时间(口径不同)。

3.2.1 SRAM 芯片和 DRAM 芯片

SRAM

  • 是:用双稳态触发器存位,不需要刷新、非破坏性读出、速度快、集成度低、价格高。
  • 不是:不是非易失的,断电照样丢。
  • 范围:用于 Cache、寄存器堆、DRAM 的行缓冲。

DRAM

  • 是:用电容存位,必须刷新、破坏性读出、集成度高、位价低。
  • 范围:用于主存;。

存储元 / 存储单元 / 存储字长

  • 是:存储元存一位;存储单元是按地址访问的最小单位;存储字长 = 一个存储单元的位数。
  • 易混:按字节编址时一个地址对应 1 B,但存储字长仍可以是 32 位。

地址复用

  • 是:DRAM 把行地址与列地址分两次送入同一组引脚,由 、 分别锁存,引脚数减半。
  • 不是:SRAM 不做地址复用。
  • 范围:只是芯片内部的事,绝不进入”CPU 地址总线根数 → 地址空间”的计算。

行缓冲

  • 是:一次行激活后暂存整行数据的锁存阵列,由 SRAM 型单元构成。
  • 范围:同一行内连续访问更快、突发传送能连发,都源于行缓冲。

刷新

  • 是:对 DRAM 电容重新充电,实现方式是按行读出再写回。
  • 范围:以行为单位;只需行地址,不需要列地址和片选;由存储器控制器发起,对 CPU 透明;刷新一遍的周期数 = 行数,与扩展成多少片无关。

刷新周期(最大刷新间隔)

  • 是:每一行两次刷新之间允许的最长时间,教材常取 2 ms。
  • 范围:题目给什么用什么(也见过 8 ms、64 ms)。

集中刷新

  • 是:在刷新周期末尾集中用 个存取周期刷完所有行。
  • 范围:存取周期不变,存在一个长死区 。

分散刷新

  • 是:把刷新放进每个存取周期的后半段,按行号依次轮转。
  • 不是:不是随机选行——随机无法保证每行都在刷新周期内被刷到。
  • 范围:没有死区,但系统存取周期被拉长(近似加倍),且刷新过于频繁。

异步刷新

  • 是:把刷新周期均分,每隔 刷一行。
  • 范围:存取周期不变,死区被打散成 个一个存取周期长的小块;总死区时间与集中刷新相同。这是实际采用的方式。

死区

  • 是:刷新占用存储器、CPU 无法访存的时间段。
  • 不是:没有任何一种刷新方式能让刷新与访存在同一片内并行;“异步刷新可以边刷边访问”是错的。

SDRAM

  • 是:与系统时钟同步的 DRAM,读延迟以固定拍数(CAS Latency)给出,控制器可流水发命令。
  • 不是:“同步”同步的是接口时序,不是访问延迟;DRAM 核心的物理速度分毫未变。
  • 范围:提高带宽,不降低延迟。

DDR

  • 是:在时钟的上升沿和下降沿各传一次数据,数据率翻倍;DDR2/3/4 靠加大预取位宽继续提速。
  • 不是:地址与命令仍只在上升沿传,核心频率没变。
  • 范围:代数越新标称速率越高,而 CAS 延迟折算成纳秒几乎不变——这是”只提高带宽”最直接的证据。

3.2.2 只读存储器

只读存储器 ROM

  • 是:按非易失性归类的一族存储器,可与 RAM 统一编址,属于随机存取存储器。
  • 不是:不是”一律不能写”——只有 MROM 和已写 PROM 不能改写。
  • 范围:主存中的 ROM 区通常存放引导程序。

MROM / PROM

  • 是:MROM 制造时由掩模一次成型,不可改写;PROM 用户可用编程器写一次。

EPROM / EEPROM

  • 是:可多次擦除改写。UVEPROM 用紫外线擦,EEPROM 电擦。
  • 易混:EEPROM 可按字节擦写,Flash 必须按块擦除——Flash 用擦除粒度换集成度与低位价。

Flash 存储器

  • 是:电擦写、非易失、集成度高。
  • 范围:三条硬特性——读比写快;写前必须擦除,块擦页写;擦写次数有限。

3.2.3 主存储器的基本组成

存储体(存储矩阵)

  • 是:存储单元的集合,真正存数据的部分。

MAR

  • 是:地址寄存器。位数 = 地址线根数 = 存储单元个数。
  • 范围:物理上做在 CPU 内,逻辑上属于主存接口;考点是位数不是位置。

MDR

  • 是:数据寄存器。位数 = 数据线根数 = 存储字长。

存储器控制器

  • 是:完成译码驱动、读写时序与刷新调度的逻辑。
  • 范围:早期在北桥,现已集成进 CPU。南桥(PCH)管低速外设,从不在主存通路上。 408 不考南北桥分工。

3.2.4 多模块存储器

单体多字存储器

  • 是:一个存储体,存储字长做成 个字宽,一次读出 个连续字。
  • 范围:要求指令与数据连续存放;遇转移或非连续访问时白读,效率下降。

多体并行存储器

  • 是:多个体,每个体有独立的读写控制电路、地址寄存器和数据寄存器,能独立工作。
  • 范围:“有独立控制电路、能重叠工作”是判断”是不是多体”的唯一标准。

高位交叉编址(顺序方式)

  • 是:地址高位作体号,连续地址落在同一体内。
  • 不是:不能提高连续访问速度;它的用途是扩容与多机共享。

低位交叉编址(交叉方式)

  • 是:地址低位作体号,连续地址轮流落在不同体,可流水重叠。
  • 范围:(取等号为最佳交叉存取);连续读 个字用时 ;首字延迟不变,只提高带宽。

位扩展(在本节的对照义)

  • 是:多片并联凑够数据线宽度,共用地址线与片选,必须同进同退。
  • 不是:不是多体交叉——各片不独立,无法重叠访问。
  • 范围:按字节编址时 8 片确实各持有地址模 8 余 的字节,“交叉编址”的字面义成立、实质义不成立;考场一律用实质义。

突发传送总线事务

  • 是:一次给出首地址、连续传送多个数据的总线事务。
  • 范围:时间 = 传地址 + 存储器准备数据 + 传数据,三段分别折算成总线时钟周期;只提高带宽,首字延迟不变。

3.3.1 连接原理

三类总线

  • 是:地址总线(单向)定地址空间上限;数据总线(双向)定存储字长与带宽;控制总线定总线周期类型与完成时刻。

总线带宽

  • 是:数据总线位数 × 总线时钟频率(理论最大值)。
  • 不是:实际传输速率只是正比于该乘积——一次事务里还有传地址、等待准备数据的周期,DDR 每周期又传两次。

3.3.2 主存容量的扩展

位扩展

  • 是:多片并联拼字长。地址线根数不变,共用片选,数据线分段接出。

字扩展

  • 是:多片分组拼单元数。字长不变,地址线增加,靠片选区分,任一时刻只选中一组。

字位同时扩展

  • 是:组内位扩展、组间字扩展。片数 = 位扩展系数 × 字扩展系数。
  • 范围:地址分配表按”组”列行,不是按片。

编址单位

  • 是:一个地址对应多少位。
  • 范围:题目没说时从数据总线宽度反推(按字编址);两种口径都算一遍、看哪个落在选项里,是选择题的通用自检。

3.3.3 存储芯片的地址分配和片选

片选信号

  • 是:决定本次访问选中哪一片(组)的信号,由高位地址产生。

线选法

  • 是:每根高位地址线直接接一片的片选端,任何时刻只允许一根为 0。
  • 范围:不需要译码器、最简单;地址不连续、空间浪费最严重。

全译码法

  • 是:全部高位地址线送进译码器(含使能端)。
  • 范围:地址唯一、连续、无重叠、无浪费,译码电路最复杂。题目要求全译码时,检查使能端有没有用满。

部分译码法

  • 是:只把部分高位地址线送译码器,其余悬空。
  • 范围:悬空 根 → 每个单元有 个地址别名。

地址重叠

  • 是:一个存储单元对应多个地址,部分译码的正常后果。
  • 不是:不是地址冲突。地址冲突是一个地址选中多片,属于连接错误,会造成总线竞争。

地址范围计算

  • 是:起始地址 = 片选码 ‖ 低 位全 0;末地址 = 片选码 ‖ 低 位全 1。
  • 范围: 只由单片容量决定,与总片数无关;用”跨度 = 单片容量”自检。

3.3.4 存储器与 CPU 的连接

六步连接法

  • 是:定编址单位与总容量 → 定片数 → 写地址分配表 → 连地址线 → 连数据线 → 连控制线。
  • 范围:四条检查——数据线接满、无地址冲突、地址范围覆盖完整、ROM 不接写线。

等待周期(READY / WAIT)

  • 是:存储器跟不上 CPU 时序时,在总线周期中插入的等待状态。
  • 易混:与 Cache 不同——等待周期不降低延迟,Cache 才降低平均延迟。

3.4.1 磁盘存储器

磁道 / 扇区 / 柱面 / 磁头

  • 是:磁道是盘面上的同心圆(最外圈为 0 号);扇区是磁道的分段,磁盘读写的最小单位;柱面是各盘面上半径相同的磁道的集合;磁头每个记录面一个。
  • 范围:所有磁头装在同一根磁臂上、同进同退——这是”柱面”概念存在的全部理由。

磁盘地址

  • 是:柱面(磁道)号 ‖ 盘面(磁头)号 ‖ 扇区号,柱面号在最高位。
  • 范围:这个顺序是为了让最贵的动作最不频繁——换磁头是电子切换、几乎免费;寻道是机械移动、最贵。“换磁头比找磁道贵”是反的。

非格式化容量 / 格式化容量

  • 是:格式化容量 < 非格式化容量,差额被扇区头(ID 域)、间隙与校验码占去。
  • 范围:格式化容量 = 每扇区字节数 × 每道扇区数 × 每面磁道数 × 记录面数。

扇区的组成

  • 是:头(ID 域:柱面号/磁头号/扇区号 + 同步 + CRC)· 数据区 · 尾(ECC)。
  • 范围:地址存在扇区里,是因为磁头无法知道自己在哪,只能读出 ID 才能确认。

寻道时间 / 旋转延迟 / 传输时间

  • 是:。平均旋转延迟取半圈 ;。
  • 范围:“取半圈”的前提是目标扇区位置随机;连续读同一磁道相邻扇区时,只在第一个扇区付一次旋转延迟。

RAID(磁盘阵列)

  • 是:用多个物理盘构成一个逻辑盘,用条带化提速、用冗余提可靠性。
  • 不是:不是备份——它防硬件故障,不防误删、损坏、勒索软件。
  • 范围:408 只考 RAID 0~5 的组织方式、有效容量与可靠性;硬件 RAID 对 OS 透明(OS 只见一个逻辑盘),软件 RAID 由 OS 实现。

RAID 各级

  • 是:0 条带无冗余(容量 ,可靠性最差);1 镜像(容量 );2 海明码;3 位交叉 + 专用校验盘;4 块交叉 + 专用校验盘;5 块交叉 + 校验分散(容量 ,最常用)。
  • 范围:“RAID 都能提高可靠性”是错的,0 级纯属性能手段。

3.4.2 固态硬盘

固态硬盘 SSD

  • 是:Flash 芯片 + 闪存翻译层 + 控制器构成的外存。
  • 范围:无寻道、无旋转延迟,随机读远快于磁盘;随机写受垃圾回收拖累。仍属外存,不在 CPU 地址空间内。

页 / 块(SSD 的两级粒度)

  • 是:读写以页为单位(约 4 KB),擦除以块为单位(含数十至数百页)。
  • 不是:与文件系统的”块”不是一回事(后者是分配单位,几 KB)。
  • 范围:“擦除单位远大于写入单位”这条不对称性推出 SSD 的全部复杂性。

闪存翻译层 FTL

  • 是:维护”逻辑页 → 物理页”的映射,把原地更新变成异地更新(写新页 + 改映射 + 原页标无效)。
  • 易混:与页式虚拟存储器的地址映射是同一种手法。

垃圾回收 / 写放大

  • 是:搬走块内仍有效的页、擦除整块;写放大系数 = 闪存实际写入量 / 主机请求写入量 。
  • 范围:剩余空闲块越少,写放大越严重——SSD 比磁盘更怕写满。

磨损均衡

  • 是:让擦除次数在各块间尽量平均。动态:分配时优先选磨损少的块;静态:主动搬走冷数据腾出低磨损块。
  • 不是:不提高总擦写次数,只缩小磨损差距。

TRIM

  • 是:操作系统主动告知 SSD”这些逻辑块已失效”。
  • 范围:这是操作系统必须为 SSD 做的配合;没有它,SSD 会在 GC 时白白搬移已删除的数据。

3.5.1 程序访问的局部性原理

时间局部性

  • 是:刚被访问过的地址很可能马上又被访问。
  • 范围:指令的时间局部性来自循环回跳——“没有跳转”反而会让时间局部性归零。

空间局部性

  • 是:刚被访问过的地址附近很可能马上被访问。
  • 范围:来自指令顺序存放执行与数组连续存放;度量是步长,不是访问的数据总量。

局部性与程序

  • 范围:局部性是程序的属性,硬件只能利用不能创造。答”两个程序局部性是否相同”必须分指令/数据、时间/空间四格;按行 vs 按列遍历二维数组,指令局部性相同、数据局部性差别极大。

3.5.2 Cache 的基本工作原理

块(Block)与 Cache 行(Line / 槽)

  • 是:块是主存与 Cache 之间的交换单位,块大小 = 行大小,且为 2 的幂。

标记项

  • 是:一行里除数据块之外的全部控制信息——标记 Tag + 有效位 + 脏位(仅写回法)+ 替换控制位。
  • 范围:有效位不可省(开机时内容随机);清空 Cache = 清有效位,不是清数据。

数据容量 / 总容量

  • 是:数据容量 = 行数 × 块大小;总容量 = 行数 ×(块大小 + 标记 + 有效位 + 脏位 + 替换位)。
  • 范围:题目说”Cache 容量 32 KB”通常指数据容量。

命中率 / 缺失率

  • 是:。
  • 范围:分母是访存次数,不是指令条数——“100 条指令、每条访存 1.2 次、缺失率 5%“的缺失次数是 。

平均访问时间 AMAT

  • 是:口径一 ;口径二 。
  • 范围:两种都合法,从题干判断( 是主存访问时间还是缺失附加代价)并写明所用口径。

强制性 / 冲突 / 容量缺失

  • 是:强制性(第一次访问该块,靠增大块缓解);冲突(争抢同一行/组,靠提高相联度缓解);容量(工作集超过总容量,靠增大容量缓解)。
  • 范围:全相联没有冲突缺失——这是判断缺失归类的关键判据。

块大小的权衡

  • 范围:块变大 → 强制性缺失减少,但行数减少(冲突增多)、缺失代价上升、块内利用率下降。命中率随块大小先升后降,“块越大命中率越高”是错的。

3.5.3 Cache 和主存的映射方式

直接映射

  • 是:主存块只能放进唯一一行,行号 = 块号 mod 行数。
  • 范围:只需 1 个比较器、标记位最短、冲突缺失最多、不需要替换算法(“直接映射采用 LRU”本身就是错的)。

全相联映射

  • 是:主存块可放进任意一行。
  • 范围:需要 个比较器并行比较(即相联存储器)、标记位最长、无冲突缺失;只用于 TLB 等行数极少的场合。

组相联映射

  • 是:分 组每组 行,组间直接映射、组内全相联,组号 = 块号 mod 组数。
  • 范围:需要 个比较器; 退化为直接映射, 退化为全相联。现代 CPU L1 用 48 路、L2/L3 用 816 路。

地址划分

  • 是:标记 ‖ 行号/组号 ‖ 块内地址。
  • 范围:块内地址位数只由块大小决定,三种映射方式相同;相联度翻倍则组号少 1 位、标记多 1 位。

组相联的两种划组口径

  • 是:主流(王道正文 / 唐朔飞 / 全部统考真题):组号 = 块号 mod 组数(低位取模)。另有蒋本珊口径:主存按 Cache 总行数分区、区内按每组连续若干块分配,落在位段上取次低位。
  • 范围:两种口径答案不同(那道 4 行 2 路 LRU 题分别是 1 次和 3 次命中)。考场一律用低位取模——蒋本珊口径在位段上讲不通(标记会变成不连续位段),统考从不采用。识别信号:算出的答案不在选项里,或低位取模后所有地址退化进同一组。

相联度(路数)

  • 是:一个组内的行数 。
  • 范围:比较器数量 = 相联度,面积与关键路径延迟随之线性增长,而命中率收益在 4~8 路后已很平坦——“相联度越高越好”是错的。这是”面积换时间”在本章的形式。

3.5.4 Cache 中主存块的替换算法

RAND / FIFO / LRU / LFU / OPT

  • 是:RAND 随机;FIFO 淘汰最先调入;LRU 淘汰最久未被访问;LFU 淘汰访问次数最少;OPT 淘汰将来最晚使用。
  • 易混:LRU 看时间,LFU 看频率——刚被访问 1 次的块在 LRU 下最安全、在 LFU 下最危险。
  • 范围:OPT 不可实现,只作上界;LRU 命中率不一定高于 FIFO,只是平均更好。

Belady 异常

  • 是:增加行数反而使命中率下降。
  • 范围:只有 FIFO 会出现;LRU/LFU/OPT 是栈算法(容量 的驻留集是容量 的子集),不会出现。

LRU 的硬件实现

  • 是:计数器法(每行 位,命中者清 0、比它小的加 1,淘汰最大者)或比较对法/矩阵法( 个触发器)。
  • 范围:“计数器 +1 太慢”只在软件成本模型下成立——硬件里 个计数器在同一个时钟沿并行更新,代价是面积;反过来,软件里便宜的”双向链表改指针”在硬件里很贵。同一个 LRU 有三种实现:Cache 用计数器/矩阵、算法题用哈希+双链表、操作系统用 CLOCK 近似。

替换算法的启动条件

  • 范围:只在缺失且组内无空闲行时才启动;替换范围是该组的 行,不是整个 Cache。

抖动(颠簸)

  • 是:访问模式与映射方式冲突,Cache 在少数几个块间反复替换。
  • 范围:靠提高相联度缓解。

3.5.5 Cache 的一致性问题

写直达法(全写法)

  • 是:写命中时同时写 Cache 和主存。
  • 范围:不需要脏位,主存永远最新,写开销大;常配写缓冲(异步写主存,缓冲满时仍阻塞,不改变写直达的语义)。

写回法

  • 是:写命中时只写 Cache 并置脏位,行被替换时才写回主存。
  • 范围:必须有脏位;替换脏行要多一次主存写;主存可能过时,这是多核与 DMA 一致性问题的根源。

写分配 / 非写分配

  • 是:写不命中时,写分配先调块入 Cache 再写;非写分配直接写主存不调块。
  • 范围:只在写不命中时才有区别;常见搭配是写回 + 写分配与写直达 + 非写分配,因为两者押注的是不是同一件事。

Cache 一致性

  • 是:保证对同一个地址,所有核看到的写顺序一致。
  • 不是:不等于存储一致性模型(后者规定不同地址间的读写能否重排)。408 只考前者。

监听(嗅探)协议 / 目录协议

  • 是:监听——各 Cache 控制器监听总线事务,分写更新与写无效(写无效是主流,MESI 属此类),依赖广播,适合总线互连的小规模系统;目录——集中记录每块被哪些 Cache 缓存,只通知相关者,适合大规模系统。

DMA 引起的一致性

  • 是:DMA 绕过 Cache 直接读写主存 → Cache 副本过期,或写回法下主存数据过时被 DMA 读走。
  • 范围:对策是不可缓存区、让 DMA 经过 Cache、或软件在 DMA 前后刷新/无效化 Cache。

3.6.1 虚拟存储器的基本概念

虚拟存储器

  • 是:主存—辅存层次,解决容量矛盾。
  • 范围:容量由虚拟地址位数决定——“虚存容量 = 主存 + 辅存”是错的。对应用程序透明、对操作系统不透明。

三个必要条件

  • 是:局部性;硬件地址转换机构;可重新执行原指令的缺页机制(故障类异常)。
  • 范围:地址转换必须硬件做(每次访存都要);缺页处理必须软件做(毫秒级,不能让 CPU 空等)。

虚拟地址 / 物理地址

  • 是:程序使用虚拟地址,主存按物理地址访问,中间由硬件翻译。

3.6.2 页式虚拟存储器

页 / 页框

  • 是:虚拟空间的等长划分叫页,主存的同样划分叫页框(实页、页帧)。
  • 范围:页内偏移在虚地址与物理地址中完全相同,只有页号需要翻译。

页表 / 页表项

  • 是:虚页号 → 物理页号的映射表,存放在主存中,每进程一张。表项含物理页号、有效位(装入位)、脏位、访问位、权限位。
  • 不是:页表项里没有虚页号——虚页号是下标。

页表基址寄存器

  • 是:保存当前进程页表的起始物理地址,随进程切换而切换。
  • 范围:这是进程地址空间彼此隔离的硬件基础。

TLB(快表)

  • 是:页表项的高速缓存,位于 MMU 内部,行数少,通常全相联或高路数组相联。
  • 不是:不在主存中。
  • 易混:TLB 项 = 标记(虚页号)+ 页表项内容,比页表项多一个标记字段;TLB 未命中不产生异常,缺页才产生异常。

MMU

  • 是:CPU 内部完成地址转换的硬件部件,含 TLB、页表基址寄存器、页表遍历逻辑、权限检查电路。
  • 范围:MMU 只做翻译与检查,不做替换决策;有效位为 0 或越权时产生异常交给操作系统。引导初期 MMU 关闭,CPU 直接用物理地址。

三处命中的组合

  • 范围:8 种组合中 3 种不可能——TLB 命中蕴含页表命中(两种),页不在主存则其内容不可能在 Cache 中(一种)。

有效访问时间 EAT

  • 是:串行 ;并行 。
  • 范围:口径必须写明;计入缺页率时再加缺页处理时间,毫秒级的一项会主导结果;多级页表时未命中路径的访存次数 = 页表级数 + 1。

3.6.3 段式虚拟存储器

段 / 段表

  • 是:按程序逻辑结构划分、长度可变的单位;段表项含段长、段基址、有效位、权限位。
  • 范围:段号对程序员可见,分页对程序员透明。

段式地址转换

  • 是:物理地址 = 段基址 + 段内偏移(加法),页式是拼接。
  • 范围:必须先做越界检查(段内偏移 段长 → 越界异常);页式不需要越界检查,页内偏移位数天然不会越界。

外部碎片 / 内部碎片

  • 是:段式产生外部碎片,页式产生内部碎片,段页式消除外部碎片、仍有内部碎片。

3.6.4 段页式虚拟存储器

段页式

  • 是:先分段、段内分页,地址结构 段号 ‖ 段内页号 ‖ 页内偏移。
  • 不是:段表项存的是该段页表的基址与长度,不是段基址。
  • 范围:无 TLB 时访存 3 次(段表 + 页表 + 取数),TLB 命中则 1 次;段长以页为单位向上取整。

3.6.5 虚拟存储器与 Cache 的比较

两者的根本差别

  • 是:Cache 未命中约几十 ns,缺页约几 ms,相差约六个数量级——这一条推出下面全部差别。
  • 范围:虚拟存储器一律全相联(缺页太贵,必须消除冲突缺失);只有写回没有写直达(写辅存太慢);缺页交给操作系统并可能切换进程(空等太浪费);交换单位大得多(固定开销占主导)。

透明性对照

  • 是:Cache 对程序员和操作系统都透明;虚拟存储器对程序员透明、对操作系统不透明。

结构对应

  • 是:块↔页、Cache 行↔页框、标记↔虚页号(在 TLB 中)、有效位↔装入位、脏位↔修改位、命中率↔缺页率、替换算法↔页面置换算法。
  • 范围:TLB 同时属于两边——用 Cache 的机制,服务虚拟存储器的目的。

高频范围限定清单

这张表集中列出本章最爱被抽掉限定条件的结论。 凡是记住了结论却忘了限定,考场上就会被反例打中。

结论必须加上的限定
”SRAM 不需要刷新,所以不易失”错。易失 = 断电丢失,SRAM 同样易失;刷新与易失性无关
”RAM 和 ROM 不能统一编址”错。可以统一编址,靠片选译码分段
”ROM 不属于随机存取存储器”错。存取时间与地址无关,ROM 属于随机存取
”磁盘是随机存取存储器”错。是直接存取(DAM),存取时间与磁头位置有关
”带宽 = 传输位数 / 存取时间”错。分母是存取周期
”容量和带宽的 M 都是 “只有容量按 ;带宽、频率、传输率按
“SDRAM 与 CPU 同步所以一样快""同步”是接口同步;DRAM 核心延迟没变,只提高带宽
”DDR 提高了内存速度”提高的是数据率(带宽),CAS 延迟的纳秒数几乎不变
”刷新次数由存储器总容量决定”只由单片行数决定,扩展成多少片都不变
”异步刷新时刷新与访存可以同时进行”错。同一片内刷新期间无法访存,三种方式只是死区摆法不同
”分散刷新没有死区所以最好”代价是系统存取周期加倍;对 CPU 影响最小的是异步刷新
”Flash 属于 ROM 所以不能写”分类依据是非易失性;Flash 可写,但写前必须擦除、块擦页写
”8 片并联凑 64 位是多模块交叉编址”实质义不成立(无独立控制电路,不能重叠);这是位扩展
”多体交叉缩短了存取周期”错。只提高带宽,单次存取周期不变;且体数超过 不再提速
”地址复用会影响主存容量计算”错。地址复用只在芯片内部,不进入”地址线根数 → 地址空间"
"题目没说编址单位就按字节算”应从数据总线宽度反推(按字编址);两种都算一遍看哪个落在选项里
”地址重叠是连接错误”错。重叠可接受,冲突(一址选多片)才是错误
”全译码就是把高位地址接进译码器”译码器的使能端也要用满,否则退化成部分译码
”磁盘换磁头比换磁道开销大”反了。换磁头是电子切换几乎免费,寻道最贵
”磁盘最小读写单位是 1 字节”错。是一个扇区
”平均旋转延迟一律取半圈”前提是目标扇区位置随机;连续读相邻扇区只付一次
”RAID 都能提高可靠性”错。RAID 0 无冗余,可靠性比单盘还差
”RAID 可以代替备份”错。防硬件故障,不防误删与损坏
”SSD 的块和文件系统的块是一回事”错。前者是擦除单位(几百 KB),后者是分配单位(几 KB)
“磨损均衡能延长 SSD 总寿命”只缩小磨损差距,不提高总擦写次数
”循环体时间局部性好是因为没有跳转”反了。时间局部性来自循环回跳,空间局部性才来自顺序执行
”块越大命中率越高”错。先升后降,块大则行数少、冲突增多、缺失代价升
”缺失次数 = 指令条数 × 缺失率”错。分母是访存次数,要乘”每条指令平均访存次数"
"直接映射也要用 LRU”错。目标行唯一,不需要替换算法
”相联度越高越好”收益在 4~8 路后趋平,而比较器面积与关键路径延迟线性增长
”组相联划组只有一种算法”有两种口径,答案不同;考场一律用”组号 = 块号 mod 组数”,统考不用蒋本珊口径
”LRU 也会出现 Belady 异常”错。栈算法不会;只有 FIFO 会
”硬件里计数器法效率低”只在软件成本模型下成立;硬件 个计数器同一时钟沿并行更新
”每次缺失都要执行替换算法”错。有空闲行时直接装入
”写回法和写直达都需要脏位”错。只有写回法需要
”写分配 / 非写分配影响写命中的行为”错。只在写不命中时才有区别
”Cache 一致性就是存储一致性模型”错。408 只考前者(同一地址的写顺序)
“虚存容量 = 主存 + 辅存”错。由虚拟地址位数决定
”TLB 未命中会产生缺页异常”错。TLB 未命中由 MMU 硬件自动查页表,不产生异常
”MMU 负责决定换出哪一页”错。MMU 只做翻译与检查,替换决策在操作系统
”页表项里有虚页号”错。虚页号是下标;TLB 项才有虚页号做标记
”段式和页式都要越界检查”只有段式需要(查段长),页内偏移天然不越界
”段页式的段表项存段基址”错。存的是该段页表的基址与长度
”段页式无 TLB 时访存 2 次”错。是 3 次(段表 + 页表 + 取数)
“Cache 和虚拟存储器可以二选一”错。串联并存,一个解决速度、一个解决容量

链接