1. 程式人生 > >linux多級頁表結構

linux多級頁表結構

linux的頁表結構是為了節省地址轉換所需要的空間。分為PGD/PUD/PMD/PTE,P代表page,G代表global,D代表目錄(Director),U代表上級,M代表中間,T代表Table,E代表Entry。PTE是頁表項。他們之間的關係是層級結構,通過PGD訪問到最低端的PTE,訪問方式是上一層地址+偏移量(offset)。PTE+頁內偏移量可以訪問到具體的實體地址。

每個程序都有自己的頁表,程序描述符中定義,mm->pgd,就是當前程序,全域性頁表的起始地址。

頁表結構跟體系相關,x86的MMU只有兩極,PGD和PTE。當啟動PAE(physical address extensino)支援大記憶體,支援PGD/PMD/PTE。

兩個結構分別定義在

arch/x86/include/asm/pgtable-2level-types.h

arch/x86/include/asm/pgtable-3level-types.h

TLB作用——提升頁表訪問的效率

由於記憶體訪問都需要虛擬地址到實體地址的轉換,所以對頁表的搜尋效率要求很高。一般頁表存放在記憶體上,而記憶體訪問效率低,所以引入了快取記憶體TLB(Translation Lookaside Buffer),每次訪問實體地址,先訪問TLB,如果沒有再訪問記憶體,這樣,效率就提高了。