PAGE_SHIFT | PMD_SHIFT | PUDSHIFT | PGDIR_SHIFT |
---|---|---|---|
指定offset字段位数 | 指定offset和table总位数 | 确定页上级目录能够映射的区域大小 | 确定页全局目录能够映射的区域大小 |
PTRS_PER_PTE,PTRS_PER_PMD,PTRS_PER_PUD,PTRS_PER_PGD:分别表示页表,页中间目录,页上级目录,页全局目录中项的个数。
1.几个用于页表处理的函数或宏
-
五个类型转换宏:__pte、__pmd、__pud、__pgprot。分别把无符号数转换为相应的类型。
-
pte_non,pmd_none,pud_none,pgd_none用于判断相应表项值是否为0,为0返回1,否则返回0。
-
set_pte,set_pud,set_pmd,set_pgd 分别表示向一个表项中写入相应值。
2.对页表项进行操作的宏
-
pgd_index(addr):找到线性地址addr对应的目录项在页全局表中的索引。
-
pgt_offset(mm,addr):接收内存描述符地址mm和addr作为参数,可以求得线性地址addr在全局目录表中对应表项的线性地址,通过mm中的一个指针可以找到全局目录表。
-
pgd_offset_k(addr):产生内核全局目录表项中某一项的线性地址
-
pgd_page(pgd):通过页全局目录表pg产生页上级目录所在页框的页描述符地址。在两级或者三级分页中等价于pud_page.后者通过页上级目录产生页中级目录的线性地址
-
pud_offset(pgd,addr):通过参数页全局目录表项指针pgd和线性地址产生页上级目录中目录项addr对应的线性地址。
-
pmd_index(addr):产生addr对应的页中间目录对应目录项的的索引。