2012-08-30 55 views
4

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

我搜索了follow_page里面的内核代码http://lxr.linux.no/linux+v3.4.4/+search=follow_page但结果似乎没有多大帮助。 为了说清楚,可以说硬件是x86_64。

+0

我发现,对于大多数x86体系结构,当发生TLB未命中时,硬件会执行页面遍历。在TLB未命中期间,不会调用'mm/memory.c'中的软件页面结构代码'follow_page'。所以,按照我的理解,在linux内核中没有处理TLB未命中的调用图。 – Bhushan

+0

您应该提交此评论作为答案。 – GargantuChet

+0

@GargantuChet谢谢。我已经发布了我的答案。 – Bhushan

回答

4

我发现,对于大多数x86体系结构,硬件在发生TLB未命中时执行页面遍历。在TLB未命中期间,不会调用mm/memory.c中的软件页面步行代码follow_page。所以,按照我的理解,在linux内核中没有处理TLB未命中的调用图。

0

正如您所注意到的那样,自80386以来,英特尔处理器的MMU具有用于填充转换后备缓冲区的硬件分辨率。这就解释了为什么这个架构的页表具有这样一个刚性结构。在这个体系结构中,有很多地方需要沿着页表(如follow_page)行走,但是,尤其如此。在handle_mm_fault中,尽管通常可以期望更具体的情况并且放弃大部分测试。