2009-09-17 188 views
3

我一直試圖在Linux源代碼中查找與PAE禁用的x86系統上的PTE對應的結構/聯合。到目前爲止,我只找到了拱以下/ 86 /包括/ ASM/page_32.hLinux內核中的PTE結構

typedef union { 
     pteval_t pte; 
     pteval_t pte_low; 
} pte_t; 

我有點糊塗了,現在因爲我有英特爾參考手冊卷3A在我面前打開並且該聯合中沒有任何內容與手冊中解釋的PTE中的十幾個奇數字段相對應。

這可能是一個微不足道的問題,但對我來說,它已變得更像是理解Linux內核中內存管理過程中的一個絆腳石。

編輯:我有2.6.29源跟我

+0

你在看哪個版本的Linux源代碼? – caf 2009-09-18 00:47:47

回答

5

的pteval_t只是把頁表項爲不透明的blob - 對建築你看,它只是一個32位無符號值。

PTE中的字段是使用按位運算符和掩碼來訪問的 - 在源代碼中我有用(Linux 2.6.24),這些在include/asm-x86/pgtable_32.h中定義。英特爾參考手冊中看到的字段(其中大部分是單比特標誌)在這裏被定義 - 例如:

#define _PAGE_PRESENT 0x001 
#define _PAGE_RW 0x002 
#define _PAGE_USER 0x004 
#define _PAGE_PWT 0x008 
#define _PAGE_PCD 0x010 
#define _PAGE_ACCESSED 0x020 
#define _PAGE_DIRTY 0x040 
#define _PAGE_PSE 0x080 /* 4 MB (or 2MB) page, Pentium+, if present.. */ 
#define _PAGE_GLOBAL 0x100 /* Global TLB entry PPro+ */ 
#define _PAGE_UNUSED1 0x200 /* available for programmer */ 
#define _PAGE_UNUSED2 0x400 
#define _PAGE_UNUSED3 0x800 
+0

啊,謝謝:)這幾乎清除了一切 – user108127 2009-09-18 02:50:38

4

我會建議由O'Reilly購買Understanding the Linux Kernel,以及Linux Device Drivers。並訂閱LWN.net;儘管你可以從他們的kernel index頁面得到一個非常好的開始,即使沒有訂閱。

對於內存管理,請查看索引頁面上的「內存管理」部分以及「大內存系統」部分。後者有幾篇文章談到向四層頁錶轉移,這應該有助於理解代碼的這一領域。

+0

謝謝。我現在正在研究LWN – user108127 2009-09-18 02:51:36