Windows頁目錄自對映方案

2021-06-18 15:33:11 字數 962 閱讀 8813

首先,看下面的乙個巨集:

此巨集的含義是,給定乙個pte的虛擬位址,返回該pte所指頁面的虛擬位址。

舉例而言,假設pte的位址(虛擬位址)為0xc0390c84,即1100,0000,00|11,1001,0000,|1100,1000,0100,這裡「|」符號將它分為頁目錄索引、頁表索引、頁內偏移三部分。在windows中,頁目錄(cr3暫存器)的位址是0xc0300000,所以,處理器在訪問該pte的時候,首先從頁目錄頁面中,找到1100,0000,00項,即第0x300項。這一項由系統特別設定好,它指向頁目錄自身(後面進一步解釋為什麼這麼設定)。接下來查詢0xc0390c84的頁表索引,即11,1001,0000,處理器繼續在頁目錄頁面中查詢,找到11,1001,0000,即第0x390項,這一項指向乙個頁表頁面。最後,處理器再根據頁內偏移1100,1000,0100,即0xc84,定位到第0x321項。此pte的定址過程如下圖所示。

**說明:0x300是頁目錄中的偏移,通過這個偏移值得到乙個目錄項(pde page directory entry),通過這個目錄項裡的值得到了乙個頁表的基位址,其中0x390是頁表中的偏移,通過這個偏移得到了乙個頁表項(pte pagetable entry),頁表項裡的值也就是我們要尋找的值。這裡頁目錄的0x300偏移中的值和頁目錄的基位址是相同的,都是0xc0300000,這點是微軟的巧妙設計,所以這裡的頁表的基位址也就是頁目錄的基位址了,從而此圖中的0x390也是從pd中來查詢的,相當於把pd當成pt了,之所以pd和pt能通用,是因為pde和pte的格式是相容的原因。

Windows頁目錄自對映方案

2010 10 02 01 22 7504人閱讀 舉報 潘愛民,2010年10月1日 首先,看下面的乙個巨集 此巨集的含義是,給定乙個pte的虛擬位址,返回該pte所指頁面的虛擬位址。舉例而言,假設pte的位址 虛擬位址 為0xc0390c84,即1100,0000,00 11,1001,0000,...

Windows頁目錄自對映方案

原位址 潘老師的一篇部落格,學習 首先,看下面的乙個巨集 此巨集的含義是,給定乙個pte的虛擬位址,返回該pte所指頁面的虛擬位址。舉例而言,假設pte的位址 虛擬位址 為0xc0390c84,即1100,0000,00 11,1001,0000,1100,1000,0100,這裡 符號將它分為頁目...

頁表自對映

今天查詢頁表對映資料時,無意發現乙個有趣的概念,就是頁表自對映。頁目錄基址記為pdt,頁目錄項記為pde,頁表項記為pte。bits m,n,value 表示取value從高m位到高n位的值。32位系統下,所有的pte所佔的空間剛好是4mb。如果將這些pte連續地放在記憶體中,那麼這4mb記憶體空間...