3.1 存储器层次结构
为解决容量、速度、价格之间的矛盾,现代计算机采用三级存储体系:
| 层次 | 位置 | 速度 | 容量 | 位价格 | 作用 |
|---|---|---|---|---|---|
| 寄存器 | CPU 内 | 最快(ns 级) | 极小(百字节) | 最贵 | 存放当前使用的数据 |
| Cache | CPU 与主存间 | 快(ns 级) | 小(KB~MB) | 贵 | 缓存主存中活跃的数据 |
| 主存 | 主板 | 中(10~100ns) | 大(GB) | 中 | 存放运行中的程序 |
| 辅存 | 外存 | 慢(ms 级) | 极大(TB) | 便宜 | 存放待命程序 |
3.2 主存储器与编址
主存地址 = MAR 中的二进制码。若 MAR 为 n 位,则最大寻址空间为 2ⁿ 个编址单元。
编址计算:设存储器容量为 C 字节,按字节编址,则地址位数 n = ⌈log₂ C⌉。例如 1KB 主存需 10 位地址。
SRAM vs DRAM:SRAM(静态随机存取存储器)用触发器存储,无需刷新,速度快但集成度低,用于 Cache;DRAM(动态随机存取)靠电容存储,需定期刷新,集成度高速度慢,用于主存。刷新方式有集中刷新、分散刷新、异步刷新。
3.2.1 多模块存储器
单体多字存储器:一个存储体中每个存储单元存放多个字,一次访存可读出多个字,但要求访问的多个字为连续地址(同一存储单元内),灵活性较差。
多体并行存储器:由多个独立存储模块组成,每个模块可独立编址和读写,各模块可并行工作,大幅提升带宽。按编址方式不同分为以下两种:
| 编址方式 | 编址规则 | 特点 | 适用场景 |
|---|---|---|---|
| 高位交叉编址 (顺序方式) | 地址高位选模块号,低位为体内地址 例如:模块号 = 地址 / 模块大小 | 连续地址在同一模块内,方便容量扩展;但各模块无法同时响应连续地址访问 | 适合容量扩展 |
| 低位交叉编址 (交错方式) | 地址低位选模块号,高位为体内地址 例如:模块号 = 地址 mod 模块数 | 连续地址分布在不同模块中,可实现流水线方式并行存取 | 适合带宽提升 |
3.3 Cache 工作原理
Cache 与主存以块(Block)为单位交换数据。主存块调入 Cache 后存放于 Cache 行(也称行/槽 Line/Slot)。Cache 行中有:
- 有效位:标记该行是否装入了有效数据。
- 标记 Tag:标识该行对应主存的哪一块。
- 数据:块的数据副本。
3.4 主存与 Cache 的映射方式
主存块如何装入 Cache 行,由映射方式决定,共三种:
| 映射方式 | 映射规则 | 优点 | 缺点 |
|---|---|---|---|
| 直接映射 | 主存块 j → Cache 行 (j mod C),C 为 Cache 行数 | 实现简单、速度快 | 冲突多、命中率低、空间利用率差 |
| 全相联映射 | 主存块可装入任意 Cache 行 | 命中率高、灵活 | 比较器复杂、成本高 |
| 组相联映射 | 主存块 j → Cache 组 (j mod Q),组内任意行 | 折中前两者 | 实现复杂度中等 |
- 直接映射:主存地址 = Tag + 行号 + 块内地址
- 全相联映射:主存地址 = Tag + 块内地址(无行号)
- 组相联映射:主存地址 = Tag + 组号 + 块内地址
3.5 替换算法
Cache 满或对应行被占用时,需选择替换哪一行(全相联与组相联需要):
- RAND 随机算法:随机替换一行,实现简单但命中率不稳定。
- FIFO 先进先出:替换最先装入的行,实现简单但可能替换活跃块。
- LRU 最近最少使用:替换最久未访问的行,命中率高但需维护使用时间戳。
- LFU 最不经常使用:替换访问次数最少的行。
3.6 Cache 写策略
- 全写法(写直达 Write-Through):同时写 Cache 和主存,一致性好但速度慢。
- 写回法(Write-Back):只写 Cache,被替换时才写回主存,需脏位标记。
- 写缺失时:写分配法(装入后再写)通常配合写回法;非写分配法(直接写主存)配合全写法。
3.7 外部存储器 [22新增]
磁盘存储器
- 磁道(Track):磁盘盘面上的同心圆环,数据存储在磁道上。
- 扇区(Sector):每个磁道被划分为若干弧段,是磁盘读写的最小单位(通常 512B)。
- 柱面(Cylinder):所有盘面上相同位置的磁道组成柱面。同一柱面上的数据无需移动磁头即可读写。
磁盘地址格式:驱动器号 + 柱面(磁道)号 + 盘面号 + 扇区号。寻址过程:先定位柱面(寻道),再选盘面(磁头),最后定位扇区。
磁盘性能指标:转速(RPM,如 7200 RPM)、平均存取时间、数据传输率、存储密度(道密度 × 位密度)。
SSD 固态硬盘
SSD(Solid State Drive)基于闪存(Flash Memory)技术,无机械运动部件,具有以下特点:
- 以页(Page)为读写单位、以块(Block)为擦除单位。
- 读速度快(μs 级),写前需先擦除(写放大问题)。
- 无寻道和旋转延迟,随机访问性能远优于磁盘。
- 磨损均衡(Wear Leveling):均匀分布写入操作以延长闪存寿命(闪存块有擦写次数上限)。
磁盘 vs SSD 对比
| 对比项 | 磁盘(HDD) | 固态硬盘(SSD) |
|---|---|---|
| 随机访问速度 | 慢(ms 级,受机械运动限制) | 快(μs 级,纯电子) |
| 顺序读写速度 | 中等(100~200 MB/s) | 快(500~7000 MB/s) |
| 功耗 | 较高(需驱动电机) | 低 |
| 价格(单位容量) | 低 | 较高 |
| 抗震性 | 差(机械结构易损) | 好(无机械部件) |
| 寿命 | 长(无磨损上限) | 有限(闪存擦写次数有限,需磨损均衡) |
| 噪音 | 有(盘片旋转噪音) | 无 |
3.8 虚拟存储器
页式虚拟存储器
虚拟地址空间和主存都划分为固定大小的页(通常 4KB)。虚地址 = 虚页号 + 页内地址;实地址 = 实页号 + 页内地址。通过页表完成虚实转换,页表项含实页号、有效位、访问位、修改位(脏位)等。
TLB(快表)
页表存在主存中,每次访存都要查页表会慢一倍。TLB(Translation Lookaside Buffer)是页表项的 Cache,也称快表。地址转换时先查 TLB,命中则直接得实页号;不命中再查页表(可能引发缺页中断)。
段式与段页式
- 段式:按程序逻辑结构分段,段长可变,便于共享保护但易产生碎片。
- 段页式:先分段,段内分页,结合两者优点,现代系统常用。