亚洲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