14

在网络上可用的 John Kubiatowicz(Kuby 教授)的 UC Berkley 视频讲座中,他提到 TLB 命中并不意味着相应的页面在主内存中。页面错误仍然可能发生。
从技术上讲,TLB 是页表条目的缓存,因为所有页表条目在主内存中都没有相应的可用页面。TLB 也是如此。TLB 命中可能会导致页面错误。

但是根据教科书中给出的算法,我找不到这样的案例。在 TLB 未命中时,内核参考页表并更新 TLB 缓存以进行适当的地址转换。下一次 TLB 命中不会导致页面错误。当内核换出页面时,它会更新该页表条目的相应位并使相应的 TLB 无效,因此下一次不会有 TLB 命中,直到页面加载到主内存中。

那么有人可以代表 kuby 教授的主张的正确性并指出一个情况,而不是 TLB 命中(在 TLB 中找到相应虚拟地址的翻译物理地址),可能会发生页面错误?

4

3 回答 3

13

一个例子是内存访问是否与允许的不同。

例如,您想写入写保护的内存。TLB 存在,它是一个命中并且地址被翻译。但是在访问时你会遇到一个陷阱,因为你试图写入只读的内存

于 2011-06-18T21:42:30.867 回答
2

页面错误并不意味着内存中缺少页面。页面仍然可以存在并且是脏的。这也是页面错误。一般来说,页面错误是指无法有效使用获得的翻译的情况。它可能是缺少页面或脏页面或访问权限不匹配。所以 TLB 命中仍然会导致页面错误。

于 2015-10-30T18:53:53.313 回答
-2

帕特森说:“如果内存中不存在页面,则无法在 TLB 中进行翻译”[计算机组织和设计,第 4 版修订,第 507 页]

于 2013-11-08T14:44:24.000 回答