深入Linux內核架構—內存管理(三)

一、頁表

層次化的頁表用於支持對大地址空間的快速、高效的管理。考察具體的技術實現。

頁表用於建立用戶進程的虛擬地址空間和系統物理內存之間的關聯。到目前爲止討論的結構主要用來描述內存的結構(劃分爲結點和內存域),同時指定其中包含的頁幀的數量和狀態(使用中或空閒)。頁表用於向每個進程提供一致的虛擬地址空間。應用程序看到的地址空間是一個連續的內存區。該表也將虛擬內存頁映射到物理內存,因而支持共享內存的實現(幾個進程同時共享的內存),還可以在不額外增加物理內存的情況下,將頁換出到塊設備來增加有效的可用內存空間。

內核內存管理總是假定使用四級頁表,而不管底層處理器是否如此。該假定對IA-32系統是不正確的。默認情況下,該體系結構只使用兩級分頁系統。因此,第三和第四級頁表必須由特定於體系結構的代碼模擬。

頁表管理分爲兩個部分,第一部分依賴於體系結構,第二部分是體系結構無關的。所有數據結構和操作數據結構的幾乎所有函數都是定義在特定於體系結構的文件中。特定於不同CPU的實現有一些比較大的差別。

在以後幾節裏描述的數據結構和函數,通常基於體系結構相關的文件中提供的接口。定義可以在頭文件include/asm-arch/page.h和include/asm-arch/pgtable.h中找到,下文簡稱爲page.h和pgtable.h。在討論特定於體系結構的問題時,會明確指出相關的體系結構。所有其他的信息,即使相關結構的定義是特定於體系結構的,也都適用於所有的體系結構。

1、數據結構

在C語言中, void *數據類型用於定義可能指向內存中任何字節位置的指針。該類型所需的比特位數目依不同體系

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章