Memory management linux内核中处理TLB未命中的调用图

Memory management linux内核中处理TLB未命中的调用图,memory-management,linux-kernel,tlb,mmu,Memory Management,Linux Kernel,Tlb,Mmu,我试图理解linux内核如何处理TLB未命中。具体地说,我知道页面表遍历发生在mm/memory.c中的follow\u页面中,但是发生TLB未命中时如何调用follow\u页面。follow\u页面的返回值(struct page)如何传回硬件?有人能举例说明从硬件引发TLB未命中异常到调用follow\u page的TLB未命中处理调用图吗 我在内核代码中搜索了follow\u页面,但结果似乎帮助不大。 为了清楚起见,让我们假设硬件是x86_64 我发现,对于大多数x86体系结构,当TLB未

我试图理解linux内核如何处理TLB未命中。具体地说,我知道页面表遍历发生在
mm/memory.c
中的
follow\u页面
中,但是发生TLB未命中时如何调用follow\u页面。follow\u页面的返回值(
struct page
)如何传回硬件?有人能举例说明从硬件引发TLB未命中异常到调用
follow\u page
的TLB未命中处理调用图吗

我在内核代码中搜索了
follow\u页面
,但结果似乎帮助不大。
为了清楚起见,让我们假设硬件是x86_64

我发现,对于大多数x86体系结构,当TLB未命中时,硬件会执行页面漫游。TLB未命中期间,不会调用
mm/memory.c
中的软件页面walk code
follow\u page
。因此,据我所知,linux内核中没有处理TLB未命中的调用图。

正如您自己所注意到的,80386之后的英特尔处理器的MMU具有填充转换查找缓冲区的硬件分辨率。这就解释了为什么此体系结构的页表具有如此严格的结构。在这种体系结构中,有许多地方需要遍历页面表(如
follow\u page
),特别是在
handle\u mm\u fault
中,尽管通常可能会出现更具体的情况并放弃大多数测试。

我发现对于大多数x86体系结构,当TLB未命中时,硬件执行页面漫游。TLB未命中期间,不会调用
mm/memory.c
中的软件页面walk code
follow\u page
。因此,据我所知,linux内核中没有处理TLB未命中的调用图。您应该将此评论作为答案提交。@GargantuChet谢谢。我已经发布了我的答案。太好了!对于那些碰巧从搜索结果中点击此页面的人来说,这一点更加清楚。谢谢你的贡献!