頁表項 PTE 位址計算公式的解釋

2021-07-10 03:21:44 字數 1735 閱讀 3822

在《jiurl玩玩win2k記憶體篇 分頁機制 (三)》中提到計算虛擬位址對應pte位址的公式,如下:

**:

pte_addr = (virtualaddr >> 12) * 4 + 0xc0000000

從虛擬位址轉換到實體地址的過程來看,計算pte需要虛擬位址的高10位做頁目錄索引,還需要第12 - 21位做頁表索引,上面的公式晃眼看起來,貌似是錯的,但是偏偏它又是對的,為什麼捏?

其實很簡單,因為1024個頁表被對映在0xc0000000 - 0xc03fffff位址中,暫且不理會頁目錄被對映到哪,只要知道頁目錄裡的1024個頁目錄項分別指向0xc0000000 - 0xc03fffff位址中的1024個頁表就行了(其實這是因為頁目錄和乙個頁表完全重合的原因,見

《jiurl玩玩win2k記憶體篇 分頁機制 (四)》),這樣就可以得到乙個關係,頁目錄索引n指向的頁表就等於0xc0000000 + n * 頁表大小,乙個頁表的大小是1024 * 4  = 4096 = 2的12次方,得到了頁表,在加上頁表索引就可以得到頁表項(pte)的位址了,用公式表示就是如下:

**:

//為了縮短表示式,用va表示虛擬位址

//           頁目錄索引                  頁表索引

pte_addr=((va&0xffc00000)>>22)*4096+((va&0x3ff000)>>12)*4+0xc0000000

=(((va&0xffc00000)>>22)<<12)+(((va&0x3ff000)>>12)<<2)+0xc0000000

=((va&0xffc00000)>>10)+((va&0x3ff000)>>10)+0xc0000000

=((va&0xffc00000)+(va&0x3ff000)>>10)+0xc0000000

=((va&(0xffc00000|0x3ff000))>>10)+0xc0000000

=((va&0xfffff000)>>10)+0xc0000000

=(((va&0xfffff000)>>12)<<2)+0xc0000000

=((va&0xfffff000)>>12)*4+0xc0000000

由於va的低位被清零,所以上面的移位操作化簡是成立的。最後的乙個表示式已經很明顯了,va & 0xfffff000完全是多餘的,因為始終要》12,所以最終公式就是:

**:

pte_addr = (virtualaddr >> 12) * 4 + 0xc0000000

combojiang兄在

《透過mmisaddressvalid看windows分頁機制》中也提到pte的計算公式,如下:

**:

pte = ((va >> 12) << 2 ) & 0x3fffc + 0xc0000000;

估計combojiang兄深夜發帖,意識模糊 :-),少寫了個f,誤導了不少群眾,還沒人指出,正確的應該是:

**:

pte = ((va >> 12) << 2 ) & 0x3ffffc + 0xc0000000;

這裡的& 0x3ffffc也是不必要的,& 0x3ffffc只是將低2位清零,而<< 2後低2位本來就是0,所以等價於:

**:

pte = (va >> 12) * 4 + 0xc0000000;

上面說的都是在32位 x86 非pae的情況下,pae情況下略有不同,有時間再整理

環形電流計算公式 環形電感的計算公式

電感公式 環形電感的計算公式 針對環形core,有以下公式可利用 iron l n2 al l 電感量 h al 感應係數 h dc 0.4 ni l n 繞線匝數 圈 h dc 直流磁化力 i 通過電流 a l 磁路長度 cm l及al值大小,可參照micrometa對照表。例如 以t50 52材...

和功率的計算公式 電機功率計算公式是什麼?

三相平衡功率公式 p 1.732uicos 其中p 三相平衡功率 1.732 根號3 u 線電壓,一般是380伏,變壓器出來的電壓常常是400伏左右 i 線電流 cos 是0到1之間的數值,電阻性負載為1,一般為0.75到0.85,日光燈為0.5 在實用中求出電流後一般是用電線電纜允許長期載流量表選...

auc計算公式的理解

對於auc的計算參考 m是正樣本的個數,n是負樣本的個數 如何理解分子,下面是我個人的理解。總體原則 負樣本數 樣本總數 正樣本數,然後構造樣本總數 每次取概率不同的正樣本,其排序也不一樣,構造樣本總數的表達方式也不一樣 rank1,樣本總數為rank1 rank2 再加1個就是樣本總數,為rank...