4

我试图了解 linux 内核如何处理 TLB 未命中。具体来说,我知道页表遍历发生在其中follow_pagemm/memory.c但是当发生 TLB 未命中时,follow_page 是如何调用的。follow_page的返回值 ( struct page) 是如何传回硬件的?有人可以说明从硬件引发 TLB 未命中异常到何时follow_page被调用的 TLB 未命中处理的调用图吗?

follow_page我在内核代码中搜索了http://lxr.linux.no/linux+v3.4.4/+search=follow_page但结果似乎没有多大帮助。为了清楚起见,假设硬件是 x86_64。

4

2 回答 2

4

我发现对于大多数 x86 架构,当发生 TLB 未命中时,硬件会执行页面遍历。follow_pagemm/memory.cTLB 未命中期间不调用软件页面步入代码。因此,据我了解,在 linux 内核中没有用于处理 TLB 未命中的调用图。

于 2012-10-04T18:28:53.650 回答
0

正如您自己注意到的,自 80386 以来的英特尔处理器的 MMU 具有用于填充转换后备缓冲区的硬件分辨率。这就解释了为什么这种架构的页表具有如此严格的结构。follow_page在这个架构上,有很多地方需要遍历页表(如 中),但是,尤其是。在 中handle_mm_fault,尽管通常可以预期更具体的情况并放弃大多数测试。

于 2013-03-21T16:30:08.600 回答