页表和缺页中断
页表的层次
47 39 38 30 29 21 20 12 11 0
+------------------+------------------+------------------+------------------+---------------------+
|PML4 |Page Directory Ptr|Page Directory |Page Table |Offset |
+------------------+------------------+------------------+------------------+---------------------+
| | | |
| | | |
| | | |
| | | |
pgd_index(addr) | pud_index(addr) | pmd_index(addr) | pte_index(addr) | +----------+
| | | | | |
| | | | | |
| | | | +----------+
| | | pte_offset_map() +----> |pte |
| | | +----------+
| | | +----------+ | |
| | | | | | |
| | | | | | |
| | |pmdp +----------+ | |
| | pmd_offset() +---->| *pmdp |---------->+----------+
| | +----------+ pmd_page_vaddr(*pmdp)
| | | |
| | | |
| | | |
| | +----------+ | |
| | | | | |
| |pudp +----------+ | |
| pud_offset() +---->| *pudp |---------->+----------+
| +----------+ pud_pgtable(*pudp)
| +----------+ | |
| | | | |
|pgdp +----------+ | |
pgd_offset(mm,addr)+---->| *pgdp |-------->+----------+
+----------+
| |
| |
| |
mm->pgd ---> +----------+
页表层级常用helper
图示
页表的填写
缺页中断
架构无关代码
匿名页填写
页表上的锁
参考文档
Last updated