2012-09-23 56 views
5

我讀經書「瞭解Linux內核」由播威和Cesati。在第二章的「Paging in Linux」中,作者提到了32個不支持PAE的體系結構如何消除Page Middle和Upper Directories。按照作者的意思,我遇到了麻煩。Linux內核的內存管理尋呼水平

他們已經在他們的治療鬆開,並且不作一大堆的直覺。

對於沒有物理地址擴展的32位體系結構,兩個分頁級別就足夠了。實際上,Linux通過聲明它們包含零位來消除Page Upper Directory和Page Middle Directory字段。但是,頁指針目錄和頁中間目錄在指針序列中的位置將保留,以便相同的代碼可以在32位和64位體系結構上工作。內核通過將其中的條目數設置爲1並將這兩個條目映射到Page Global Directory的正確條目中,爲頁面上部目錄和頁面中間目錄保留一個位置。

有人能在一個更可口的方式解釋一下嗎?

+0

好了,所以我給多一點思考,並請看看這是有道理的。所以,基本上,你有這個MMU硬件,它貫穿TLB未命中的頁面層次結構,基本上,單個項目PMD和PUD是不知情的。但是,對於其他內核代碼,我們需要提供一個統一的4級分頁接口。因此,我們有一個單獨的入口PUD和一個入口PMD,每個入口都被仿真爲包含該地址的相應PGD入口的完全相同的值。 – subramanian

+0

是的。在沒有PAE的處理器上,MMU只期望較低的兩個表,但內核期望全部四個表,因此必須僅使用一個條目創建高兩個表。確保你可以添加你的評論作爲答案。 – ughoavgfhw

+0

我覺得我的解釋有漏洞Linuxios很清楚地向我解釋。所以我會標記他的答案是正確的。 – subramanian

回答

2

嗯,我想是什麼意思的是,內核總是使用4個級別的頁表,可容納正常32位PAE和長模式。我認爲他們在報價中的含義是,PM4L和PDT只是設置爲一個條目的長度,只是指向下一條。因此,這意味着,在正常的32位,你會得到這樣的:

       /-> Page table 
PM4L -> PDT -> Page Directory --> Page table 
           \-> Page table 

但在PAE,你會得到這樣的:

PM4L -> PDT -> 512 Page Directories -> 1024 Page tables 

而且在長模式,你將會得到:

PM4L -> 512 PDTs -> 512 Page Directories -> 1024 Page tables 

但是由於始終有4個級別,內核的其餘部分在32位,PAE和長模式下具有統一的接口。

+0

啊!現在我看到了我困惑的地方。這本書似乎解釋說,中間的兩張桌子是不活動的。它似乎沒有任何意義。你的回答澄清謝謝! – subramanian

0

目前我正在讀同一本書,我不想問了一個新問題,因爲這一塊正好解決我的問題。
表的通常順序如下:

PML4 (Linux: PGD) -> PDPT (Linux: PUD) -> PD (Linux: PMD) -> PT 

在據說兩級足夠的文字,這就是爲什麼在PUD和PMD被「淘汰」,但任何這兩個表的有長度爲1,並保持順序的正確順序。
在我的理解中,這意味着PML4(PGD)對應於PD(PMD)並且包含指向PT的直接指針。所以PUD和PMD被「跳過」了。但是我的理解並不符合原始問題的正確答案。
如果32位應用程序執行系統調用並切換到64位內核模式,該地址如何解析?在這種情況下,MMU需要四層而不是兩層。
很明顯,我的理解有些問題,因爲事情不能像那樣工作。希望有人能清理一下。