CPU高速缓存简单概述
CPU 高速缓存: 说白了就是一 “牛逼的缓存,嘎嘎快的缓存”。解决的是 CPU 速度与主内存(运行内存、物理内存)速度之间巨大差距的问题,它缓存的是程序实际使用的数据(Data)和指令(Instructions)。
A. 解决的问题:
CPU 的执行速度远远快于访问主内存(DRAM)的速度。如果 CPU 每次需要数据或指令都去访问慢速的主内存,CPU 就会花费大量时间等待,性能会急剧下降。这被称为“内存墙”。
B. 它是看的见摸得着的硬件:
高速缓存是集成在 CPU 内部(或非常靠近 CPU)的一小块速度极快但容量较小的静态随机存取存储器(SRAM)。它比主内存快几个数量级。
C. 工作原理: 基于局部性原理
- 时间局部性: 如果 CPU 访问了某个内存位置的数据或指令,它很可能在不久的将来再次访问它。
- 空间局部性: 如果 CPU 访问了某个内存位置的数据或指令,它很可能在不久的将来访问其附近的内存位置。
D. 如何工作:当 CPU 需要访问内存时
(1). 它首先检查所需的数据或指令是否在最快的一级缓存(L1 Cache)中(命中)。
(2). 如果命中,CPU 直接从 L1 Cache 中获取数据,速度极快。
(3). 如果未命中,则检查稍大稍慢的二级缓存(L2 Cache)。
(4). 如果 L2 也未命中,则检查更大更慢的三级缓存(L3 Cache,如果存在且共享)。
(5). 如果所有缓存都未命中,CPU 才不得不去访问慢速的主内存获取数据,同时会将这块数据及其附近的数据(一个缓存行)加载到各级缓存中,以备下次可能的使用。
E. 层级结构:
- L1 Cache:最小最快,通常分为指令缓存(L1i)和数据缓存(L1d),每个 CPU 核心独享。
- L2 Cache:比 L1 大、比 L1 慢,通常每个 CPU 核心独享或小范围共享。
- L3 Cache:更大更慢,通常由同一个 CPU 芯片上的所有核心共享。
F. 关键作用:
显著减少 CPU 访问内存的平均延迟,极大提升整体系统性能。缓存命中率是衡量 CPU 性能的关键指标之一。
存储器(硬件)层次结构
CPU性能衡量有两个指标
指标1: 响应时间(或执行时间) :执行一条指令平均时间
指标2:吞吐量,1秒内CPU可以执行多少条代码指令呢
举例: 假设某个CPU 执行一条指令320ns,
疑问1:为什么程序的代码指令和数据事先存储在磁盘中?
(1)存储在磁盘中的数据不易丢失
(2)磁盘容量很大,可以存储大量的程序数据和指令
| 手机,车机,平板 | 电脑 |
| EMMC嵌入式多媒体卡 | SSD固态硬盘,HDD机械硬盘 |
| 128G, 256G, 512G | 1T, 2T |
疑问2:为什么程序执行的时候要先将磁盘中数据和指令加载到内存(物理内存,运行内存)中呢?
CPU读取磁盘数据是非常慢的哦,与之有鲜明对比的是CPU读取内存数据稍微快一点哦
疑问3:如何将磁盘中的数据和代码指令加载到内存中呢?
DMA(Direct Memory Access) 一种硬件技术,由独立的DMA控制器芯片(或集成在主板/SOC中)实现,详细信息可AI了解。
-
DMA是硬件加速数据传输的核心技术,它像一名“专职搬运工”,在磁盘与内存间直接搬数据,彻底解放CPU。
-
数据加载流程:CPU发起请求 → DMA初始化 → 磁盘读取 → DMA传输 → 中断通知。
-
现代计算机中几乎所有高速I/O设备(SSD、网卡、GPU)都依赖DMA提升性能
现在可以把内存或寄存器看成缓存的一种
为了让CPU可以更快的读取数据或指令执行,随着时间变迁CPU和内存之间性能差距越来越大,出现了 ”CPU高速缓存“,为了就是快,快快,快快快。
CPU高速缓存L1, L2, L3 缓存数据快的你都受不了, 就是快, 但是Man你得既要快也要持久哈。
存在MMU中的一种高速缓存小组件
TLB(Translation Lookaside Buffer,快表)是计算机系统中加速虚拟地址到物理地址转换的硬件缓存,属于 CPU 内存管理单元(MMU)中的关键组件。它的核心作用是解决虚拟内存地址转换过程中的性能瓶颈。
TLB 的解决方案:缓存最近使用的页表项
-
TLB 本质上是一个高速、容量较小的硬件缓存(通常集成在 CPU 芯片上)。
-
它缓存了最近成功转换过的虚拟页号到物理页帧号的映射关系(即页表项)。
-
工作原理(简化)
(1). CPU 需要转换虚拟地址 VA。
(2). MMU 首先查询 TLB:用 VA 中的虚拟页号作为键去查找 TLB。
(3). TLB 命中: 如果在 TLB 中找到对应的条目(TLB Hit),则立即获得物理页帧号。物理地址 PA = 物理页帧号 + VA 中的页内偏移量。整个过程非常快(通常在 1 个 CPU 周期内完成)。
(4). TLB 未命中: 如果在 TLB 中没找到(TLB Miss),则 MMU 必须启动代价高昂的页表遍历过程,从内存(或更高级缓存)中查找正确的页表项。找到后,将该页表项加载到 TLB 中(可能替换掉一个旧项),然后才能完成地址转换和内存访问。这个过程非常慢。