
文章插图
如果一台计算机同时配备了虚拟内存技术和 CPU 高速缓存,那么 MMU 每次都会优先尝试到高速缓存中进行寻址,如果缓存命中则会直接返回,只有当缓存不命中之后才去主存寻址 。
通常来说,大多数系统都会选择利用物理内存地址去访问高速缓存,因为高速缓存相比于主存要小得多,所以使用物理寻址也不会太复杂;另外也因为高速缓存容量很小,所以系统需要尽量在多个进程之间共享数据块,而使用物理地址能够使得多进程同时在高速缓存中存储数据块以及共享来自相同虚拟内存页的数据块变得更加直观 。
1.2.2 加速翻译&优化页表
虚拟内存这项技术能不能真正地广泛应用到计算机中,还需要解决如下两个问题:
- 虚拟地址到物理地址的映射过程必须要非常快,地址翻译如何加速 。
- 虚拟地址范围的增大必然会导致页表的膨胀,形成大页表 。
1.2.2.1 TLB 加速
翻译后备缓冲器(Translation Lookaside Buffer,TLB),也叫快表,是用来加速虚拟地址翻译的,因为虚拟内存的分页机制,页表一般是保存在内存中的一块固定的存储区,而 MMU 每次翻译虚拟地址的时候都需要从页表中匹配一个对应的 PTE,导致进程通过 MMU 访问指定内存数据的时候比没有分页机制的系统多了一次内存访问,一般会多耗费几十到几百个 CPU 时钟周期,性能至少下降一半,如果 PTE 碰巧缓存在 CPU L1 高速缓存中,则开销可以降低到一两个周期,但是我们不能寄希望于每次要匹配的 PTE 都刚好在 L1 中,因此需要引入加速机制,即 TLB 快表 。
TLB 可以简单地理解成页表的高速缓存,保存了最高频被访问的页表项 PTE 。由于 TLB 一般是硬件实现的,因此速度极快,MMU 收到虚拟地址时一般会先通过硬件 TLB 并行地在页表中匹配对应的 PTE,若命中且该 PTE 的访问操作不违反保护位(比如尝试写一个只读的内存地址),则直接从 TLB 取出对应的物理页框号 PPN 返回,若不命中则会穿透到主存页表里查询,并且会在查询到最新页表项之后存入 TLB,以备下次缓存命中,如果 TLB 当前的存储空间不足则会替换掉现有的其中一个 PTE 。
下面来具体分析一下 TLB 命中和不命中 。
TLB 命中:

文章插图
- 第 1 步:CPU 产生一个虚拟地址 VA;
- 第 2 步和第 3 步:MMU 从 TLB 中取出对应的 PTE;
- 第 4 步:MMU 将这个虚拟地址 VA 翻译成一个真实的物理地址 PA,通过地址总线发送到高速缓存/主存中去;
- 第 5 步:高速缓存/主存将物理地址 PA 上的数据返回给 CPU 。

文章插图
- 第 1 步:CPU 产生一个虚拟地址 VA;
- 第 2 步至第 4 步:查询 TLB 失败,走正常的主存页表查询流程拿到 PTE,然后把它放入 TLB 缓存,以备下次查询,如果 TLB 此时的存储空间不足,则这个操作会汰换掉 TLB 中另一个已存在的 PTE;
- 第 5 步:MMU 将这个虚拟地址 VA 翻译成一个真实的物理地址 PA,通过地址总线发送到高速缓存/主存中去;
推荐阅读
- 李沁|网传杨紫《青簪行》2023将播,男主真人补拍,还是AI换脸或虚拟人
- 虚拟光驱软件使用图文教程 虚拟光驱软件怎么用
- 虚拟机的作用知乎-虚拟机有什么好处和缺点?
- StampedLock:一个并发编程中非常重要的票据锁
- 女浩克|千呼万唤「超胆侠」终于登场!《女浩克》第7&8集彩蛋与细节分析!
- 虚拟内存能起到多大作用 电脑虚拟内存不足怎么办
- sd卡写保护了如何去掉? 手机内存卡被写保护
- 内存卡提示要格式化怎么办?
- 坐井观天的:进程 | 虚拟内存 | 虚拟地址
- 为什么不建议选512G内存手机?内行人给出了4个忠告,望周知
