【发布时间】:2017-05-01 14:05:29
【问题描述】:
刚刚离开wikipedia:
通常存储在主内存中的页表跟踪虚拟页面在物理内存中的存储位置。此方法使用两次内存访问(一次用于页表条目,一次用于字节)来访问一个字节。首先,在页表中查找帧号。其次,带有页偏移的帧号给出了实际地址。因此,任何直接的虚拟内存方案都会使内存访问时间加倍。因此,TLB用于减少页表方法中访问内存位置所花费的时间。
因此,我很好奇为什么 TLB 实际上更快,因为据我所知,它只是页表的一个更小、更精确的副本。
你仍然需要访问 TLB 来找到物理地址,然后一旦你有了它,你仍然需要实际访问物理地址处的数据,这就像页表一样是两次查找。
我只能想到 TLB 更快的两个原因:
在 TLB 或页表中查找地址不是 O(n)(我假设它像哈希表一样是 O(1))。因此,由于 TLB 小得多,因此查找速度更快。同样在这种情况下,为什么不直接使用哈希表而不是 TLB?
我错误地解释了 TLB 的工作原理,它实际上并没有进行两次访问。
【问题讨论】:
-
如有任何疑问,请随时咨询。
-
由于现代 CPU 中的多级分页,读取页表需要一次内存访问的假设是不正确的(请参阅我的答案)。
标签: memory operating-system cpu-architecture paging tlb