2012-08-30 53 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中,儘管通常可以期望更具體的情況並且放棄大部分測試。