文章目录
- 内存(RAM)与缓存(Cache)
- Memory Management Unit
- 缺页中断
- 多级缓存
- 缓存替换策略
- 缓存的映射方式
内存(RAM)与缓存(Cache)
- 缓存: CPU 内部或非常靠近的高速存储,超快
- 内存 (Random Access Memory): 是磁盘的缓存 【纳秒】
- 磁盘:
- 固态硬盘 SSD:Solid State Drive 【微秒】
- 机械硬盘 HDD:Hard Disk Drive 【毫秒】
CPU Register(寄存器) ← 几十个字节,最快
↓
L1 Cache(一级缓存) ← KB 级,纳秒级访问
↓
L2/L3 Cache
↓
RAM(内存) ← GB 级,百纳秒级访问
↓
SSD / HDD(磁盘) ← 秒级或毫秒级访问
Cache 是用专用的高速 SRAM(静态随机存储器)芯片实现的,属于硬件。
通常直接集成在 CPU 核心内部或周围。
L1 Cache, L2 Cache 通常在核内部或旁边,每个核心一个
L3 Cahce 在核外,是多个核共享的。
Memory Management Unit
MMU(Memory Management Unit,内存管理单元)
缺页中断
Page Fault
当CPU 通过虚拟地址访问内存时,会通过 MMU 将虚拟地址转换为物理地址。
如果某个虚拟页当前没有映射到物理内存中,MMU 就会触发一个 缺页中断(Page Fault),交由操作系统处理。
原因:
- 未分配:程序第一次访问一个尚未分配物理内存的虚拟页。
- 该页被置换到磁盘了:操作系统为了节省内存,把部分不活跃页换出到磁盘,访问时需重新加载。
- 访问权限错误:如 对只读页进行写操作
- 非法访问:不属于该进程的
处理流程:
- CPU 检测到缺页,触发中断。
- 中断处理器进入内核态,调用页错误处理函数。
- 操作系统根据页表和进程内存映射信息判断缺页原因。
如果是合法访问(页在磁盘 swap 中),则从磁盘读入物理页。
如果是不合法访问(野指针、非法地址等),则发送 SIGSEGV 信号给进程,通常导致程序崩溃。 - 更新页表
- 恢复用户态
- 软缺页(Minor Page Fault)
虚拟页尚未映射,但实际数据已在内存中(如共享页) - 硬缺页(Major Page Fault)
页不在内存中,必须从磁盘读取。
多级缓存
Multi-level Cache
缓存(Cache)是介于 CPU 和主存(RAM)之间的高速存储器
CPU 在访问数据时,依次查询:
L1 → L2 → L3 → RAM → 磁盘
一旦某级缓存命中,就不再往后找(称为 Cache Hit),否则就是 Miss,继续向后查询。
缓存替换策略
Cache Replacement Policy
- LRU(Least Recently Used)最少使用
- FIFO(First-In First-Out)先进先出
- LFU(Least Frequently Used)最不常用
- Random 随机替换
- CLOCK 算法(近似 LRU)
缓存的映射方式
缓存到哪个位置呢?
- 直接映射(Direct-Mapped Cache)【一路组相联】
每个内存块 只能映射到缓存中的一个固定位置。冲突失效高 - 全相联(Fully Associative Cache)
每个内存块 可以放到缓存中的任意位置。但查找需要遍历所有缓存块 - 组相联缓存(Set-Associative Cache)
把缓存划分为多个 集合(Set),每个集合中有多个 块(line)。
一个内存块可以映射到某个集合中任意一个块。
二路组相联
假设缓存有 8 个块,划分为 4 个集合,每个集合有 2 个块:
Cache:
Set 0: [块0, 块1]
Set 1: [块2, 块3]
Set 2: [块4, 块5]
Set 3: [块6, 块7]
某个地址会通过 hash 函数(如 地址 % 4)映射到某个 Set。
在Set内自由放置,如果已满,则使用替换策略。