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......(同上),把一个特殊类型转化为无符号整数。
其他: