TLB是否会导致内存中的页面错误?

Ter*_*nal 13 operating-system kernel memory-management cpu-architecture tlb

在加州大学伯克利分校的John Kubiatowicz(Kuby教授)关于操作系统的视频讲座中,他提到TLB命中并不意味着相应的页面在主内存中.页面错误仍然可能发生.
从技术上讲,TLB是页表条目的缓存,因为所有页表条目都没有在主内存中提供相应的页面.TLB也是如此.TLB命中可能会导致页面错误.

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

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

Lyk*_*yke 12

一个例子是如果存储器访问与允许的存储器访问不同.

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

  • +1另一个类似的例子是私有映射,第一次点击写时复制页面.这不仅会生成陷阱,还会导致内核创建一个全新的页面.页面_could_在TLB中,如果您之前只读过它.有趣的是内核在这种情况下会做什么,但是......保留两个TLB条目,或只是新条目,或者......?我想这可能是后者,因为TLB是相当短暂的,但我不确定. (4认同)
  • RWong 删除了他的答案,该答案[链接到这些讲义](http://pages.cs.wisc.edu/~cao/cs537/lecture17.txt)。为未来的读者重新发布,没有足够的代表来查看已删除的答案。 (3认同)