文章目录
- 考纲
- 3.1 存储系统概述
- 3.2 主存储器
- 3.3 主存储器与CPU的连接
- 3.4 外部存储器
- 3.5 高速缓冲存储器
- 3.6 虚拟存储器
- 【※】存储系统总体流程图
- 【※】各个部件的存储位置
- 计算机存储相关硬件与数据结构说明
- 进程控制块(PCB)
- 页表
- 页表始址
- 页表始址寄存器(PTR)
- MMU(内存管理单元)
- TLB(Translation Lookaside Buffer,快表)
- Cache
- PS:
- 【※】DRAM芯片计算引脚的数目
- 计算芯片引脚的数目
- 【※】多模块存储器
- 双端口RAM
- 多模块存储器
- 高位交叉编址
- 低位交叉编址
- 计算主存的带宽
- 微观角度:
- 宏观角度:
- 【※】磁盘存储器
- 磁盘的设备组成
- 磁盘的性能指标
- 磁盘地址
- 磁盘阵列RAID
- 【※】固态硬盘SSD
- 原理
- 组成
- 读写性能特性
- 与机械硬盘相比的特点
- 磨损均衡技术
- 【※】Cache性能分析
- Cahce性能分析
- 技巧【计算Cache的命中率】:
- Cache的命中率与:
- 如何区分Cache与主存的数据块对应关系?
- Cache很小,主存很大。如果 Cache 满了怎么办?
- CPU 修改了 Cache 中的数据副本,如何确保主存中数据母本的一致性?
- 【※】主存地址与Cache的映射关系、地址结构
- 【※】Cache总位数/总容量
- 存储器概述
- 存储器性能指标
- SRAM和DRAM的比较
- 存储器与CPU的连接
考纲
本章是重点里的重点,大题小题的考频都很高。本章常结合操作系统一起考察,是408里跨学科考察最多的一章。王道书3.1~3.4主要考小题;3.5、3.6经常考大题,要深入理解和学习。
3.1 存储系统概述
- 比较简单的一个小节,概念较多,重点记忆“存储器的性能指标”如何计算。
- 本节两个大题建议做一做,是很有代表性的考法。
3.2 主存储器
- SRAM、DRAM芯片的底层硬件原理不用过度深究,只需要了解它们之间有什么特性区别即可。王道书“3.2.1_3.DRAM芯片的读写周期” 部分过于底层,讲了电气特性,简单了解即可,计组课程里不用深究。
- 只读存储器ROM事实上已经从大纲里删除,今年大家只需要简要了解即可,不用花时间记忆。王道书里依然坚持讲ROM是因为固态硬盘SSD、Flash存储器本质上也是一种ROM,因此也决定了固态硬盘和Flash存储器“读快写慢”的重要特性。
- 要理解主存储器的基本组成,需要知道每个寄存器作用,主存内部各个基本部件之间是如何相互协调工作的,以及CPU是如何与主存交互的。
- 视频3.2.4 中介绍了双端口RAM、多模块存储器。前者(双端口RAM)已从408大纲删除,自命题考生仍需学习,408考生简单了解即可。
3.3 主存储器与CPU的连接
- 本节内容通常考察小题,目前408未出现过大题。
- 截至目前,408历年真题中还没有考过让你把主存和CPU“画图连线”的大题。通常只会在选择题中考察“字扩展、位扩展、字位扩展”相关的小题,做题难度不大。
3.4 外部存储器
- “磁盘存储器”是操作系统和计组都会讲的考点,相对来说操作系统讲的会更详细深入。因此,如果在计组这边第一次学习磁盘存储器,感觉理解不透也没关系,学完操作系统再回来看会容易很多。
- “固态硬盘”是2022年大纲新增的考点,个人认为近几年极有可能考选择题,重点注意固态硬盘的读写特性(读快写慢、随机读写、写前需擦除、擦除寿命有限)以及负载均衡技术。大家只要能理解课件内那张思维导图,做选择题一定没问题。
3.5 高速缓冲存储器
- 大题高频考点,常与操作系统第三章结合考察,综合性较高,但大题题型套路相对固定。
- 强化阶段会用一个例子帮助大家串联操作系统第三章与Cache的相关知识。
- 适合在第一轮做的大题已在学习进度打卡表中说明,未写进打卡表的题目中含有后序章节内容,不建议在第一轮做。
3.6 虚拟存储器
- 本节内容和操作系统第三章高度重合。计组这边建议先快速看看书,有个大概的了解即可,等学完操作系统第三章,第二轮复习时再回来仔细研究。
【※】存储系统总体流程图
【※】各个部件的存储位置
计算机存储相关硬件与数据结构说明
进程控制块(PCB)
- 存放在主存的系统区(内核区)中,是一个数据结构,用于存储进程的各种信息。
页表
- 存放在 PCB 中,用于描述每个进程的虚拟空间与物理内存的映射关系。每个进程的低地址部分或高地址部分可能映射到同一片内核空间。
页表始址
- 存放在 PCB 中的 unsigned int 变量,指示页表的起始地址。
页表始址寄存器(PTR)
- 存放在 MMU 中,系统运行进程前(切换进程)CPU 将会把页表始址复制到页表始址寄存器中,每个进程的页表始址不同。
MMU(内存管理单元)
- 集成在 CPU 中,负责虚拟地址到物理地址的转换。
TLB(Translation Lookaside Buffer,快表)
- 高速存储器,通常由相联存储器或 SRAM 组成,包含于 MMU 中,属于 CPU。存放当前进程的页表项的副本数据,用于加速地址转换。
- 缺失处理由硬件自动实现。
Cache
- 高速存储器,由 SRAM 组成,包含于 CPU,但不属于 MMU 的一部分。
- 切换进程时,Cache 进程不作废,不同进程可能共享同一页框。
- 缺失处理由硬件自动实现。
PS:
- TLB 和 Cache 在底层硬件原理上相同(SRAM),但作用不同。
- TLB(快表)存放着当前进程的页表项的副本数据,用于加速地址转换。
- Cache 存放着内存块的副本数据,用于加速数据访问。
• 在进程被调度,开始运行之前,CPU 会将其页表始址存放到页表始址寄存器中,每切换一个进程,页表始址寄存器内容改变,也就是切换了一张页表。
• 若新进程上处理机运行时,TLB 的副本数据则全部作废,有效位全部变成 0。而 Cache 中的内容不需要全部作废。当刚开始运行新进程时,会经常发生 Cache 未命中的情况。
即:当 A 进程切换到 B 进程时:
① 页表始址寄存器更新
② TLB 副本数据全部作废,Cache 不需要全部作废
【※】DRAM芯片计算引脚的数目
• ABC 位:行数=A,列数=B,一个超元=C 位。
• 访问内存时,DRAM 芯片的读取过程:
- 从地址线获取内存地址,进行行、列译码。
- 先行:将对应行的整行数据放入行缓冲中。行缓冲是一整行的超元。
- 后列:将行缓冲中对应的超元读到数据线。
计算芯片引脚的数目
【※】多模块存储器
双端口RAM
- 支持两个 CPU 同时访问 RAM。
- 可同时读/写不同的存储单元。
- 可同时读同一个存储单元。
- 不能同时写(或者一读一写)同一个单元。
- 若发生“冲突”,则发出“BUSY”信号,其中一个 CPU 的访问端口暂时关闭。
多模块存储器
高位交叉编址
- 理论上多个存储体可以被并行访问,但是由于通常会连续访问,因此实际效果相当于单纯的扩容。
低位交叉编址
- 每个存储周期内可读写地址连续的 m 个存储字。
- 每个体的存储字 = 总线的宽度。
- 微观上,m 个模块被串行访问;
- 宏观上,每个存取周期内所有模块被并行访问。
- 连续取 n 个存储字耗时: T + ( n − 1 ) r 。 T + (n−1)r。 T+(n−1)r。
- 存储体周期为 T,总线传输周期为 r,为了使流水线不间断,应保证模块数: m ≥ T / r m ≥ T/r m≥T/r。
计算主存的带宽
- 模块数:m、存储周期:T、字长:W、数据总线宽度:W、总线传输周期:r、连续存取 n 个字。
- r = T / m r = T/m r=T/m
微观角度:
- 连续取 n 个存储字耗时: T + ( n − 1 ) r T + (n−1)r T+(n−1)r
- 连续取 n 个字大小: n ∗ W n∗W n∗W
- 主存的最大带宽 = ( n ∗ W ) / ( T + ( n − 1 ) r ) (n∗W) / (T + (n−1)r) (n∗W)/(T+(n−1)r)
- PS:当 n 较大时,带宽 → W/r,相当于 m 个存储体并行工作
宏观角度:
- 一个存储周期内,低位交叉存储器可以提供的数据量为单个模块的 m 倍
- 单个存储体的带宽 = W / T 单个存储体的带宽 = W/T 单个存储体的带宽=W/T
- 主存的最大带宽 = m ∗ W / T 主存的最大带宽 = m∗W/T 主存的最大带宽=m∗W/T
【※】磁盘存储器
磁盘的设备组成
- 磁头数:即记录面数,表示硬盘总共有多少个磁头。磁头用于读取/写入盘片上记录面的信息,一个记录面对应一个磁头。
- 柱面数:表示硬盘每一面盘片上有多少条磁道。在一个盘组中,不同记录面的相同编号(位置)的诸磁道构成一个圆柱面。
- 扇区数:表示每一条磁道上有多少个扇区。
磁盘的性能指标
- 容量:格式化与非格式化【更大】
- 记录密度:道密度、位密度、面密度
- 平均存取时间
- 寻道时间(磁头移动到目的磁道)
- 旋转延迟时间(磁头定位到所在扇区,即磁盘旋转半圈需要的时间)
- 传输时间(传输数据所花费的时间)
- 数据传输率:假设磁盘转数为 r(转/秒),每条磁道容量为 N 个字节,则数据传输率为 D r = r N D_r=rN Dr=rN
磁盘地址
- 驱动器号 ∣ 柱面 ( 磁道 ) 号 ∣ 盘面号(磁头号) ∣ 扇区号 驱动器号|柱面(磁道)号|盘面号(磁头号)|扇区号 驱动器号∣柱面(磁道)号∣盘面号(磁头号)∣扇区号
- 柱面号 = ⌊ 簇号 / 每个柱面的簇数 ⌋ 柱面号 = ⌊ 簇号 / 每个柱面的簇数 ⌋ 柱面号=⌊簇号/每个柱面的簇数⌋
- 磁头号 = ⌊( 簇号%每个柱面的簇数)/每个磁道的簇数 ⌋
- 扇区号 = 扇区地址 % 每个磁道的扇区数
磁盘阵列RAID
- 思想:利用磁盘廉价的特点提高存储性能、可靠性和安全性
- RAID0:条带化,提高存取速度,没有容错能力【把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中不同磁盘上的方法】
- RAID1:镜像磁盘互为备份
- RAID2~5:通过数据校验提高容错能力
【※】固态硬盘SSD
原理
- 基于闪存技术 Flash Memory,属于电可擦除 ROM,即 EEPROM。
- 是一种半导体存储器。
- 是一种非易失性存储器。
- 采用随机访问方式,可以代替计算机外部存储器。
组成
- 闪存翻译层:负责翻译逻辑块号,找到对应页(Page)。
- 存储介质:多个闪存芯片(Flash Chip)。每个芯片包含多个块(Block),每个块包含多个页(Page)。
读写性能特性
- 以页(Page)为单位读/写,相当于磁盘的“扇区”。
- 以块(Block)为单位进行“擦除”,擦干净的块中的每页都可以写入一次,读取无限次。
- 支持随机访问,系统给定一个逻辑地址,闪存翻译层可以通过电路迅速定位到对应的物理地址。
- 读取速度快、写入速度慢。如果要写入的页有数据,则不能直接写入,需要将块内其他页全部复制到一个新的(擦除过的)块中,再写入新的页。
与机械硬盘相比的特点
- SSD 读写速度快,随机访问性能高,通过电路控制访问位置;
- 机械硬盘通过移动磁臂旋转磁盘控制访问位置,有寻道时间和旋转延迟;
- SSD 安静无噪音、耐摔抗震、能耗低、造价更贵;
- SSD 的一个“块”被擦除次数过多(重复写同一个块)可能会损坏,而机械硬盘的扇区不会因为写入次数太多而损坏。
磨损均衡技术
- 思想:将“擦除”平均分布在各个块上,以提升使用寿命。
- 动态磨损均衡:在写入数据时做出决策,优先选择累计擦除次数少的新闪存块。
- 静态磨损均衡:SSD 空闲时,将数据按读写特性进行迁移。SSD 监测并自动进行数据分配、迁移,让老旧的闪存块承担以读为主的存储任务,让较新的闪存块承担更多的写任务。
【※】Cache性能分析
Cahce性能分析
- 设 t c t_c tc 是访问一次 Cache 所需要的时间, t m t_m tm 是访问一次主存需要的时间
- 命中率 H:CPU 欲访问的信息已经在 Cache 中的比率, H = 总命中次数 / 总的 C a c h e 访问次数 H = 总命中次数 / 总的 Cache 访问次数 H=总命中次数/总的Cache访问次数
- 缺失率 M = 1 − H M = 1 − H M=1−H
- Cache-主存系统的平均访问时间 t 为:
- 先访问 Cache,若 Cache 未命中,再访问主存: t = H × t c + ( 1 − H ) × ( t c + t m ) t = H×t_c + (1 − H) × (t_c + t_m) t=H×tc+(1−H)×(tc+tm)
- 同时访问 Cache 和主存,若 Cache 命中,则立即停止访问主存: t = H × t c + ( 1 − H ) × t m t = H×t_c + (1 − H) × t_m t=H×tc+(1−H)×tm
- C a c h e − 主存系统的性能效率 = 访问 C a c h e 的时间 / 系统平均访问时间 = t c / t Cache-主存系统的性能效率 = 访问 Cache 的时间 / 系统平均访问时间 = t_c / t Cache−主存系统的性能效率=访问Cache的时间/系统平均访问时间=tc/t
技巧【计算Cache的命中率】:
- 如果每一行的 Cache 缺失情况一样,则可以只讨论一行的缺失情况。
- 互换行列的访问顺序后,Cache 命中率要么猜同上,要么猜 0。
Cache的命中率与:
- Cache 的容量、块的大小、地址映像方式和替换算法有关。
- 每次被访问的主存块,一定会被立即调入 Cache。
如何区分Cache与主存的数据块对应关系?
- Cache 和主存的映射方式。
Cache很小,主存很大。如果 Cache 满了怎么办?
- 替换算法。
CPU 修改了 Cache 中的数据副本,如何确保主存中数据母本的一致性?
- Cache 写策略。
PS:
- 比较器的个数就是分组中的 Cache 行数。
- 比较器的位数就是 Tag 标记位数 20。
【※】主存地址与Cache的映射关系、地址结构
- 主存容量 / C a c h e 容量 = 2 标记位( t a g ) 主存容量 / Cache 容量 = 2^{标记位(tag)} 主存容量/Cache容量=2标记位(tag)
- 做题时要看清题目给出的是主存地址还是主存块号。
- 主存块号 = 主存地址 / 块的大小 主存块号 = 主存地址 / 块的大小 主存块号=主存地址/块的大小
- 主存块号 = 主存地址 / 块的大小 主存块号 = 主存地址 / 块的大小 主存块号=主存地址/块的大小
【※】Cache总位数/总容量
-
数据区【Cache块的大小】+标记区【存储容量+标记阵列容量】
-
标记阵列:
-
数据区【Cache块的大小】+标记区【存储容量+标记阵列容量】
-
标记阵列:
-
数据区 = Cache块的大小(B)* 8,因为一般都是问Cache总位数,注意题目条件
存储器概述
随机存储器【RAM】
-
读写方便,使用灵活
-
RAM分为静态RAM和动态RAM
-
RAM主要为用户编程设置的
-
存储器的任何一个存储单元都可以随机存取
-
存取时间与存储单元的物理位置无关
-
主要用于做主存(DRAM)或高速缓冲存储器(SRAM)
只读存储器【ROM】
-
ROM与RAM一起统一构成主存的地址域
-
ROM和RAM的存取方式均为随机存取
-
操作系统的内存储器既有RAM也有ROM
-
广义上的ROM现在可通过电擦除进行写入
-
ROM存放系统程序,标准子程序和各类常数
-
存储器的内容只能随机读出而不能写入
-
信息一旦写入就不变,断电后也不消失
-
通常用于存放固定不变的程序,常数和汉字字库
串行访问存储器
顺序存取存储器【磁带】
- 存取速度慢
- 只能按某种顺序存取
直接存取存储器【磁盘,光盘】
- 既不是随机存取也不是按顺序存取
存储器性能指标
- 存储容量 = 存储字数 × 字长
- 单位成本(每位价格) = 总成本 / 总容量。
- 数据传输率(主存带宽) = 数据的宽度 / 存储周期。
- 存储周期 = 存取时间 + 恢复时间
SRAM和DRAM的比较
属性 | SRAM【Static Random Access Memory】 | DRAM【Dynamic Random Access Memory】 |
---|---|---|
主要用途 | Cache | 主存 |
存储信息 | 触发器,双稳态电路 | 电容 |
破坏性读出 | 非 | 是 |
需要刷新 | 不需要 | 需要【由存储器独立完成,不需要CPU的控制】 |
送行列地址 | 同时送 | 分两次送 【地址线复用技术,导致地址线、地址引脚减半】 |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
存储成本 | 高 | 低 |
是否易失 | 是 | 是 |