IT评测·应用市场-qidao123.com技术社区
标题:
缓存与内存;缺页中断;缓存映射:组相联
[打印本页]
作者:
不到断气不罢休
时间:
5 天前
标题:
缓存与内存;缺页中断;缓存映射:组相联
内存(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(磁盘) ← 秒级或毫秒级访问
复制代码
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内自由放置,如果已满,则使用更换策略。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4