【深入理解Linux内核】【分页】相关函数或宏

来源:互联网 发布:淘宝处理不公平 编辑:程序博客网 时间:2024/05/01 07:48
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对应的页中间目录对应目录项的的索引。

0 0
原创粉丝点击