以下问题如下: 假设CPU发出指令的读取,并且该读取不会导致生成页面错误。假设MMU使用TLB进行地址转换并且存在单个页表,那么在将虚拟地址转换为物理地址并检索指令的整个过程中可能发生的最大缓存未命中数是多少? (假设DRAM只有一级缓存。)
我确实理解TLB用于减少从内存中取出的巨大后果成本,但我不明白虚拟内存足以回答这个问题 - 我也知道TLB未命中是罕见的。无论如何,如果有人能帮我理解这个问题,我会很感激。
提前致谢!
答案 0 :(得分:1)
我的意思是如果你想在一个带有4级页表的平台上遇到最糟糕的情况,我想对于跨越两个页面的拆分负载来说它是10个,即1 + 1 + 4 + 4 。对于负载接触的两个高速缓存行中的每一个的实际负载,这是1;对于CPU必须走的每个级别的页面表,4,因为触摸了两个页面,所以行走2次。
您还可以查看页表结构 - 也许在某些情况下,您可以在每个级别上多次丢失,例如,如果允许分页结构本身未对齐,或者是否涉及任何类型的搜索在翻译中(而不是直接查找)。可能还有其他原因导致更多缓存未命中。
实际上很难组织你遇到很多失误的情况,因为即使你完全击败了TLB,更高级别的PTE可能会出现在某个级别的缓存中,或者CPU本身可能会在内部缓存它们(在非架构缓存中。)
答案 1 :(得分:0)
TLB缓存页表条目。 TLB未命中意味着必须在页表中查找翻译。
CPU具有顶级页表的物理地址,因此不再需要翻译。 (那会导致鸡蛋问题)。
但是,假设页面遍历硬件(或软件TLB-miss处理程序)通过缓存层次结构(例如现代x86 CPU中的情况)访问页表,则需要查找每个访问右PTE可能会错过数据缓存。
页表通常是多级数据结构,例如在x86上深入3或4级。
请注意,实际CPU设计可能会在TLB-miss处理硬件内部缓存页面目录条目,与数据缓存分开。