記憶體管理 頁表

2021-07-15 05:55:47 字數 1181 閱讀 8177

include/asm-x86_64/page.h

typedef struct pte_t;

typedef struct pmd_t;

typedef struct pud_t;

typedef struct pgd_t;

虛擬位址分為幾個部分,用作各個頁表的索引。核心使用32或64位型別來表示表項,這意味著冰粉表項的所有位元位都儲存了有用的資料,即下一級表的基位址。多餘的位元位用於儲存額外的資訊。

3 特定於pte資訊

3 特定於pte資訊

最後一級頁表中的不僅包含了指向頁的記憶體位置的指標,還在上述的多餘位元位包含與頁有關的附加資訊。

*_page_present指定了虛擬記憶體頁是否存在記憶體中,也不見得總是在記憶體中。(可能在交換區)

*cpu每次訪問頁時,會自動設定_page_accessed.核心會定期檢查該位元位,一確認頁使用的活躍程度。在讀或謝訪問之後會設定改位元位。

*_page_dirty表示該也是否是「髒的」,即頁的內容是否已經修改過

*_page_file的數值與_page_dirty相同,但用於不同的上下文,即頁不再記憶體中的時候。顯然,不存在的頁不可能是髒的,因此可以重新解析該位元位。

*如果設定了_page_user,則允許使用者空間**訪問該也。否則只有核心才能訪問(或cpu處於系統狀態的時候)

*_page_read_page_write和_page_execute指定了普通的使用者程序是否允許讀寫、寫入、執行該野種的機器**。

每種體系結構都必須提哦給你個兩個東西,使得記憶體管理子系統能夠修改pte_t項中額外的位元位,機儲存額外的位元位的_pgprot資料型別,以及修改這些位元位的pte_modify函式。

核心定義了各種函式,用於查詢和設定記憶體頁與體系結構相關的狀態。

*pte_presetn檢查頁表甚至想的頁是否存在記憶體中。

*pte_dirty檢查與頁表相關的也是否是髒的,即其內存在上次核心檢查之後是否已經修改過。

*pte_write檢查核心是否可以寫入到頁。

*pte_file用於非線性對映,通過操作頁表提哦給你了檔案內容的一種不同試圖。該函式檢查頁表項檢查也表象是否屬於這樣的乙個對映。

注:只有在pte_present返回false時,才能呼叫pte_file ,即與該也表項相關的頁也不在記憶體中。

3.3.2 頁表項的建立和操作

記憶體管理之分頁和頁表

簡單的分頁 記憶體被劃分為許多大小相等的頁框 每個程序被劃分成許多大小與頁框相等的頁 要裝入乙個程序,需要把程序包含的所有頁都裝入記憶體中不一定連續的某些頁框中。優勢 沒有外部碎片。缺點 有少量的內部碎片。簡單的分段 每個程序被劃分為許多段 要裝入乙個程序,需要把程序中包含的所有段裝入記憶體內不一定...

頁表管理及多級頁表

頁表說需空間大小計算 32 位位址空間 4kb 的頁大小 頁表的每項大小為 4byte。位位址空間 4kb 的頁大小 頁表的每項大小為 4b。多級分頁 32 位執行模式情形 級分頁 對 4kb 的頁大小 因為每頁pgd 的pt項為 kb 4b 2 10條 實際4g 32 2 12 2 10 2 10...

頁式管理 多級頁表

作業分成若干個相等的 頁 記憶體分成相等的 塊 使 頁 的大小等於 塊 以 頁 為單位,將作業的 頁 裝入記憶體的 塊 中。特點 1.可以不連續地使用記憶體 2.實現內外存統一管理 靜態頁面管理的思想 作業 程序開始執行前,把作業 程序的程式和資料全部裝入記憶體的 塊 中 通過位址變換機構實現虛位址...