Linux中核心頁表是幹嘛用的,為什麼要有核心頁表?

時間 2021-05-09 12:57:46

1樓:Rivalak

核心頁表同樣也是用作位址翻譯的,不過是作用在核心態下。核心頁表在記憶體申請的時候就會被設定好,這也是為什麼說虛擬位址空間只適用於使用者態的原因。不過核心空間的動態對映區的 vmalloc 區是例外,其工作原理和使用者態 malloc 申請記憶體時的工作原理一致。

2樓:

詳細內容請參考《深入理解LINUX核心》一書,裡面有非常精彩的講解。

1、寫在指令中的位址統統都是虛擬位址,而不是實際的實體地址!

2、在X86這種同時進行段頁式管理的硬體上,虛擬位址分成兩級。指令中的那個值被稱為「邏輯位址」,送給MMU中的「分段單元」,轉換成線性位址。

3、線性位址再通過「分頁單元」,轉換成實體地址。

4、這個轉換關係是需要預先配置好的,「分段單元」和「分頁單元」都要有自己的硬體配置。

5、對「分頁單元」來說,頁表就是硬體配置,這個是繞不過去的。

3樓:馮東

嚴格的說,32-bit x86 分為頁目錄和頁表。64-bit 的級別更多,還有不同模式。下面的答案就把這些 MMU 使用的資料統稱為「頁表」。

核心空間也是同樣通過「頁表」訪問的,因為現代 CPU 的定址不能繞過 MMU。不過核心空間和使用者空間不同,它一般不做 swap,也就沒有 page fault,而且它一般不會把連續的虛擬位址空間對映成不連續的物理空間,一般只是做乙個 offset。所以所有程序的用於訪問核心空間的頁表都是這麼設定的。

核心頁表和linux的夥伴系統是不是有衝突?

吉公尺 LINUX每個程序的位址空間是虛擬的,也就是說,因此Linux程序記憶體的劃分實際上是基於0 4gb虛擬位址的。如果乙個程式大於128mb而記憶體不夠用時,作業系統會通過缺頁機制將不在記憶體中的頁面通過記憶體管理單元 mmu 將虛擬位址轉換成實體地址並將其從外存載入進來,並且把記憶體中不需要...

當頁表中的頁表項大部分都有效的時候,多級頁表還能節省空間嗎?

Icecor 多級頁表能夠節省空間,確實是這樣的。首先明確為什麼需要多級頁表對映。我們這裡舉例一級頁表直接對映,最小對映單元是16MB,如果是二級頁表對映,最小對映單元是4KB。為什麼說多級對映節省空間。原因在於上面這兩種對映方式,如果我malloc大小是64KB。如果CPU只支援一級對映,那麼我最...

python中EasyDict是幹嘛用的?

可以方便地應用.來訪問dict的值。例如,普通的dictionary,訪問值只能用下面的方式 In 9 d In 10 d foo Out 10 3 In 11 d.fooAttributeErrorTraceback most recent call last in 1 d.foo Attribu...