📑 本页目录

计算机原理与嵌入式系统 · 配套学习整理

存储器怎样存信息
CPU 怎样找到它第三章 · 存储器系统

从保存一位信息的电路,到多片芯片的连接;从 Cache 地址映射,到虚拟地址转换。每一步都落到“题目里怎样判断、怎样计算”。

完整覆盖原讲义 3.1—3.6 和 3.7 的全部 29 道习题。页码按第三章单独讲义:第 1 页为目录,正文及习题在第 2—50 页。沿用前两章的离线文件版式。

14 节完整讲解12 幅 SVG 图解29 道习题答题卡7 道短自测

存什么、怎么保持 → 怎样连接与扩展 → 怎样加速访问 → 怎样转换地址

从容量与地址开始 →

需要复习进制、补码或 CPU 基本结构时,回到前两章 →

先把四类问题分开

别把器件、接线、缓存与地址管理混成一团

这一章跨越四个层面:器件怎样保持状态,芯片怎样组成更大的存储器,CPU 怎样少等数据,操作系统怎样组织地址。每个新名词先放回它负责的问题里,再看它与上下层怎样联系。

问题对应内容掌握标准
信息能存在哪里?磁、光、RAM、ROM、Flash能比较原理、断电保持、读写方式和用途。
怎样组织足够大的存储器?容量、地址、CPU 连接与扩展会算容量、地址线、芯片数、地址范围,会画组织关系。
主存跟不上 CPU,怎么办?Cache会拆地址、求候选位置、模拟替换并解释更新。
程序地址怎样映射和隔离?段、页、段页式与 TLB会按表项走转换路径,区分未命中、缺页和权限错误。

每节开头注明“掌握要求”和“背景为什么要讲”。要求依据章后习题及后续知识依赖划分,不代表已知你的考试范围。必须会做的内容要离开示范重新算;背景内容也完整交代用途,但不用把每个旧型号参数都背成公式。

12 幅图都保存在本文件中。带下拉框、输入框或按钮的图可以改变条件;章末答案默认折叠。打印时显示答案,并采用图解默认示例。外部链接仅供核对,正文、公式与图解离线可用。

第三章 · 第 01 节

先把容量、地址、位宽分清

掌握要求:不看提示能由 N×M 算容量、地址位数,区分按字与按字节编址。

背景为什么要讲:扩展、Cache、分页都依赖这套单位关系;先把“一个地址选什么”说明白。

这一段直接决定容量题和扩展题能不能做对。

位 bit,是一个 0 或 1。字节 Byte,是 8 位

因此:

1B=8b

大写 B 和小写 b 不一样。例如:

64Mb=8MB

这里暂时按同一种数量级换算,核心就是除以 8。

本讲义在计算题中沿用二进制习惯:

1KB=210B=1024B
1MB=220B,1GB=230B

严格区分时,1024 字节应写作 1KiB。做本章题,按讲义的二进制约定计算。

“字”需要看上下文

在存储芯片的容量表达式里:

4K×8位

意思是:

有 4K 个可选择的存储单元,每个单元保存 8 位。

你可以把它想成 4096 个抽屉,每个抽屉能放 8 个二进制位。

所以总容量:

4096×8=32768位=4096B=4KB

而:

4K×16位

表示抽屉数量仍是 4096 个,每个抽屉扩大到 16 位,因此容量是:

4096×16/8=8192B=8KB

注意:这里的“一个字”,是芯片一次选出的一个存储单元,不一定等于 CPU 的机器字。

教材说“32 位计算机一个机器字常为 4 字节”,这是 CPU 字长的语境;4K×8 中的单元宽度,则由这个芯片的组织方式决定。

地址是抽屉编号,数据是抽屉内容

如果有 n 位地址,就能组成:

2n

种编号。

例如 12 位地址能选择:

212=4096=4K

个单元,地址从 0 到 4095。

因此,对一个地址不复用、每个地址选一个单元的普通芯片:

单元数=2地址位数
总容量(位)=单元数×每单元位数

举例:

芯片组织 地址位数 数据位宽 总容量
1K×8 10 8 1KB
4K×8 12 8 4KB
4K×16 12 16 8KB
64K×1 16 1 8KB
1M×8 20 8 1MB

后面讲 DRAM 时你会看到:地址位数和芯片外部地址引脚数,也可能不同,因为地址可以分两次传入。

再区分按字节编址和按字编址

按字节编址:

每个地址编号对应 1 字节。

按字编址:

每个地址编号对应一个字,字有多少字节要看题目。

所以:

寻址容量=2n×每个地址对应的字节数

这是本章最容易错的公式之一。先判断一个地址对应多少字节,再算容量。

第三章 · 第 02 节

3.1 存储器的类型、层次、接口与性能

掌握要求:会按不同依据分类,解释主存/外存,比较延迟、周期和带宽。

背景为什么要讲:历史器件和接口版本全部认识用途;年代、线缆长度和旧版本速率以查表为主。

“磁存储器”“主存”“RAM”这些词,使用的分类标准并不相同。

  • 按存储介质分:磁、半导体、光。
  • 按系统中的作用分:寄存器、Cache、主存、外存。
  • 在本章讨论的半导体器件中,按读写和保持特性分:RAM、ROM 等。

例如,SSD 同时是:

半导体存储器、外部辅助存储器、主要使用 NAND Flash 的存储设备。

这几种说法并不冲突。

磁存储器:利用磁化状态保存信息

本章提到的类型:

  • **磁盘:**HDD、软盘。磁头定位到盘面上的位置进行读写。
  • **磁带:**磁头读取移动的带状介质;访问远处内容往往需要先移动磁带。
  • **历史器件:**磁泡、磁鼓、磁芯。

要会解释的共同特点是:本章这些磁存储介质能在断电后保持信息。

磁盘和磁带的差别,可以这样记:

磁盘适合定位访问不同位置;磁带偏向顺序访问。

磁鼓、磁芯为什么要讲?它们说明“主存”是一种系统角色,历史上的主存并不一定是半导体器件。讲义还提到王安与磁芯“读后即写”技术,这是发展背景;本章做题重点是类型与工作原理,人物和年代认识即可。

光存储器:用光读取介质上的状态变化

讲义用激光和反射光变化解释光盘读取。光驱包括激光头、光电转换电路、旋转和定位机构。

本章提到 CD-DA、CD-ROM、VCD、DVD:

  • CD-DA 主要用于数字音频;
  • CD-ROM 用于数据;
  • VCD、DVD 常用于视频等内容。

这里要掌握的是“介质上的光学特征怎样转成电信号”,以及典型形式。不需要为了本章习题背激光头内部每个部件的形状。

半导体存储器:利用电子电路或器件状态保存信息

本章主要分成:

  • **SRAM、DRAM:**用于快速、频繁地读写运行中的信息。
  • **ROM、EEPROM、Flash 等:**用于断电后仍要保留的信息。

先建立一个基础判断:

程序运行时不断变化的变量,适合放 RAM;上电后还要存在的程序或配置,适合放非易失性存储器。

后面会进一步区分这些器件。

为什么需要多级存储?因为速度、容量、成本不能同时都做到最优

图 3-1四级存储角色与取舍。层次表示常见的速度、容量与每位成本关系,不是到 CPU 的物理距离定律。

你可以把它理解成:

手里正在算的东西放寄存器;马上可能再用的放 Cache;运行中的大量内容放主存;长期保存的内容放外存。

四层的作用:

层次 主要作用 本章典型实现
寄存器 CPU 直接运算、暂存地址与结果 触发器等高速电路
Cache 保存常用主存数据的副本 SRAM
主存 保存运行中的程序和数据 DRAM
外存 长期保存程序、文件等 HDD、SSD 等

主存和外存,并不是根据“在机箱里面还是外面”简单划分

机箱里的 SSD 仍属于外部辅助存储器。这里的“外存”,强调的是它相对于主存的角色。

讲义还区分:

  • **联机外存:**通常连接在系统中,如内部硬盘。
  • **脱机或可移除介质:**如移动硬盘、光盘、存储卡等。

你要会写的简答题答案是:

分层存储用少量高速、昂贵的存储器配合大量低速、便宜的存储器,在成本可接受的条件下兼顾容量与访问速度。

3.1.3 的外存接口,是在回答“存储设备如何接入计算机”

介质负责保存信息,接口规定如何交换命令、地址和数据。二者要分开。

接口 需要记住的特点
IDE / ATA / PATA 传统并行硬盘接口;PATA 强调并行
SCSI 可管理多种外设,讲义强调工作站、服务器用途
SATA Serial ATA,串行传输
SAS Serial Attached SCSI;常见 SAS 控制器可接 SATA 盘,普通 SATA 控制器不能接 SAS 盘
SD 可移除存储卡接口;卡内含 Flash 和控制器
eMMC 把 NAND Flash 和控制器整合起来的嵌入式存储方案
UFS 集成控制器的闪存方案,采用串行接口和 SCSI 命令模型

Mini SD、Micro SD/TF 是不同尺寸形式;Micro SD 可通过适配器装入相应 SD 卡槽。

**为什么要讲接口?**章末 3.6 直接问接口标准,而且后面嵌入式系统接 Flash 时,是否需要控制器就是关键区别。

讲义列出了 IDE、SATA、SAS 各代速率,以及 SD、eMMC、UFS 的历史版本参数。它们用于展示接口演进。先掌握“并行还是串行、连接什么设备、有没有控制器”,具体年代、线缆长度、版本速率属于查表层面的知识。

3.1.4 的性能指标,不能只看容量

需要会解释:

  • **容量:**能保存多少信息。
  • **存取时间 TA:**一次操作从启动到完成用了多久。
  • **存取周期 TM:**连续启动两次独立操作,至少要间隔多久。
  • **带宽:**单位时间能传输多少信息。
  • 还有可靠性、功耗、价格、供电电压与接口兼容性等。

存取时间与存取周期不是同一个东西

一个操作已经完成,器件可能还要恢复状态,才能开始下一次。因此教材通常有:

TM≥TA

本章的简单带宽模型:

B=WTM

这里 W 是每次传输的位数。

若一次传 32 位,周期 100ns:

B=32100×10−9=320×106b/s=40×106B/s

即 320Mb/s,或 40MB/s。

**学到什么程度?**会算容量、单位换算、带宽;能解释“速度快”可能指延迟短,也可能指吞吐量大。

第三章 · 第 03 节

3.2 ROM:怎样保存、编程与擦除

掌握要求:比较五类 ROM,解释浮栅电荷、擦除粒度、NOR/NAND 及 XIP。

背景为什么要讲:SIMOS、FLOTOX、2764A、2816 是器件原理和读手册的实例;不用背所有编程电压与脉冲宽度。

ROM 的历史名称是只读存储器。后来很多 ROM 家族器件可以编程甚至反复改写,但它们仍保留这个名称。

这道题不能只回答“ROM 只能读”。要回答:

这些器件属于历史上的 ROM 家族,具有非易失性;部分器件可以在专门的编程或擦除条件下改写,读写特性与普通 RAM 不同。

先把五种器件放在一张表里

类型 内容如何写入 能否重新改写 最重要的区别
掩模 ROM 制造时固化 用户不能改 出厂内容固定
PROM 用户编程一次 通常不能恢复后重写 熔丝或反熔丝发生永久变化
EPROM 电编程 可以,先紫外线擦除 通常整片擦除
EEPROM 电擦除、电编程 可以 可支持较细粒度,典型是字节
Flash 电编程、电擦除 可以 高密度,通常按块擦除

掩模 ROM:制造时就把内容定好了

内部主要有三个部分:

  1. **存储矩阵:**保存各个比特。
  2. **地址译码器:**把地址转换成选择某个单元的信号。
  3. **输出缓冲器:**把数据送出去,并控制是否连接到总线。

讲义的 4×4 ROM 示例是:

四个地址,每个地址对应四位数据。

需要两位地址,因为:

22=4

地址译码器产生四条字选择线,每次选择一个四位单元。

讲义示例内容是:

  • 地址 00:1010
  • 地址 01:1011
  • 地址 10:1110
  • 地址 11:0001

这里要学的是**“地址选择一组比特”**,不必背这四组数据。

输出缓冲器还有一个重要状态:高阻态。

高阻态可以理解成:

这个芯片暂时退出总线,不主动输出 0,也不主动输出 1。

后面多片存储器共用数据总线时,全靠它避免相互冲突。

图 3-22 位地址选择 4 个四位字中的一个。输出禁止时,芯片不主动驱动数据总线;高阻不等于输出 0。

PROM:用不可逆的物理变化写入

熔丝型 PROM 用较大电流把某些连接烧断;反熔丝型则把原本绝缘的连接永久击穿。

记住:

熔丝是“原来接通,编程后断开”;反熔丝是“原来断开,编程后接通”。

具体“断开代表 0 还是 1”取决于读出电路,不能脱离器件结构死记。

为什么只能一次编程?因为这些变化通常不可恢复。

EPROM、EEPROM、Flash 的共同基础,是把电荷留在绝缘结构中,用它改变器件的电学状态

下面的图可以切换到“浮栅存储”。

图 3-3切换 SRAM、DRAM 与浮栅结构。图为原理示意:反馈、电容电荷、绝缘浮栅分别解释不同保持方式。

图中浮栅被绝缘层包围,电子难以直接逃走,因此断电后仍能保持状态。

这里真正需要理解的因果关系是:

浮栅电荷变化→导通阈值变化→读出电路区分状态

对本章讨论的典型 N 沟道浮栅器件,注入负电荷会提高阈值,使它在相同读电压下更难导通。Micron 的存储器教学资料也用这个关系解释读取。

**讲义这里有笔误和前后不一致。**第 11 页对电荷状态与逻辑值的叙述相互冲突,第 17 页关于电荷与导通的部分叙述也需要纠正。先掌握上面的物理关系;具体读成 0 还是 1,要看读出电路和器件规定。

常见 EPROM 在擦除后各位为 1,即字节为 FFH,再通过编程把选定位变成 0;讲义第 11 页的“擦除后读出 00”不应作为通用结论。ST 的 M27C64A 原厂数据手册明确说明其擦除态为全 1。

EPROM:电写入,紫外线擦除

讲义使用 SIMOS,也就是叠栅注入 MOS 结构来解释它:

  • 控制栅用于施加控制电压;
  • 浮栅用于保持电荷;
  • 编程时用较强电场将电荷注入;
  • 紫外线使存储电荷得到释放,恢复擦除状态。

因此传统 UV EPROM 封装有石英窗口,编程后需要遮光保护。

它的主要缺点:

即使只想改一小部分,通常也要把芯片取下,整片擦除后重新编程。

**讲义为什么花很多篇幅讲 2764A?**它用一个具体器件教你阅读引脚、工作方式表和编程时序。

2764A 是:

8K×8=8KB

所以有 13 位地址和 8 位数据。

需要认识的信号:

信号 作用
CE# / CS# 芯片使能、片选
OE# 输出允许
PGM# 编程控制
VCC 正常供电
VPP 编程所需的电压输入

# 表示低电平有效。引脚名上画横线,也常表示这个意思。

讲义列出的工作方式包括:读、输出禁止、备用、编程、校验、编程禁止、读标识符。

你应该知道它们各自解决什么问题:

  • 读:取出内容。
  • 输出禁止:停止驱动数据总线。
  • 备用:降低功耗。
  • 编程:写入内容。
  • 校验:读回来,检查是否写对。
  • 编程禁止:避免未选中器件被误写。
  • 读标识符:识别厂商和器件。

快速编程流程的核心思想则是:

用较短编程脉冲尝试写入,随后校验;必要时继续编程并再次校验。

**学习要求:会看表、会解释流程。**具体厂商编码、某个引脚的编程电压、某种算法的脉冲宽度属于型号参数,不能把不同器件或算法的数据混用。

EEPROM:改成用电擦除

讲义用 FLOTOX 管解释 EEPROM:

在很薄的氧化层区域形成足够强的电场,使电子通过隧穿过程进出浮栅。

因此擦除不再需要紫外线灯,也可以在系统内进行。

本章典型 EEPROM 单元还增加了选通管,以提高选择性和擦写可靠性。薄氧化层的厚度、面积、耐压之所以要控制,是因为它既要允许受控隧穿,又要长期可靠地保持电荷。

2816 是讲义的器件例子:

2K×8=2KB

需要认识它的特点:

  • 数据引脚可用于输入与输出;
  • 可按字节擦写;
  • 也可整片擦除;
  • 读、擦写、备用等工作方式由控制信号和编程条件决定;
  • 擦写速度比读取慢很多。

讲义给出的读取、擦写时间和电压,是这个历史器件的例子。真正要会解释的是:EEPROM 可改写,但并不因此等同于可高速频繁写入的 RAM。

Flash:通过更紧凑的单元结构提高密度

本章典型 Flash 电路减少了单元中的器件数量,又使用电擦除,适合较大容量存储。

其代价之一是:

擦除通常按块进行,不能把任意一个字节都当成 RAM 那样随意覆盖。

对典型 Flash,可以先这样记:

  • 擦除:把一个擦除块恢复为擦除态。
  • 编程:把选定位从擦除态改成编程态。
  • 已编程的位要恢复擦除态,通常需要擦除所在块。

擦写会损耗器件,所以寿命有限。讲义中的擦写次数用于展示这个限制,具体寿命应看器件,不存在适用于所有 Flash 的固定次数。

NOR 与 NAND,必须分清

比较项目 NOR Flash NAND Flash
读取方式 适合按地址随机读取 主要按页组织读取
编程方式 可支持字节或字编程,依器件而定 通常按页编程
擦除方式 按块或整片 按块
典型用途 程序、启动代码 大容量数据、文件
直接执行代码 可支持 XIP 原始 NAND 通常需先搬到可执行存储器
管理问题 接口较接近普通存储器 常需处理 ECC、坏块等
容量和成本取向 适合代码存储等用途 强调高密度、低位成本

XIP 的意思是 Execute In Place,原地执行:CPU 可以直接从相应的 NOR 存储地址取指令,不必先把整段代码复制到 RAM。

**这一节的达标标准:**看到一种 ROM,能回答“能不能改、怎么擦除、擦除多大一片、适合存什么”。

第三章 · 第 04 节

3.3 SRAM 与 DRAM

掌握要求:解释保持、刷新、读出还原,算地址复用与校验位容量,并会看控制信号表。

背景为什么要讲:历史芯片提供具体组织例子;从 N×M 和手册算参数,比背型号更重要。

3.2 的存储单元图也可以切到 SRAM 和 DRAM;下面补充行列地址复用的步骤。

SRAM:用双稳态电路保持一位

典型六管 SRAM:

  • 四个晶体管形成交叉耦合的保持电路;
  • 两个访问晶体管负责把内部节点接到位线上。

两个互补节点可以稳定在:

Q=1,Q―=0

或者:

Q=0,Q―=1

只要持续供电,反馈电路就能维持状态。

因此:

SRAM 不需要刷新,但仍是易失性的。

“静态”说的是不需要定时刷新,绝不是断电不丢失。

DRAM:一个晶体管加一个电容,保存一位

电容保存的电荷会泄漏,因此需要刷新。

你可以理解成:

先识别原来保存的是 0 还是 1,再恢复对应的电荷状态。

刷新不是把所有位都写成 1

DRAM 读取也会扰动电容中的电荷,所以读出后需要还原。刷新通常按行进行,刷新该行的多个存储位,而不必把这些数据输出到 CPU 的数据总线上。

讲义里的“2ms 内刷新一遍”是所讨论器件的参数,不是所有 DRAM 的统一要求。

比较项目 SRAM DRAM
保持方式 双稳态反馈电路 电容电荷
是否刷新 不需要 需要
断电是否保持 本章普通器件不能 不能
单元结构 较复杂 较简单
集成密度 相对低 相对高
每位成本 相对高 相对低
典型用途 Cache、小容量快速存储 大容量主存

这张比较表是必会解释的内容。

SRAM 芯片示例,是在教你怎样读组织方式和控制信号

讲义中的 6116:

2K×8=2KB

因此有 11 位地址。内部可以把这 11 位分给行、列译码器,选中一个八位单元。

采用行列结构,是为了便于组织大型矩阵,并不会改变 211 个单元这个事实。

对本章的 SRAM 控制方式,可以这样记:

操作 CS# OE# WE# 数据由谁驱动
读 0 0 1 存储芯片
写,采用讲义中的控制组合 0 1 0 CPU 或总线主设备
未选中 1 × × 芯片输出高阻

其中 × 表示这个条件下不关心该信号。

其他例子如 6264、62256 等,主要是容量和引脚配置不同。6264 的备用电源保护电路值得认识:

用电池继续供电,可以保持 SRAM 内容;这并没有让 SRAM 单元本身变成非易失性器件。

DRAM 的地址复用,必须理解

讲义的 2164A:

64K×1

选择 64K 个位置需要 16 位地址。

但它可以把地址分两次传入:

  1. 先用 8 个引脚传入行地址,由 RAS# 锁存。
  2. 再用同样的 8 个引脚传入列地址,由 CAS# 锁存。

所以:

只有 8 根外部地址引脚,也能接收合计 16 位的地址信息。

因此不能看到 8 根地址引脚,就直接判断容量是 28。

这颗芯片每个单元只有一位,所以八颗同时工作,才能组成:

64K×8=64KB

讲义的 DRAM 存储条示例,还包含校验位

两个 256K×4 芯片提供八位数据;一个 256K×1 芯片提供一位奇偶校验:

256K×9

其中:

  • 8 位是用户数据;
  • 1 位是校验信息。

因此用户数据容量是 256KB,不能把校验位都算成可用数据容量。

为什么要讲这个?它把位扩展和可靠性开销联系起来了。

图 3-464K×1 器件的示意:8 根地址引脚分两次接收 16 位地址。行地址先锁存,随后换成列地址,不会抹掉已锁存的信息。

第三章 · 第 05 节

3.4.1—3.4.2 CPU 连接与存储扩展

掌握要求:会做 3.22—3.27:容量、地址译码、芯片数量、数据位分配和地址范围。

背景为什么要讲:必须把字地址和 CPU 字节地址分开。图中的组织图不代替器件电气时序和控制器设计。

先把三类总线记牢:

总线 回答的问题 基本作用
地址总线 AB 访问哪个位置? 传地址
数据总线 DB 传什么内容? 传数据
控制总线 CB 读还是写、谁工作? 传控制信号

地址线数决定可选择多少位置;数据线数决定一次能传多少位

两个量不能混为一谈。

直接做章末 3.22

题目说:

按字节编址,40 位地址线,16 位数据线,问容量。

按字节编址,每个地址对应一字节:

最大可寻址容量=240B=1TB

16 位数据总线说明一次传输可以传两字节,不会把地址空间再乘以 2。

还有一个措辞要准确:这是最大可寻址容量,题目并没有证明机器实际安装了这么多内存。

低位地址选择片内位置,高位地址决定哪片芯片工作

讲义的例子:

  • CPU 有 20 位地址;
  • 芯片是 256K×8;
  • 256K 等于 218,芯片需要 18 位地址。

于是:

  • A0~A17:选择芯片内部的位置。
  • A18、A19:决定芯片放在 CPU 地址空间的哪个区域。
A19 A18 对应地址范围
00 00000H~3FFFFH
01 40000H~7FFFFH
10 80000H~BFFFFH
11 C0000H~FFFFFH

例如把芯片安排在第二个区域,就要求:

A19=0,A18=1

时片选有效。

地址范围的结束地址:

结束地址=起始地址+占用地址数−1

最后的减 1 不能漏,因为起始地址本身已经算第一个位置。

扩展分成三种:位扩展、字扩展、复合扩展

把芯片看成“行数 × 每行宽度”的表,最容易理解:

  • 位扩展:行数不变,让每行更宽。
  • 字扩展:每行宽度不变,让行数更多。
  • 复合扩展:两者都增加。

位扩展:同一个地址,多颗芯片一起提供不同的数据位

例如:

4K×8→4K×16

需要两颗:

  • 第一颗接 D0~D7。
  • 第二颗接 D8~D15。
  • 两颗地址线并联。
  • 两颗同时选中。
  • 两颗的读写控制同步。

原因很直接:

一颗只能给八位,两颗同时给出数据,拼成十六位。

字扩展:让不同芯片负责不同地址范围

例如:

64K×8→256K×8

需要四颗:

  • 各颗低 16 位地址线并联。
  • 数据线都连接 D0~D7。
  • 高两位地址经过 2-4 译码器,产生四个片选。
  • 每次只选中一颗,其他芯片输出高阻。

为什么数据线可以并在一起?因为每次只有一颗负责输出。

为什么不能四颗同时选中?因为它们可能在同一根数据线上输出不同电平,产生总线冲突。

复合扩展:先拼出足够宽的一组,再增加组数

章末 3.27:

4颗 4K×8→8K×16

先两颗拼成:

4K×16

再用两组实现:

8K×16
图 3-5习题 3.27 的复合扩展。这里的 A0—A12 均是十六位存储字地址;CPU 字节地址的对应关系在正文另算。

图中使用的是以 16 位存储字为单位的地址编号:

  • 低 12 位字地址:选每组内部的 4K 个位置。
  • 高一位字地址:选第 0 组还是第 1 组。
  • 同一组的两颗芯片同时工作,各负责八位。
  • 不同组互斥选中。

计算芯片数的通用方法:

目标为 N×M,单颗为 n×m,若各项整除:

每组芯片数=Mm
组数=Nn
总芯片数=Nn×Mm

做题时把“每组几颗”和“共几组”分别写出来,连接关系就容易确定了。

把 3.23~3.27 全部做掉

题号 目标 所需芯片与组织 关键连接
3.23 1M×1→1M×8 8 颗,位扩展 地址 A0~A19 并联,各颗分别负责 D0~D7 的一位;同时片选
3.24 4K×8→4K×16 2 颗,位扩展 地址并联;一颗负责低八位,一颗负责高八位
3.25 64K×8→256K×8 4 颗,字扩展 A0~A15 并联;A16、A17 经 2-4 译码选择芯片
3.26 1K×8→8K×8 8 颗,字扩展 A0~A9 并联;A10~A12 经 3-8 译码选择芯片
3.27 四颗 4K×8→8K×16 2 组,每组 2 颗 组内位扩展,组间字扩展

3.25 若从地址 0 开始:

芯片 地址范围
第 0 片 00000H~0FFFFH
第 1 片 10000H~1FFFFH
第 2 片 20000H~2FFFFH
第 3 片 30000H~3FFFFH

3.26 每颗占 1K,即 400H 个字节地址。第 g 颗的范围为:

g×400H到g×400H+3FFH

所以第一颗是 0000H~03FFH,最后一颗是 1C00H~1FFFH。

还有一个实际接线时非常重要的细节:字地址和 CPU 字节地址可能错开一位

例如 4K×16:

  • 有 4K 个十六位字;
  • 共 8KB;
  • 芯片的一个地址选择两字节。

若 CPU 按字节编址,那么相邻两个字的 CPU 地址差 2。

因此,常见十六位连接中:

CPU A1→芯片 A0
CPU A2→芯片 A1

以此类推。CPU 的 A0 用于区分字中的字节位置,并配合字节使能或屏蔽信号。

因此,上面 3.27 图中的字地址 A12,若换成 CPU 字节地址,通常对应 CPU 的 A13。

这也是讲义 NOR Flash 接口图把 CPU 的 A[20:1] 接到芯片 A[19:0] 的原因。

做芯片组织题可以先使用存储字地址;题目明确 CPU 按字节编址并要求实际接线时,必须处理这层对应关系。

把五种扩展方案逐个画出来

先按存储字编号做组织题,确定同组芯片的数据位分工,再检查哪组被选中。下面可以切换全部五道扩展题;地址改到下一组时,观察片选变化。

图 3-6切换 3.23—3.27,并输入不同字地址。数据位分配标在芯片下方;选中组中的芯片同步工作,其余组输出高阻。左侧分支表示片选控制,低位地址和读写控制按文字说明共用。

第三章 · 第 06 节

3.4.3 嵌入式系统的存储扩展

掌握要求:会说明 NOR、NAND、SRAM/SDRAM 怎样连接,控制器需要配置什么。

背景为什么要讲:具体 SoC 的启动地址和引脚不是所有 ARM 芯片通用的规则;本章先理解流程。

这部分对应 3.28、3.29,不能略过。

先理解嵌入式系统中的常见分工:

  • NOR Flash:保存程序、启动代码。
  • SRAM:保存变量、栈等运行数据。
  • NAND Flash:保存大容量程序文件、数据。
  • SDRAM:提供较大容量的运行空间。

具体系统采用什么组合,取决于芯片和需求。

NOR Flash:比较像普通可寻址存储器

本章示例 HY29LV160,在十六位模式下:

1M×16=2MB

它有独立地址线、数据线和片选、读写控制信号。

还需要认识:

  • BYTE#:选择相应字节模式。
  • RESET#:复位。
  • RY/BY#:指示就绪或忙。
  • DQ15/A[-1]:在不同模式下可以承担数据位或额外地址位的功能。

为什么有这些复用?因为同一颗器件可以采用不同数据宽度组织。

在讲义的 S3C2440 NOR 启动示例中,NOR 映射到启动地址区域,CPU 可以直接取启动指令。这里的启动地址和配置属于这个具体 SoC 示例,不能推广成所有 ARM 芯片都一样。

NAND Flash:经控制器传命令、地址,再传数据

原始 NAND 常把命令、地址、数据分时放到同一组 I/O 引脚上。

需要认识的信号:

信号 作用
CLE 命令锁存使能
ALE 地址锁存使能
CE# 片选
WE# 写使能
RE# 读使能
WP# 写保护
R/B# 就绪/忙

概念上的访问流程:

  1. 发送操作命令。
  2. 发送相应地址。
  3. 等待器件完成内部操作。
  4. 读取或写入数据。
  5. 检查状态、校验等。

控制器负责把 CPU 总线访问转换成 NAND 所需的接口动作。

**地址、数据复用,不等于每次只传一位。**本章示例使用八位 I/O 总线,命令、地址、数据在不同阶段占用这八根线。

讲义 K9F2808U0A 的每页组织为:

512B数据+16B附加区域

附加区域可用于校验、状态等管理信息。它不是普通用户数据容量的一部分。

因此 NAND 存储的工程管理不仅是“把位写进去”,还包括坏块和纠错等问题。eMMC 把 NAND 与控制器整合起来,正是为了把这些管理工作封装起来。

SDRAM:不仅要接线,还要配置控制器

本章 SDRAM 例子:

4M×16×4 Banks

容量:

4M×16×4=256Mb=32MB

要把“每 Bank 单元数”“每单元位数”“Bank 数”分别乘进去。

典型信号:

  • 地址线、数据线;
  • BA0、BA1:选择 Bank;
  • CLK、CKE:时钟及其使能;
  • CS#、RAS#、CAS#、WE#:命令与控制;
  • LDQM、UDQM:低、高字节屏蔽。

多 Bank 的意义,是提供交错安排操作的机会,减少一部分等待。

刷新和预充电要分开

  • 刷新:恢复存储电荷,保持数据。
  • 预充电:关闭或准备行相关电路,为后续操作做准备。

讲义将二者放在一起叙述,容易让人误以为它们是同一个操作。实际分析时应分别看待。

完成连接后,还要设置总线宽度、时序、刷新参数、模式等,否则 SDRAM 不会因为“线接上了”就自动正常运行。

3.29“ARM 微处理器如何扩展 RAM”,可以这样回答:

根据具体 ARM SoC 提供的外部存储控制器,选用 SRAM、SDRAM 等器件;确定容量、数据位宽、地址组织和片选关系,连接地址、数据、控制及时钟信号;再设置控制器的时序、地址映射和刷新等参数。必要时使用多颗芯片进行位扩展或字扩展。

这里“ARM”描述处理器体系,具体可接什么 RAM,需要看 SoC 的存储控制器。

第三章 · 第 07 节

3.4.4 内存条、SDRAM 与 DDR

掌握要求:会解释模块化、SPD、预取和双边沿传输,能按速率与位宽算带宽。

背景为什么要讲:DIP、TSOP、BGA、SIPP、SIMM、DIMM 都说明用途;不要求背完封装针数和历代产品参数。

为什么采用内存条?

把多颗存储芯片组织成可插拔模块,便于生产、安装、维修和升级,也形成标准接口。

一根内存条主要包括:

部件 作用
DRAM 颗粒 真正保存主存数据
PCB 安装器件并连接信号
SPD 芯片 记录容量、时序、电压等参数
金手指 连接主板插槽
阻容元件 改善供电和信号完整性等

SPD 是小型非易失性器件,讲义用 EEPROM 解释。启动时读取 SPD,帮助系统配置内存。

SPD 保存的是内存条参数,不是给用户存程序的大容量主存

讲义还列出封装和模块形式:

  • DIP:双列直插封装。
  • TSOP:薄型小外形封装。
  • BGA:球栅阵列封装。
  • SIPP:单排插针形式。
  • SIMM:模块两面的对应触点传相同信号。
  • DIMM:模块两面的触点可独立传输信号。

为什么要讲这些?它们说明器件怎样从芯片变成可安装的模块。简答题中要会说明模块化的意义;封装外观和具体引脚数量,通常属于识别、查表层面。

异步 DRAM → FPM → EDO → SDRAM → DDR,是围绕减少等待、增加传输机会演进的

  • 普通异步 DRAM:一次访问需要行、列选择等过程。
  • **FPM:**保持同一行打开,连续访问不同列,省掉重复打开同一行的开销。
  • **EDO:**延长数据输出有效时间,使部分操作可以重叠。
  • **SDRAM:**按时钟组织命令和操作,便于流水线、突发与多 Bank 调度。
  • **DDR:**在时钟两个边沿传数据。

讲义第 33 页对 FPM 的行、列叙述写反了。正确抓法是:

同一行,多次访问不同列。

Micron 的原厂 FPM 数据手册也按“保持 RAS,重复给出列地址”的方式描述。Micron Memory Data Book

SDR 与 DDR 的区别,看下面这张图

图 3-7相同外部时钟下,SDR 单边沿、DDR 双边沿提供数据传输机会;不表示每个周期都必然有有效用户数据。
  • SDR:每个时钟周期一次数据传输机会。
  • DDR:上升沿和下降沿都有数据传输机会。

因此在相同外部时钟频率下,DDR 的传输次数是 SDR 的两倍。

从 DDR 到 DDR4,必会解释的变化:

类型 预取深度 典型标准电压 主要改进
DDR 2n 2.5V 双边沿传输
DDR2 4n 1.8V 更深预取、信号完整性改进
DDR3 8n 1.5V 更深预取、更低电压及控制改进
DDR4 8n 1.2V Bank Group、更高数据速率与密度

预取可以先理解为:

内部一次准备更多数据,再按外部接口节奏连续送出去。

**DDR4 的预取深度仍是 8n,不是继续变成 16n。**它通过 Bank Group 等设计提高操作安排与传输效率。

讲义所说的 ODT,是片内终端匹配一类技术,用于改善高速信号质量;OCD、ZQ 校准、复位、自刷新相关技术等,也是围绕驱动匹配、可靠性和功耗做改进。认识目的即可,做本章简答题无需展开电路细节。

**讲义 DDR4 的“284 个针脚”有误。**常见桌面 DDR4 DIMM 为 288 针,DDR3 DIMM 为 240 针;对应笔记本模块又有不同针数。Kingston 的 DDR4 技术介绍

讲义还提到 DDR5:

  • 更低的标准工作电压;
  • 更高的数据传输能力;
  • 一个模块中采用两个独立子通道;
  • 增加可靠性相关机制。

这里先认识演进方向。芯片内部纠错与整条内存提供的系统级 ECC,也应区分,不能看到“ECC”就认为两者完全相同。

带宽题用这一条公式最稳:

带宽=每秒传输次数×每次传输字节数

例如 64 位数据宽度,400MT/s:

400×106×648=3.2×109B/s=3.2GB/s

MT/s 表示每秒传输次数。不要把它直接当成内部存储单元的时钟频率。

双通道在理想情况下,把两条独立的通道并行使用,总带宽可以相加。

特别注意:DDR2-400 与 DDR-400 的外部数据速率同为 400MT/s时,单通道同位宽的理论带宽相同。“代际带宽翻倍”需要说明比较的频率条件,不能只看名字。

第三章 · 第 08 节

3.5.1 Cache 的原理与性能

掌握要求:理解局部性、命中、管理位和容量口径;会算命中率与简化平均访问时间。

背景为什么要讲:特定 CPU 的 Cache 容量与路数是案例;要理解取舍,不能背成普遍常数。

Cache 是主存中一部分数据的高速副本。

CPU 请求数据时:

  • 已在 Cache 中:命中。
  • 不在 Cache 中:未命中,也叫脱靶;需要进一步访问主存。

它主要解决:

CPU 很快,主存相对慢,CPU 经常等数据。

Cache 有效的基础,是局部性

时间局部性:

刚用过的东西,很可能很快再用。

例如循环里不断更新同一个变量。

空间局部性:

刚访问一个位置,很可能很快访问相邻位置。

例如顺序读取数组。

因此,CPU 即使只请求一个字节,Cache 也常把这个字节所在的整块调入。

这就是 Cache line 的数据块。

Cache line 除了数据,还必须知道“数据来自哪里、能不能使用”

字段 回答的问题
数据 保存的内容是什么?
Tag 这行对应主存的哪个块?
Valid,有效位 这行当前是否保存有效内容?
Dirty,脏位 内容是否修改过,但尚未写回下一级?
替换状态 需要淘汰时,哪些行更适合淘汰?

其中数据、Tag、有效位是基本信息。脏位、替换信息取决于设计和策略。

讲义例子:

512+14+1+1+2=530位/行

32 行需要:

530×32=16960位

但它的数据容量只有:

32×64B=2048B=2KB

其余是管理开销。

**题目说“Cache 容量 16KB”时,本章映射题指的是数据区容量。**若问总硬件存储开销,还要加 Tag 和控制位。

多级 Cache 的思路也一样

讲义介绍:

  • L1 可分指令 Cache 和数据 Cache,减少两类访问争用。
  • L2 通常容量更大。
  • L3 在讲义的典型多核结构中由多个核心共享。

具体某代 CPU 的容量、路数只是案例。你需要理解层次与分工,不需要背本章所有型号参数。

命中率:命中次数除以总请求次数

h=NhitNhit+Nmiss

80 次命中,20 次未命中:

h=80%

分母不是“Cache 查询次数 + 命中次数”。每个请求先查 Cache,不代表每次都命中。

补充一个常见性能题公式

如果每次先花 TC 查 Cache,未命中后再多花 P 处理:

T平均=TC+(1−h)P

例如:

  • Cache 查询 2ns;
  • 命中率 95%;
  • 未命中额外花 80ns。

则:

T平均=2+0.05×80=6ns

为什么这里要补充?它把“命中率高所以快”变成可计算的关系,也能防止把未命中额外时间和未命中总时间混用。

影响 Cache 性能的因素,要理解方向,不能机械背“越大越好”

  • 容量太小:常用内容装不下。
  • 映射限制太强:不同主存块争同一个位置。
  • 块太小:较难充分利用空间局部性。
  • 块太大:装入代价增加,同容量下行数减少,还可能带入大量用不到的数据。
  • 替换策略不合适:把马上要用的块淘汰了。
  • 多级结构、指令数据分离、预取:可改善部分访问行为。

更标准的未命中分类是:

  • **首次或强制未命中:**第一次访问,还没装入。
  • **容量未命中:**Cache 放不下需要的工作内容。
  • **冲突未命中:**位置限制造成相互挤出。

讲义给出的特定命中率、容量比例属于例子,不是所有机器都满足的规律。

第三章 · 第 09 节

3.5.2 三种映射与地址字段

掌握要求:由主存地址求块号、偏移、组号和 Tag,分清 Tag 位数、数值与路号。

背景为什么要讲:映射公式必须会用;相联查找的电路思想要理解,暂不要求设计比较器网络。

先统一符号:

  • A:主存字节地址;
  • B:每块字节数;
  • C:Cache 数据容量;
  • L=C/B:Cache 总行数;
  • k:每组路数;
  • S=L/k:组数。

先拆主存地址:

主存块号 b=⌊AB⌋
块内偏移 d=AmodB

这一步对三种映射都适用。

块号告诉你“在哪一块”,偏移告诉你“在这一块的哪个字节”

下面的图可切换映射方式,也可以修改地址。

主存 1MB · Cache 数据区 16KB · 块 64B
图 3-8主存 1 MiB、Cache 数据区 16 KiB、块 64 B。切换映射方式后,观察索引与 Tag 位数;地址不直接指定组内路号。

直接映射:一个主存块,只有一个候选 Cache 行

行号=bmodL
Tag=⌊bL⌋

为什么还需要 Tag?

因为不同主存块可能得到同一个行号。

例如 Cache 有 256 行:

  • 主存块 128 → 行 128;
  • 主存块 384 → 也到行 128。

因此只知道“第 128 行”还不能知道里面是谁,必须比较 Tag。

命中的条件:

Valid=1且Tag匹配

直接映射优点是简单;缺点是两个常用块可能不断争同一个位置。

全相联:一个主存块,可以放到任何 Cache 行

没有固定的行索引,需要在候选行中比较 Tag。

Tag=完整主存块号

优点:放置自由,减少固定位置冲突。

代价:需要更多比较和替换管理电路,尤其容量或相联度很大时。

讲义的“块表”,是表达主存块与 Cache 行关系的逻辑模型。实际可通过每行的 Tag 和比较电路完成查找,并不一定真的存在一张供 CPU 软件读取的普通表。

相联存储器的意思是:

根据内容是否匹配进行查找,而不只是给一个地址取出某个位置。

组相联:先固定组,再允许放在组内任意一路

组号=bmodS
Tag=⌊bS⌋

例如 8 路组相联:

每组有 8 个候选位置。地址决定哪一组;具体在哪一路,由查找结果或装入位置决定。

主存地址中没有一个字段直接指定“组内第几路”。

你一定要记住这句话。它是很多组相联题的关键。

三种映射其实可以统一:

  • 1 路组相联,就是直接映射。
  • 只有一组、所有行都在这一组,就是全相联。
  • 中间情况,就是通常的组相联。

地址字段位数:先算低位,再算中间,剩下给 Tag

假设容量、块大小、组数都为 2 的整数次幂:

偏移位数=log2B
索引位数=log2S
Tag位数=主存地址位数−索引位数−偏移位数

直接映射时 S=L。

全相联时 S=1,索引为 0 位。

讲义在 Cache 一节使用了“页号”这个词,表示一种地址分区。它不是下一节操作系统分页中的虚拟页,也不需要去查虚拟存储器页表。

讲义组相联部分有些“页”的数量描述不一致,做题时用上面“总行数÷路数求组数”的方法最稳。

第三章 · 第 10 节

习题 3.20、3.21 完整演算

掌握要求:能独立算直接映射和八路组相联,并解释结果为什么不同。

背景为什么要讲:这两题是全章计算核心之一;数字相同的现象必须检查原因,不能推广成通则。

两题共同条件:

  • 主存 1MB;
  • Cache 16KB;
  • 块大小 64B;
  • 按字节编址。

先统一换成 2 的幂:

1MB=220B
16KB=214B
64B=26B

所以:

  • 主存地址 20 位。
  • 块内偏移 6 位。
  • Cache 总行数:
L=21426=28=256

3.20:直接映射

第一问:

256行

地址格式:

Tag⏟6位 | 行号⏟8位 | 块内偏移⏟6位

为什么 Tag 六位?

20−8−6=6

题给地址:

A=02021H=8225

先分块:

8225=128×64+33

因此:

  • 主存块号:128;
  • 块内偏移:33,即 21H。

Cache 行号:

128mod256=128

Tag:

⌊128/256⌋=0

第三问答案:

第128字块,即第128行

第二问 Cache 数据区地址:

128×64+33=8225=2021H

所以:

Cache地址=2021H

这次 Cache 地址恰好与主存地址的数值相同,是这个地址和映射条件导致的。不是通用规律。

可以用 06021H 检查理解:

  • 主存块号 384;
  • 仍映射到 Cache 行 128;
  • Tag 变成 1;
  • Cache 数据区中的位置仍是 2021H。

位置相同,Tag 不同;两块不能同时占据这个直接映射行。

3.21:8 路组相联

总行数仍是 256,但组数为:

S=256/8=32=25

因此:

  • W:块内偏移,6 位。
  • u:组索引,5 位。
  • s:Tag,剩余 9 位。
s=20−5−6=9

第一问:

s=9,u=5,W=6

还是地址 02021H,主存块号还是 128。

组号:

128mod32=0

第二问:

第0组

Tag:

⌊128/32⌋=4

第三问问的是 Tag 占多少位:

9位

注意区分:

Tag 位数是 9,当前地址的 Tag 数值是 4。

**组内哪一路无法单凭这个地址确定。**它可能在第 0 组的任意一路,取决于已有内容和装入策略。

第三章 · 第 11 节

3.5.3 Cache 读取、更新与替换

掌握要求:区分串行/并行请求路径、写通/写回和写分配,并能按序列模拟替换。

背景为什么要讲:多核与 DMA 的一致性机制还有更深内容;这里先掌握最新数据、Dirty 与替换的关系。

这三个问题要分别处理。

读取结构有两种

贯穿读出 Look Through:

先查 Cache,未命中再把请求送往主存。

优点:命中时可以避免主存访问。

代价:未命中访问要经过前面的 Cache 查询。

旁路读出 Look Aside:

同时向 Cache 和主存发出请求;若 Cache 命中,使用 Cache 返回的数据并抑制相应主存请求。

优点:减少串行等待。

代价:主存侧请求与总线活动更多。

这里掌握请求路径和取舍即可,不必死记固定延迟数值。

写入策略:写通与写回

假设主存中 x=3,CPU 要改成 x=5。

写通 Write Through:

更新 Cache 时,也把写入送往主存。

优点:更新关系简单。

代价:主存写流量较大。实际可用写缓冲减少 CPU 等待,所以不必把它理解成每次都完全停下来等待主存。

写回 Write Back:

先只改 Cache,并设置 Dirty;需要把这个脏块淘汰或执行相应回写操作时,再写回主存。

因此可能暂时出现:

  • Cache:x=5
  • 主存:x=3
  • Dirty:1

写回允许这种受管理的暂时差异。所谓一致性,是保证系统能获得正确的新数据,而不是要求每一时刻两个物理位置都完全相等。

讲义关于写回的表述容易让人误读成“再次修改就写回”。正确抓法是:

可以在 Cache 中反复修改;脏块被替换出去之前,要按策略写回。

如果把脏块直接丢弃,最新修改就会丢失。

**为什么需要保证正确更新?**否则 CPU、其他访问者或后续主存读取可能读到过期内容,程序计算结果就会错。

多核、DMA 等场合还涉及更完整的一致性机制,本章先掌握写通、写回、Dirty 的作用。

写未命中如何处理,是另一个维度

虽然讲义没有展开,你需要认识:

  • 写分配:把块装入 Cache 后写。
  • 不写分配:绕过 Cache,把写送向下一级。

它们与写通、写回相关,但不是同一个分类问题。提这一嘴,是为了以后看到这些词时不把它们混在一起。

图 3-9写回允许修改暂存在 Cache,但淘汰脏块前必须回写;写通把更新送往主存。这里只比较单行的逻辑状态,忽略写缓冲延迟。

替换策略:只有候选位置满了,才需要选淘汰对象

  • 直接映射:目标行固定,没有多个候选行可选。
  • 组相联:在目标组内选择。
  • 全相联:在整个 Cache 的候选行中选择。

先找无效空位置;没有可用空位置时,再按替换策略选择。

策略 淘汰依据 要会说明的特点
Random 随机选 简单,但可能淘汰马上要用的块
FIFO 最早进入 访问命中不改变入队先后
LFU 统计期内使用次数最少 看频率,受统计周期、老数据影响
LRU 最久没有使用 看最近一次访问时间

LRU 是“最久没用”,LFU 才是“用得最少”。

讲义第 44 页把 LRU 开头描述成“近期使用次数最少”,这个措辞会把两种算法混淆。LRU 的正确定义是淘汰最后一次访问距今最久的块。MIT 的 Cache 课程说明

讲义中的计数器、队列等内容,是在说明替换信息如何保存:

  • LFU:记录访问次数,并约定统计或清零规则。
  • FIFO:记录进入顺序。
  • LRU:记录最近使用顺序,或使用相应近似机制。

不能背成“LRU 总是命中率最高”,它的效果取决于访问序列;高相联度下精确记录 LRU 也可能比较复杂。

用一个小例子区分 LRU 与 FIFO

两行 Cache,开始为空,访问:

A, B, A, C, A

采用 LRU,按“最近使用 → 最久未用”记录:

访问 结果 Cache 使用顺序
A 未命中 A
B 未命中 B,A
A 命中 A,B
C 未命中,淘汰 B C,A
A 命中 A,C

关键是第三次访问 A 后,A 变成最近使用,所以装 C 时淘汰 B。

若用 FIFO,A 最早进入,即使命中过,仍会在装 C 时先被淘汰。

这部分的达标标准:会按访问序列一步一步更新状态,而不是只背缩写。

图 3-10两行全相联 Cache,访问 A、B、A、C、A。命中是否更新替换依据,是 LRU 与 FIFO 的关键区别;LFU 的计数范围和同次数规则在图中明确约定。

第三章 · 第 12 节

3.6.1 虚拟存储器的用途

掌握要求:区分 VA/PA,说明容量、重定位、地址隔离、保护和共享。

背景为什么要讲:虚拟存储器首先是地址与管理机制;不要把它只记成“硬盘变 RAM”。

程序使用的地址叫虚拟地址 VA。

实际访问物理存储位置所用的地址叫物理地址 PA。

基本关系:

虚拟地址→地址转换物理地址

程序看到的连续区域,可以映射到不连续的物理位置。

两个程序也可以使用相同的虚拟地址数字,分别映射到不同的物理位置。

虚拟存储器解决的不只是内存容量问题

本章主要包括:

  1. 程序不必一次全部装入物理内存。
  2. 程序不必绑定一个固定物理位置。
  3. 不同程序可有各自的地址空间。
  4. 可设置访问权限,实现保护和受控共享。

因此不能把虚拟存储器简单等同于“拿硬盘当 RAM”。

它首先是一种地址空间和存储管理机制;借助外存进行按需调入,是其中一种重要用途。

若当前需要的内容不在主存,可能要从外存调入,代价通常远高于普通内存访问。因此:

虚拟存储器能缓解容量限制,但不能消除物理内存不足带来的性能问题。

频繁调入调出,可能导致严重卡顿,称为抖动的相关现象。

Cache 与虚拟存储器的联系和差别

比较 Cache 虚拟存储器
主要矛盾 CPU 与主存的速度差 地址管理、保护、主存容量限制
常见搬运关系 主存 → Cache 外存 → 主存
信息单位 Cache line 页,或本章讨论的段
主要管理者 硬件 操作系统与硬件共同配合
查找关系 主存块与 Cache 行 虚拟地址与物理地址

共同点是:都利用局部性,把较常用的部分放到较快的存储层。

别把本章三种“块”混在一起:

  • NAND 页:Flash 内部读写组织。
  • Cache line:Cache 与主存之间的数据块。
  • 虚拟页:地址空间管理单位。

它们都叫块或页,但所在层次和用途不同。

第三章 · 第 13 节

3.6.2—3.6.4 段、页与段页式转换

掌握要求:会查表、检查范围/权限、计算基址或页框与偏移,并乘表项长度。

背景为什么要讲:三种路径都要认识,详细操作系统页面分配和调度算法在相关课程继续。

下面可以切换三种管理方式。

图 3-11段式做“基址+偏移”;页式换页框、保留偏移;段页式先找页表。示例均假定表项和访问权限有效。

段式:按程序的逻辑部分划分,段长可以不同

例如:

  • 代码段;
  • 数据段;
  • 栈段。

虚拟地址由:

(S,D)

组成:

  • S:段号;
  • D:段内偏移。

段表记录:

  • 段基址;
  • 段长;
  • 是否装入;
  • 访问权限等。

转换过程:

  1. 用段号查段表。
  2. 检查段是否存在、是否已装入、权限是否允许。
  3. 检查偏移是否越界。
  4. 基址加偏移。
PA=段基址+D

若段长为 L,合法偏移通常满足:

0≤D<L

例子:

  • 段基址 4000H;
  • 段长 0800H;
  • 偏移 0100H。

则:

PA=4000H+0100H=4100H

若偏移为 0800H,已经越界,因为最后一个合法偏移是 07FFH。

优点:

与程序逻辑结构对应,便于按段设置保护与共享。

缺点:

段长不固定,容易形成外部碎片;大段搬运代价可能较高。

页式:虚拟空间和物理空间都按同样大小的固定单位划分

  • 虚拟空间中的单位:页。
  • 物理空间中的单位:页框。

虚拟地址:

(P,D)
  • P:虚页号。
  • D:页内偏移。

页表回答:

这个虚拟页,放在物理内存的哪个页框?

若页大小为 2p 字节:

偏移占 p位
PA=页框号×页大小+D

也可以理解成:

将虚页号替换为页框号,低位偏移保持不变。

例子:4KB 页面

4KB=212B

所以偏移 12 位。

虚拟地址:

VA=3123H

拆成:

  • 虚页号 3;
  • 偏移 123H。

页表说虚页 3 在物理页框 9,则:

PA=9×1000H+123H=9123H

虚页号不要求等于物理页框号;转换前后页内偏移相同。

优点:

  • 页框固定大小,分配方便。
  • 相邻虚拟页可以映射到不相邻物理页框。
  • 避免段式那种可变长分配造成的外部碎片。

代价:

  • 最后一页等位置可能有未使用空间,即内部碎片。
  • 需要页表。
  • 地址转换和缺页处理有开销。

缺页发生时,并不是继续用同一个公式随便找一块内存

如果访问合法,但该页尚未驻留,硬件触发异常,操作系统处理分配或调入,然后重新执行相应访问。

如果地址非法或权限不允许,则是相应访问错误,不能当成普通缺页把数据调入就完事。

段页式:先按逻辑分段,再把每段分页

虚拟地址:

(S,P,D)

步骤:

  1. 用段号 S 查段表。
  2. 得到这个段的页表位置及相关范围信息。
  3. 用段内页号 P 查这个页表。
  4. 得到物理页框号。
  5. 拼接页内偏移 D,形成 PA。

一句话记:

段表告诉你查哪张页表,页表告诉你落在哪个物理页框。

它结合了按段组织、保护与共享,以及按固定页面分配物理空间的特点;代价是转换和管理更复杂。

查表地址还要考虑表项大小

如果每项占 E 字节:

表项地址=表基址+索引×E

例如页表基址 1000H,每项 4B,虚页号 3:

对应页表项地址=1000H+3×4=100CH

讲义图中的“基址加段号、页号”是简化示意。做具体字节地址题,不能漏乘表项长度。

第三章 · 第 14 节

TLB、页表开销与页面大小

掌握要求:区分 TLB 未命中和缺页,会算页表容量,能解释大页/小页的权衡。

背景为什么要讲:多级页表要知道稀疏分配思想,不要求现在实现完整页表遍历器。

为什么需要 TLB?因为查页表本身也要访问存储器

在“单级页表、没有相关缓存命中”等简化条件下,一次数据访问可能需要:

  1. 先读页表项。
  2. 再读真正的数据。

因此增加访问开销。

TLB 是 Translation Lookaside Buffer,教材叫快表,用来高速保存近期常用的地址转换信息。

TLB 保存映射;普通数据 Cache 保存数据块

必须分清:

  • TLB 命中,不等于数据 Cache 命中。
  • TLB 未命中,不等于缺页。

TLB 未命中只表示:

当前转换信息不在这个高速缓存里。

接下来查页表,若页本来就在内存,仍能完成访问,不需要从磁盘调页。

页表为什么可能很大?

讲义例子:

  • 虚拟地址 32 位;
  • 页大小 4KB;
  • 每个页表项 4B。

偏移 12 位:

32−12=20

位用作虚页号。

页数:

220

完整单级页表容量:

220×4B=4MB

所以每个进程维护这样一张完整表,可能有很大开销。

多级页表的意义,是让没有使用的大量地址区域,不必都分配下级页表

一种示意拆分:

10位⏟一级索引 |\ 10位⏟二级索引 |\ 12位⏟偏移

先查一级表,再查对应二级表。

这里认识思想即可。它在地址空间稀疏时节省存储;不能理解成无论映射多少地址,都必然比单级表占用更少。

为什么要提?讲义明确提到二级页表,它也解释了操作系统为什么不总使用一张平铺的大表。

章末 3.14:页面大小怎样影响速度?

这是一个权衡题,不能回答“越大越快”或“越小越快”。

页面较大:

  • 页数减少,页表项数减少。
  • 同样数量的 TLB 项能覆盖更大地址范围。
  • 一次缺页搬运更多数据。
  • 可能带入更多暂时不用的数据。
  • 内部碎片可能增加。

页面较小:

  • 单次搬运的数据量较小。
  • 分配粒度更细,浪费可能减少。
  • 页表项更多。
  • TLB 覆盖范围变小。
  • 可能发生更多转换和页面管理活动。

可以直接写进简答题的答案:

页面大小会同时影响页表开销、TLB 覆盖范围、缺页搬运代价和内部碎片。大页减少页表项并扩大 TLB 覆盖,但可能增加单次调页代价和无用数据搬运;小页分配更细,但管理与地址转换开销可能增大。需要结合程序局部性和系统特性选择。

讲义中的 4KB 是常见页面大小示例,不是唯一大小。

图 3-12TLB 查地址转换,数据 Cache 查数据块。TLB 未命中需要继续查页表,可能完全不需要从外存调页;权限检查始终不能省略。

内容覆盖与学习边界

原书每一小节,都能在这里找到位置

下表按原目录核对。为了先建立解题基础,容量与地址单独放在开头;同一原书小节可以分成多个讲解节。

原书位置内容完整讲解
3.1.1存储器的类型第 02 节 →
3.1.2层次化的存储器系统第 02 节 →
3.1.3外存的接口标准第 02 节 →
3.1.4存储器性能指标第 02 节 →
3.2.1—3.2.5掩模 ROM、PROM、EPROM、EEPROM、Flash第 03 节 →
3.3.1静态 RAM第 04 节 →
3.3.2动态 DRAM第 04 节 →
3.4.1—3.4.2地址空间、CPU 连接与扩展第 05 节 →
3.4.3嵌入式系统的存储器扩展第 06 节 →
3.4.4存储器模块第 07 节 →
3.5.1Cache 概述第 08 节 →
3.5.2地址映射与转换第 09 节 →
3.5.2 配套题直接映射与八路组相联完整计算第 10 节 →
3.5.3Cache 更新与替换第 11 节 →
3.6.1虚拟存储器概述第 12 节 →
3.6.2—3.6.4段式、页式、段页式转换第 13 节 →
3.6.3 延伸TLB、页表容量、二级页表与页面大小第 14 节 →

现在把章末 29 道题与学习内容对上

题目 你应当掌握的能力
3.1~3.5 按介质、器件、系统角色分类;说明磁、光、半导体存储,以及主存、外存
3.6 列出 IDE/PATA、SCSI、SATA、SAS、SD、eMMC、UFS,并说明基本特点
3.7 说明容量、延迟、周期、带宽、可靠性、功耗、成本、供电等选择因素
3.8 比较 EPROM、EEPROM、Flash,解释可写器件为什么仍属于 ROM 家族
3.9 解释内存条模块化、可安装和可升级的意义
3.10 解释 DDR 到 DDR4 的边沿传输、预取、电压、Bank Group 等改进
3.11 解释速度、容量、成本之间的分层折中
3.12~3.13 解释虚拟存储器的用途,以及 VA 与 PA 的区别和映射关系
3.14 分析页面大小的权衡
3.15 说明段、页、段页三种管理方式,并写出转换步骤
3.16 说明 Cache 的作用、局部性和使用场景
3.17 说明更新正确性的必要性,以及写通、写回
3.18 说明数据、Tag、有效位及相关管理位
3.19 区分 Random、FIFO、LFU、LRU
3.20~3.21 本文已完整计算直接映射与 8 路组相联
3.22 本文已计算:按字节编址的 40 位地址空间为 240B
3.23~3.27 本文已给出五种芯片扩展方案及关键连接
3.28 比较 NOR、NAND 的功能、接口、执行代码方式与控制器需求
3.29 说明 ARM SoC 的 RAM 选择、连接、扩展和控制器配置

正文中那些看起来很碎的内容,你现在可以这样处理

内容 为什么讲它 需要掌握到什么程度
磁鼓、磁芯、磁泡及发展史 说明存储技术与主存角色的演变 认识名称和基本意义
光驱的激光、定位、光电转换部件 把“光学状态”与“电数据”联系起来 能说出基本读取过程
外存接口的历史版本、年代和速率 展示标准化与性能演进 会分类;具体参数查表
SIMOS、FLOTOX 与薄氧化层 解释非易失保持、注入、隧穿 会讲因果关系,不必推器件物理公式
2764A、2816 的模式与时序表 教你读取器件手册和控制条件 会查表、解释读写与校验
6116、6264、2164A 等型号 提供容量、控制、地址复用实例 从组织方式算参数,不靠背型号猜
电池保护 SRAM 解释持续供电可以保持易失数据 理解原理
校验位、NAND 附加区 说明可靠性也要占空间 区分用户容量与管理开销
DIP、TSOP、BGA、SIPP、SIMM、DIMM 说明封装与模块接口 认识区别与用途
特定 CPU 的 Cache 容量、相联路数 展示映射技术的真实应用 理解路数含义,型号数字无需逐个背
多级页表 解释页表存储开销怎样管理 认识查表路径与稀疏分配思想

所以,你不需要把每一个编程电压、脉冲宽度、封装针数都背下来,才能算“学会这一章”。但你需要知道那些表在描述什么,并能在题目给表时按条件分析。

先验收,再看答案

七道短自测

  1. 8K×16 芯片总容量是多少字节?需要多少位片内地址?
  2. 按字节编址,24 位地址、32 位数据总线,最大可寻址容量是多少?
  3. 用 4K×4 芯片组成 8K×16,需要几颗、分几组?
  4. 主存地址 20 位,Cache 16KB,块 64B,四路组相联。Tag、组索引、偏移各几位?
  5. LRU 与 LFU 的区别是什么?
  6. TLB 未命中,是否一定要从磁盘调页?
  7. 页面 4KB,VA=5123H,虚页 5 映射到物理页框 A,PA 是多少?
展开自测答案与达标标准
  1. 8K×16/8=16KB;8K 个单元,需要 13 位片内地址。
  2. 224B=16MB;数据总线宽度不再乘进去。
  3. 每组 16/4=4 颗,共 8K/4K=2 组,总共 8 颗。
  4. 总行数 256;组数 256/4=64。偏移 6 位,组索引 6 位,Tag 8 位。
  5. LRU 看最后一次使用距今多久;LFU 看统计期内使用次数。
  6. **不一定。**查页表后可能发现页面已经驻留。
  7. 偏移仍为 123H,页框换成 A,所以 A123H。

**这一章的达标线是:容量和扩展能自己算,Cache 地址能自己拆,三种虚拟地址转换能自己走一遍,其余内容能按“原理—特点—用途”解释。**有哪一步不顺,就沿题号回到相应例子重新做一遍。

原讲义 3.7 · 全部习题

29 道习题的答题卡

题意经过归纳,保留题号与计算条件。先自行写答案,再展开核对;完整推导与图解请沿链接回查正文。涉及历史器件时,以题目给定条件为准。

习题 3.1 / 存储器分类与特点

分别按介质、系统角色、读写与保持特性说明分类。

展开答题要点

按介质有磁、光、半导体;按角色有寄存器、Cache、主存、外存。半导体器件再按保持和改写特点区分 SRAM、DRAM、ROM 家族等。同一器件可以同时属于多个维度,例如 SSD 是半导体外存,主要采用 NAND Flash。

回到第 02 节完整讲解 →

习题 3.2 / 半导体器件的优缺点与用途

比较常见 RAM 与 ROM 家族器件,并说明用途。

展开答题要点

SRAM 快、不需刷新,但每位器件较多、成本较高,常用于 Cache;DRAM 密度较高、适合主存,但需要刷新。ROM/EEPROM/Flash 非易失,适合程序、配置、长期数据;改写方法、速度、粒度和寿命依器件不同,不能把它们都当普通 RAM 用。

回到第 02 节完整讲解 →

习题 3.3 / RAM 与 ROM 的工作方式

说明两种典型 RAM 的保持原理,并列出 ROM 家族。

展开答题要点

SRAM 用双稳态反馈保持,DRAM 用电容电荷保持并刷新。ROM 家族包括掩模 ROM、一次编程 PROM、电编程/紫外线擦除 EPROM、电擦写 EEPROM、通常按块电擦除的 Flash。具体器件的模式按手册分析。

回到第 04 节完整讲解 →

习题 3.4 / 磁与光存储器

说明类型、访问特点和基本读取过程。

展开答题要点

磁盘利用磁头定位到盘面位置读写,磁带侧重顺序访问,磁鼓、磁芯、磁泡是本章历史例子;本章这些介质断电可保持。光存储用激光读介质光学特征,经光电转换得到电信号,例子包括 CD-DA、CD-ROM、VCD、DVD。

回到第 02 节完整讲解 →

习题 3.5 / 主存与外存

用系统角色区分,不能只看机箱位置。

展开答题要点

主存保存运行中需由处理器访问的程序和数据,典型为 DRAM;外存长期保存程序、文件等,典型为 HDD、SSD、光盘等。机箱内部的 SSD 仍是外部辅助存储器。

回到第 02 节完整讲解 →

习题 3.6 / 辅助存储器接口

列出讲义介绍的接口并概括定位。

展开答题要点

IDE/ATA/PATA、SCSI、SATA、SAS、SD、eMMC、UFS。PATA 强调并行,SATA/SAS 等采用串行;SD 为存储卡接口,eMMC/UFS 是含控制器的闪存存储方案。接口与保存信息的介质是不同概念。

回到第 02 节完整讲解 →

习题 3.7 / 选择存储器的因素

除容量外,还需要看哪些条件?

展开答题要点

容量、存取时间、存取周期、持续带宽、可靠性、功耗、成本、供电与接口兼容性、是否掉电保持、擦写粒度和寿命等。先看应用需要,不是单看一个速度数字。

回到第 02 节完整讲解 →

习题 3.8 / 可擦写器件为什么还叫 ROM

比较 EPROM、EEPROM、Flash 的共同点与擦除差别。

展开答题要点

本章这些器件利用绝缘结构保存电荷、断电保持,属于历史 ROM 家族;可在特定编程/擦除条件下改写,不等于普通 RAM。EPROM 通常紫外线整片擦除,EEPROM 可较细粒度电擦写,Flash 通常按块电擦除。

回到第 03 节完整讲解 →

习题 3.9 / 采用内存条的原因

从系统制造、安装和升级说明。

展开答题要点

把多颗芯片及配套电路组织成标准模块,便于制造、安装、维修与容量升级。DRAM 颗粒保存主存数据,SPD 保存配置参数,PCB 与金手指等完成模块连接;SPD 不是用户程序的大容量主存。

回到第 07 节完整讲解 →

习题 3.10 / DDR 到 DDR4 的改进

从传输边沿、预取、供电和 Bank 组织概括。

展开答题要点

DDR 在两个时钟边沿传数据;DDR/DDR2/DDR3/DDR4 的典型预取深度依次为 2n/4n/8n/8n,典型标准电压逐步降低。DDR4 引入 Bank Group 等以改善操作组织。相同 MT/s、位宽和通道数下,理论带宽相同,不能仅凭代际名称判定翻倍。

回到第 07 节完整讲解 →

习题 3.11 / 分层存储的意义

说明为什么不全用最快或最便宜的器件。

展开答题要点

高速器件通常容量和每位成本受约束;通过少量快速存储配合大量较慢存储,利用局部性在可接受成本下兼顾速度与容量。层次职责与介质类型分别理解。

回到第 02 节完整讲解 →

习题 3.12 / 虚拟存储器解决的问题

除容量不足以外,再说出两个目的。

展开答题要点

按需装入缓解容量限制,映射解除程序与固定物理位置的绑定,为不同程序提供地址空间,并支持保护和受控共享。物理内存不足时仍可能频繁调页,并不会凭空得到同速的大内存。

回到第 12 节完整讲解 →

习题 3.13 / VA 与 PA 的联系

说明数字相同或不同分别意味着什么。

展开答题要点

VA 是程序使用的地址;PA 是转换后用于访问物理存储位置的地址。通过映射联系,数值不必相同;不同程序可用相同 VA 映射到不同物理位置。权限与驻留状态也要检查。

回到第 12 节完整讲解 →

习题 3.14 / 页面大小的权衡

为什么不能回答“越大越快”?

展开答题要点

大页减少页表项并扩大相同 TLB 项数的覆盖,但可能增加单次搬运、无用数据与内部碎片;小页分配更细,但表项更多、TLB 覆盖更小,管理和转换活动可能增多。最终效果依工作负载与系统而定。

回到第 14 节完整讲解 →

习题 3.15 / 段、页、段页式转换

分别写出查表路径、合法性检查和物理地址形成方式。

展开答题要点

段式:段号查段表,检查范围、驻留和权限,基址加段内偏移。页式:虚页号查页表,检查表项,页框号乘页大小再加偏移。段页式:段号找本段页表,再用段内页号找页框,保留页内偏移。按字节求表项地址时,索引需乘表项字节数。

回到第 13 节完整讲解 →

习题 3.16 / Cache 的原理、作用与场合

解释为什么保存一小部分副本就可能有效。

展开答题要点

时间与空间局部性使近期和相邻数据被重复访问;Cache 以块保存下一级部分内容,命中时降低平均访问时间。硬件 Cache 用于处理器等存储层次;更一般的软件系统也采用缓存思想,具体一致性与管理方式另论。

回到第 08 节完整讲解 →

习题 3.17 / Cache 与主存正确更新

说明写通、写回怎样避免读到旧数据。

展开答题要点

写通把 Cache 更新也送往主存,可配写缓冲;写回先更新 Cache 并置 Dirty,在替换脏块或规定回写时更新主存。写回容许受管理的暂时差异,不能把一致性理解成任何时刻两个副本逐位相等。多访问者情形还需相应一致性机制。

回到第 11 节完整讲解 →

习题 3.18 / Cache line 的基本信息

区分数据容量和管理开销。

展开答题要点

数据、Tag、有效位是基本内容。写回常需脏位,替换与一致性状态依设计配置。题中 Cache 容量通常指数据区,若问硬件总存储,还要加标记与管理位。

回到第 08 节完整讲解 →

习题 3.19 / 替换策略

区分 Random、FIFO、LFU、LRU。

展开答题要点

Random 随机;FIFO 看最早装入;LFU 看约定统计范围内的次数;LRU 看最后一次访问距今多久。先使用无效空行,候选满时再淘汰;组相联限目标组内,直接映射没有任意选行余地。

回到第 11 节完整讲解 →

习题 3.20 / 直接映射的完整计算

主存 1 MB、Cache 16 KB、块 64 B,按字节编址。求总行数及 02021H 的 Cache 位置。

展开答题要点

按本章二进制容量约定:总行数 16K/64=256。地址 8225=128×64+33,故块号 128,偏移 21H,行号 128,Tag 数值 0;地址字段为 6/8/6 位。Cache 数据区地址为 2021H。这次数值相同只是例子的结果。

回到第 10 节完整讲解 →

习题 3.21 / 八路组相联的完整计算

沿用上一题条件改成八路;求 s/u/W 位数、02021H 的组号与 Tag 位数。

展开答题要点

256 行÷8=32 组;按讲义字段,s/u/W 分别为 9/5/6 位。主存块号 128,组号 128 mod 32=0,Tag 数值 floor(128/32)=4,Tag 宽度 9 位。地址不能决定组内哪一路。

回到第 10 节完整讲解 →

习题 3.22 / 40 位字节地址空间

按字节编址,40 位地址线、16 位数据线,最大可寻址容量是多少?

展开答题要点

2⁴⁰ 字节,严格写为 1 TiB,按本章旧单位写法为 1 TB。16 位数据通路不能再乘入地址空间;题目给的是可寻址上限,并未证明装有这么多内存。

回到第 05 节完整讲解 →

习题 3.23 / 1M×1 组成 1M×8

给出芯片数、地址与数据线连接、片选关系。

展开答题要点

8 片,位扩展。20 位片内地址并联;每片提供 D0—D7 中的一位,所有片同时选中并同步读写。总共仍是 1M 个八位单元,不是 8M 个单元。

回到第 05 节完整讲解 →

习题 3.24 / 4K×8 组成 4K×16

给出芯片数与高低字节分工。

展开答题要点

2 片,位扩展。12 位字地址并联,一片负责 D7…D0,另一片负责 D15…D8,同步选中。若 CPU 按字节编址,通常 CPU A1 对应芯片 A0,并配合字节使能;不能把组织图的字地址直接当 CPU 字节地址。

回到第 05 节完整讲解 →

习题 3.25 / 64K×8 组成 256K×8

给出译码关系与从 0 开始的各片地址范围。

展开答题要点

4 片,字扩展。A0—A15 并联;A16/A17 经 2→4 译码,只选一片。四段为 00000H—0FFFFH、10000H—1FFFFH、20000H—2FFFFH、30000H—3FFFFH。数据线共用,未选中的输出高阻。

回到第 05 节完整讲解 →

习题 3.26 / 八片 1K×8 组成 8K×8

给出片内地址、组选择地址和地址范围公式。

展开答题要点

8 片,字扩展。A0—A9 为片内地址,A10—A12 经 3→8 译码。第 g 片占 g×400H 至 g×400H+3FFH;首片 0000H—03FFH,末片 1C00H—1FFFH。

回到第 05 节完整讲解 →

习题 3.27 / 四片 4K×8 组成 8K×16

分别说明每组片数与组数。

展开答题要点

2 组,每组 2 片。组内拼成 4K×16;组间字扩展成 8K×16。12 位片内字地址共用,字地址 A12 选组;组内两片分高低八位。换成 CPU 字节编址时,组选择通常对应 CPU A13。

回到第 05 节完整讲解 →

习题 3.28 / NOR 与 NAND 的嵌入式连接

比较用途、访问接口、是否能直接取指,以及管理要求。

展开答题要点

本章并行 NOR 有独立地址、数据与控制线,可映射到可取指区域并支持 XIP;原始 NAND 经控制器在 I/O 引脚分时传命令、地址和数据,常按页读/编程、按块擦除,并处理 ECC/坏块等。原始 NAND 的代码通常需先搬入可执行存储器;具体启动机制看 SoC。

回到第 06 节完整讲解 →

习题 3.29 / ARM 系统扩展 RAM

从器件选择、线路连接到控制器配置说明步骤。

展开答题要点

先查具体 ARM SoC 的外部存储控制器支持 SRAM、SDRAM 或其他哪类器件;确定容量、位宽、地址组织和片选,必要时做位/字扩展;连接地址、数据、控制与时钟,配置地址映射、访问时序、模式与刷新等。只有线路连接而未正确配置,通常不能保证工作。

回到第 06 节完整讲解 →

做题前最后检查

这几处最容易把会做的题做错

  1. 先写单位:b 与 B 不同,芯片的 N×M 是单元数与每单元位数;本章 KB/MB/TB 的旧写法按二进制约定理解。
  2. 先写编址单位:按字节编址的容量由地址位数决定,不能再乘数据总线宽度。字地址换成 CPU 字节地址可能要移位。
  3. 先找组,再找路:地址决定候选组,不决定具体路;Tag 数值与 Tag 位数分别回答不同问题。
  4. 先说明策略:写回允许主存暂旧,但脏块不能直接丢弃。LRU 看最近使用,LFU 看次数,FIFO 看进入顺序。
  5. 先查表项状态:TLB 未命中不等于缺页;缺页不等于访问合法;段偏移、页框及表项长度都需要按规则检查。

讲义中需要留意的表述已在正文说明:典型 EPROM 擦除态并非“全 0”;FPM 是同一行多次选列;DDR4 预取仍为 8n;LRU 并非“使用次数最少”;刷新与预充电也不是同一操作。理解原因,比单独记一句纠正更稳。

过关时,你应该能独立完成五道芯片扩展、两道 Cache 映射,再把段、页、段页式地址转换各走一遍。其余器件、接口、模块与历史内容,至少能按“原理—特点—用途”解释。

整理依据与核对资料

依据用户提供的《计算机原理与嵌入式系统讲义》第三章《存储器系统》及章后 29 道习题重新讲解。保留全部 14 节已有讲解,并补充可交互 SVG、原书小节定位、折叠自测和逐题答题卡;本文件不包含原讲义扫描页。

沿用前两章及项目内其他教材整理版的纸张底色、目录、例题和掌握边界体例。容量题沿用原书二进制约定;需要严格单位时同时说明 KiB/MiB/TiB。具体器件参数、引脚与编程条件必须依对应手册核对。

文中对浮栅、EPROM、FPM、DDR4、Cache 替换等易错表述的核对链接放在相关段落,采用 Micron、ST、Kingston 与 MIT 等技术资料。旧版本接口参数和旧芯片均用于理解原理,不作为当前产品推荐。

所有公式与 SVG 都在本文件内,无需联网加载。打印按钮会显示折叠答案,并使用每幅图的默认示例;打印或另存 PDF 时可按需要选择页面范围。