我正在观察最近几个Intel微架构(Nehalem/SB/IB和Haswell)。我试图弄清楚数据请求发生时会发生什么(在一个相当简化的水平上)。到目前为止,我有这个大致的想法:
更新:已更改上述内容,因为我认为我现在理解了。TLB只是从虚拟地址获取物理地址。如果未命中-我们就有麻烦了,需要检查页表。如果命中,我们只需按顺序进行内存层次结构,从L1D缓存开始。
- 执行引擎发出数据请求
- “内存控制器”查询L1 DTLB
- 如果上述未命中,则现在查询L2 TLB
如果是命中,CPU尝试L1D/L2/L3缓存、页表,然后按顺序访问主存储器/硬盘?
如果未命中-CPU请求(集成内存控制器?)请求检查保存在RAM中的页表(我在那里是否正确地理解了IMC的作用?)。
- L1 DTLB(数据TLB)
- L2 TLB(数据+指令TLB)
- L1D缓存(数据缓存)
- L2缓存(数据+指令缓存)
- L3缓存(数据+指令缓存)
- 控制访问主存储器的CPU部分
- 页表
- http://www.realworldtech.com/wp-content/uploads/2012/10/haswell-41.png
- http://upload.wikimedia.org/wikipedia/commons/thumb/6/60/Intel_Core2_arch.svg/1052px-Intel_Core2_arch.svg.png
更新:已更改上述内容,因为我认为我现在理解了。TLB只是从虚拟地址获取物理地址。如果未命中-我们就有麻烦了,需要检查页表。如果命中,我们只需按顺序进行内存层次结构,从L1D缓存开始。