✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。
个人主页:小嗷犬的个人主页
个人网站:小嗷犬的技术小站
个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。
虚拟内存(virtual memory):应用程序面向虚拟内存编写,而不是物理地址,CPU 负责将虚拟地址翻译成物理地址。
虚拟内存设计的三个目标:
分段机制带来外部碎片,x86-64架构后普遍采用分页机制管理虚拟内存。
分页机制下,虚拟地址空间中的任意虚拟页可被映射到任意物理页,可有效避免外部碎片。
AArch64 的常见设置:虚拟地址低 48 位参与地址翻译,页表级数为 4 级,虚拟页大小为 4KB,页表项 8 字节。
TLB 中缓存了虚拟页号到物理页号的映射关系(可以看成键值对哈希表)。
CPU 核心中的 TLB 缓存项通常很少,若TLB已满,则根据硬件预定的策略替换某一页。
某些体系结构(MIPS, SPARC)允许软件在地址翻译过程中对 TLB 进行管理。
AArch64 体系结构中,系统调用不需要刷新TLB,因为采用了两个基地址寄存器 TTBR0_EL1, TTBR1_EL1。
X86-64 体系中,只有一个页表基地址 CR3,操作系统将自己映射到应用程序页表中的高地址部分。
ASID(X86 称为 PCID,Process Context IDentifier):OS 为不同的应用程序分配不同的 ASID 作为应用程序的身份标签(TTBR0_EL1 的高 16 位),切换页表的时候不再需要清空 TLB。
MIN/OPT 策略:优先选择未来不会再访问的页
物理页访问顺序 | 3 | 2 | 3 | 1 | 4 | 3 | 5 | 4 | 2 | 3 | 4 | 3 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
物理内存中 存放的物理页 |
3 - - |
3 2 - |
3 2 - |
3 2 1 |
3 2 4 |
3 2 4 |
5 2 4 |
5 2 4 |
5 2 4 |
3 2 4 |
3 2 4 |
3 2 4 |
缺页异常(共 6 次) | 是 | 是 | 否 | 是 | 是 | 否 | 是 | 否 | 否 | 是 | 否 | 否 |
FIFO 策略:优先选择最先换入的页进行换出
物理页访问顺序 | 3 | 2 | 3 | 1 | 4 | 3 | 5 | 4 | 2 | 3 | 4 | 3 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
(该行为队列头部) 存储物理页号 的 FIFO 队列 |
3 - - |
3 2 - |
3 2 - |
3 2 1 |
2 1 4 |
1 4 3 |
4 3 5 |
4 3 5 |
3 5 2 |
3 5 2 |
5 2 4 |
2 4 3 |
缺页异常(共 9 次) | 是 | 是 | 否 | 是 | 是 | 是 | 是 | 否 | 是 | 否 | 是 | 是 |
Second Chance 策略:对 FIFO 的改进
OS 维护一个先进先出队列记录换入物理内存的物理页,并为每个物理页号维护一个访问标志,如果访问的页号已经在队列中,则置访问标志位。
寻找换出页时,优先查找位于队头的页号,如果其标志位没有标记,换出该页,否则将该标志清零,并将该页号挪到队尾。
物理页访问顺序 | 3 | 2 | 3 | 1 | 4 | 3 | 5 | 4 | 2 | 3 | 4 | 3 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
(该行为队列头部) 存储物理页号 的 FIFO 队列 |
3 - - |
3 2 - |
3* 2 - |
3* 2 1 |
1 3 4 |
1 3* 4 |
3* 4 5 |
3* 4* 5 |
3 4 2 |
3* 4 2 |
3* 4* 2 |
3* 4* 2 |
缺页异常(共 6 次) | 是 | 是 | 否 | 是 | 是 | 否 | 是 | 否 | 是 | 否 | 否 | 否 |
LRU 策略:优先选择最久未被访问的页
OS 维护一个链表,最久未访问的页放在链表头,最近访问的页在链表尾,每次访问 OS 将刚访问的内存页调整到链表尾,每次选择换出链表首端的页。
物理页访问顺序 | 3 | 2 | 3 | 1 | 4 | 3 | 5 | 4 | 2 | 3 | 4 | 3 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
(该行为链表首端) 越不常访问的页号 离首端越近 |
3 - - |
3 2 - |
2 3 - |
2 3 1 |
3 1 4 |
1 4 3 |
4 3 5 |
3 5 4 |
5 4 2 |
4 2 3 |
2 2 4 |
2 4 3 |
缺页异常(共 7 次) | 是 | 是 | 否 | 是 | 是 | 否 | 是 | 否 | 是 | 是 | 否 | 否 |
MRU 策略:优先选择最近访问的内存页
时钟算法策略(与 Second Chance 类似):将换入物理内存的页号排成一个时钟,针臂指向新换入内存的页号的最后一个,每个页设置一个访问标志位。