You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TLB如何管理跨页边界地址的内存翻译?多页大小架构如何处理?

跨页内存访问的TLB与架构处理场景

假设页面大小为4096字节,两个连续的虚拟内存页被映射到不连续的物理页,映射关系为:
[x, x + 4096 * 2] → [A, A + 4096], [B, B + 4096]

对应的地址映射示意图:

x    x+4096  x+8192         A     A+4096   B     B+4096
|      |      |              |     |       |      |
|      |      |   --->       |     | ..... |      |
|      |      |              |     |       |      |

现在存在一个8字节的内存访问请求,地址范围为[x + 4090, x + 4098],该请求跨越了虚拟页边界:

x       x+4096   x+8192     
|  x+4090 |  x+4098 |
|     <---|---|     | 
|         |         |  

技术问题解答

1. 在此场景下,TLB如何处理地址翻译?

TLB会分别处理跨页请求拆分出的两个虚拟地址段:

  • 针对x+4090到x+4095这6字节,TLB查找虚拟页x对应的物理页A,完成地址翻译,得到物理地址范围[A+4090, A+4095]。
  • 针对x+4096到x+4098这3字节,TLB查找虚拟页x+4096对应的物理页B,完成地址翻译,得到物理地址范围[B+0, B+2]。
    如果其中某个虚拟页的TLB条目不存在,会触发TLB miss,此时需要从页表中加载对应条目到TLB后,再完成翻译操作。

2. 该处理是由TLB完成,还是在CPU流水线的内存访问前(如加载/存储单元)检测到跨页?

跨页检测是在CPU的加载/存储单元(LSU)完成的,TLB不负责这项工作。
当LSU收到内存访问请求时,会先检查请求的起始、结束地址是否落在同一个虚拟页内。如果发现跨页,就把这个请求拆分成两个独立的子请求,分别提交给TLB做地址翻译,之后再各自执行内存访问。TLB只负责单个虚拟页的地址翻译,没有拆分请求的能力。

3. 支持多种页面大小(4K、2M、1G等)的架构如何处理此类情况?

这类架构的核心逻辑还是先检测跨页,再按需拆分请求,但会结合大页特性做优化:

  • 首先LSU会根据当前虚拟地址对应的页面大小(通过页表或TLB条目里的页面大小标识判断),检查访问请求是否跨越当前页面的边界。
  • 如果访问请求跨越的是小页(比如4K)边界,但这两个小页属于同一个更大的页(比如2M页),且TLB中存在这个大页的条目,那么可以直接用大页的翻译完成整个请求,不需要拆分。
  • 如果确实跨越了不同的大页,或者无法合并成大页访问,还是会拆分成多个子请求,每个子请求对应一个独立页面,分别走TLB翻译流程。
    另外,这类架构的TLB通常会同时缓存不同大小页面的条目,确保拆分后的子请求能快速找到对应的翻译条目。

内容的提问来源于stack exchange,提问作者Rahat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 02:13:11