vault backup: 2026-07-04 12:32:07
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
|
||||
> 📖 本章介绍存储器的分类、工作原理和层次结构,是课程的重点和难点。
|
||||
> 🎯 重点理解存储层次、主存组成、Cache和虚拟存储器
|
||||
> ⚠️ 考试范围提示:存储器结构时序、RAM刷新、扩展不要求画图、4.2.6、4.4 不考;重点考查:存储器带宽计算、字位扩展、Cache直接映射/组相联映射、海明码、DRAM刷新。复习题参考例题4.1、4.7~4.10,课后习题4.1、4.4~4.7、4.14、4.26、4.29、4.31、4.32。
|
||||
|
||||
---
|
||||
|
||||
@@ -11,6 +12,7 @@
|
||||
- [[#4.2 主存储器]]
|
||||
- [[#4.3 高速缓冲存储器(Cache)]]
|
||||
- [[#4.4 虚拟存储器]]
|
||||
- [[#📖 真题与作业精选]]
|
||||
- [[#本章小结]]
|
||||
- [[#例题与解析]]
|
||||
|
||||
@@ -219,6 +221,9 @@ $$存储容量 = 存储单元个数 \times 存储字长 / 8$$
|
||||
|
||||
假设存储字长为32位(4字节),存取周期为100ns:带宽 = 32位/100ns = 4字节/100ns = 40MBps。
|
||||
|
||||
> [!tip] 考试高频考点
|
||||
> **存储器带宽计算**是作业和考试的常见题型。公式:带宽 = 数据总线宽度 / 存取周期。注意单位换算:1B = 8位。例如数据总线宽度32位,存取周期200ns,则带宽 = 32位/200ns = 160M位/秒 = 20MB/s。(见真题精选)
|
||||
|
||||
### 4.2.4 半导体存储芯片
|
||||
|
||||
```mermaid
|
||||
@@ -238,7 +243,7 @@ $$芯片容量 = 2^{地址线位数} \times 数据线位数$$
|
||||
|
||||
存储芯片就像一个小型仓库:地址线告诉仓库你要哪个格子的东西,数据线传送你拿到的东西,译码驱动根据地址找到对应的格子,存储矩阵是存放所有东西的格子,读/写电路控制是取东西还是放东西,片选线选择是哪个仓库。
|
||||
|
||||
一个存储芯片有10根地址线和4根数据线:容量 = 2¹⁰ × 4 = 1024 × 4 = 4096位 = 512字节。
|
||||
一个存储芯片有10根地址线和4根数据线:容量 = 2^10 x 4 = 1024 x 4 = 4096位 = 512字节。
|
||||
|
||||
#### 译码驱动方式
|
||||
|
||||
@@ -277,6 +282,9 @@ SRAM就像一个稳定的开关,用两个互锁的开关存储信息,状态
|
||||
|
||||
DRAM就像一个漏水的桶,用电容存储电荷表示0和1,但电容会漏电需要定期补充(刷新),每个存储单元只需要1个晶体管和1个电容体积小。电脑的8GB内存条通常使用DRAM。
|
||||
|
||||
> [!tip] 考试要点
|
||||
> DRAM刷新方式的计算是期末考试的高频考点。三种刷新方式的计算方法见下方真题精选第5题。
|
||||
|
||||
**刷新方式**:
|
||||
|
||||
| 方式 | 特点 | 效率 |
|
||||
@@ -313,10 +321,16 @@ SRAM像高级记事本,用特殊墨水写上就不掉,写得快不用维护
|
||||
|
||||
MROM像印刷好的书,出厂时就印好了不能改,成本低适合批量生产;PROM像一次性写入的光盘,用户可以写一次但不能改;EPROM像用铅笔写的书,可以用橡皮擦掉重写;EEPROM用电子橡皮擦更方便;Flash是高速电子橡皮擦,又快又大。
|
||||
|
||||
> [!note] 考试说明
|
||||
> 4.2.6 ROM部分不在考试范围内,了解即可,不需要深入掌握。
|
||||
|
||||
### 4.2.7 存储器与CPU的连接
|
||||
|
||||
#### 存储器容量扩展
|
||||
|
||||
> [!tip] 考试高频考点
|
||||
> 字位扩展是期中/期末考试的必考题型(2022-2023期末原题)。虽然考试不要求画图,但必须掌握芯片数计算和地址分配。具体例题见下方真题精选第4题。
|
||||
|
||||
**三种扩展方式**:
|
||||
|
||||
```mermaid
|
||||
@@ -359,13 +373,23 @@ graph TB
|
||||
|
||||
#### 海明码(Hamming Code)
|
||||
|
||||
> [!tip] 考试高频考点
|
||||
> 海明码的检错纠错计算是作业和考试的经典题型,几乎每年都会考。必须掌握校验位计算、校验位位置安排、错误定位和纠正方法。具体例题见下方真题精选第3题。
|
||||
|
||||
**原理**:在数据位中插入多个校验位,通过校验位的组合定位错误位。
|
||||
|
||||
**校验位数r满足**:$2^r \geq m + r + 1$(m为数据位数)
|
||||
|
||||
**特点**:可以检测并纠正1位错误,可以检测2位错误。
|
||||
|
||||
8位数据需要4位校验码:总位数12位,校验位位置1、2、4、8,可以纠正1位错误。对于8位数据(m=8),$2^3 = 8 \geq 12$不满足,$2^4 = 16 \geq 13$满足,所以需要4位校验码。
|
||||
8位数据需要4位校验码:总位数12位,校验位位置1、2、4、8,可以纠正1位错误。对于8位数据(m=8),$2^3 = 8 \geq 12$ 不满足,$2^4 = 16 \geq 13$ 满足,所以需要4位校验码。
|
||||
|
||||
**海明码解题步骤**:
|
||||
1. 确定校验位数r:由 $2^r \geq m + r + 1$ 求解
|
||||
2. 安排位置:校验位放在2的幂次方位置(1、2、4、8...),数据位依次填入其余位置
|
||||
3. 编码:每个校验位负责校验特定位置(P1校验第1、3、5、7...位,P2校验第2、3、6、7...位,P4校验第4、5、6、7...位)
|
||||
4. 检错:计算各校验组的异或值,组合得到错误位号
|
||||
5. 纠正:翻转错误位即可
|
||||
|
||||
---
|
||||
|
||||
@@ -420,6 +444,9 @@ $$e = \frac{T_c}{T_a} = \frac{1}{H + (1-H)r}$$
|
||||
> [!info] 问题
|
||||
> 主存块如何放入Cache?需要地址映射。
|
||||
|
||||
> [!tip] 考试高频考点
|
||||
> Cache的直接映射和组相联映射是本章最重要的计算题考点。组相联映射涉及地址划分、主存区计算等综合问题,必须熟练掌握。具体例题见下方真题精选第2题。
|
||||
|
||||
#### 1. 直接映射(Direct Mapping)
|
||||
|
||||
**规则**:每个主存块只能映射到Cache的固定行。
|
||||
@@ -493,6 +520,12 @@ graph LR
|
||||
|
||||
组相联映射就像图书馆的分组书架,每本书只能放在固定的组,但可以放在组内的任何书架上。先找对应的组,再在组内搜索,比直接映射灵活,比全相联映射快。
|
||||
|
||||
**组相联映射解题关键步骤**:
|
||||
1. 确定Cache组数 = Cache块数 / 每组块数
|
||||
2. 地址划分:高位Tag + 中间组号Index + 低位块内Offset
|
||||
3. 主存区数 = 主存块数 / Cache组数
|
||||
4. 每个主存区中的块按组号映射
|
||||
|
||||
### 4.3.4 Cache替换策略
|
||||
|
||||
> [!info] 问题
|
||||
@@ -528,6 +561,9 @@ FIFO(先进先出)最早放上去的文件先被替换,简单但可能把
|
||||
> [!info] 定义
|
||||
> 虚拟存储器是一种通过硬件和软件结合,使程序认为自己拥有连续完整内存的技术。
|
||||
|
||||
> [!note] 考试说明
|
||||
> 4.4 虚拟存储器不在考试范围内,以下内容仅作了解参考。
|
||||
|
||||
虚拟存储器就像一个魔法书架:你的书架(主存)很小,但你的书(程序)很多,通过魔法让你觉得有一个很大的书架。只把常用的书放在书架上,不常用的书放在地下室(辅存),当你要看不在书架上的书时,魔法自动把书从地下室取来。
|
||||
|
||||
Windows的虚拟内存系统:主存是电脑的8GB内存,辅存是硬盘上的页面文件,让程序认为自己有32GB内存。
|
||||
@@ -561,6 +597,129 @@ Windows的虚拟内存系统:主存是电脑的8GB内存,辅存是硬盘上
|
||||
|
||||
---
|
||||
|
||||
## 📖 真题与作业精选
|
||||
|
||||
> 以下题目来自历年期末考试、期中考试和课后作业,是本章最核心的考查题型。建议先自己做再看答案。
|
||||
|
||||
### 真题1:存储器带宽计算(作业原题)
|
||||
|
||||
**题目**:某计算机数据总线宽度为32位,存储器存取周期为200ns,求存储器带宽。
|
||||
|
||||
**答案**:
|
||||
|
||||
$$带宽 = \frac{数据总线宽度}{存取周期} = \frac{32位}{200ns} = 160M位/秒 = 20MB/s$$
|
||||
|
||||
**解题思路**:带宽 = 数据总线宽度 / 存取周期。注意位和字节的换算:160M位/秒 = 160/8 MB/s = 20MB/s。这道题的关键是记住公式并注意单位换算,避免混淆位(bit)和字节(Byte)。
|
||||
|
||||
### 真题2:Cache组相联映射(作业原题)
|
||||
|
||||
**题目**:某计算机Cache有64块,采用4路组相联映射。主存有4096块,每块128字。求:(1) Cache的组数;(2) Cache地址位数;(3) 主存地址位数;(4) 主存可分为多少个区。
|
||||
|
||||
**答案**:
|
||||
|
||||
(1) Cache组数 = 64 / 4 = **16组**
|
||||
|
||||
(2) Cache地址位数:Cache总字数 = 64 x 128 = 8192字,地址位数 = log2(8192) = **13位**
|
||||
|
||||
(3) 主存地址位数:主存总字数 = 4096 x 128 = 524288字,地址位数 = log2(524288) = **19位**
|
||||
|
||||
(4) 主存区数 = 主存块数 / Cache组数 = 4096 / 16 = **256区**
|
||||
|
||||
**解题思路**:
|
||||
- 4路组相联意味着每组4块
|
||||
- 组数 = 总块数 / 每组块数
|
||||
- 地址位数用log2计算
|
||||
- 主存区数 = 主存块数 / Cache组数,表示主存按Cache大小划分成多少个区,每个区内的块通过组相联映射到Cache
|
||||
- 地址划分:Tag(8位) + Index(4位) + Offset(7位) = 19位
|
||||
|
||||
### 真题3:海明码检错纠错(作业原题)
|
||||
|
||||
**题目**:接收到的海明码为1100000(偶性配置),请判断传输是否出错,若出错请纠正并给出欲传送的原始信息。
|
||||
|
||||
**答案**:
|
||||
|
||||
接收到的码字按位置排列:1 1 0 0 0 0 0
|
||||
|
||||
校验位位置为1、2、4,分别计算:
|
||||
- P1 = 位置1 XOR 位置3 XOR 位置5 XOR 位置7 = 1 XOR 0 XOR 0 XOR 0 = **1**
|
||||
- P2 = 位置2 XOR 位置3 XOR 位置6 XOR 位置7 = 1 XOR 0 XOR 0 XOR 0 = **1**
|
||||
- P4 = 位置4 XOR 位置5 XOR 位置6 XOR 位置7 = 0 XOR 0 XOR 0 XOR 0 = **0**
|
||||
|
||||
错误位号 = P4P2P1 = 011 = **第3位出错**
|
||||
|
||||
纠正第3位:1 1 **1** 0 0 0 0 → 纠正后码字为 **1110000**
|
||||
|
||||
提取原始信息(去除校验位1、2、4,保留数据位3、5、6、7):**1 0 0 0**
|
||||
|
||||
**欲传送的信息为1000。**
|
||||
|
||||
**解题思路**:
|
||||
1. 偶性配置:各校验组中1的个数应为偶数,否则该组校验结果为1
|
||||
2. P1覆盖位置1、3、5、7(二进制最低位为1的位置)
|
||||
3. P2覆盖位置2、3、6、7(二进制次低位为1的位置)
|
||||
4. P4覆盖位置4、5、6、7(二进制第三位为1的位置)
|
||||
5. 三个校验位的结果组合(P4P2P1)即为出错位号,0表示无错
|
||||
|
||||
### 真题4:存储器扩展(2022-2023期末原题)
|
||||
|
||||
**题目**:某CPU有16根地址线、8根数据线。现需要设计一个存储系统:系统程序区4K,使用2K×8位的ROM芯片;用户程序区12K,使用4K×8位的RAM芯片。使用74LS138译码器作为片选。请确定所需芯片数量并分析地址分配。
|
||||
|
||||
**答案**:
|
||||
|
||||
**ROM部分(系统程序区)**:
|
||||
- 需要ROM芯片数 = 4K / 2K = **2片** 2K×8位ROM
|
||||
- 地址范围:每片ROM用2K = 2^11,需要11根地址线(A10~A0)
|
||||
- 两片ROM用A11做片选区分,地址范围分别为 0000H~07FFH 和 0800H~0FFFH
|
||||
|
||||
**RAM部分(用户程序区)**:
|
||||
- 需要RAM芯片数 = 12K / 4K = **3片** 4K×8位RAM
|
||||
- 每片RAM用4K = 2^12,需要12根地址线(A11~A0)
|
||||
- 三片RAM用高位地址(通过74LS138译码器)做片选
|
||||
|
||||
**总芯片数**:ROM 2片 + RAM 3片 = **5片**
|
||||
|
||||
**74LS138译码器连接**:
|
||||
- 将A15、A14、A13接入74LS138的C、B、A输入端
|
||||
- 译码器的8个输出分别对应不同的地址区间
|
||||
- 选择合适的输出端连接各芯片的片选信号
|
||||
|
||||
**解题思路**:
|
||||
1. 分别计算每种芯片需要的数量:目标容量 / 单片容量
|
||||
2. 位扩展不需要(数据线都是8位,与CPU匹配)
|
||||
3. 字扩展用高位地址做片选,通过译码器统一管理
|
||||
4. 地址分配时注意ROM和RAM的地址范围不能重叠,ROM通常从低地址开始
|
||||
|
||||
### 真题5:DRAM刷新(复习资料原题)
|
||||
|
||||
**题目**:某8K×8位DRAM芯片,内部排列为256×256,存取周期为0.1us。分别计算集中刷新、分散刷新和异步刷新三种方式下的相关参数。
|
||||
|
||||
**答案**:
|
||||
|
||||
芯片内部为256行x256列,需要刷新256行。刷新一行的时间等于一个存取周期0.1us。
|
||||
|
||||
**集中刷新**:
|
||||
- 刷新全部256行所需时间 = 256 × 0.1us = **25.6us**
|
||||
- 这25.6us称为"死区",期间CPU不能访问存储器
|
||||
|
||||
**分散刷新**:
|
||||
- 每个存取周期中,前半段用于正常读写,后半段用于刷新一行
|
||||
- 相当于存取周期变为 0.1 + 0.1 = **0.2us**
|
||||
- 优点是无死区,缺点是存取周期变长,效率降低
|
||||
|
||||
**异步刷新**:
|
||||
- 将256行的刷新任务均匀分散到整个刷新周期(通常2ms)内
|
||||
- 相邻两行刷新的时间间隔 = 2ms / 256 = **7.8125us**
|
||||
- 每隔7.8125us刷新一行,每次刷新只占用0.1us(一个存取周期)
|
||||
- 是集中刷新和分散刷新的折中方案
|
||||
|
||||
**解题思路**:
|
||||
1. 先确定需要刷新的行数:内部排列的行数
|
||||
2. 集中刷新:刷新全部行的时间即为死区时间
|
||||
3. 分散刷新:每个存取周期增加一个刷新周期
|
||||
4. 异步刷新:总刷新周期(通常2ms)/ 行数 = 刷新间隔
|
||||
|
||||
---
|
||||
|
||||
## 📝 本章小结
|
||||
|
||||
### 核心概念
|
||||
@@ -598,7 +757,7 @@ Windows的虚拟内存系统:主存是电脑的8GB内存,辅存是硬盘上
|
||||
|
||||
**答案**:
|
||||
|
||||
24位地址线可以表示 2²⁴ = 16777216 个地址,8位数据线表示每个单元存8位数据(1字节),存储容量 = 16777216 × 8位 = 16777216字节 = 16MB。
|
||||
24位地址线可以表示 2^24 = 16777216 个地址,8位数据线表示每个单元存8位数据(1字节),存储容量 = 16777216 x 8位 = 16777216字节 = 16MB。
|
||||
|
||||
这就像一个仓库有16777216个格子,每个格子能放8个鸡蛋,总容量就是16MB。
|
||||
|
||||
@@ -655,17 +814,21 @@ Windows的虚拟内存系统:主存是电脑的8GB内存,辅存是硬盘上
|
||||
|
||||
**主存组成**:MAR(地址)→ 译码器 → 存储体 ↔ MDR(数据),加上控制电路。
|
||||
|
||||
**容量扩展三种方式**:位扩展(增加字长,数据线串联)、字扩展(增加字数,片选线用高位地址)、字位同时扩展。
|
||||
**容量扩展三种方式**:位扩展(增加字长,数据线串联)、字扩展(增加字数,片选线用高位地址)、字位同时扩展。总芯片数 = 位扩展数 x 字扩展数。**考试提醒**:必须会计算芯片数量和地址分配,期末曾考过用译码器做片选的综合题。
|
||||
|
||||
**Cache三个核心问题**:①映射(直接/全相联/组相联)②替换(FIFO/LRU/LFU/随机)③写策略(写直达/写回)。
|
||||
|
||||
**Cache命中率公式**:平均访问时间 T_a = H·T_c + (1-H)·T_m。命中率95%、Cache 10ns、主存100ns → T_a = 14.5ns。
|
||||
**Cache命中率公式**:平均访问时间 $T_a = H·T_c + (1-H)·T_m$。命中率95%、Cache 10ns、主存100ns → T_a = 14.5ns。
|
||||
|
||||
**直接映射**:i = j mod m(主存块号 mod Cache行数),简单但冲突多。**组相联**:折中方案,先定组再组内任意放。
|
||||
**直接映射**:$i = j \mod m$(主存块号 mod Cache行数),简单但冲突多。**组相联**:折中方案,先定组($q = j \mod u$)再组内任意放。**考试提醒**:组相联映射的地址划分是高频考点,必须掌握Tag/Index/Offset的计算。
|
||||
|
||||
**虚拟存储器**:页式(固定大小页面+页表)、段式(逻辑分段+段表)、段页式(先分段再分页)。
|
||||
**存储器带宽**:带宽 = 数据总线宽度 / 存取周期,注意位与字节的换算(1B = 8bit)。**考试提醒**:这是最基础的计算题,作业原题直接考过。
|
||||
|
||||
**海明码**:校验位数r满足 2^r ≥ m+r+1,8位数据需要4位校验码,可纠正1位错误。
|
||||
**海明码**:校验位数r满足 $2^r \geq m+r+1$,8位数据需要4位校验码,可纠正1位错误。解题步骤:确定校验位数 → 安排位置(2的幂次方)→ 编码 → 检错(各组异或)→ 纠正(翻转错误位)。**考试提醒**:海明码纠错计算是几乎每年必考的题型,务必熟练。
|
||||
|
||||
**DRAM刷新**:集中刷新(有死区)、分散刷新(无死区但效率低)、异步刷新(折中)。计算核心:256行排列,刷新一行=一个存取周期。**考试提醒**:三种刷新方式的参数计算是期末复习重点。
|
||||
|
||||
**不考内容提醒**:存储器结构时序、4.2.6(ROM)、4.4(虚拟存储器)不在考试范围内,复习时可跳过。
|
||||
|
||||
---
|
||||
|
||||
@@ -680,3 +843,4 @@ Windows的虚拟内存系统:主存是电脑的8GB内存,辅存是硬盘上
|
||||
|
||||
*本章难度:⭐⭐⭐⭐⭐ 困难*
|
||||
*重要程度:⭐⭐⭐⭐⭐ 重点*
|
||||
*考试高频考点:存储器带宽、字位扩展、Cache映射、海明码、DRAM刷新*
|
||||
|
||||
Reference in New Issue
Block a user