关于linux常用的页的函数和宏

 1)线性地址字段

        PAGE_SHIFT:指定offset的位数,一般是12(2^12),这个宏由PAGE_SIZE使用返回页的大小,最后,PAGE_MASK产生的值为0xfffff000,用以屏蔽Offset字段所有位。

        PMD_SHIFT:指定线性地址offset字段和Table字段的总位数(页中间目录项可以映射的区域大小的对数),PMD_SIZE代表一个页表的大小,PMD_MASK用于屏蔽offset+table。当PAE被禁用时,PMD_SHIFT为22,offset12+table10,PMD_SIZE=2^22,PMD_MASK=0xffc00000;PAE激活后,PMD_SHIFT为21,offset12+table9,PMD_SIZE=2^21,PMD_MASK=0xffe00000。

        大型页不使用最后一级页表,所以产生大型页尺寸的LARGE_PAGE_SIZE宏等于PMD_SIZE,LARGE_PAGE_MASK=PMD_MASK。

        PUD_SHIFT:上级目录项所能映射的区域大小。PUD_SIZE,PUD_MASK(offset,table,middle dir,upper dir),80x86处理器上,PUD_SHIFT总等价于PMD_SHIFT,PUD_SIZE等于4MB或2MB。

        PGDIR_SHIFT:页全局目录项能映射的区域大小对数,PGDIR_SIZE,PGDIR_MASK。

当PAE被禁止时,PGDIR_SHIFT产生的值为22,PGDIR_MASK产生的值为0xffc00000,当PAE被激活时,PGDIR_SHIFT产生的值为30(12位offset,9位table,9位middle dir)

2)页表处理

        类型:

                pte_t,pmd_t,pud_t,pgd_t,pgprot_t(与一个单独表项相关的标志),PAE激活时64位,其余32位。

                __pte,__pmd,__pud,__pgd,__pgprot把一个无符号整数转换成所需的类型。

                pte_val,pmd_val......(同上),把一个特殊类型转化为无符号整数。

        其他:

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值