亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
pgd_offset 定義
[打印本頁]
作者:
wth0722
時間:
2014-03-19 16:53
標(biāo)題:
pgd_offset 定義
各位前輩好,
#define pgd_offset(mm, addr) ((mm)->pgd + pgd_index(addr))
#define pgd_index(addr) ((addr) >> 21)
想請教一下,mm->pgd明明是存physical address,為什麼使用pgd_offset可以得到該pgd
還有 arm trm上面所說第一階層的轉(zhuǎn)換時,取VA是取[31:20]
為什麼左邊那邊是21阿 pgd_index(addr) ((addr) >> 21)
感謝
作者:
humjb_1983
時間:
2014-03-19 17:50
pgdoffset獲取的是第一級頁目錄在pgd中的偏移
mm中pgd是頁目錄的地址
作者:
wth0722
時間:
2014-03-19 21:54
本帖最后由 wth0722 于 2014-03-19 21:56 編輯
我好像自己有解答了
1.
#define pgd_offset(mm, addr) ((mm)->pgd + pgd_index(addr))
因為mm->pgd是在kernel space,他的位置在0xC0000000以上,這邊的位置是direct mapping Physical memory
所以pgd_offset就可以得到pgd
2.
#define pgd_index(addr) ((addr) >> 21)
為什麼是21而不是20
是因為下面那張圖吧...有一半是給另一個pt了所以...要多除以2...因此是21而不是20
pgd pte
* | |
* +--------+
* | | +------------+ +0
* +- - - - + | Linux pt 0 |
* | | +------------+ +1024
* +--------+ +0 | Linux pt 1 |
* | |-----> +------------+ +2048
* +- - - - + +4 | h/w pt 0 |
* | |-----> +------------+ +3072
* +--------+ +8 | h/w pt 1 |
* | | +------------+ +4096
作者:
kiongf
時間:
2014-03-20 10:51
本帖最后由 kiongf 于 2014-03-20 11:07 編輯
回復(fù)
3#
wth0722
1)對的。一般申請頁表/頁目錄的物理頁都會在低端內(nèi)存進行申請。所以是直接映射的。
2 這里和你系統(tǒng)的頁目錄分級(paging hierarchy)以及系統(tǒng)頁的大小有關(guān)。
這里你的pgd目錄項共有11bit, 1<<11 =2048個項
相對而言,每個pgd目錄項掌控的地址區(qū)間大小為 1<<21 = 2MB。
如果是4kb的頁,
[21,12]bit還可能會劃分為PUD/PMD這兩級的頁目錄。
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2